string 模块,可以指定要匹配的字符串,如果报文中包含对应的字符串,则符合匹配条件。
- --algo 【bmlkmp】∶字符匹配的查询算法
- --string pattern∶字符匹配的字符串
示例∶应用返回的报文中包含字符"hello",我们就丢弃当前报文,其余正常通过。
服务器上面有些站点,站点里面有些关键字video,用户在请求我的时候,请求里面携带video,那么就拒绝掉,这个应该在filter表中的output链上面做。
因为请求经过prerouting送input,input构建响应报文,构建了通过output出去,构建响应报文里面带的关键字有video,那么我要在output上将其关闭掉,这样你去请求video是永远没有办法访问的。
访问本机的video的时候拒绝掉,和穿过我访问video,配置手法是一样,只不过操作的链不一样,一个是output链,一个是forward链。
在请求我的时候做不了任何的策略,但是在响应的时候可以做策略和规则的匹配。
示例∶应用返回的报文中包含字符"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