V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
haohaolee

使用 iptables 对付 ISP 的 http 劫持

  •  
  •   haohaolee · Nov 16, 2011 · 7356 views
    This topic created in 5289 days ago, the information mentioned may be changed or developed.
    看到 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 replies    1970-01-01 08:00:00 +08:00
    eraser
        1
    eraser  
       Nov 16, 2011 via iPhone
    技术帖,支持!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1011 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 18:33 · PVG 02:33 · LAX 11:33 · JFK 14:33
    ♥ Do have faith in what you're doing.