构建自动化防护体系的关键在于对齐流量逻辑、业务边界与响应动作,依托nftables的Set、Map、ct state和meter等原生能力实现轻量高效闭环防护。

构建符合业务需求的自动化防护体系,关键不在堆砌规则,而在于把流量逻辑、业务边界和响应动作三者对齐。nftables 的 Set、Map、ct state 和 meter 等原生能力,恰好提供了轻量、高效、可编程的支撑基础,无需依赖外部脚本或代理即可实现闭环防护。
明确业务访问模型,定义白名单骨架
自动化防护不是“先封再看”,而是“只放该放的”。建议从服务入口出发,梳理真实业务路径:
- 哪些端口对外提供服务(如 22/80/443/3000)?是否需限制源 IP 段?
- 哪些内网组件需相互通信(如 DB、Redis、API 网关)?用 iif/oif + ip saddr/daddr 精确约束
- 是否允许 ICMP 探测?仅限运维网段,避免全开
例如,只允许可信管理网段(10.10.0.0/16)SSH 登录,其余一律拒绝:
sudo nft add rule inet filter input ip saddr 10.10.0.0/16 tcp dport 22 acceptsudo nft add rule inet filter input tcp dport 22 drop
用 Set 实现动态黑白名单闭环
手动加 IP 封禁不可持续。nftables 的 Set 支持带超时的自动清理,适合对接日志分析或威胁情报:
- 创建可超时的黑名单 Set:
sudo nft add set inet firewall badips { type ipv4_addr \; flags timeout \; } - 在 input 链头部匹配并丢弃:
sudo nft add rule inet filter input ip saddr @badips drop - 通过脚本定期注入恶意 IP(支持 CIDR):
sudo nft add element inet firewall badips { 192.168.5.100 timeout 1h, 203.0.113.0/24 timeout 30m }
超时后条目自动消失,无需定时清理,也避免规则膨胀。
基于 meter 实现请求频率控制
防暴力破解、CC 攻击不靠 IP 黑名单硬拦,而靠行为限速。meter 是 nftables 原生命令,比用户态限速更精准低开销:
- 对 /login 路径(HTTP)每分钟最多 10 次请求:
sudo nft add rule inet filter input tcp dport 80 ip protocol tcp meta l4proto tcp tcp dport 80 @throttle_login limit rate over 10/minute burst 5 packets counter drop - 结合 ct state 只对新连接限速,避免影响已建立会话
- 可配合 log 规则记录被限速的源 IP,供后续分析
用 Map 实现分级响应策略
不同风险等级的 IP 应有不同处置方式:观察、限速、封禁、跳转。Map 提供键值映射能力,让一条规则承载多种动作:
- 定义 action_map:
sudo nft add map inet firewall risk_action { type ipv4_addr : verdict \; } - 插入策略:
sudo nft add element inet firewall risk_action { 192.168.1.200 : drop, 192.168.1.201 : queue, 192.168.1.202 : accept } - 在链中调用:
sudo nft add rule inet filter input ip saddr @risk_action
后续只需更新 Map 元素,无需修改规则结构,适合与 SIEM 或 SOAR 平台联动。
不复杂但容易忽略:所有自动化动作都应搭配 counter 和 comment,便于快速定位规则效果;生产环境务必启用持久化(nft list ruleset > /etc/nftables.conf 并启用 systemd 服务),避免重启失效。

















