iptables 是 Linux 系统中用于配置内核防火墙的一个命令行工具。它允许系统管理员定义规则,这些规则决定了如何处理经过网络接口的数据包。iptables 规则被组织在称为“链”(chains)的结构中,每个链包含一系列的规则。
以下是 iptables 中几种主要的链:
每个链都有一个默认的处理策略,例如 ACCEPT(接受)、DROP(丢弃)或 REJECT(拒绝)。如果数据包匹配了链中的任何规则,那么相应的动作将被执行,否则将应用默认策略。
iptables 规则的工作流程如下:
数据包到达:当一个数据包到达网络接口时,它会被内核的网络栈接收。
链选择:根据数据包的方向(输入、输出或转发)和协议类型,内核会选择相应的链来处理这个数据包。
规则匹配:内核会按照链中规则的顺序逐条检查数据包,直到找到一个匹配的规则。匹配是基于规则的各个字段,如源地址、目的地址、传输协议、端口号等。
执行动作:一旦找到匹配的规则,内核就会执行该规则指定的动作,比如 ACCEPT、DROP、REJECT 或者跳转到另一个链。
默认策略:如果数据包没有匹配任何规则,那么它将被链的默认策略处理。
继续或停止:对于 INPUT 和 FORWARD 链,如果数据包被处理并且没有被 DROP 或 REJECT,它将继续被传递到上层协议栈或者下一个链。对于 OUTPUT 链,如果数据包被处理,它通常会被发送出去。
iptables 规则可以通过 iptables 命令添加、修改和删除。例如,要添加一个规则来阻止所有来自特定 IP 地址的数据包,可以使用以下命令:
iptables -A INPUT -s 192.168.1.100 -j DROP
这里 -A 表示追加规则到链的末尾,-s 指定源 IP 地址,192.168.1.100 是目标 IP 地址,-j DROP 表示匹配的数据包将被丢弃。
请注意,iptables 规则的管理需要谨慎操作,因为错误的配置可能会导致网络连接问题或者安全漏洞。此外,iptables 规则在系统重启后不会自动保存,所以通常需要使用 iptables-save 和 iptables-restore 命令或者相关的服务来持久化规则。