深入理解iptables:Linux防火墙核心机制与实战配置指南

发布时间:2026/7/6 20:51:10
深入理解iptables:Linux防火墙核心机制与实战配置指南 1. 项目概述为什么iptables是Linux运维的“看门人”干了这么多年Linux运维和系统管理我处理过无数服务器安全问题从简单的端口暴露到复杂的DDoS攻击。在这些实战中有一个工具几乎每次都会出场它就是iptables。很多人一听到iptables就觉得头大觉得它命令复杂、规则难懂是Linux学习路上的“拦路虎”。但我想说一旦你理解了它的设计哲学和核心机制它就会成为你最可靠、最灵活的“看门人”。简单来说iptables是Linux内核中Netfilter防火墙框架的用户空间命令行工具。你可以把它想象成一个功能极其强大的数据包过滤器、修改器和路由器。所有进出你服务器的网络流量都要经过iptables设定的层层关卡我们称之为“链”由你定义的规则来决定是放行、丢弃还是进行其他处理。无论是保护你的Web服务器只开放80和443端口还是搭建一个NAT网关让内网机器共享上网甚至是做端口映射、流量整形都离不开它。为什么在云原生和容器化大行其道的今天我们还要深入理解这个“古老”的命令行工具原因有三第一基础性。它是Linux网络安全的基石很多高级防火墙方案如firewalld和容器网络如Docker的bridge网络底层都依赖或兼容iptables规则。第二灵活性。它允许你进行极其精细的控制从IP、端口到协议类型、连接状态甚至数据包内容你都能制定规则。第三普适性。几乎所有的Linux发行版都预装了它在紧急故障排查或最小化系统环境中它往往是唯一可用的防火墙工具。这篇文章我将从一个老运维的角度带你彻底吃透iptables。我不会只罗列命令而是会拆解它的核心概念、工作机制并结合大量生产环境中的真实场景告诉你每条命令背后的“为什么”以及那些手册里不会写的“避坑指南”。无论你是刚接触Linux的新手还是想巩固基础的开发者都能从这里获得可以直接上手的实战经验。2. 核心概念拆解四表五链与数据包的一生在动手敲命令之前我们必须先理解iptables的核心架构。很多人学不好iptables就是因为一上来就死记硬背命令结果规则一复杂就晕了。其实它的设计非常清晰核心就是“四表五链”。2.1 五条链Chains数据包的必经之路想象一下数据包就像一辆辆要进入或离开你服务器这座“城堡”的汽车。iptables在城堡的关键位置设立了五个检查站这就是五条链。每条链对应数据包生命周期中的一个特定阶段PREROUTING链数据包刚到达网络接口在进行路由决策之前。这是数据包进入系统后的第一站。通常在这里做目标地址转换DNAT比如把访问公网IP:8080的请求转发到内网服务器的80端口。INPUT链数据包经过路由决策后如果目标是本机比如有人SSH连接你的服务器就会进入这条链。这是我们做主机防火墙最常打交道的链用来控制哪些外部流量可以访问本机的服务。FORWARD链数据包经过路由决策后如果目标不是本机你的服务器充当了路由器或网关就会进入这条链。在这里决定是否允许数据包被转发到另一个网络。OUTPUT链由本机进程产生的数据包在发出之前会经过这条链。可以用来控制本机程序能访问哪些外部资源。POSTROUTING链数据包即将离开网络接口之前。这是数据包离开系统前的最后一站。通常在这里做源地址转换SNAT比如让内网机器通过网关服务器上网时将内网IP替换为网关的公网IP。一个数据包的旅程假设一台外部电脑IP: 1.2.3.4要访问你服务器IP: 5.6.7.8上的网站。数据包到达网卡 →PREROUTING链检查这里一般不做过滤。路由决策发现目标IP 5.6.7.8就是本机 →INPUT链在这里你的规则判断是否允许访问80端口。Web服务器如Nginx处理请求生成响应数据包。响应数据包发出前 →OUTPUT链检查本机发出的包。响应数据包离开网卡前 →POSTROUTING链一般不做处理直接发出。2.2 四张表Tables规则的功能分类光有检查站链还不够我们还需要规定检查员规则的职责。iptables用四张表来对规则进行功能分类不同的表能做的事情不同并且有固定的生效链。filter表这是最常用的表负责过滤数据包决定是放行ACCEPT还是丢弃DROP/REJECT。它只能作用于INPUT、FORWARD、OUTPUT这三条链。我们常说的“设置防火墙规则”大部分就是在配置filter表。nat表负责网络地址转换。比如家庭路由器让多台设备共享一个公网IP就是它的功劳。它只能作用于PREROUTING、OUTPUT、POSTROUTING这三条链注意某些旧资料可能说FORWARD链也可以但在实际NAT场景中FORWARD链通常不用于nat表规则。mangle表这个表功能特殊用于修改数据包的元数据比如修改TTL生存时间、设置QoS服务质量标记等。它比较底层五条链都可以作用。raw表主要用于连接跟踪的豁免。连接跟踪conntrack是iptables的一项高级功能能识别一个连接如一次TCP会话。但有些流量比如某些游戏或VPN流量我们不希望被跟踪就可以在raw表中设置规则。它作用于PREROUTING、OUTPUT链。表和链的关系是关键你可以把“链”想象成高速公路上的五个固定收费站而“表”是四类不同的检查项目如安检、海关、检疫、超载检查。一辆车数据包经过某个收费站时会依次接受这四类检查如果该检查站在此收费站有设点的话。执行的优先级是固定的raw - mangle - nat - filter。2.3 规则Rules、匹配Matches与目标Targets理解了表和链的框架我们再来看里面的具体内容。规则Rule就是一条具体的指令它由两部分核心构成匹配条件和处理动作。规则按顺序排列在链中。匹配条件Matches用来判断当前数据包是否符合这条规则。可以是通用匹配如源/目标IP地址-s, -d、协议-p tcp/udp/icmp、流入/流出网卡-i, -o。扩展匹配需要加载额外模块功能更强大。如--dport,--sport匹配目标/源端口必须配合-p tcp或-p udp使用。-m state --state NEW,ESTABLISHED,RELATED匹配连接状态这是实现“状态化防火墙”的关键后面会细说。-m multiport --dports 80,443匹配多个端口。-m limit --limit 5/sec限制匹配速率。处理动作Targets当数据包满足所有匹配条件时要执行的操作。常见的有ACCEPT接受数据包允许其通过。DROP丢弃数据包不给任何回应。就像对方和你说话你直接走开不理他。这是更安全的拒绝方式。REJECT拒绝数据包会返回一个错误响应如tcp-reset。就像对方和你说话你回一句“不行”。虽然友好但暴露了防火墙的存在。SNAT/DNAT在nat表中进行源/目标地址转换。LOG将匹配的数据包信息记录到系统日志如/var/log/messages然后继续匹配下一条规则。用于调试和审计。自定义链跳转到另一个你自定义的链去执行规则执行完再返回。规则匹配的顺序至关重要iptables从链的第一条规则开始逐条向下检查。一旦某条规则匹配成功就执行对应的动作ACCEPT/DROP等并且停止继续检查本链内后续的规则除非动作是LOG或跳转到自定义链。如果所有规则都不匹配则执行该链的默认策略Policy。3. 命令详解与实战配置从零构建你的防火墙理论说了一堆现在我们来点实际的。iptables的命令看起来参数很多但其实有很强的规律性。一个完整的规则命令通常遵循这个结构iptables -t 表名 命令 链名 [规则号] 匹配条件 -j 动作其中-t 表名可以省略默认为filter表。3.1 基础管理命令查看、清空、设置策略在开始添加具体规则前我们先学会如何“看”和“清”。查看规则这是最常用的操作。# 查看filter表默认的所有规则 iptables -L # 查看更详细的信息包括数据包计数和字节计数-v显示详情-n不做域名反解显示IP更快 iptables -L -n -v # 查看nat表的所有规则 iptables -t nat -L -n -v # 查看规则并显示行号这在删除特定规则时非常有用 iptables -L --line-numbers # 查看指定链的规则例如只查看INPUT链 iptables -L INPUT -n -v清空规则与计数器在调试或重新配置时往往需要从干净的状态开始。# 清空filter表所有链的规则不会改变默认策略 iptables -F # 清空nat表所有链的规则 iptables -t nat -F # 删除filter表中所有用户自定义的空链 iptables -X # 将filter表所有链的数据包和字节计数器归零 iptables -Z # 组合命令清空所有规则、删除自定义链、计数器归零常用初始化操作 iptables -F iptables -X iptables -Z注意-F和-X不会删除内置链INPUT, OUTPUT等也不会改变链的默认策略。如果你之前设置了iptables -P INPUT DROP清空规则后INPUT链的默认策略依然是DROP这可能导致你立刻被断开SSH连接所以清空前最好先确认或设置一个宽松的默认策略。设置默认策略默认策略是当数据包不匹配任何规则时的最终处理方式。# 设置INPUT链的默认策略为DROP默认拒绝所有入站 iptables -P INPUT DROP # 设置FORWARD链的默认策略为DROP默认禁止转发 iptables -P FORWARD DROP # 设置OUTPUT链的默认策略为ACCEPT默认允许所有出站通常这样设置方便 iptables -P OUTPUT ACCEPT重要警告在远程服务器上千万不要直接执行iptables -P INPUT DROP除非你已经通过规则允许了当前的SSH连接。否则你会立刻失去连接。正确的做法是先添加允许SSH的规则再设置默认DROP策略。3.2 规则增删改查精细控制之道添加规则使用-A(append) 在链的末尾追加或-I(insert) 在指定位置插入。# 在INPUT链末尾添加一条规则允许来自192.168.1.0/24网段的TCP 22端口SSH连接 iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT # 在INPUT链的第1条位置插入规则优先级最高允许本地回环接口(lo)的所有流量 iptables -I INPUT 1 -i lo -j ACCEPT # 如果不指定位置-I 默认插入到链的首位等同于 -I INPUT 1 iptables -I INPUT -i lo -j ACCEPT为什么允许lo接口很重要很多本地服务如数据库连接、Docker容器通信会通过回环地址127.0.0.1进行内部通信。如果不允许可能导致这些服务异常。删除规则使用-D(delete)。# 方法1通过完整的规则描述来删除必须完全匹配 iptables -D INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT # 方法2通过规则的行号来删除更常用先用 --line-numbers 查看 iptables -L INPUT --line-numbers # 假设看到要删除的规则行号是3 iptables -D INPUT 3修改规则iptables没有直接的修改命令。通常的做法是删除旧规则再添加新规则。或者使用-R(replace) 替换指定行号的规则但需要完整重写规则容易出错不如删了再加直观。3.3 状态检测让防火墙更智能的关键这是iptables一个极其强大的特性也是现代防火墙的标配。它使得防火墙不再是孤立地检查每个数据包而是能理解“连接”的概念。-m state --state 状态模块可以匹配连接的几种状态NEW连接的第一个包意味着这是一个新的连接请求。ESTABLISHED一个已经建立的连接。只要连接成功建立完成TCP三次握手后续该连接的双向数据包状态都是ESTABLISHED。RELATED一个与已有连接相关的连接。例如FTP的数据连接端口20就是控制连接端口21的RELATED连接。或者ICMP的错误消息如“目标不可达”也与触发它的TCP/UDP连接相关。INVALID无法识别或状态异常的数据包通常直接丢弃。这个功能为什么重要它极大地简化了规则配置并提高了安全性。我们来看一个经典配置# 1. 允许所有已建立的及相关连接进入这是关键 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 2. 开放新的入站连接如SSH, HTTP iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT # 3. 设置默认策略为DROP iptables -P INPUT DROP解读规则1允许所有回包和相关连接。这意味着一旦你从服务器内部发起一个对外部网站的请求比如curl example.com这个请求的出站包会被OUTPUT链默认允许假设OUTPUT策略是ACCEPT。当外部网站的回包到达时它的状态是ESTABLISHED规则1会放行它。这样你就不需要为每一个可能的回包端口单独写规则了。规则2只控制新的入站连接请求。这种“允许回包控制新请求”的模式是配置防火墙的最佳实践之一。3.4 一个生产环境Web服务器防火墙配置示例假设我们有一台公网Web服务器需要提供HTTP(80)、HTTPS(443)服务并且我们需要通过SSH(22)管理它。我们采用“默认拒绝显式允许”的白名单策略。#!/bin/bash # 保存为 firewall.sh chmod x firewall.sh 后执行 # 1. 清除所有现有规则和计数器设定默认策略危险请确认当前连接已被允许 iptables -F iptables -X iptables -Z iptables -t nat -F iptables -t mangle -F # 设置默认策略INPUT和FORWARD默认拒绝OUTPUT默认允许 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # 2. 允许本地回环接口这是必须的 iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # 3. 允许状态为ESTABLISHED和RELATED的数据包进入核心规则 # 这条规则保证了所有由本机主动发起的连接的回包都能进来。 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 4. 允许ICMP (ping)便于网络诊断可根据安全要求选择是否开放 iptables -A INPUT -p icmp --icmp-type 8 -m state --state NEW -j ACCEPT # 5. 开放管理端口SSH (22)。强烈建议将源IP限制为管理IP段例如办公室IP。 # iptables -A INPUT -s 203.0.113.0/24 -p tcp --dport 22 -m state --state NEW -j ACCEPT # 如果无法固定IP至少使用强密码或密钥认证。这里先开放给所有IP仅作示例生产环境请勿这样 iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT # 6. 开放Web服务端口 iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT iptables -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT # 7. 可选记录被拒绝的数据包到日志用于监控和调试 iptables -A INPUT -j LOG --log-prefix IPTABLES-DROP: --log-level 4 # 注意LOG目标不会终止数据包匹配匹配后还会继续向下匹配。通常放在链的最后默认策略之前。 # 最后INPUT链的默认策略已经是DROP所以不匹配以上任何规则的数据包将被丢弃。 # 保存规则使其在重启后依然生效不同发行版保存方式不同 # CentOS/RHEL 6: service iptables save # CentOS/RHEL 7/Ubuntu: 需要安装iptables-persistent或使用其他方法见下文。重要提醒在远程服务器上执行此脚本前务必确保第5步的SSH规则已经生效并且你的当前连接IP在允许的源IP范围内。一个安全的做法是先通过服务器的本地控制台如云平台的VNC执行或者分步执行命令并在执行iptables -P INPUT DROP前先添加好允许自己IP的SSH规则并测试。4. 高级应用场景NAT、端口转发与流量控制iptables不仅仅是个包过滤器它的nat表功能让它能扮演路由器的角色。4.1 SNAT共享上网源地址转换这是家庭路由器或公司网关的典型应用。内网机器192.168.1.0/24没有公网IP需要通过一台有公网IP假设为203.0.113.10的Linux服务器上网。# 首先确保Linux服务器开启了IP转发功能临时生效 echo 1 /proc/sys/net/ipv4/ip_forward # 永久生效编辑 /etc/sysctl.conf设置 net.ipv4.ip_forward 1然后执行 sysctl -p # 在nat表的POSTROUTING链添加SNAT规则 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.10原理内网机器发出的数据包经过网关服务器时在POSTROUTING链即将发出时将其源IP从内网IP如192.168.1.100替换为网关的公网IP203.0.113.10。外部服务器回包时目标地址是203.0.113.10网关收到回包后再根据连接跟踪表将目标IP转换回内网IP送回内网机器。对于动态公网IP如ADSL拨号可以使用MASQUERADE伪装动作它会自动获取出口网卡的IP地址。iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE4.2 DNAT端口映射目标地址转换将公网IP的某个端口流量转发到内网某台服务器的指定端口。比如将网关的公网IP203.0.113.10的2222端口映射到内网服务器192.168.1.100的22(SSH)端口。iptables -t nat -A PREROUTING -d 203.0.113.10 -p tcp --dport 2222 -j DNAT --to-destination 192.168.1.100:22原理外部访问203.0.113.10:2222的数据包到达网关后在PREROUTING链路由前将其目标IP和端口修改为192.168.1.100:22。然后系统根据新的目标IP进行路由将其转发到内网服务器。内网服务器处理后的回包会经过网关的SNAT或MASQUERADE处理将源IP改回公网IP返回给外部客户端。4.3 连接限制与防攻击iptables的扩展模块可以帮助我们抵御一些简单的攻击。限制同一IP的并发连接数可用于缓解CC攻击。# 限制单个IP对80端口的并发连接数不超过50个 iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 50 --connlimit-mask 32 -j REJECT--syn只匹配TCP SYN包新的连接请求。-m connlimit使用连接数限制模块。--connlimit-above 50连接数超过50则触发动作。--connlimit-mask 32以32位掩码即单个IP为单位进行统计。如果是24则按一个C段统计。限制访问速率可用于防止暴力破解或洪水攻击。# 对SSH端口限制每秒最多接受3个新连接突发值设为10允许前10个连接快速建立 iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/minute --limit-burst 10 -j ACCEPT # 超过限制的新连接将被丢弃因为默认策略是DROP或者可以在后面加一条REJECT规则-m limit使用限速模块。--limit 3/minute平均速率限制为每分钟3个。--limit-burst 10令牌桶容量为10。初始时有10个令牌每匹配一个连接消耗一个令牌令牌会按限制速率3个/分钟补充。这允许短时间内有突发连接。5. 规则管理与持久化避免重启后功亏一篑通过命令行配置的iptables规则是保存在内存中的系统重启后会丢失。因此将配置持久化是必须的。5.1 规则保存与恢复CentOS 6 / RHEL 6# 保存当前规则到默认配置文件 /etc/sysconfig/iptables service iptables save # 或者使用命令 iptables-save /etc/sysconfig/iptables # 重启iptables服务会从配置文件加载规则 service iptables restartCentOS 7 / RHEL 7 / Fedora 这些系统默认使用firewalld。如果你想继续使用纯iptables需要先停止并禁用firewalld安装iptables-services。systemctl stop firewalld systemctl disable firewalld yum install iptables-services -y systemctl enable iptables systemctl start iptables # 配置好规则后保存 service iptables save # 或 iptables-save /etc/sysconfig/iptablesDebian / Ubuntu Debian系没有内置的保存服务。常用的方法是安装iptables-persistent包。sudo apt-get update sudo apt-get install iptables-persistent -y # 安装过程中会询问是否保存当前规则。安装后可以使用以下命令手动保存IPv4规则 sudo netfilter-persistent save # 规则会被保存到 /etc/iptables/rules.v4 (IPv4) 和 /etc/iptables/rules.v6 (IPv6) # 系统启动时会自动加载这些规则。也可以手动操作# 保存规则 iptables-save /etc/iptables/rules.v4 ip6tables-save /etc/iptables/rules.v6 # 恢复规则 iptables-restore /etc/iptables/rules.v45.2 使用自定义脚本管理对于复杂的规则集或者需要动态调整的场景维护一个Shell脚本是更清晰的方式。将前面所有的iptables命令写在一个脚本里如/usr/local/bin/firewall.sh并赋予执行权限。在脚本开头清空所有规则然后从头构建。这样版本可控脚本可以放入Git等版本控制系统。清晰明了所有规则一目了然方便注释和修改。灵活执行可以随时执行脚本以应用新的规则集。然后你可以通过系统的启动脚本如/etc/rc.local但注意该方法在某些新系统中已不推荐或创建一个systemd服务在开机时运行这个脚本以实现持久化。6. 常见问题排查与实战心得即使理解了原理和命令在实际操作中依然会踩坑。下面分享几个我遇到过的典型问题和处理技巧。6.1 问题配置完防火墙后服务器无法访问外网了。排查思路检查OUTPUT链策略iptables -L OUTPUT -n。如果默认策略是DROP而你没有任何允许出站的规则那么本机进程发出的所有数据包都会被丢弃。通常OUTPUT策略设为ACCEPT比较安全方便。检查INPUT链的ESTABLISHED规则这是最常见的原因。如果你设置了iptables -P INPUT DROP但忘记了添加-m state --state ESTABLISHED,RELATED -j ACCEPT这条规则那么服务器对外发起请求后外部的回包状态为ESTABLISHED也会被INPUT链丢弃导致连接无法建立。症状是能ping通外部ICMP是独立的但curl、wget等TCP/UDP连接超时。检查DNS如果域名无法解析但IP可以访问可能是OUTPUT链屏蔽了UDP 53端口DNS。确保有规则iptables -A OUTPUT -p udp --dport 53 -j ACCEPT。6.2 问题配置了端口转发DNAT但内网服务无法访问。排查思路确认IP转发已开启cat /proc/sys/net/ipv4/ip_forward必须为1。检查FORWARD链策略和规则数据包在网关服务器上被转发时不仅要经过nat表的PREROUTING链做DNAT还要经过filter表的FORWARD链。如果FORWARD链默认是DROP你需要添加规则允许转发的流量。# 允许从内网网卡如eth1到外网网卡如eth0的已建立连接及相关连接 iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许从外网网卡到内网网卡的新连接针对DNAT后的流量 iptables -A FORWARD -i eth0 -o eth1 -d 192.168.1.100 -p tcp --dport 22 -m state --state NEW -j ACCEPT检查内网服务器的网关和路由内网服务器192.168.1.100的默认网关必须指向这台做转发的Linux服务器192.168.1.1。否则内网服务器收到目标为自己的数据包后回包可能不会发给网关。6.3 问题如何临时开放一个端口进行测试测试完再关闭不要直接修改正在运行的规则集容易出错。建议在测试前备份当前规则。# 备份当前规则 iptables-save /tmp/iptables.backup # 临时添加规则例如开放8080端口 iptables -A INPUT -p tcp --dport 8080 -j ACCEPT # ... 进行测试 ... # 测试完毕后恢复备份的规则 iptables-restore /tmp/iptables.backup或者如果你记得添加的规则可以直接用行号删除它。6.4 实操心得与注意事项顺序就是生命iptables规则是从上到下匹配的。把最具体、最严格的规则放在前面把最通用、最宽松的规则如ESTABLISHED规则放在它们后面、默认策略之前。例如拒绝某个IP的规则应该放在允许某个端口的规则前面如果顺序反了允许规则先匹配拒绝就失效了。默认策略用DROP但小心“把自己锁在外面”设置-P INPUT DROP是安全的最佳实践但务必在之前添加允许现有SSH连接和本地流量的规则。一个安全的方法是写一个脚本在脚本开头先设置允许自己IP和SSH端口的规则再设置默认DROP然后一次性执行整个脚本。善用日志LOG Target调试在不确定规则是否生效时可以在规则前插入一条LOG规则。例如你想知道哪些到80端口的包被拒绝了可以加一条iptables -I INPUT -p tcp --dport 80 -j LOG --log-prefix [IPTABLES HTTP-DENY] 。然后去/var/log/messages或/var/log/syslog查看日志。注意生产环境谨慎使用避免日志洪水。理解“连接跟踪”Conntrack状态检测-m state依赖于内核的conntrack模块。在高并发连接场景下如繁忙的Web服务器、NAT网关conntrack表可能会被填满导致新连接无法建立。可以通过sysctl net.netfilter.nf_conntrack_max查看和调整最大值。IPv6别忘了iptables只处理IPv4。如果你的服务器启用了IPv6还需要用ip6tables命令配置相应的防火墙规则否则安全防护会有缺口。iptables的深度和广度远不止于此它还支持更复杂的字符串匹配、时间控制、标记MARK等高级功能。但对于绝大多数系统管理员和开发者来说掌握本文所述的核心概念、命令语法、状态检测、NAT转换以及规则管理已经足以应对90%以上的日常防火墙配置需求。记住防火墙规则是安全策略的体现在追求安全的同时务必保证可用性。每次修改前做好备份修改后充分测试这才是用好iptables这个强大工具的不二法门。