iptables命令基本语法

一,核心组件详解

1. 表 (Table)

规则的组织单位,默认为 filter 表。

  • filter:过滤数据包(常用链:INPUT, FORWARD, OUTPUT
  • nat:网络地址转换(常用链:PREROUTING, POSTROUTING
  • mangle:修改数据包头部信息
  • raw:豁免连接跟踪

2. 命令 (Command)

对规则链的操作。

  • -A:追加规则 | -I:插入规则 | -D:删除规则
  • -L:列出规则 | -F:清空规则 | -P:设置默认策略
  • -N:新建自定义链 | -X:删除自定义链

3. 链 (Chain)

规则的有序列表。

  • INPUT:处理目标为本机的数据包
  • OUTPUT:处理本机发出的数据包
  • FORWARD:处理经本机转发的数据包
  • PREROUTING/POSTROUTING:用于NAT,在路由前后处理数据包

4. 规则匹配条件 (Rule-Specifications)

定义数据包的匹配标准。

  • -p tcp/udp/icmp:协议
  • -s IP/-d IP:源/目标地址
  • --sport/--dport:源/目标端口(需配合 -p tcp/udp
  • -i eth0/-o eth1:输入/输出网络接口
  • -m state --state NEW,ESTABLISHED,RELATED:连接状态匹配(最常用
  • -m limit --limit 5/sec:限制匹配速率

5. 目标动作 (Target/Jump)

匹配规则后的处理动作。

  • ACCEPT:允许 | DROP:丢弃 | REJECT:拒绝并通知
  • LOG:记录日志 | DNAT:目标地址转换 | SNAT/MASQUERADE:源地址转换
  • RETURN:返回上级链

二,常见操作示例

1. 基本查看与管理

1
2
3
4
5
6
7
8
9
10
# 查看规则(-n 以数字显示,-v 显示详细信息,--line-numbers 显示行号)
iptables -L -n -v --line-numbers

# 清空所有规则(谨慎操作!)
iptables -F

# 设置默认策略:INPUT 链默认拒绝,OUTPUT 链默认允许
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

2. 基础防火墙配置(按顺序执行)

1
2
3
4
5
6
7
8
9
10
11
# 1. 允许本地回环流量
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# 2. 允许已建立的连接接收返回数据(至关重要!)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 3. 开放常用服务端口(根据需求调整)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH
iptables -A INPUT -p tcp --dport 80,443 -j ACCEPT # Web
iptables -A INPUT -p icmp -j ACCEPT # Ping

3. 网络地址转换 (NAT) 示例

1
2
3
4
5
6
# 内网共享上网(通常在网关服务器上设置)
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

# 端口转发:将公网8080端口转发到内网Web服务器
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT

4. 实用规则技巧

1
2
3
4
5
6
7
8
# 插入规则到指定行(如将SSH规则插到INPUT链首位)
iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT

# 基于IP阻止访问
iptables -A INPUT -s 10.0.0.5 -j DROP

# 限制SSH连接频率(防暴力破解)
iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/min -j ACCEPT

三,规则持久化

规则默认存储在内存中,重启会丢失,必须保存。

  • RHEL/CentOS:

    1
    2
    3
    dnf install iptables-services
    service iptables save # 保存到 /etc/sysconfig/iptables
    systemctl enable iptables
  • Debian/Ubuntu:

    1
    2
    apt install iptables-persistent
    netfilter-persistent save # 保存到 /etc/iptables/rules.v4

重要提示:配置远程服务器防火墙时,务必先放行SSH端口,再设置默认 DROP 策略,以防将自己锁在服务器外。