iptables是Linux防火墙工具,通过规则匹配过滤数据包。基本匹配包括协议、源/目的地址、端口;高级匹配支持多协议、连接状态、用户组及接口过滤。规则顺序影响执行效果,可用-I、-D、-L管理。示例展示SSH放行、IP拒绝、网段允许及速率限制。
iptables 是 Linux 系统中配置内核防火墙的经典命令行工具,它允许系统管理员自定义规则,实现对网络数据包的过滤和操作。下面将详细介绍如何使用 iptables 匹配数据包,内容从基础到进阶,逐步深入。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
首先了解最常用的几个匹配条件,这些是日常操作中经常遇到的。
协议匹配:使用 -p 选项指定协议类型。
-p tcp:匹配 TCP 协议的数据包。-p udp:匹配 UDP 协议的数据包。-p icmp:匹配 ICMP 协议的数据包。-p all:匹配所有协议的数据包。源地址匹配:使用 -s 指定来源。
-s :匹配源 IP 地址为指定 IP 的数据包。-s <网络>/<掩码>:匹配源 IP 属于某个网段的数据包。目的地址匹配:使用 -d 指定目标。
-d :匹配目的 IP 地址为指定 IP 的数据包。-d <网络>/<掩码>:匹配目的 IP 属于某个网段的数据包。端口匹配:需要配合 -m 扩展模块,例如 tcp 或 udp。
-m tcp --dport <端口>:匹配目的 TCP 端口。-m udp --dport <端口>:匹配目的 UDP 端口。-m tcp --sport <端口>:匹配源 TCP 端口。-m udp --sport <端口>:匹配源 UDP 端口。基础条件已经够用?下面介绍更灵活的匹配方式,可以应对许多复杂场景。
多协议匹配:虽然 -p 只能指定一个协议,但无法同时使用多个 -p。不过可以通过 -m multiport 一次匹配多个端口,或者采用逻辑方式组合规则。通常的做法是编写两条规则分别匹配不同协议。
-p tcp -p udp:这条写法并不正确,正确的做法是使用 -m multiport 或拆分成两条规则。此处保留原意作为示例。复合条件匹配:借助扩展模块实现更精细的控制。
-m multiport --dports <端口1>,<端口2>:匹配目的端口为端口1或端口2的数据包。-m conntrack --ctstate ESTABLISHED,RELATED:匹配已建立的连接或相关连接的数据包,在状态防火墙中非常实用。用户匹配:通过 -m owner 根据进程的用户或组进行过滤。
-m owner --uid-owner <用户ID>:匹配属于指定用户 ID 的数据包。-m owner --gid-owner <组ID>:匹配属于指定组 ID 的数据包。接口匹配:指定数据包进出的网络接口。
-i <接口名>:匹配从某个接口进入的数据包。-o <接口名>:匹配从某个接口离开的数据包。理论讲解之后,通过实际例子展示效果。
允许所有进入的 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 系统构建一道可靠的网络防护屏障。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述