string 模块,可以指定要匹配的字符串,如果报文中包含对应的字符串,则符合匹配条件。
- --algo 【bm | kmp】∶字符匹配的查询算法
- --string pattern∶字符匹配的字符串
比如要访问腾讯,那么我就要去匹配这个字符串,一请求我就给你拒绝掉。
示例∶应用返回的报文中包含字符"hello",我们就丢弃当前报文,其余正常通过。
服务器上面有些站点,站点里面有些关键字video,用户在请求我的时候,请求里面携带video,那么就拒绝掉,这个应该在filter表中的output链上面做。
因为请求经过prerouting送input,input构建响应报文,构建了通过output出去,构建响应报文里面带的关键字有video,那么我要在output上将其关闭掉,这样你去请求video是永远没有办法访问的。
访问本机的video的时候拒绝掉,和穿过我访问video,配置手法是一样,只不过操作的链不一样,一个是output链,一个是forward链。(使用路由器,上面使用IP tables做路由策略,当用户请求时候必须经过路由器穿过去,如果访问jd.com就将其屏蔽掉)
在请求我的时候做不了任何的策略,但是在响应的时候可以做策略和规则的匹配。
示例∶应用返回的报文中包含字符"hello",我们就丢弃当前报文,其余正常通过。
[root@localhost ~]# iptables -t filter -I OUTPUT -p tcp -m string --algo kmp --string "video" -j DROP
[root@localhost ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 STRING match "video" ALGO name kmp TO 65535
---------------------------------------------------------------------------------------------------------------------------
路由器实现iptables做规则策略,当用户要请求的时候必须经过路由器穿过去,我要做些限制,如果要访问jd.com,那么就屏蔽掉,这个很明显在filter中做。首先进来的是prerouting,prerouting上做不了,因为它有可能不请求JD,有可能请求本机。所以prerouting就送给forward,那么就在forward上面做策略,如果符合JD那么就拒绝,到不了postingrouting上面去,那么这样就到不了服务器,这就是基于关键字做条件判断,如果符合预期则允许。
[root@localhost ~]# iptables -t filter -I OUTPUT -p tcp -m string --algo kmp --string "jd" -j DROP
time模块
time 模块,可以根据时间段区匹配报文,如果报文到达的时间在指定的时间范围内,则符合匹配条件。
--timestart hh∶mm【∶ss】∶开始时间
--timestop hh∶mm【∶ss】∶结束时间
【!】--monthdays day【,day..】∶指定一个月的某一天
【!】--weekdays day【,day..】∶指定周一到周天
--kerneltz∶使用内核时区而不是uTc时间
示例∶拒绝每天8∶30~12∶30(00∶30~04∶30)、13∶30~18∶30(05∶30~10∶30),任何主机发送icmp协议