Linux防火墙iptables完整规则:从零学会配置与排错

适用场景与前置准备

如果你刚接触服务器运维,打算用iptables保护Linux服务器安全,却不知道规则从何写起,或者听说“规则顺序很重要”但一头雾水——这篇文章就是为你准备的。
我会按零基础能直接照做的方式,把Linux防火墙iptables完整规则从概念讲到落地。

开始前,先确保你的系统已经装有iptables。
大部分Linux发行版默认包含,但某些最小化安装可能需要手动安装。
执行下面的命令检查:

which iptables
iptables --version

如果显示/usr/sbin/iptables和版本号,说明已就位。
若未安装,根据系统使用包管理器安装(例如CentOS:yum install iptables-services
Ubuntu:apt install iptables)。
另外,操作iptables需要root权限,建议用sudo或者直接切换root。

理解iptables的核心:表、链与规则流向

iptables的规则按“表”组织,最常用的是filter表(过滤)、nat表(地址转换)和mangle表(修改数据包)。
对于防火墙策略,我们主要操作filter表。

filter表内置三条链:

  • INPUT:进入本机的数据包。
  • FORWARD:经过本机转发的数据包。
  • OUTPUT:从本机发出的数据包。

如果一个包要进入本机,会依次匹配INPUT链上的规则。
规则顺序至关重要:第一条匹配的规则会决定动作(ACCEPT允许、DROP丢弃、REJECT拒绝等),后面的规则不再检查。
这也是新手最容易踩坑的地方。

编写第一条防火墙规则

我们先从最简单的开始:允许SSH(端口22)访问,防止把自己锁在门外。
然后设置默认策略为DROP,只放行必要流量。

1. 清空当前规则(谨慎)

iptables -F
iptables -X
iptables -Z

-F清空所有规则,-X删除用户自定义链,-Z计数器清零。
这通常用于重置环境。

2. 设置默认策略(先放行SSH,再改默认)

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -j ACCEPT
iptables -A FORWARD -j DROP

三条命令含义:

  • 给INPUT链追加一条规则:允许TCP目标端口22的包进入。
  • 再追加一条:其他所有进入的包全部丢弃(DROP)。
  • 设置OUTPUT链默认允许(方便测试)。
  • 禁止转发。

3. 允许已建立的连接回复

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

这行很重要:允许本机发起的连接返回的数据包进入,避免影响正常的出站请求。

让规则永久生效(持久化)

直接配置的规则重启后会丢失。
要让Linux防火墙iptables完整规则在重启后依然有效,需要保存规则并设置开机加载。

CentOS/RHEL 7+:

yum install iptables-services -y
systemctl enable iptables
service iptables save   # 规则保存到 /etc/sysconfig/iptables
systemctl restart iptables

Ubuntu/Debian:

apt install iptables-persistent -y
netfilter-persistent save   # 规则保存到 /etc/iptables/rules.v4
netfilter-persistent reload

保存后可以检查文件内容确认规则已记录。

避坑指南与高频问题

规则顺序不能乱:先放行必须的端口(如SSH),再设置默认DROP。
如果反了,SSH连接会立刻断开。
建议通过计划任务或cron定时恢复配置作为保险。

不要轻易修改OUTPUT链:除非你清楚出站限制需求,否则新手阶段保持OUTPUT ACCEPT。

忘记添加回环接口:有些服务依赖本机回环(lo)通信。
建议加一条:

iptables -A INPUT -i lo -j ACCEPT

使用REJECT还是DROP:REJECT会返回错误消息(如端口不可达),DROP则直接丢弃,对方会超时等待。
出于安全考虑,多数场景用DROP。

如何临时关闭iptables

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F

注意只是清空规则并设置允许所有,并不停止服务。

Q:规则生效后,为什么新加的规则不生效?
A:检查是否在匹配到已有规则后就结束了。使用iptables -L -n --line-numbers查看规则编号和新规则的位置,必要时用-I插入到合适顺序。

Q:如何查看当前所有规则和统计信息?
A:执行iptables -L -n -v,会显示每条规则的包计数和字节数,帮助排错。

验证效果

配置完成后,从另一台机器测试SSH连接是否正常(应该成功)。
再尝试ping本机IP(应该被拒绝,因为你没有放行ICMP)。
如果ping不通,正是预期的DROP效果。

你也可以用iptables -L -n -v确认计数器有增长,验证规则正在工作。
若连接异常,先检查SSH规则是否在DROP之前,以及ESTABLISHED规则是否已添加。

当你掌握了这些基础,就可以根据业务需求添加更多规则(如放行HTTP/HTTPS、自定义端口等)。Linux防火墙iptables完整规则的核心其实就这么几条命令,理解链、表、规则流向和持久化方法,就能应对绝大多数场景。
遇到问题时,优先回看本文的避坑部分,往往能快速定位原因。

分享到:
上一篇
Linux离线安装大模型依赖包:手把手从下载到部署
下一篇
Linux shell自动化跨境运维脚本
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意