iptables
是 Linux 系统中用于配置内核防火墙的一个命令行工具。它允许系统管理员定义规则,这些规则决定了如何处理经过网络接口的数据包。iptables
规则被组织成不同的表(table),每个表包含几个预定义的链(chain),每个链包含一系列的规则。
以下是 iptables
中常用的表和链:
-
表(table):
filter
: 默认表,用于控制数据包的访问控制。nat
: 用于网络地址转换(NAT)。mangle
: 用于特殊的数据包修改。raw
: 用于配置豁免连接跟踪的规则。
-
链(chain):
INPUT
: 处理进入本机的数据包。FORWARD
: 处理通过本机转发的数据包。OUTPUT
: 处理从本机发出的数据包。PREROUTING
: 在路由决策之前处理数据包(主要用于 DNAT)。POSTROUTING
: 在路由决策之后处理数据包(主要用于 SNAT)。
使用 iptables
进行过滤的基本步骤如下:
-
选择表:通常情况下,我们会使用
filter
表,因为它是默认表,专门用于过滤。 -
选择链:根据需要处理的流量类型选择合适的链。例如,如果你想过滤进入本机的数据包,你会选择
INPUT
链。 -
添加规则:使用
iptables
命令添加规则。每条规则都会匹配特定的数据包特征,并指定一个动作来处理匹配的数据包。
下面是一些基本的 iptables
命令示例:
-
允许所有进入本机的 SSH 连接:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
-
阻止所有进入本机的 ICMP 请求(ping):
iptables -A INPUT -p icmp -j DROP
-
允许所有已经建立的连接和相关的数据包通过:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-
阻止来自特定 IP 地址的所有流量:
iptables -A INPUT -s 192.168.1.100 -j DROP
-
保存规则:在某些 Linux 发行版中,你需要保存
iptables
规则以确保它们在重启后仍然有效。iptables-save > /etc/iptables/rules.v4
请注意,iptables
命令的语法和选项可能会根据不同的 Linux 发行版和内核版本有所不同。在使用 iptables
时,建议查阅你所使用的系统的手册页(man page)以获取最准确的信息。