IPTables用法

iptables 是一个用于配置 Linux 内核中的网络地址转换 (NAT) 和数据包过滤规则的工具。它通常用于设置防火墙规则,以控制进出网络的数据流。下面是对 iptables 的详细介绍:

基本概念

  1. 表 (Table): iptables 使用不同的表来处理不同类型的网络操作。常用的表包括:

    • filter: 默认表,主要用于数据包过滤。
    • nat: 用于网络地址转换 (NAT)。
    • mangle: 用于修改数据包。
    • raw: 用于处理数据包绕过连接跟踪。
  2. 链 (Chain): 每个表包含多个链,定义数据包的处理顺序。常见的链有:

    • INPUT: 处理所有进入本地系统的数据包。
    • OUTPUT: 处理所有从本地系统发送出去的数据包。
    • FORWARD: 处理转发的数据包。
    • PREROUTING: 在数据包路由前处理数据包。
    • POSTROUTING: 在数据包路由后处理数据包。
  3. 规则 (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

示例

  1. 设置基本防火墙规则
# 清空所有规则
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
  1. 设置 NAT
# 开启 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 是一个功能强大且灵活的工具,可以用于配置防火墙规则和网络地址转换。通过理解其表、链和规则的概念,用户可以有效地管理和保护其网络流量。