如何配置Linux防火墙规则 iptables基础语法指南

iptables 是 linux 中用于配置防火墙规则的经典工具,其核心结构为“表→链→规则”,常用表包括 Filter、nat、mangle 和 raw,每个表包含 input、output、forward 等链以处理不同路径的数据包;基本语法为 iptables [-t table] command [chain] [匹配条件] [-j 动作],其中常用命令有 -a、-i、-l、-f、-p,匹配条件包括 -p、-s、-d、–dport 等,动作为 accept、drop、reject、log;典型配置包括设置默认策略、允许回环接口、放行已建立连接、开放 ssh/http/https 端口、限制特定 ip 访问、配置 dnat 和 masquerade 实现端口转发与共享上网;规则可通过 service iptables save 或 iptables-save 命令保存,使用 iptables-restore 恢复;需注意规则顺序匹配特性,避免误锁,建议结合 conntrack 状态模块和 ipset 提升安全性与性能,最终通过理解表链结构与实际应用掌握 iptables 的网络控制能力。

如何配置Linux防火墙规则 iptables基础语法指南

配置 linux 防火墙规则时,

iptables

是一个经典且功能强大的工具。虽然现代系统逐渐转向

nftables

,但

iptables

仍在大量环境中使用。掌握其基础语法,有助于管理网络流量、提升系统安全性。以下是

iptables

的基础语法和常用配置方法。


一、iptables 的基本结构

iptables

命令基于“表(tables)→链(chains)→规则(rules)”的结构:

  • 表(tables):定义防火墙的功能类别,常见有:

    • filter

      :默认表,用于包过滤(最常用)

    • nat

      :网络地址转换,用于修改源/目标IP或端口

    • mangle

      :修改数据包头部信息(较少用)

    • raw

      :用于配置连接追踪的例外

  • 链(chains):每个表包含若干预定义的链,用于处理特定时机的数据包:

    • INPUT

      :进入本机的数据包

    • OUTPUT

      :从本机发出的数据包

    • FORWARD

      :经过本机转发的数据包

    • PREROUTING

      :数据包刚到达,路由前(常用于 nat)

    • POSTROUTING

      :数据包即将发出,路由后(常用于 nat)


二、基本语法格式

iptables [-t table] COMMAND [chain] [匹配条件] [-j 动作]

常见命令(COMMAND):

  • -A

    :追加规则到链末尾

  • -I

    :插入规则(可指定位置)

  • -D

    :删除规则

  • -L

    :列出规则

  • -F

    :清空规则

  • -P

    :设置链的默认策略

常见匹配条件:

  • -P

    :指定协议(如 tcp、udp、icmp)

  • -s

    :源IP地址

  • -D

    :目标IP地址

  • --sport

    :源端口

  • --dport

    :目标端口

  • -I

    :输入接口(如 eth0)

  • -o

    :输出接口

常见动作(-j target):

  • ACCEPT

    :允许通过

  • DROP

    :丢弃,不回复

  • REJECT

    :拒绝,并返回错误信息

  • LOG

    :记录日志(通常与其他规则配合)


三、常用配置示例

1. 查看当前规则

iptables -L -n -v
  • -L

    :列出规则

  • -n

    :以数字形式显示IP和端口

  • -v

    :显示详细信息

2. 设置默认策略

iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT

建议先设置 OUTPUT 为 ACCEPT,避免断网。

3. 允许本地回环通信

iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT

4. 允许已建立的连接通过

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
conntrack

模块用于跟踪连接状态,这是允许响应包返回的关键。

5. 开放常用服务端口

# 允许SSH(端口22) iptables -A INPUT -p tcp --dport 22 -j ACCEPT  # 允许HTTP(80)和HTTPS(443) iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT

6. 限制来源IP访问

# 只允许特定IP访问SSH iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j DROP

注意规则顺序:先允许,再拒绝。

7. 配置端口转发(NAT)

# 启用IP转发 echo 1 > /proc/sys/net/ipv4/ip_forward  # 将外部访问本机8080端口转发到内网192.168.1.10:80 iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80  # 源地址转换,让内网主机能通过本机上网 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE

四、保存和恢复规则

不同发行版保存方式不同:

  • centos/RHEL 6 或使用 iptables-services

    service iptables save
  • ubuntu/debian

    iptables-save > /etc/iptables/rules.v4

    可配合

    iptables-restore < /etc/iptables/rules.v4

    恢复。

  • 手动保存

    iptables-save > ~/firewall.rules iptables-restore < ~/firewall.rules

五、注意事项

  • 规则按顺序匹配,一旦匹配就执行动作,后续规则不再检查。
  • 使用
    -I INPUT 1

    可在第一条插入规则,避免把自己锁在外面。

  • 修改远程服务器防火墙时,建议先测试规则,或设置定时清空规则的备用命令(如
    sleep 60; iptables -F

    )。

  • 复杂环境建议配合
    ipset

    提高效率(如封禁大量IP)。


基本上就这些。掌握

iptables

的核心在于理解“表-链-规则”的逻辑,以及状态追踪(conntrack)和NAT的应用。虽然语法略显繁琐,但足够灵活,适合深入控制网络流量。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享