在內核層,只提供了一個通用的協議無關接口,提供從數據包中提取數據、對數據進行操作和控制流量的基本功能。 過濾規則本身和特定於協議的處理程序被編譯成用戶空間字節碼,之後使用 Netlink 接口將該字節碼加載到內核中,並在類似於 BPF(Berkeley Packet Filters)的特殊虛擬機中在內核中執行。 這種方法可以顯著減少在內核級別運行的過濾代碼的大小,並將解析規則的所有功能和使用協議的邏輯移至用戶空間。
主要創新:
- 集合中新增了與集合元素關聯的資料包和流量計數器的支援。 使用“counter”關鍵字啟用計數器:
表 ip x {
設定 y {
ip地址類型
對付
元素 = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}鏈 z {
type過濾器鉤子輸出優先權過濾器; 政策接受;
ip 爸爸@y
}
} - 要設定計數器的初始值,例如重新啟動後恢復先前的計數器,可以使用命令“nft -f”:
# 貓規則集.nft
表 ip x {
設定 y {
ip地址類型
對付
elements = { 192.168.10.35 計數器封包 1 位元組 84, 192.168.10.101 \
計數器 p 192.168.10.135 計數器封包 0 位元組 0 }
}鏈 z {
type過濾器鉤子輸出優先權過濾器; 政策接受;
ip 爸爸@y
}
}
# nft -f 規則集.nft
#nft 清單規則集
表 ip x {
設定 y {
ip地址類型
對付
elements = { 192.168.10.35 計數器封包 1 位元組 84, 192.168.10.101 \
計數器 p 192.168.10.135 計數器封包 0 位元組 0 }
}鏈 z {
type過濾器鉤子輸出優先權過濾器; 政策接受;
ip 爸爸@y
}
} - flowtable 中也新增了計數器支援:
表 ip foo {
可流動的酒吧{
鉤子入口優先權-100
設備 = { eth0, eth1 }
對付
}連鎖前進{
類型過濾器鉤子轉發優先權過濾器;
流程添加@bar計數器
}
}您可以使用命令“conntrack -L”查看計數器清單:
tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 封包=9 位元組=608 \
src = 10.0.1.2 dst = 10.0.1.1 sport = 5201 dport = 47278封包= 8位元組= 428 [卸載]標記= 0 \
secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
封包=1005763位元組=44075714753 src=10.0.1.2 dst=10.0.1.1運動=5201 dport=47280 \
封包 = 967505 位元組 = 50310268 [卸載] 標記 = 0 secctx = null 使用 = 2 - 在用於串聯的集合中(串聯,某些簡化比較的位址和連接埠包),可以使用「typeof」指令,它來確定集合元素的組成部分的元素的資料類型:
表 ip foo {
設置白名單{
ip Saddr 類型。 TCP 資料連接埠
元素={192.168.10.35。 80、192.168.10.101。 80}
}鏈條{
type filter hook 預路由優先過濾器; 政策下降;
ip 爸爸。 tcp dport @whitelist 接受
}
} - typeof 指令現在也適用於映射清單中的連線:
表 ip foo {
地圖 addr2mark {
ip Saddr 類型。 tcp dport : 元標記
元素={192.168.10.35。 80:0x00000001,
192.168.10.135。 80:0x00000002}
}鏈條{
type filter hook 預路由優先過濾器; 政策下降;
元標記設定 ip baddr 。 tcp dport 映射 @addr2mark 接受
}
} - 新增了對匿名(未命名)集中的範圍連接的支援:
# nft 新增規則 inet 過濾器輸入 ip baddr 。 TCP 資料連接埠\
{ 10.0.0.0/8 。 10-23、192.168.1.1-192.168.3.8。 80-443}接受 - 提供在處理網橋時丟棄帶有 802.1q (VLAN) 標誌的資料包的功能:
# nft 新增規則網橋 foo bar ether 類型 vlan 拒絕並重設 TCP
- 新增了對 TCP 會話標識符 (conntrack ID) 匹配的支援。 要確定 conntrack ID,您可以使用“--output id”選項:
# conntrack -L —輸出 ID
udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 封包=2 \
位元組=122 src=192.168.2.1 dst=192.168.2.118 運動=53 dport=36424 封包=2 位元組=320 \
[確定] 標記=0 使用=1 id=2779986232# nft 新增規則 foo bar ct id 2779986232 計數器
來源: opennet.ru