14.3. 使用动态集添加来自数据包路径的条目
nftables
框架中的动态设置允许自动添加来自数据包数据的元素。例如,IP 地址、目标端口、MAC 地址等。通过此功能,您可以实时收集这些元素,并使用它们创建拒绝列表、禁止列表等,以便您能够立即响应安全威胁。
先决条件
-
inet
系列中的example_chain
链和example_table
表存在。
流程
创建一个空集。以下示例为 IPv4 地址创建了一个集合:
要创建可存储多个独立 IPv4 地址的集合:
nft add set inet example_table example_set { type ipv4_addr \; }
# nft add set inet example_table example_set { type ipv4_addr \; }
Copy to Clipboard Copied! 要创建可存储 IPv4 地址范围的集合:
nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }
# nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }
Copy to Clipboard Copied! 重要要防止 shell 将分号解释为命令结尾,您必须使用反斜杠转义分号。
创建一条规则,将传入数据包的源 IPv4 地址添加到
example_set
组中:nft add rule inet example_table example_chain set add ip saddr @example_set
# nft add rule inet example_table example_chain set add ip saddr @example_set
Copy to Clipboard Copied! 命令在
example_chain
规则链中创建了一个新规则,并使用example_table
将数据包的源 IPv4 地址动态添加到example_set
中。
验证
确保添加了规则:
nft list ruleset
# nft list ruleset ... table ip example_table { set example_set { type ipv4_addr elements = { 192.0.2.250, 192.0.2.251 } } chain example_chain { type filter hook input priority 0 add @example_set { ip saddr } } }
Copy to Clipboard Copied! 命令显示
nftables
中当前载入的整个规则集。它显示 IP 正在主动触发规则,并且使用相关地址更新example_set
。
后续步骤
有动态 IP 集后,您可以将它用于各种安全性、过滤和流量控制目的。例如:
- 块、限制或记录网络流量
- 与允许列表结合使用,以避免禁止可信用户
- 使用自动超时来防止过度阻塞