一叶知秋.

业精于勤,荒于嬉;行成于思,毁于随。

5.iptables的匹配条件(二)

iprange模块

指定一段连续的IP地址范围,可以使用iprange扩展模块。
--src-range:匹配报文的源地址所在范围
--dst-range:匹配报文的目的地址所在范围


表示如果报文的源IP地址如果在10.10.10.16到10.10.10.18之间,则丢弃报文;IP段的始末IP使用横杠“-”连接

string模块

使用string扩展模块,可以指定要匹配的字符串,如果报文中包含对应的字符串,则符合匹配条件。
比如,如果报文中包含“hello world”,我们就丢弃当前报文

首先,我们在IP为10.10.10.16的主机上启动httpd服务,然后编写两个主页内容分别为“hello world”、“1111”,没有配置任何规则时,15主机可以正常访问16主机上的这个两个页面。

那么,我们想要达到的目的是,如果报文中包含“hello world”字符,我们就拒绝报文进入主机,所以,我们可以在15主机上进行设置:

上图中,-m string表示使用string模块
--algo bm表示使用bm算法去匹配指定的字符串;必选项
--string "hello world" 表示我们想要匹配的字符串

time模块

可以使用time扩展模块,根据时间段匹配报文,如果报文到达的时间在指定的时间范围内,则符合条件。

比如,晚上8点到早上6点不能使用ssh连接当前服务器,可以这样设置:

使用ssh连接,显然是拒绝的:

-m time 表示使用time扩展模块
--timestart 选项指定起始时间
--timestop 选项指定结束时间

如果想要只是周六日不能远程ssh连接服务器,
可以使用--weekdays选项指定每个星期的具体哪一天,可以同时指定多个,用逗号隔开

--monthdays选项具体指定每个月的哪一天
例如,设置每月的18号,22号

当一条规则同时存在多个条件时,多个条件之间默认存在“与”的关系,所以可以同时使用--weekdays选项和--monthdays,表示指定每个月的第几个星期。

connlimit模块

connlimit模块可以限制每个IP地址同时链接到server端的链接数量,不指定IP,其默认就是针对每个客户端IP,即对单个IP的并发连接数限制。

比如,想要限制每个IP地址最多使用两个SSH连接到本地,可以如下设置:

-m connlimit 指定使用connlimit扩展模块
--connlimit-above 2 表示限制每个IP的连接数量上限为2

--connlimit-mask选项,限制某类网段的连接数量

--connlimit-mask 24 表示某个C类网段;24为255.255.255.0
使用--connlimit-mask选项后,可以针对“某类IP段内的一定数量的IP”进行连接数量的限制。

limit模块

limit模块是对“报文到达速率”进行限制;限制单位时间内流入的包的数据。

例如,限制每秒中最多流入3个包,或则限制每分钟最多流入30个包

限制外部主机对本机进行ping操作时,每秒最6秒最多放行一个ping包,可以进行如下设置:

第一条规则表示每分钟最多放行10个icmp包,也就是每6秒放行一个,第6秒的icmp包会被上例的第一条规则匹配到,第6秒之前的包则不会被第一条规则匹配到,于是被后面的拒绝规则匹配到了。
使用ping测试

为什么前5个ping包没有受到限制?

这是因为--limit-burst模块,指定“空闲时可放行的包的数量”,默认值为5,才会出现刚才的问题,前5个ping包没有受到任何速率的限制,之后的包才受到了规则的限制。


命令总结

# iprange
--src-range # 匹配报文的源地址所在范围
--dst-range # 匹配报文的目的地址所在范围
# string
--string "hello" # 表示想要匹配的字符串
--algo bm # 表示使用bm算法去匹配指定的字符串,必选项,可用算法:bm、kmp
# time
--timestart # 指定起始时间,不可取反
--timestop  # 指定结束时间,不可取反
--weekdays  # 指定每个星期的具体哪一天,可取反
--monthdays # 指定每个月的哪一天,可取反
--datestart # 指定日期范围的开始时间,不可取反
--datestop  # 指定日期范围的结束时间,不可取反
# connlimit
--connlimit-above # 限制每个IP的连接数量上限
--connlimit-mask  # 限制某网段的连接数量
# limit
--limit # 限制单位时间内流入的包的数据
--limit-burst # 指定空闲时可放行的包的数量

posted @ 2020-09-17 21:32  ccku  阅读(374)  评论(0编辑  收藏  举报