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! Toggle word wrap Toggle overflow 要创建可存储 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! Toggle word wrap Toggle overflow 重要要防止 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_setCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令在
example_chain规则链和example_table中创建了一个新规则,来将数据包的源 IPv4 地址动态添加到example_set中。
验证
确保规则已添加:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令显示当前在
nftables中加载的整个规则集。它显示 IP 正在主动触发规则,并且正在使用相关地址更新example_set。
后续步骤
有动态 IP 集后,您可以将它用于各种安全性、过滤和流量控制目的。例如:
- 块、限制或记录网络流量
- 与允许列表结合,以避免禁止可信用户
- 使用自动超时来防止过度阻塞