真没想到啊,iptables 还有这个功能,可以根据域名或者网址过滤。
这个功能是我在浏览微博的时候发现的,然后百度了下,还真不错
语法大概如下
iptables -A INPUT -m string --algo kmp --string "search words" -j DROP
上面这条语句,使用 kmp
字符串查找算法,对输入的请求,如果网址(包含域名)中包括了字符串 "search words",则会被 iptables
直接拒绝
比如说,有一个网址如下
https://www.twle.cn/l/yufei/minigame/minigame-basic-index.html
-
如果我们想禁用所有域名为
twle.cn
的请求,则语句如下iptables -A INPUT -m string --algo kmp --string "twle.cn" -j DROP
-
如果我们想禁止访问网址中包含
/minigame
字符串的请求,则语句如下iptables -A INPUT -m string --algo kmp --string "/minigame" -j DROP
需要注意的是,这条语句是通杀,也就是网址中包含了
/minigame
的请求都会被拒绝
上面这两个范例只是一些比较常见的用法,更多的用法就自己琢磨吧
参数说明
上面那条语句的各个参数都比较简单了,可以通过命令 iptables --help
来查看各个参数的作用
-
-m string
加载 string 模块,string 是 iptables 的一个 module,也就是做字符串匹配的。
-
–string “xxxx”
定义字符串内容,可以是网址( URL )里任意字符
-
–algo bm
设置字符匹配的查询算法,一般默认使用 bm 算法效果就可以了,另外还可以设置
kmp
算法kmp
算法一种更复杂的算法bm = Boyer-Moore
kmp = Knuth-Pratt-Morris
-
-j DROP
表示对于符合规则的请求,直接拒绝
目前尚无回复