nftables通过多维动态过滤精准拦截扫描器:基于meter限速、连接状态识别半开连接、联动HTTP日志降级处理,并结合日志闭环优化防御。

单纯靠匹配单个IP或User-Agent很难拦住恶意扫描器,nftables 的优势在于能结合连接状态、速率、行为模式做多维度判断,实现“高精度关联分析过滤”——不是只看一次请求,而是看它怎么连、连多少次、连得有多快。
基于连接频率和速率的动态拦截
扫描器最典型的行为是短时间发起大量连接。nftables 的 limit 和 meter 机制可精准控制单位时间内的新建连接数:
- 用
meter定义一个每分钟最多 30 个新连接的计数器,超出即标记为可疑 - 对被标记的源IP,在后续10分钟内直接
drop所有新连接(避免反复试探) - 配合
ct state new确保只统计首次握手,不干扰已有长连接
结合连接状态与会话行为的组合判断
真实用户访问通常有完整TCP交互(SYN→SYN-ACK→ACK),而很多扫描器只发SYN就换目标。可利用 nftables 的连接跟踪能力区分:
- 匹配
tcp flags & (fin | syn | rst | ack) == syn且ct state invalid的包——这是异常的半开连接 - 对同一源IP在5秒内触发3次以上该行为,自动加入临时黑名单集合(用
ipset或 nftablesdynamic set) - 黑名单条目带超时(如300秒),到期自动清理,不影响正常用户误触
关联HTTP层特征(需配合日志或旁路分析)
nftables 本身不解析HTTP内容,但可通过以下方式间接联动:
- 将 nginx 或应用日志中高频触发404/400的IP,由脚本写入 nftables 的
ipset或dynamic set - 在 nftables 中设置规则:若源IP出现在该集合中,且当前连接目的端口为80/443,则限速至每分钟5个新连接,再超则丢弃
- 不直接阻断,而是降级处理,既能抑制扫描,又避免误伤爬虫或CDN节点
分层防御与日志反馈闭环
高精度过滤不是一锤子买卖,需要可观测性和迭代能力:
- 对所有被限速或丢弃的流量添加
log prefix "SCAN_BLOCK:" level warn,方便用 journalctl 或 ELK 分析攻击模式 - 定期从日志提取高频扫描路径(如
/wp-admin/、),生成特征哈希,通过 nftables <code>meta nfproto ipv4 ip saddr @scan_ips做快速匹配 - 把长期稳定的恶意IP段,固化进静态
ipset,减少运行时匹配开销

















