iptables 提供了丰富的扩展模块(通过 -m 参数指定),用于实现更精细化的流量控制。以下是常用的模块及其典型应用场景:
1. 基础网络匹配模块
tcp / udp / icmp
- 功能:匹配协议特定字段(如端口、ICMP 类型)。
- 示例:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许 SSH iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT # 允许 ping 请求
multiport
- 功能:匹配多个端口(最多 15 个),减少规则数量。
- 示例:
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
2. 连接跟踪模块
state / conntrack
- 功能:基于连接状态匹配(如
NEW,ESTABLISHED,RELATED)。 - 示例:
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
在 iptables 规则中,ESTABLISHED 和 RELATED 是连接跟踪(conntrack)模块提供的两种连接状态,用于匹配特定类型的网络连接。它们的适用场景如下:
2.1. ESTABLISHED 状态
含义
匹配已建立的连接,即双向通信已经建立的连接(例如 TCP 握手已完成,或 UDP/ICMP 已有双向交互)。
适用场景
- 允许回包:当内网主机主动访问外网服务(如访问网站、下载文件)时,外网返回的响应数据包需要放行。
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT - 保持长连接:对 SSH、数据库连接等长会话,允许后续通信。
- 减少规则冗余:无需为每个服务的返回流量单独写规则,一条
ESTABLISHED规则即可覆盖。
示例
假设主机主动访问 example.com:80:
- 主机发送
SYN→ 外网服务器(属于OUTPUT链)。 - 服务器返回
SYN+ACK→ 主机(属于INPUT链)。
此时返回的SYN+ACK会被ESTABLISHED规则匹配并放行。
2.2. RELATED 状态
含义
匹配与已有连接相关联的新连接。这些新连接可能是由主连接派生的(如 FTP 的数据连接、ICMP 错误消息、DNS 辅助查询等)。
适用场景
- FTP 被动模式:FTP 控制连接(端口 21)会动态协商数据连接端口,
RELATED可自动放行这些临时端口。iptables -A INPUT -m state --state RELATED -j ACCEPT - ICMP 错误消息:如
TCP RST或ICMP Destination Unreachable响应。 - DNS 动态端口:部分协议(如 SIP)可能临时打开新端口传输数据。
示例
以 FTP 被动模式为例:
- 客户端连接 FTP 控制端口 21(主连接)。
- 服务器告知客户端:“数据通道在端口 30000”。
- 客户端连接端口 30000 时,
RELATED状态会识别此连接与主连接关联并放行。
为什么需要同时使用?
ESTABLISHED确保已有连接的持续通信。RELATED处理动态协议(如 FTP、SIP)的衍生连接。
典型的安全策略会同时允许两者:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
注意事项
- 依赖
conntrack模块:需内核支持(默认已加载)。 - UDP/ICMP 也适用:虽然无握手,但内核会跟踪双向流量视为
ESTABLISHED。 - 性能优化:将
ESTABLISHED,RELATED规则放在规则集顶部,可减少后续规则匹配次数。
通过合理使用这两种状态,可以大幅简化防火墙规则,同时确保合法流量的正常通行。
3. IP/网络层匹配模块
iprange
- 功能:匹配 IP 地址范围。
- 示例:
iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP
geoip(需额外安装)
- 功能:根据 IP 地理位置过滤。
- 示例:
iptables -A INPUT -m geoip --src-cc CN -j ACCEPT # 允许中国 IP
4. 数据包特征匹配模块
limit
- 功能:限制匹配速率(防洪水攻击)。
- 示例:
iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 3/sec -j ACCEPT
hashlimit
- 功能:更灵活的速率限制(支持按 IP/端口分组)。
- 示例:
iptables -A INPUT -p tcp --dport 80 -m hashlimit --hashlimit-upto 100/sec --hashlimit-burst 50 --hashlimit-mode srcip -j ACCEPT
string
- 功能:匹配数据包中的字符串(如 HTTP 请求)。
- 示例:
iptables -A OUTPUT -p tcp --dport 80 -m string --algo bm --string "blockme" -j DROP
time
- 功能:按时间范围匹配(如上班时间禁止访问某些网站)。
- 示例:
iptables -A OUTPUT -p tcp --dport 80 -m time --timestart 09:00 --timestop 18:00 --weekdays Mon-Fri -j REJECT
5. 高级流量控制模块
connlimit
- 功能:限制单个 IP 的连接数(防 CC 攻击)。
- 示例:
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP
recent
- 功能:动态维护 IP 列表(防暴力破解)。
- 示例:
iptables -A INPUT -p tcp --dport 22 -m recent --name ssh --update --seconds 60 --hitcount 3 -j DROP
owner
- 功能:匹配进程所有者(仅限
OUTPUT链)。 - 示例:
iptables -A OUTPUT -p tcp --dport 80 -m owner --uid-owner nginx -j ACCEPT
6. 特殊用途模块
mark
- 功能:匹配数据包标记(结合
iproute2实现 QoS)。 - 示例:
iptables -A FORWARD -m mark --mark 0x1 -j DROP
tos
- 功能:匹配 IP 头部的 TOS 字段(区分服务类型)。
- 示例:
iptables -A INPUT -m tos --tos Minimize-Delay -j PRIORITY_QUEUE
length
- 功能:匹配数据包长度。
- 示例:
iptables -A INPUT -p tcp -m length --length 100:500 -j LOG
使用技巧
- 模块依赖:部分模块需内核支持(如
geoip需安装xt_geoip)。 - 规则顺序:将高频匹配规则(如
ESTABLISHED)放在前面提升性能。 - 调试工具:结合
iptables -L -v -n和conntrack -L查看匹配情况。
通过灵活组合这些模块,可以实现从基础防火墙到复杂流量管理的各种功能。iptables 提供了丰富的扩展模块(通过 -m 参数指定),用于实现更精细化的流量控制。以下是常用的模块及其典型应用场景:
1. 基础网络匹配模块
tcp / udp / icmp
- 功能:匹配协议特定字段(如端口、ICMP 类型)。
- 示例:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许 SSH iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT # 允许 ping 请求
multiport
- 功能:匹配多个端口(最多 15 个),减少规则数量。
- 示例:
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
2. 连接跟踪模块
state / conntrack
- 功能:基于连接状态匹配(如
NEW,ESTABLISHED,RELATED)。 - 示例:
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
3. IP/网络层匹配模块
iprange
- 功能:匹配 IP 地址范围。
- 示例:
iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP
geoip(需额外安装)
- 功能:根据 IP 地理位置过滤。
- 示例:
iptables -A INPUT -m geoip --src-cc CN -j ACCEPT # 允许中国 IP
4. 数据包特征匹配模块
limit
- 功能:限制匹配速率(防洪水攻击)。
- 示例:
iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 3/sec -j ACCEPT
hashlimit
- 功能:更灵活的速率限制(支持按 IP/端口分组)。
- 示例:
iptables -A INPUT -p tcp --dport 80 -m hashlimit --hashlimit-upto 100/sec --hashlimit-burst 50 --hashlimit-mode srcip -j ACCEPT
string
- 功能:匹配数据包中的字符串(如 HTTP 请求)。
- 示例:
iptables -A OUTPUT -p tcp --dport 80 -m string --algo bm --string "blockme" -j DROP
time
- 功能:按时间范围匹配(如上班时间禁止访问某些网站)。
- 示例:
iptables -A OUTPUT -p tcp --dport 80 -m time --timestart 09:00 --timestop 18:00 --weekdays Mon-Fri -j REJECT
5. 高级流量控制模块
connlimit
- 功能:限制单个 IP 的连接数(防 CC 攻击)。
- 示例:
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP
recent
- 功能:动态维护 IP 列表(防暴力破解)。
- 示例:
iptables -A INPUT -p tcp --dport 22 -m recent --name ssh --update --seconds 60 --hitcount 3 -j DROP
owner
- 功能:匹配进程所有者(仅限
OUTPUT链)。 - 示例:
iptables -A OUTPUT -p tcp --dport 80 -m owner --uid-owner nginx -j ACCEPT
6. 特殊用途模块
mark
- 功能:匹配数据包标记(结合
iproute2实现 QoS)。 - 示例:
iptables -A FORWARD -m mark --mark 0x1 -j DROP
tos
- 功能:匹配 IP 头部的 TOS 字段(区分服务类型)。
- 示例:
iptables -A INPUT -m tos --tos Minimize-Delay -j PRIORITY_QUEUE
length
- 功能:匹配数据包长度。
- 示例:
iptables -A INPUT -p tcp -m length --length 100:500 -j LOG
使用技巧
- 模块依赖:部分模块需内核支持(如
geoip需安装xt_geoip)。 - 规则顺序:将高频匹配规则(如
ESTABLISHED)放在前面提升性能。 - 调试工具:结合
iptables -L -v -n和conntrack -L查看匹配情况。
通过灵活组合这些模块,可以实现从基础防火墙到复杂流量管理的各种功能。
PS:本文部分内容出自腾讯元宝。
1228

被折叠的 条评论
为什么被折叠?



