iptables 命令详解
iptables 是 Linux 系统内核级防火墙工具,用于配置、维护和检查 IPv4 数据包过滤规则(IPv6 使用 ip6tables
)。以下是核心用法:
一、基本概念
表(Tables)
filter
:默认表,用于数据包过滤(允许/拒绝)。nat
:网络地址转换(如端口转发)。mangle
:修改数据包头部(如 TTL)。raw
:连接跟踪前处理数据包。
链(Chains)
INPUT
:处理进入本机的数据包。OUTPUT
:处理本机发出的数据包。FORWARD
:处理经本机转发的数据包。PREROUTING
/POSTROUTING
:用于nat
表(路由前/后处理)。
二、命令语法
iptables [-t 表名] 命令选项 [链名] [规则匹配] -j 目标动作
-t 表名
:指定表(默认filter
)。命令选项:
-A
:追加规则到链尾。-I
:插入规则到链首(可指定位置)。-D
:删除规则。-L
:列出规则。-F
:清空链中所有规则。-P
:设置链的默认策略(如ACCEPT
/DROP
)。
规则匹配:
-p
:协议(tcp
,udp
,icmp
)。-s
:源 IP 地址。-d
:目标 IP 地址。--dport
:目标端口(需配合-p tcp/udp
)。-i
:输入网卡(如eth0
)。
目标动作(
-j
):ACCEPT
:允许数据包。DROP
:丢弃数据包(无响应)。REJECT
:拒绝并返回错误。SNAT
:源地址转换(用于nat
表)。DNAT
:目标地址转换(用于nat
表)。
三、常用示例
允许 SSH 访问(端口 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
拒绝来自特定 IP 的访问
iptables -A INPUT -s 192.168.1.100 -j DROP
端口转发(将 8080 转发到 80)
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
允许 ping 请求
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
设置默认策略
iptables -P INPUT DROP # 默认丢弃所有输入 iptables -P FORWARD DROP # 默认丢弃所有转发
四、规则管理
查看规则
iptables -L -n -v # -n 禁用域名解析,-v 显示详细信息
清空所有规则
iptables -F # 清空 filter 表 iptables -t nat -F # 清空 nat 表
保存规则(重启后生效)
iptables-save > /etc/iptables/rules.v4 # Debian/Ubuntu service iptables save # CentOS/RHEL
五、注意事项
- 规则顺序:iptables 按从上到下顺序匹配规则,首条匹配后停止。
- 连接跟踪:使用
-m state --state ESTABLISHED,RELATED
允许已建立的连接。 - 测试前勿锁死:远程操作时,先允许 SSH 端口,再设置
DROP
策略,避免断开连接。
提示:复杂场景建议结合
iptables-persistent
或firewalld
管理规则。