背景
在前面的 iptables 命令中,我们有使用到 -s 来匹配源地址,而且在指定 IP 地址时,可以指定多个地址或者一个网段,这可以用于明确源地址的情况下使用。但是当我们有其它需求,比如指定一个连续的 IP 地址范围、指定多个端口、对每个客户端进行连接数限制、对每个客户端进行速度限制 等等,这些需求就会使用到 iptables 的扩展模块了。其实可以把扩展模块看成插件的概念,iptables 中使用 -m 选项指定扩模块。
常用扩展模块
tcp:端口匹配,可以匹配tcp连接中的标志位multiport:指定多个非连续端口,支持tcp、udp协议iprange:连续IP地址范围string:匹配数据包中的字符串time:根据指定时间范围来进行匹配connlimit:客户端到服务端的连接数限制limit:限制报文的速率udp:udp协议扩展icmp:icmp协议扩展,多用于ping命令state:对连接状态进行追踪
举例
上面简单介绍了一些常用的扩展模块,下面选取几个典型的模块来详细介绍(其它的模块可以参考这篇文章)。
tcp模块
iptables -t filter -I INPUT -p tcp -m tcp --dport 3306 -s 172.16.0.0/16 -j ACCEPT
iptables -t filter -A INPUT -p tcp -m tcp --dport 3306 -j DROP
-m:指定扩展模块--dport:指定目的端口。端口格式可以为80:3306(表示80端口到3306端口)、10050:(表示10050端口到65535带你看)
在插入
DROP动作的时候千万要注意,一定用-A追加插入,如果用-I,会把自己也挡在外面的
这里使用的 mysql 3306 端口做测试,插入上面2条规则之后,就只有 172.16.0.0/16 网段才能访问本机的mysql 服务了。

multiport模块
iptables -t filter -I INPUT -p tcp -m multiport --dports 3306,10050,10051,22 -s 172.16.0.0/16 -j ACCEPT
iptables -t filter -A INPUT -p tcp -m multiport --dports 3306,10050,10051,22 -j DROP
-m:指定扩展模块--dports:指定端口。可以为非连续,用逗号分割
这里对 3306,10050,10051,22 端口做了限制,只允许 172.16.0.0/16 网段的地址访问。

这里
iptables会把端口对应的服务名显示出来
connlimit模块
iptables -t filter -I INPUT -p tcp --dport 3306 -m connlimit --connlimit-above 100 -j REJECT
-m:指定模块--connlimit-above:指定连接数量上限,这里为100--connlimit-mask:指定同一个网段的连接数上限,可以和--connlimit-above一起使用
对连接 3306 的每个客户端限制连接数上限为 100 ,如果超过 100 ,则拒绝连接

小结
我们例举了3个模块的使用方法,分别是:
tcp:tcp扩展模块。--dport指定目的端口;--sport指定源端口multiport:端口扩展模块。--dports指定目的端口,可以多个不连续;--sports指定源端口,可以多个不连续connlimit:连接数限制模块。--connlimit-above指定上限;--connlimit-mask指定网段连接数上限
本文深入解析iptables中的扩展模块,如tcp、multiport和connlimit,详细介绍如何使用这些模块实现端口匹配、连续IP地址范围匹配及连接数限制等功能。
1239

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



