iptables 是 Linux 系统中用于配置内核防火墙的一个命令行工具。它允许系统管理员定义规则来过滤和操作数据包。以下是如何使用 iptables 来匹配数据包的一些基本方法:
协议匹配:
-p tcp:匹配 TCP 协议的数据包。-p udp:匹配 UDP 协议的数据包。-p icmp:匹配 ICMP 协议的数据包。-p all:匹配所有协议的数据包。源地址匹配:
-s <IP>:匹配源 IP 地址为 <IP> 的数据包。-s<网络>/<掩码>:匹配源 IP 地址属于指定网络的数据包。目的地址匹配:
-d <IP>:匹配目的 IP 地址为 <IP> 的数据包。-d<网络>/<掩码>:匹配目的 IP 地址属于指定网络的数据包。端口匹配:
-m tcp --dport <端口>:匹配目的 TCP 端口为 <端口> 的数据包。-m udp --dport <端口>:匹配目的 UDP 端口为 <端口> 的数据包。-m tcp --sport <端口>:匹配源 TCP 端口为 <端口> 的数据包。-m udp --sport <端口>:匹配源 UDP 端口为 <端口> 的数据包。多协议匹配:
-p tcp -p udp:匹配 TCP 或 UDP 协议的数据包。复合条件匹配:
-m multiport --dports <端口1>,<端口2>:匹配目的端口为 <端口1> 或 <端口2> 的数据包。-m conntrack --ctstate ESTABLISHED,RELATED:匹配已建立的连接或相关连接的数据包。用户匹配:
-m owner --uid-owner <用户ID>:匹配属于指定用户 ID 的数据包。-m owner --gid-owner <组ID>:匹配属于指定组 ID 的数据包。接口匹配:
-i <接口名>:匹配进入指定网络接口的数据包。-o <接口名>:匹配离开指定网络接口的数据包。以下是一些示例 iptables 规则,展示了如何使用上述匹配条件:
允许所有进入的 SSH 连接:
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
拒绝所有来自特定 IP 地址的连接:
iptables -A INPUT -s 192.168.1.100 -j DROP
允许特定网络的所有流量:
iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT
限制特定端口的访问速率:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 5/min -j ACCEPT
iptables 规则是按顺序应用的,因此规则的顺序非常重要。-I 选项可以在链的开头插入规则。-D 选项可以删除规则。-L 选项可以列出当前的所有规则。通过这些匹配条件和示例规则,你可以灵活地配置 iptables 来保护你的 Linux 系统免受不必要的网络攻击。