站内公告:

亲友传真---海外信息直接看 https://qycz.org

Main Menu

使用 iptables 对付 ISP 的 http 劫持

作者 yyxzz, 十一月 23, 2012, 03:15:20 上午

yyxzz

看到 v2ex 好几个朋友都有这个问题,分享一下我的技术性解决方案。当然投诉是第一位的,必须给他们点压力。

我的路由器正好是 linux 的,而 iptables 正好有 layer7 的检测能力,所以做起来还算方便。

首先还是得抓包,各地 ISP 可能方法类似,但是细节不同,我就在 windows 上用 wireshark 抓的,用 tcpdump 神马的也可以。

此劫持包一般紧接着 Get 请求的包返回来,我这边抓包结果是这样的:
1. IP 部分 TOS flag 是 0x10,查了一下,表示最小延迟,看来 ISP 希望这个包尽快到达
2. TCP flag 是 FIN,PSH,ACK,比较可疑的是 PSH,也是提高包的优先级的
3. 劫持的代码在一个包内,也是为了尽快到达

为了避免误杀,还加上了字符串的检测,加上了iframe里面的一些特征,最终的规则如下:

iptables -I FORWARD -p tcp --sport 80 --tcp-flags FIN,PSH,ACK FIN,PSH,ACK -m tos --tos 0x10/0x3f -m string --algo bm --string "u2=window.location.toString()" -j DROP

iptables -I FORWARD -p tcp --sport 80 --tcp-flags FIN,PSH,ACK FIN,PSH,ACK -m tos --tos 0x10/0x3f -m string --algo bm --string "u2=window.location.toString()" -j LOG --log-level info --log-prefix="hijack: "

如果不是路由器,可能需要把 FORWARD 改成 INPUT。供参考。

快速回复

警告: 该贴已经至少 180 天没有更改。
除非你一定要回复,否则也许考虑发一个新贴会更好。

Note: this post will not display until it has been approved by a moderator.

名称:
电子邮件:
验证码:
请将此框留空:
三乘七等于几?(请用阿拉伯数字回答):
Shortcuts: ALT+S post or ALT+P preview