iptables
是一个用于配置 Linux 内核中的网络地址转换 (NAT) 和数据包过滤规则的工具。它通常用于设置防火墙规则,以控制进出网络的数据流。下面是对 iptables
的详细介绍:
表 (Table): iptables
使用不同的表来处理不同类型的网络操作。常用的表包括:
filter
: 默认表,主要用于数据包过滤。nat
: 用于网络地址转换 (NAT)。mangle
: 用于修改数据包。raw
: 用于处理数据包绕过连接跟踪。链 (Chain): 每个表包含多个链,定义数据包的处理顺序。常见的链有:
INPUT
: 处理所有进入本地系统的数据包。OUTPUT
: 处理所有从本地系统发送出去的数据包。FORWARD
: 处理转发的数据包。PREROUTING
: 在数据包路由前处理数据包。POSTROUTING
: 在数据包路由后处理数据包。规则 (Rule): 链中包含的具体规则,定义了匹配条件和相应的动作。每条规则由匹配条件和动作组成。
iptables -L # 查看当前的过滤表规则
iptables -t nat -L # 查看 NAT 表规则
# 允许来自特定 IP 地址的数据包进入
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
# 拒绝特定端口的数据包
iptables -A INPUT -p tcp --dport 22 -j REJECT
iptables -D INPUT -s 192.168.1.1 -j ACCEPT # 删除与上述添加规则相同的规则
为了在系统重启后保留规则,需要将规则保存到文件中,并在系统启动时恢复:
# 保存规则
iptables-save > /etc/iptables/rules.v4
# 恢复规则
iptables-restore < /etc/iptables/rules.v4
# 清空所有规则
iptables -F
# 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 允许本地回环接口通信
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的连接和相关连接
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 允许特定 IP 地址的访问
iptables -A INPUT -s 192.168.1.100 -j ACCEPT
# 允许特定端口的访问 (例如 HTTP)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 开启 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 设置 NAT 规则,将内部网络流量转发到外部网络
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
-A
: 添加规则到链的末尾。-D
: 删除链中的规则。-I
: 插入规则到链的指定位置。-L
: 列出链中的规则。-F
: 清空链中的所有规则。-P
: 设置链的默认策略。iptables
是一个功能强大且灵活的工具,可以用于配置防火墙规则和网络地址转换。通过理解其表、链和规则的概念,用户可以有效地管理和保护其网络流量。