MENU

iptables 按关键词丢掉 HTTP 数据包

2017 年 11 月 30 日 • 技术流

某些校园网会对用户访问网页进行 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 已经自带啦。

添加新评论

已有 8 条评论
  1. XieLong XieLong

    我突然想起来之前有段时间我用网易云听歌总是会出现"歌曲加载失败"、"网络无法连接"等问题,一开始我以为是Win10/网易云App的问题,后来我在Defender里面把防火墙关掉就几乎没有这个问题了(被检测到共享的时候除外)。现在我觉得这应该是校园网劫持的数据包被挡住导致数据不完整造成的吧,大佬有何高见

    1. @XieLong可能不是校园网的锅,看你有没有安装其他的防病毒软件(防火墙)。网易云音乐应该是使用 HTTPS 连接的,校园网应该不太会想要劫持 HTTPS(通常都是检测是否是 HTTP 协议然后劫持的)。DNS 倒是有可能解析失败——我有段时间用校园网在 Windows 下的 nslookup 几乎总是超时。

    2. XieLong XieLong

      @Bro.Xu下午把防火墙打开了,然后现在不出意外网易云又断线了,我抓了一下包,网易云也是用HTTP传歌的,其中1.1.1.3出现的频率大约是转一个网页就会有一对包@(呵呵)

    3. @XieLong是吧,真受不了校园网这种行为。
      话说你的网易云什么版本的,居然没用 HTTPS。

    4. XieLong XieLong

      @Bro.Xu网易云是Win10UWP版,我在防火墙加了两个丢掉1.1.1.3的规则,抓包是没抓到了,但是听歌断网的问题还是会有

    5. @XieLong也许桌面版的情况会比较好?

    6. XieLong XieLong

      @Bro.Xu桌面版也有类似情况,我抓了一下包,两者都是用普通HTTP

  2. hugefiver hugefiver

    666, 膜大佬