本帖最后由 yeslab官方 于 2017-7-5 18:01 编辑
扩展模块介绍 上次聊了关于iptables匹配的条件的用法,其中包括一些基本扩展匹配模块的使用,其实扩展匹配模块还有很多这次我们继续聊聊这些扩展模块。 首先我们先来看看iptables都有哪些扩展模块 使用ls /lib64/xtables命令先来看下这些模块长什么样 
模块还真不少,找到上次介绍的那两个扩展模块了吗?但是别希望我会每个都解释一遍,如果想要了解详细的细节可以使用另一个命令man iptables查看完整的iptables使用文档,接下来我们只聊聊一些常用的扩展模块。 iprange扩展模块 之前我们已经说过,在不使用任何扩展模块的情况下,使用-s选项或者-d选项可以匹配报文的源地址和目标地址,而且在指定IP地址时可以同时指定多个IP地址,每个IP地址用“逗号”隔开,但是这两个选项并不能一次性的指定一个连续的地址段,如果我们想指定连续的地址段那我们就需要使用iprange这个扩展模块。 iptables -I INPUT -m iprange --src-range 10.254.1.20-10.254.1.35 -j DROP 
iprange扩展模块中两个扩展匹配条件--src-range和--dst-range 这个两个选项分别用于匹配报文的源地址和目标地址所在的地址范围,这个两个扩展匹配项也支持“!”取反的操作。 time扩展模块 我们可以通过time扩展模块根据时间段匹配报文,有点类似于上网行为管理的功能。 iptables -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 18:00:00- j REJECT iptables -I OUTPUT -p tcp --dport 443 -m time --timestart 09:00:00 --timestop 18:00:00 -j REJECT 

(太长了命令和结果分开截图) 这条命令的意思是每天早上9点到下午18点不能上网,80和443端口就不用多说了吧。这个规则看着就感觉“残忍”吧,不过这条规则是暂时是做在OUTPUT链上的,只是作为本机防火墙的规则,就影响到这台机器而已。 其中-m time表示使用time模块,--timestart选项用于指定起始时间,--timestop选项用于指定结束时间。 time模块还添加其他选项比如--weekdays iptables -I OUTPUT -p tcp --dport 80 -m time --weekdays 6,7 -j REJECT 这条命令的意思是周末不能上网(呵呵) --weekdays选项可以指定每个星期的具体哪一天,可以同时指定多个用“逗号”隔开,也可以 使用英文缩写“Mon,Tue,Wed,Thu,Fri,Sat,Sun” 也可以把上面两个选项结合起来使用: iptables -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 18:00:00 --weekdays 6,7 -j REJECT 指定每周六周日的上午9点到下午18点不能上网(呵呵,这台机器到底干了些什么) 还可以使用--monthdays选项具体指定每个月的哪一天 iptables -I OUTPUT -p tcp --dport 80 -m time --monthdays 1,10,20 -j REJECT 这个意思就是每个月的1号、10号和20号不能上网。 connlimit扩展模块 使用connlimit扩展模块可以限制每个IP地址同时连接到服务器的连接数。 iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT 
表示每个IP地址最多只能占用两个ssh远程连接,其中-m connlimit 指定使用的connlimit扩展模块,“--connlimit-above 2”表示限制每个IP地址的链接上限为2,再配合协议和端口,最后一起实现了限制单个地址ssh并发链接上限。 其实--connlimit-above默认表示限制每个IP的连接数,其实我们还可以配合--connlimit-mask选项去限制某类网段的链接数 iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 --connlimit-mask 24 -j REJECT mask表示子网掩码,所以这句命令的意思就是一个最多包含254个IP地址的网络中,同时最多只能有2个SSH客户端连接到当前服务器。看来如果某人开了两个SSH连接那同网段其他人就都无法使用了。 归纳一下就很清楚了,在不使用--connlimit-mask时,连接数的限制是针对“每个IP”的,而当使用了--connlimit-mask时,那就可以针对“某个网段”进行连接数限制了。 limit扩展模块 刚才认识了connlimit模块,接下来聊聊limit模块,connlimit模块是对连接数量进行限制,limit模块是对报文速率进行限制。打个比方connlimit好比是高速上的车道,4车道还是8车道就代表同时能并行几辆车,limit就好比车速的限制,最高不能过120km/s。 当然对于limit而言我们可以以秒为单位进行限制,也可以以分钟、小时、天作为单位进行限制,先来看一下命令吧。 iptables -I INPUT -p icmp -m limit --limit 10/minute -j ACCEPT 
这句命令表示每分钟最多放行10个包,就相当于每6秒钟放行一个包。其中-p icmp表示匹配icmp协议,-m limit表示使用limit模块,--limit 10/minute表示10个包每分钟。 就如前面所说--limit选项还可以使用/second每秒,/hour每小时,/day每天。 string扩展模块 使用string扩展模块可以指定需要匹配的字符串,如果报文中包含对应的字符串则被匹配,也就是说内容匹配。 我们在之前的测试机上启动了httpd服务(web服务),然后加载了两个页面test.html和test1.html,里面的内容分别是“OOXX”和“Hello World”。 iptables -I INPUT -m string --algo bm --string “OOXX” -j REJECT 
如上图前面两命令所示,在没有制定规则前OOXX内容页面是可以访问到的,但在添加了规则之后OOXX页面就无法显示了。 解释下这条命令,-m string表示使用string扩展模块,--algo bm表示使用bm算法去匹配指定的字符串,--string “OOXX”表示我们需要匹配的字符串内容。 --algo 是指定匹配算法,在string模块中可选的算法有bm和kmp,算法是必选项,我们不用纠结这些算法的实现和意思,只要选一个用就可以。
相关阅读:
Linux安全——iptables(一) Linux安全——iptalbes(二) Linux安全——iptalbes(三) Linux安全——iptalbes(四) 联系我们 电话:400-004-8626 QQ:800064282 官网:www.yeslab.net
|