filter 表:用于过滤数据包,决定是否接受、拒绝或转发。nat 表:用于网络地址转换,修改数据包的源或目标地址。mangle 表:用于修改数据包的 TOS/DSCP 字段等。raw 表:用于配置特殊规则,如连接追踪(connection tracking)。每个表包含一系列链,每个链定义了对数据包的不同处理方式。以下是一些主要的链:
INPUT: 处理进入本地系统的数据包。OUTPUT: 处理从本地系统发出的数据包。FORWARD: 处理通过系统进行的数据包转发。ACCEPT: 允许数据包通过。DROP: 丢弃数据包,不给予任何响应。REJECT: 拒绝数据包,返回错误消息。DNAT: 目标地址转换,用于端口转发。SNAT: 源地址转换,用于修改数据包的源地址。规则则是按照表、链、目标的顺序进行匹配数据包的操作,相当于在哪里,匹配哪一部分,怎样处理。
规则结构如下:
iptables -A <CHAIN> [OPTIONS] -j <TARGET>
:链的名称,如 INPUT、OUTPUT、FORWARD 等。
[OPTIONS]:匹配条件,例如 -p(协议)、–dport(目标端口)等。
-j :目标,定义了匹配条件满足时的操作,如 ACCEPT、DROP、REJECT 等。
显示当前规则:
sudo iptables -L
加 -v显示详细信息
清除所有规则:
sudo iptables -F
-t nat 删除指定nat上的规则
添加规则:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
允许 SSH 流量通过。
删除规则:
sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT
在指定链的指定位置插入规则:
sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
开启 IP 转发(用于路由器):
sudo sysctl -w net.ipv4.ip_forward=1
或者在 /etc/sysctl.conf 中添加 net.ipv4.ip_forward=1 并执行 sudo sysctl -p。
端口转发(将外部访问的 80 端口转发到内部主机的 8080 端口)
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:8080
sudo iptables -t raw -L -vsudo sh -c 'iptables-save > /etc/iptables.rules'sudo sh -c 'iptables-restore < /etc/iptables.rules'