在Debian系统里,iptables 这个命令行工具可以说是网络防火墙的看家本领——它直接操控 Linux 内核的包过滤规则。但实际生产环境中,很少只有 iptables 一夫当关,往往前面还有硬件防火墙、其他软件防火墙、甚至云平台的网络 ACL。这时候问题就来了:怎么让 iptables 跟这些“队友”配合好,既不打仗,又不留死角?

下面整理了八步实操指南,帮你理清思路、避开陷阱。
第一步:摸清防火墙层次
先别急着敲命令。你得画一张网络拓扑图,搞清楚你所在的网络环境里到底有几道防火墙——是硬件设备(比如企业级防火墙、路由器 ACL),还是操作系统层级的其他软件(比如 firewalld、nftables),或者是公有云的安全组。每道防火墙负责哪个网段、哪个端口,规则之间有没有重叠或冲突的可能。这一步做扎实了,后面才不会踩坑。
第二步:提前规划规则集
规划不是写论文,但至少要在大脑里把规则草图过一遍。看准了几个关键点:哪些流量必须放行(比如 SSH、Web 服务),哪些流量必须丢弃(比如来自外网的内部端口扫描),以及是否需要转发。这里有个原则:每道防火墙只做好自己那一段的活儿。比如 iptables 只做服务器本机的包过滤,把外部流量过滤交给前置硬件防火墙,这样职责清晰,互不干扰。
第三步:配置 iptables 规则
命令本身不复杂,但策略要果断。一个最经典的起手式:把 INPUT 和 FORWARD 链的默认策略设为 DROP,只显示地放行必要流量。比如:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
这样一搞,任何未经允许的入站流量都会被拒绝。然后你再一条条加上允许规则,比如只放行 22、80、443 端口,或者只允许特定来源 IP 访问。如果你还有转发需求(比如 NAPT),别忘了配置 FORWARD 链的规则。
第四步:让 iptables 和其他防火墙握手
假设你的前面还有个硬件防火墙,它已经封锁了绝大多数恶意流量。这时 iptables 的角色就可以更精细:只针对到达本机的流量做深度过滤,或者只处理 翻跟斗 隧道过来的流量、本地回环接口上的流量。一个常见的做法是在 iptables 规则集里先检查流量来源接口——比如来自 eth0(外网)的流量走一套规则,来自 tun0(翻跟斗)的走另一套规则。这样就不会因为规则重复而误判。
第五步:测试——不测试等于没配
规则写完了,别急着保存。先用 iptables -L -n -v 看看当前规则集是否跟预期一致,注意检查包计数是否在增长。然后找一台外部机器模拟正常访问和恶意访问,看看流量能否按预期被允许或阻断。可以用 telnet 或 nc 简单测端口可达性,也可以用 tcpdump 抓包确认。如果发现规则没生效,立刻回滚。别在生产环境直接上线未经测试的规则,这是铁律。
第六步:打开日志,让沉默的防火墙说话
调试阶段最怕被拒绝了还不知道。给 iptables 加一条日志规则,记录所有被丢弃的入站流量:
iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
日志会写入系统日志(比如 /var/log/kern.log),你可以根据这些记录判断新规则是否过度封锁了正常流量。当然,日志量可能会很大,建议在确认规则无误后,可以删除这条日志规则,或者限制日志速率。
第七步:持久化——拒绝重启后一夜回到解放前
iptables 的规则是挂在内存里的,重启后就会消失。要让它永久生效,安装 iptables-persistent:
sudo apt-get install iptables-persistent
sudo netfilter-persistent sa ve
sudo netfilter-persistent reload
这样你的规则就会保存到 /etc/iptables/rules.v4(和 rules.v6),每次开机自动加载。如果你后续修改了规则,记得重新执行 sa ve 和 reload。
第八步:持续维护,别配完就不管了
环境是会变的——新的服务上线、旧的端口关闭、安全漏洞曝光、攻击手法升级。建议定期(比如每季度)审视一遍 iptables 规则,看看有没有过期的放行项、有没有新的威胁需要封堵。如果规则很多,可以用工具(比如 iptables-sa ve 导出、代码仓库版本管理)来辅助维护,甚至考虑改用 nftables 作为更现代的替代。但无论如何,记得先备份、再变更。
最后说一句:多防火墙协同最忌讳的是“谁都不让谁”,也忌讳“谁都想全管”。把职责划分清楚,再配合日志和测试,就能做到安全与可用性的平衡。如果还是拿不准,找个有经验的系统管理员帮你过一遍规则文件,总比出事故后再补救划算得多。
