V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
haohaolee
V2EX  ›  分享发现

使用 iptables 对付 ISP 的 http 劫持

  •  
  •   haohaolee · 2011-11-16 18:00:49 +08:00 · 6730 次点击
    这是一个创建于 4551 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看到 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。供参考。
    1 条回复    1970-01-01 08:00:00 +08:00
    eraser
        1
    eraser  
       2011-11-16 19:14:58 +08:00 via iPhone
    技术帖,支持!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2061 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 01:25 · PVG 09:25 · LAX 18:25 · JFK 21:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.