iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
1. 表:
-
filter:过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表
-
nat:network address translation 地址转换规则表
-
mangle:修改数据标记位规则表
-
raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度
-
security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现
2. 链:
-
INPUT: 处理入站数据包,匹配目标IP为本机的数据包。
-
OUTPUT: 处理出站数据包,一般不在此链上做配置。
-
FORWARD: 处理转发数据包,匹配流经本机的数据包。
-
PREROUTING链: 在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上。
-
POSTROUTING链: 在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网。
3. 规则:
- 规则定义了如何处理特定的数据包。
- 每个规则都包含匹配条件和对匹配数据包的动作。
4.管理选项
Command | 描述 | 示例命令 |
---|---|---|
-A | Append - 在指定链的末尾添加规则 | iptables -A INPUT -p tcp --dport 22 -j ACCEPT |
-D | Delete - 删除指定链上的规则 | iptables -D INPUT -s 192.168.1.2 -j DROP |
-I | Insert - 在指定链的指定位置插入规则 | iptables -I INPUT 3 -p udp --dport 53 -j ACCEPT |
-P | Policy - 设置指定链的默认策略 | iptables -P INPUT DROP |
-F | Flush - 清空指定链上的所有规则 | iptables -F INPUT |
-L | List - 列出指定链上的所有规则 | iptables -L INPUT |
-N | New Chain - 创建一个新的用户自定义链 | iptables -N MYCHAIN |
-X | Delete Chain - 删除指定的用户自定义链 | iptables -X MYCHAIN |
-Z | Zero Counters - 将指定链上的计数器归零 | iptables -Z INPUT |
-t | Table - 指定要操作的表,如 filter、nat、mangle 等 | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE |
5.匹配条件
Parameter | 说明 | 示例命令 |
---|---|---|
-s, --source | 指定源 IP 地址 | iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT |
-d, --destination | 指定目标 IP 地址 | iptables -A OUTPUT -d 8.8.8.8 -j ACCEPT |
-p, --protocol | 指定协议(如 tcp、udp、icmp) | iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
--sport | 指定源端口 | iptables -A OUTPUT --sport 1024:65535 -j ACCEPT |
--dport | 指定目标端口 | iptables -A INPUT --dport 22 -j ACCEPT |
-i, --in-interface | 指定输入接口 | iptables -A INPUT -i eth0 -j ACCEPT |
-o, --out-interface | 指定输出接口 | iptables -A OUTPUT -o eth0 -j ACCEPT |
--state | 指定连接状态 | iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT |
-j, --jump | 指定要采取的动作(ACCEPT、DROP、REJECT 等) | iptables -A INPUT -j DROP |
-m, --match | 加载扩展模块 | iptables -A INPUT -m comment --comment "Allow SSH" |
6. 动作:
ACCEPT | 允许通过 | iptables -A INPUT -p tcp --dport 22 -j ACCEPT |
DROP | 丢弃(拒绝)数据包 | iptables -A INPUT -p tcp --dport 80 -j DROP |
REJECT | 拒绝数据包,并给发送者一个拒绝的响应 | iptables -A INPUT -p udp --dport 53 -j REJECT |
LOG | 记录数据包到系统日志 | iptables -A INPUT -p tcp --dport 22 -j LOG --log-level 4 --log-prefix "SSH traffic: " |
RETURN | 结束当前链的处理,返回到上一级链 | iptables -A INPUT -p icmp -j RETURN |
7. 基本用法:
- 查看规则:
sudo iptables -L
- 清空规则:
sudo iptables -F
- 允许特定 IP 地址:
sudo iptables -A INPUT -s <IP 地址> -j ACCEPT
- 拒绝特定端口:
sudo iptables -A INPUT -p tcp --dport <端口号> -j DROP