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
-
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的应用。虽然语法略显繁琐,但足够灵活,适合深入控制网络流量。