目录
1.表和链
1.表:
优先级:数据包按 raw → mangle → nat → filter 的顺序经过各表
raw 表:控制数据包是否被状态跟踪机制处理,绕过连接跟踪以提升性能
PREROUTING
OUTPUT
mangle 表:修改数据包的标记或元数据(如TTL、TOS、MARK),用于流量整形或策略路由。
PREROUTING
INPUT
OUTPUT
FORWARD
POSTROUTING
nat 表:网络地址转换
PREROUTING:数据包进入“路由前”,修改“目标”地址(DNAT),路由重定向。
POSTROUTING:数据包离开路由后,修改源地址(SNAT)、源地址伪装。
filter 表:默认的数据包过滤表
INPUT:目标为本机,过滤进入本机的流量(如 SSH、HTTP)。
OUTPUT:本机发出,过滤本机外联流量(如限制访问)。
FORWARD:数据包需转发(非本机目标)。
5链关键区别:PREROUTING/POSTROUTING:修改地址(NAT)。
INPUT/OUTPUT:过滤本机相关流量。
FORWARD:控制转发流量。
流量过程:
外部流量进入:PREROUTING → 路由决策 → INPUT(本机)或 FORWARD(转发)。
内部流量发出:OUTPUT → 路由决策 → POSTROUTING → 离开本机。
2.语法详解
语法:iptables [-t 表名] [规则参数] [链名] [协议地址参数] [-j 动作]
1.表名:raw, mangle,nat,filter
2.规则参数:
参数 作用
-t <表名> 指定操作的表(如 -t nat、-t filter,默认 filter)。
-A <链名> 追加 规则到链尾(如 -A INPUT)。
-I <链名> [规则号] 插入 规则到链首或指定位置(如 -I INPUT 2)。
-D <链名> <规则号> 删除 指定规则(如 -D INPUT 3)。
-L 列出 规则(-L INPUT 查看特定链)。
-v 显示详细信息(如数据包计数 pkts 和字节 bytes)。
-n 禁用 DNS 反向解析,加快输出速度。
-F 清空 链中的所有规则(-F INPUT 清空 INPUT 链)。
-P <链名> <动作> 设置链的默认策略(如 -P INPUT DROP)。
3.链名:
入站流量:PREROUTING → INPUT;
出站流量:OUTPUT → POSTROUTING
转发流量:PREROUTING → FORWARD → POSTROUTING;
4.协议地址参数:
参数 作用
-p <协议> 协议(如 -p tcp、-p udp、-p icmp)。
--dport 目标端口(需配合 -p tcp/udp,如 --dport 80)。
--sport 源端口(如 --sport 22)。
-s <IP> 源 IP(如 -s 192.168.1.100)。
-d <IP> 目标 IP(如 -d 10.0.0.1)。
-i <网卡> 输入网卡(如 -i eth0)。
-o <网卡> 输出网卡(如 -o wlan0)。
-m <模块> 使用扩展模块(如 -m state --state ESTABLISHED)。
5.动作:
参数 作用
-j ACCEPT 允许数据包通过。
-j DROP 丢弃数据包(无响应)。
-j REJECT 拒绝数据包(返回 ICMP 拒绝消息)。
-j LOG 记录日志(/var/log/messages)。
-j DNAT 目标地址转换(如 -j DNAT --to-destination 192.168.1.2:80)。
-j SNAT 源地址转换(如 -j SNAT --to-source 1.2.3.4)。
-j MASQUERADE 动态 SNAT(适用于拨号或 DHCP 获取 IP)。
3.常用示例
(1)查看规则
iptables -L -n -v # 查看 filter 表规则(默认)
iptables -t nat -L -n -v # 查看 nat 表规则
iptables -L INPUT -n -v # 查看 INPUT 链规则
(2)允许/拒绝流量
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许 SSH
iptables -A INPUT -p tcp --dport 80 -j DROP # 拒绝 HTTP
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT # 允许局域网访问
(3)NAT 与端口转发
# SNAT(内网机器通过网关访问外网)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# DNAT(将外网 80 端口转发到内网 192.168.1.2)
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.1.2:80
(4)保存与恢复规则
service iptables save # 保存规则
iptables-save > /etc/iptables.rules # 保存规则
iptables-restore < /etc/iptables.rules # 恢复规则