nftables 以 ip 區段為單位做操作
範例
table inet auto_ban {
set ip6_prefix {
# 儲存型態為 IPv6 地址,這個案例只有前 64 bit 有效,後面都是 0
type ipv6_addr;
# dynamic 讓這個集合可以由其他規則動態新增項目
flags dynamic,timeout;
# 預設的時效,超時自動刪除
timeout 1h;
# 集合最大大小,防止使用過多記憶體,超量不知道會怎處理
size 65536;
}
chain input_limit {
type filter hook input priority filter;
# 只取前 64 bit 做比對,後面都是 0 ,符合就設定追蹤並通過
ip6 saddr & ffff:ffff:ffff:ffff:: == @ip6_prefix meta nftrace set 1 accept
# 新增項目時只取前 64 bit,後面都是 0
meta nfproto ipv6 add @ip6_prefix { ip6 saddr & ffff:ffff:ffff:ffff:: }
}
}
觀念
可以跟相同型態的資料做 and (&), or (|), xor (^), lshift (>>) 等各種位元運算
必須使用該型態的表達方式才能做運算否則即使長度相同也會語法解析失敗,比如 ip6 saddr == 0x1 就會解析失敗
Leave a Comment