Linux防火墙规则按顺序逐条匹配,先命中即执行,后续规则不再检查;默认策略仅处理未被任何规则匹配的流量,生产环境建议INPUT链设为DROP并前置基础放行规则。

Linux 防火墙规则不是“堆在一起就生效”,而是按严格顺序逐条匹配,先匹配到的规则立即执行,后面的规则不再检查。默认策略(Policy)是兜底逻辑,只在所有规则都不匹配时才起作用。配置不当——比如把 ACCEPT 加在 DROP 之后,等于白加。
规则顺序决定实际效果
iptables 中每条链(如 INPUT)里的规则从上到下依次比对,一旦命中就停止匹配。这意味着:
- 高优先级动作(如拦截恶意 IP、限速 SSH)必须用 -I 插入链首,不能用 -A 追加到末尾
- 允许回环(
-i lo -j ACCEPT)和已建立连接(-m state --state ESTABLISHED,RELATED)这类基础放行规则,通常放在链靠前位置,确保不影响本机通信和响应流量 - 开放 Web 端口(80/443)或 SSH(22)的规则,应放在拒绝类规则之前;否则会被前面的 DROP 拦截掉
默认策略是最后一道防线
每条链都有一个默认策略(POLICY),用 sudo iptables -L 查看时会显示 “Policy: ACCEPT” 或 “Policy: DROP”。它不参与匹配流程,只处理“没被任何规则管住”的包。
- 生产环境建议设为 DROP:先执行
sudo iptables -P INPUT DROP,再逐步添加明确允许的规则 - 设置前务必确认已有 SSH 访问不受影响,否则可能锁死远程连接
- OUTPUT 链默认策略一般保持 ACCEPT,避免阻断本机主动发起的请求(如 yum 更新、curl 调用)
查、改、删都要带上下文
操作前不看当前规则结构,极易误删关键项或破坏顺序:
- 用
sudo iptables -L -n --line-numbers显示编号,方便精准删除某一条(如sudo iptables -D INPUT 3) - 用
sudo iptables -t nat -L -n -v单独查 NAT 表,避免和 filter 表混淆 - 清空规则前,先用
sudo iptables-save > /tmp/iptables-backup备份,防止误操作后无法恢复
filter 表是日常配置主战场
绝大多数安全控制都在 filter 表的 INPUT、OUTPUT、FORWARD 链中完成:
- INPUT:只管“进来的包”,服务器对外提供服务(SSH、HTTP)的放行规则都写在这里
- OUTPUT:极少需要限制,除非有特殊合规要求(如禁止外连特定域名)
- FORWARD:仅当本机充当路由器或启用 Docker/NAT 时才需配置,普通服务器通常保持默认即可


















