iptables 是 Linux 系统中用于配置内核防火墙的一个命令行工具。它允许系统管理员定义规则,以决定如何处理经过网络接口的数据包。iptables 规则可以基于多种条件进行匹配,以下是一些常见的匹配条件:
协议(Protocol):
-p tcp:匹配 TCP 协议的数据包。-p udp:匹配 UDP 协议的数据包。-p icmp:匹配 ICMP 协议的数据包。-p esp:匹配 ESP 协议的数据包。-p ah:匹配 AH 协议的数据包。-p sctp:匹配 SCTP 协议的数据包。-p gre:匹配 GRE 协议的数据包。-p ipv6:匹配 IPv6 协议的数据包。-p all:匹配所有协议的数据包。源地址(Source Address):
-s <IP地址> 或 -s<网络>/<掩码>:匹配来自特定 IP 地址或网络的数据包。目的地址(Destination Address):
-d <IP地址> 或 -d<网络>/<掩码>:匹配发往特定 IP 地址或网络的数据包。输入/输出接口(Inbound/Outbound Interface):
-i <网络接口>:匹配进入指定网络接口的数据包。-o <网络接口>:匹配从指定网络接口发出的数据包。传输方向(Direction):
INPUT:匹配目标地址为本地主机的数据包。OUTPUT:匹配源地址为本地主机的数据包。FORWARD:匹配经过本地主机转发(既不是源也不是目标)的数据包。端口(Port):
--dport <端口号>:匹配目的端口为目标端口号的数据包。--sport <端口号>:匹配源端口为源端口号的数据包。--dport <端口范围>:匹配目的端口在指定范围内的数据包。--sport <端口范围>:匹配源端口在指定范围内的数据包。接口类型(Interface Type):
--physdev-in <物理设备>:匹配通过指定物理设备进入的数据包。--physdev-out <物理设备>:匹配通过指定物理设备发出的数据包。连接状态(Connection State):
-m conntrack --ctstate <状态>:匹配特定连接状态的数据包,如 NEW、ESTABLISHED、RELATED 和 INVALID。用户(User):
-m owner --uid-owner <用户ID>:匹配由特定用户拥有的进程产生的数据包。-m owner --gid-owner <组ID>:匹配由特定组拥有的进程产生的数据包。限制速率(Limit):
-m limit --limit <速率>:限制匹配规则的规则数量,例如每分钟最多允许 5 个数据包。这些匹配条件可以通过 -m 选项与相应的模块一起使用,以实现更复杂的匹配逻辑。例如,要匹配来自特定 IP 地址并且目的端口为 80 的 TCP 数据包,可以使用以下命令:
iptables -A INPUT -p tcp -s <IP地址> --dport 80 -j ACCEPT
请注意,iptables 规则的顺序很重要,因为它们是按顺序处理的。一旦匹配到一个规则,就会执行该规则指定的动作,而不会继续检查后续规则。因此,通常需要将最具体的规则放在前面,将更通用的规则放在后面。