iptables无法防止arp欺骗,因其仅处理网络层及以上流量,而arp属数据链路层,不经过netfilter链;但可通过禁用ip转发、限制出站dns/http、封禁代理端口、启用静态arp绑定等策略压缩mitm攻击面。

直接配置系统防火墙规则无法完全阻断中间人劫持(MITM),但它能显著压缩攻击面、限制攻击者可利用的路径。关键在于:防火墙不是用来“检测MITM”,而是通过精准控制网络层行为,让ARP欺骗、DNS投毒、非法代理转发等常见手法更难落地或更快暴露。
堵住本地ARP欺骗入口
攻击者常靠伪造ARP响应把流量引向自己。Linux系统可通过内核参数关闭主动ARP学习并启用静态绑定:
- 执行 sysctl -w net.ipv4.conf.all.arp_ignore=1 和 net.ipv4.conf.all.arp_announce=2,防止本机响应非自身IP的ARP请求
- 对关键服务IP(如网关)做静态ARP绑定:arp -s 192.168.1.1 00:11:22:33:44:55,避免被动态覆盖
- 在启动脚本中固化上述设置,防止重启失效
限制异常DNS与HTTP明文出口
MITM往往依赖篡改DNS解析或降级为HTTP明文通信。iptables可强制收敛出口行为:
- 只允许发往可信DNS服务器(如114.114.114.114、8.8.8.8)的UDP 53端口请求:iptables -A OUTPUT -p udp --dport 53 ! -d 114.114.114.114 -j DROP
- 禁止所有出站HTTP(明文)请求:iptables -A OUTPUT -p tcp --dport 80 -j REJECT,倒逼应用使用HTTPS
- 若需调试,用--sport限定仅允许本机特定端口发起HTTP,而非全局放行
拦截可疑代理与隧道流量
攻击者常借助HTTP/SOCKS代理或自建隧道中转流量。防火墙可识别并阻断典型特征:
- 封禁常见代理端口(如1080、3128、8080)的非授权出站连接:iptables -A OUTPUT -p tcp -m multiport --dports 1080,3128,8080 -j DROP
- 限制非常用端口上的长连接(如TCP新建连接后持续传输超5分钟):iptables -A OUTPUT -p tcp -m state --state ESTABLISHED -m connlimit --connlimit-above 50 --connlimit-mask 32 -j DROP
- 对已知恶意IP段(如部分云厂商黑产IP池)做ipset批量屏蔽,比单条规则更高效
强化连接状态与日志溯源能力
防御MITM不只是“拦”,更要“看”——让异常行为可追踪:
- 开启连接跟踪日志:iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "INVALID_PACKET: ",捕获伪造TCP标志位等异常包
- 记录所有新建立的出站连接:iptables -A OUTPUT -m state --state NEW -j LOG --log-prefix "NEW_CONN_OUT: "
- 配合journalctl -u iptables或rsyslog集中分析,发现高频ARP请求、DNS异常响应等线索











