iptables的MARK功能需结合自定义规则标记可疑流量,再通过策略路由引流至分析设备,并用CONNMARK同步双向连接状态以确保审计完整。

iptables 的 MARK 功能本身不识别“恶意”,但它能按你定义的规则(比如端口扫描、高频连接、已知黑IP、非标端口特征等)精准标记可疑包,再通过策略路由把它们导向隔离网关、审计系统或蜜罐。关键在于把你的检测逻辑落地执行,而不是依赖自动判断。
一、在 mangle 表 PREROUTING 链中打标
必须使用 mangle 表,且链必须是 PREROUTING(入向)或 OUTPUT(本机出向),其他表和链不支持 MARK。
- 封禁类扫描行为:匹配异常 TCP 标志组合,如全标志置位但不含 SYN ——
iptables -t mangle -A PREROUTING -p tcp --dport 22 --tcp-flags ALL ACK,FIN,RST,PSH,URG,SYN -j MARK --set-mark 0x100 - 高频连接源(需 recent 模块):1 分钟内来自同一 IP 的连接达 10 次即标记 ——
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 流量:在非标端口(如 8443)检测 HTTP 请求特征 ——
iptables -t mangle -A PREROUTING -p tcp --dport 8443 -m string --algo bm --string "GET /" --from 64 -j MARK --set-mark 0x100
二、配置专用路由表与引流路径
标记只是起点,真正引流靠策略路由。你需要一个独立路由表,指向你的分析设备(如沙箱、审计平台或黑洞服务器)。
- 添加新路由表名(例如 audit):
echo "100 audit" >> /etc/iproute2/rt_tables - 为该表设置默认网关(假设引流设备 IP 是 172.16.10.5,走 eth1 接口):
ip route add default via 172.16.10.5 dev eth1 table audit - 添加策略规则,将带 mark 0x100 的包导入该表:
ip rule add fwmark 0x100 table audit
注意:策略路由只对本地生成或转发的数据包生效;若需处理本机主动发起的可疑出向流量,还需在 OUTPUT 链打标,并加对应 ip rule。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
三、用 CONNMARK 同步双向连接状态
只标记进向包会导致回程响应走默认路由,引流断裂、连接失败或审计不全。必须用 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
这两条规则要成对出现,顺序不能颠倒。否则连接状态不同步,策略路由就形同虚设。
四、验证与持久化
规则生效后,可用以下方式快速验证:
- 查标记是否命中:
iptables -t mangle -L PREROUTING -v -n | grep "MARK.*0x100" - 查策略路由是否加载:
ip rule show | grep 0x100 - 查专用路由表内容:
ip route show table audit
重启后规则会丢失,需保存:
- Debian/Ubuntu:
sudo netfilter-persistent save或sudo iptables-save > /etc/iptables/rules.v4 - CentOS/RHEL:
sudo service iptables save


















