iptables filter

最近发现dns请求里有一些不正常的域名请求,由于bind9早期的版本在这方面比较弱,而且再越上层做越好,那就在iptables上做最好了,当然在外网防火墙上做也行,2层过滤更好。

在iptables有一个string模块就是用来做这个事情,支持很多种模式,u32, string, hex-string 都有,效率最高的是u32了。 具体看看自己iptables支持那些模式可以查看以下文件

/proc/net/ip_tables_matches

具体的过滤命令很容易,就一句, 意思就是过滤input链的udp的53端口,匹配里面的数据含有packetdevil字符的直接drop掉。

-A INPUT -p udp --dport 53 -m string --algo bm --string "packetdevil" -j DROP

这里面的algo表示实用那种匹配的算法,man一下看到bm和kmp两种算法,但是还是不甚了解。google了一下发现这个阮一峰很久以前就写过了关于2个算法的详细解释,这个wiki上也有详细解释。具体就不说了,大家看一下就能明白了。

–algo {bm|kmp}
Select the pattern matching strategy. (bm = Boyer-Moore, kmp = Knuth-Pratt-Morris)

http://www.ruanyifeng.com/blog/2013/05/boyer-moore_string_search_algorithm.html
http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html

 

但是我也发现了一个问题,其实我之前是想要匹配的是packetdevil.com, 但是网上都是说直接写这个就可以了,可是我加上.com后无法进行匹配,然后怕是 . 这个特殊字符导致的,于是用hex-string来匹配,可是也同样无法匹配到,这个就奇怪了,u32模式由于要重新编译就没有做,有谁看到的就麻烦指点一下,谢谢了!

关于 Timo
XNIX SA & MYSQL DBA

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: