iptables mark功能不自动识别恶意流量,而是依据用户定义规则(如端口扫描、高频连接、黑ip等)在mangle表prerouting链标记可疑包,再通过策略路由引流至隔离网关或审计系统;需配合connmark同步连接状态以保障双向一致性。

iptables 的 MARK 功能本身不识别“恶意”,但它能精准标记符合你定义规则的可疑流量(如异常端口扫描、高频连接、已知黑IP、畸形包特征等),再通过策略路由将这些标记包导向隔离网关、审计系统或蜜罐,实现引流。关键不是自动判断恶意,而是把你定义的检测逻辑落地执行。
一、先定义什么是“恶意流量”并打标
在 mangle 表的 PREROUTING 链中设置匹配规则,对入向流量打标。注意:必须用 mangle 表,且链必须是 PREROUTING(转发/入站)或 OUTPUT(本机出向),其他表不支持 MARK。
- 封禁类扫描行为:iptables -t mangle -A PREROUTING -p tcp --dport 22 --tcp-flags ALL ACK,FIN,RST,PSH,URG,SYN -j MARK --set-mark 0x100
- 高频连接源(需配合 recent 模块):iptables -t mangle -A PREROUTING -m recent --name scan --rcheck --seconds 60 --hitcount 10 -j MARK --set-mark 0x100
- 已知黑IP段:iptables -t mangle -A PREROUTING -s 203.0.113.0/24 -j MARK --set-mark 0x100
- 非标准端口 HTTPS(规避检测):iptables -t mangle -A PREROUTING -p tcp --dport 8443 -m string --algo bm --string "GET /" --from 64 -j MARK --set-mark 0x100
二、创建专用路由表与隔离网关路径
引流的前提是让标记包不走默认路由,而是进入你指定的处理路径。这需要独立路由表 + 策略规则。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 添加新路由表名(如 audit):echo "100 audit" >> /etc/iproute2/rt_tables
- 配置该表的默认出口(指向你的引流设备):ip route add default via 172.16.10.5 dev eth1 table audit
- 声明该表仅处理本地生成或转发的标记包:ip rule add fwmark 0x100 table audit
其中 172.16.10.5 是你部署的流量分析平台、沙箱或黑洞服务器地址;eth1 是通往它的物理接口。
三、保障双向流量一致性(防回程失标)
仅对进向包打标,回程响应包会走默认路由,导致引流断裂、连接失败或审计不全。必须用 CONNMARK 同步连接状态。
- 首次进包打标并存入连接跟踪:iptables -t mangle -A PREROUTING -m mark --mark 0x100 -j CONNMARK --save-mark
- 后续所有包(含回程)恢复标记:iptables -t mangle -A PREROUTING -m connmark --ctmark 0x100 -j CONNMARK --restore-mark
- 确保上述两条规则放在所有其他 mangle 规则之前(用 -I 而非 -A 插入)
四、引流后动作与注意事项
被引到 audit 网关的流量,可由后端系统做深度检测、限速丢弃、协议还原或主动诱捕。但要注意:
- audit 网关必须开启 IP 转发(net.ipv4.ip_forward = 1),否则包会被静默丢弃
- 若 audit 是 Linux 主机,建议在其上也启用 conntrack 并同步原始连接状态,避免 TCP 乱序或 FIN 不匹配
- 不要在 nat 表中对已标记包做 DNAT/SNAT,会干扰标记识别;引流靠路由,不靠地址转换
- 测试时可用 tcpdump -i eth1 -n 'ip[12] & 0xff = 0x100' 抓取带标记的包验证是否生效










