菜鸟科技网

iptables命令如何高效管理Linux防火墙规则?

Linux的iptables是Linux内核中集成的防火墙工具,它通过Netfilter框架实现数据包的过滤、网络地址转换(NAT)和端口转发等功能,作为命令行工具,iptables通过规则表(table)和链(chain)的组合来管理网络流量,其灵活性和强大的功能使其成为Linux系统安全管理的核心组件之一。

iptables命令如何高效管理Linux防火墙规则?-图1
(图片来源网络,侵删)

iptables的基本结构

iptables由四个表(tables)和五个链(chains)组成,每个表负责不同的功能,而链则定义了规则应用的位置。

表(Tables)

  1. filter表:默认表,用于数据包的过滤,是最常用的表,包含三个链:INPUT(进入本机的数据包)、OUTPUT(从本机发出的数据包)和FORWARD(转发数据包)。
  2. nat表:用于网络地址转换,处理数据包的源地址和目标地址修改,包含三个链:PREROUTING(路由前修改目标地址)、POSTROUTING(路由后修改源地址)和OUTPUT(修改本机发出的数据包的目标地址)。
  3. mangle表:用于修改数据包的QoS(服务质量)标记,如TOS(服务类型)字段,包含PREROUTING、INPUT、FORWARD、OUTPUT和POSTROUTING五个链。
  4. raw表:用于跟踪数据包,通常用于禁用连接跟踪,包含PREROUTING和OUTPUT两个链。

链(Chains)

链是规则的容器,数据包经过链时会按顺序匹配规则,常见的链包括:

  • INPUT:处理目标为本地地址的数据包。
  • OUTPUT:处理由本地进程产生的数据包。
  • FORWARD:处理经过本机但不进入本机的数据包。
  • PREROUTING:在路由决策前修改数据包。
  • POSTROUTING:在路由决策后修改数据包。

iptables命令的基本语法

iptables命令的基本语法如下:

iptables [-t table] [command] [chain] [rule-specification] [options]
  • -t table:指定表名,默认为filter。
  • command:操作命令,如-A(追加规则)、-D(删除规则)、-I(插入规则)、-L(列出规则)、-F(清空规则)等。
  • chain:指定链名。
  • rule-specification:规则匹配条件和动作。
  • options:其他选项,如-p(协议)、-s(源地址)、-d(目标地址)、--sport(源端口)、--dport(目标端口)等。

常用命令和示例

查看规则

iptables -L -n -v
  • -L:列出所有规则。
  • -n:以数字形式显示地址和端口,避免DNS解析。
  • -v:显示详细信息,如数据包和字节数。

添加规则

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  • -A INPUT:在INPUT链末尾添加规则。
  • -p tcp:匹配TCP协议。
  • --dport 22:匹配目标端口为22(SSH)。
  • -j ACCEPT:动作是允许数据包通过。

插入规则

iptables -I INPUT 1 -p tcp --dport 80 -j DROP
  • -I INPUT 1:在INPUT链的开头插入规则。

删除规则

iptables -D INPUT -p tcp --dport 22 -j ACCEPT
  • -D:删除匹配的规则。

设置默认策略

iptables -P INPUT DROP
  • -P:设置默认策略,DROP表示拒绝所有数据包。

端口转发(NAT示例)

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
  • 将8080端口的流量转发到80端口。

规则匹配条件

iptables支持丰富的匹配条件,以下是常见条件的说明:

iptables命令如何高效管理Linux防火墙规则?-图2
(图片来源网络,侵删)
匹配条件 说明 示例
-p 匹配协议 -p tcp
-s 匹配源地址 -s 192.168.1.0/24
-d 匹配目标地址 -d 10.0.0.1
--sport 匹配源端口 --sport 1024:65535
--dport 匹配目标端口 --dport 22
-i 匹配入站接口 -i eth0
-o 匹配出站接口 -o eth1
-m 扩展匹配模块 -m state --state ESTABLISHED

动作(Target)

规则匹配后的动作,常见动作包括:

  • ACCEPT:允许数据包通过。
  • DROP:丢弃数据包,不返回任何响应。
  • REJECT:丢弃数据包并返回错误信息。
  • LOG:记录日志。
  • MASQUERADE:源地址伪装(NAT)。
  • REDIRECT:端口重定向。

高级功能

连接状态匹配

使用state模块可以匹配连接状态:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  • ESTABLISHED:已建立的连接。
  • RELATED:相关联的连接(如FTP数据连接)。

限制连接频率

iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 5 -j DROP
  • 限制SSH连接数超过5个时拒绝。

时间匹配

iptables -A INPUT -p tcp --dport 80 -m time --timestart 09:00 --timestop 18:00 -j ACCEPT
  • 仅允许工作日的9:00-18:00访问80端口。

规则保存与恢复

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

  • CentOS/RHEL
    service iptables save
  • Ubuntu/Debian
    iptables-save > /etc/iptables/rules.v4
    iptables-restore < /etc/iptables/rules.v4

相关问答FAQs

问题1:如何允许特定IP访问本机的SSH端口?
解答:可以使用以下命令允许特定IP(如192.168.1.100)访问SSH端口(22),并拒绝其他IP:

iptables命令如何高效管理Linux防火墙规则?-图3
(图片来源网络,侵删)
iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

问题2:如何配置iptables实现端口转发,将本机的8080端口映射到80端口?
解答:使用nat表和PREROUTING链实现端口转发:

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80

需要确保内核开启了IP转发:

echo 1 > /proc/sys/net/ipv4/ip_forward
分享:
扫描分享到社交APP
上一篇
下一篇