iptables 是 linux 中用于配置防火墙规则的经典工具,其核心结构为“表→链→规则”,常用表包括 filter、nat、mangle 和 raw,每个表包含 input、output、forward 等链以处理不同路径的数据包;基本语法为 iptables [-t table] command [chain] [匹配条件] [-j 动作],其中常用命令有 -a、-i、-l、-f、-p,匹配条件包括 -p、-s、-d、--dport 等,动作为 accept、drop、reject、log;典型配置包括设置默认策略、允许回环接口、放行已建立连接、开放 ssh/http/https 端口、限制特定 ip 访问、配置 dnat 和 masquerade 实现端口转发与共享上网;规则可通过 service iptables save 或 iptables-save 命令保存,使用 iptables-restore 恢复;需注意规则顺序匹配特性,避免误锁,建议结合 conntrack 状态模块和 ipset 提升安全性与性能,最终通过理解表链结构与实际应用掌握 iptables 的网络控制能力。

配置 Linux 防火墙规则时,
iptables是一个经典且功能强大的工具。虽然现代系统逐渐转向
nftables,但
iptables仍在大量环境中使用。掌握其基础语法,有助于管理网络流量、提升系统安全性。以下是
iptables的基础语法和常用配置方法。
一、iptables 的基本结构
iptables命令基于“表(tables)→链(chains)→规则(rules)”的结构:
-
表(tables):定义防火墙的功能类别,常见有:
filter
:默认表,用于包过滤(最常用)nat
:网络地址转换,用于修改源/目标IP或端口mangle
:修改数据包头部信息(较少用)raw
:用于配置连接追踪的例外
-
链(chains):每个表包含若干预定义的链,用于处理特定时机的数据包:
INPUT
:进入本机的数据包OUTPUT
:从本机发出的数据包FORWARD
:经过本机转发的数据包PREROUTING
:数据包刚到达,路由前(常用于 nat)POSTROUTING
:数据包即将发出,路由后(常用于 nat)
二、基本语法格式
iptables [-t table] COMMAND [chain] [匹配条件] [-j 动作]
常见命令(COMMAND):
-A
:追加规则到链末尾-I
:插入规则(可指定位置)-D
:删除规则-L
:列出规则-F
:清空规则-P
:设置链的默认策略
常见匹配条件:
-P
:指定协议(如 tcp、udp、icmp)-s
:源IP地址-D
:目标IP地址--sport
:源端口--dport
:目标端口-I
:输入接口(如 eth0)-o
:输出接口
常见动作(-j target):
ACCEPT
:允许通过DROP
:丢弃,不回复REJECT
:拒绝,并返回错误信息LOG
:记录日志(通常与其他规则配合)
三、常用配置示例
1. 查看当前规则
iptables -L -n -v
-L
:列出规则-n
:以数字形式显示IP和端口-v
:显示详细信息
2. 设置默认策略
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT
建议先设置 OUTPUT 为 ACCEPT,避免断网。
3. 允许本地回环通信
iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT
4. 允许已建立的连接通过
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
conntrack模块用于跟踪连接状态,这是允许响应包返回的关键。
5. 开放常用服务端口
# 允许SSH(端口22) iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许HTTP(80)和HTTPS(443) iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT
6. 限制来源IP访问
# 只允许特定IP访问SSH iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j DROP
注意规则顺序:先允许,再拒绝。
7. 配置端口转发(NAT)
# 启用IP转发 echo 1 > /proc/sys/net/ipv4/ip_forward # 将外部访问本机8080端口转发到内网192.168.1.10:80 iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80 # 源地址转换,让内网主机能通过本机上网 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
四、保存和恢复规则
不同发行版保存方式不同:
-
CentOS/RHEL 6 或使用 iptables-services:
service iptables save
-
Ubuntu/Debian:
iptables-save > /etc/iptables/rules.v4
可配合
iptables-restore < /etc/iptables/rules.v4
恢复。 -
手动保存:
iptables-save > ~/firewall.rules iptables-restore < ~/firewall.rules
五、注意事项
- 规则按顺序匹配,一旦匹配就执行动作,后续规则不再检查。
- 使用
-I INPUT 1
可在第一条插入规则,避免把自己锁在外面。 - 修改远程服务器防火墙时,建议先测试规则,或设置定时清空规则的备用命令(如
sleep 60; iptables -F
)。 - 复杂环境建议配合
ipset
提高效率(如封禁大量IP)。
基本上就这些。掌握
iptables的核心在于理解“表-链-规则”的逻辑,以及状态追踪(conntrack)和NAT的应用。虽然语法略显繁琐,但足够灵活,适合深入控制网络流量。










