在 CentOS 系统中,iptables
是一个用于配置 Linux 内核防火墙(netfilter)规则的工具。它允许系统管理员定义表(tables)、链(chains)和规则(rules)来控制网络数据包的流向和处理。以下是如何使用 iptables
管理链和表的基本指南:
iptables
包含几种不同的表,每个表包含一组特定的链。主要的表有:
filter
:默认表,用于控制数据包的访问控制。nat
:用于网络地址转换(NAT)。mangle
:用于特殊的数据包修改。raw
:用于配置免除连接跟踪的规则。每个表包含预定义的链,这些链对应于数据包处理的不同点:
INPUT
:处理进入本机的数据包。FORWARD
:处理经过本机转发的数据包。OUTPUT
:处理从本机发出的数据包。PREROUTING
:用于目标地址转换(DNAT)的规则,在路由决策之前处理数据包。POSTROUTING
:用于源地址转换(SNAT)的规则,在路由决策之后处理数据包。规则定义了对特定数据包应该执行的操作,如接受(ACCEPT)、拒绝(DROP)、丢弃(REJECT)等。
以下是一些基本的 iptables
命令,用于管理链和表:
查看所有规则:
sudo iptables -L
查看特定表的所有规则:
sudo iptables -t nat -L
查看特定链的所有规则:
sudo iptables -L INPUT
添加规则:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
这条命令会在 INPUT
链的末尾添加一条规则,允许所有进入的 TCP 流量到端口 80(通常是 HTTP)。
插入规则到链的顶部:
sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
这条命令会在 INPUT
链的顶部插入一条规则,允许所有进入的 SSH 流量。
删除规则:
sudo iptables -D INPUT -p tcp --dport 80 -j ACCEPT
这条命令会删除 INPUT
链中匹配的规则。
清空所有链:
sudo iptables -F
设置默认策略:
sudo iptables -P INPUT DROP
这条命令会将 INPUT
链的默认策略设置为 DROP,即拒绝所有未明确允许的进入流量。
iptables
规则在系统重启后不会自动保存。要使规则持久化,可以使用 service
或 systemctl
命令来停止和启动 iptables
服务,或者使用 iptables-save
和 iptables-restore
命令来保存和恢复规则。
例如,保存规则到文件:
sudo iptables-save > /etc/sysconfig/iptables
恢复规则:
sudo iptables-restore < /etc/sysconfig/iptables
请注意,CentOS 7 及更高版本默认使用 firewalld
作为防火墙管理工具,而不是传统的 iptables
。如果你使用的是 firewalld
,则需要使用 firewall-cmd
命令来管理防火墙规则。