iptables 按关键词丢掉 HTTP 数据包

某些校园网会对用户访问网页进行 HTTP 劫持,插入一些令人反感的东西。这跟某些地区的运营商行为是一致的。如果劫持行为是通过抢先响应做到的,则可以判断特征,丢掉抢先应答的数据包,等候接收正常数据包。其中一个方法是使用字符串规则。

iptables 的规则如下:

iptables -I FORWARD -p tcp --sport 80 --tcp-flags ACK ACK -m string --algo bm --string "ad.example.com:1234" -j DROP

其中的特征关键词是 ad.example.com:1234。这样,在 80 端口收到的 TCP 响应中若含有“ad.example.com:1234”字符串,则这个数据包会被抛弃。(此处不严谨,大家可以自己查询规则。)

又如:

iptables -I FORWARD -p tcp --sport 80 --tcp-flags ACK ACK -m string --algo bm --string "<div id=\"ad\"" -j DROP

关键词是 <div id="ad"

如果需要,可以把 DROP 改为 REJECT,则往回响应一个错误信息包。

其实我只是要在路由器上这样做的,比如基于 OpenWrt 的 PandoraBox 固件。据说这种规则的使用需要在系统上安装 kmod-ipt-u32 以及 iptables-mod-u32 两个软件包,但是我用的 PandoraBox 已经自带啦。

(原发于 徐AB 2017-11-30 22:42)

Try Ctrl+Enter :)