从原理上根绝运营商劫持,基于 TTL 的反劫持 iptables 规则

2017-01-22 20:04:41 +08:00
 KCheshireCat

不管你是遇到加小尾巴跳转,iframe 嵌套广告,302 跳转,还是 JavaScript 脚本劫持.
只要是基于旁路设备监听抢答数据包这个原理的劫持行为. 这套 iptables 规则就能应对.

注意:目前仍在实验阶段,浙江移动测试有效,无法保证不会对正常的连接产生破坏.

主要原理:基于 IP 头 TTL 值的判断丢包.并使用 ACK 空应答包,和装满数据的 TCP 包来更新 TTL,防止正常 TTL 变动导致连接断开.

项目地址

需要模块

注意

工作原理

10323 次点击
所在节点    宽带症候群
29 条回复
nfroot
2017-01-23 00:10:48 +08:00
之前看劫持包的 TTL 都不对的时候 就在想这个问题了 只是对这个太不了解…… 自己技能也达不到这个级别……

点赞
RobertYang
2017-01-23 00:22:23 +08:00
点赞,被电信插广告他们还不认
lslqtz
2017-01-23 05:00:57 +08:00
如果旁路设备知道客户端与它的 TTL ,那么旁路设备再检测服务器 TTL 加起来的话。
est
2017-01-23 09:24:27 +08:00
crazy idea 。。。居然能在 iptables 做这么多事。。。学习了。
est
2017-01-23 09:27:30 +08:00
结合 ip netns 可以只对浏览器生效。这样可以限制误伤范围。
TMily
2017-01-23 10:30:04 +08:00
额 能不能将特定 WAN 口改为特定防火墙区域呢,多拨的话,都不一定是哪个口拨上的说
KCheshireCat
2017-01-23 10:46:59 +08:00
@est

其实这个规则对某国家级防火墙的 RST 包也有效,只不过它会对服务器和客户端双方都发送,虽然有效但是救不了这条连接.
KCheshireCat
2017-01-23 10:52:43 +08:00
@TMily

额,我不清楚 openwrt 上的防火墙区域是怎么回事,你可以直接填上去试试,不行的话,就用排除法.

把不是 wan 口的接口排除掉
est
2017-01-23 11:27:03 +08:00
@KCheshireCat 能不能用 bytecode 实现服务器主动发一条 TTL 到达不了客户端的 ACK,PSH 但是墙能收到。。。然后 seq 号是不是就混乱了呢?
est
2017-01-23 11:28:09 +08:00
@KCheshireCat 你们二次元头像党又是玩技术的太可怕了。
aru
2017-01-23 13:45:52 +08:00
1. 能否限制只对 tcp port 80 起作用(也许能降低 cpu 占用率?)
2. openwrt 下有没有朋友来搞搞?
feng32
2017-01-23 20:04:07 +08:00
好东西,等晚上回去在 openwrt 上测试一下,依赖的模块是否都现成的看一下
KCheshireCat
2017-01-23 21:34:00 +08:00
@est iptables 本职工作是防火墙啊,要发包大概要打补丁实现了吧,这方面我不太懂
KCheshireCat
2017-01-23 21:36:29 +08:00
@aru 我用 x86 的 AMD 速龙 x4 老爷机跑满 100M 是一点问题也没有,几乎没有负载,轻轻松.
路由器的嵌入式平台就不知道了,只对 80 起效是可以做到的,但是上网主要流量也就是 80 的多啊...
aru
2017-01-23 23:19:20 +08:00
@KCheshireCat
p2p 下载基本都是非 80 的,而且流量很大。我的大流量应用就是 PT ,经常达到 200Mbps ,估计加上这个会是一个瓶颈。
今天尝试在 lede ( openwrt fork )上添加项目的 iptables ,找不到 bpf 模块 :(
KCheshireCat
2017-01-23 23:29:43 +08:00
@aru
你需要针对端口限制的话可以在要填"{your WAN}"的那两行加入端口匹配条件.

然后一般来说容易缺失的 iptables 模块就是 u32 或者 bpf 了,大多数人只是用 iptables 解决些简单的需求,所以不会用到这种需要写字节码的模块.

不过可以自己编译 openwrt 固件的时候把这几个模块一起编译进去,再或者你可以看看 openwrt 官方源有没有提供补全 iptables 的包,这样就不用自己编译了.
aru
2017-01-24 00:03:18 +08:00
@KCheshireCat u32 我编译和加载了, bpf 实在没找到配置选项,网上找了挺多地方,没发现究竟是哪个配置参数
JJaicmkmy
2017-01-25 20:57:22 +08:00
@KCheshireCat 如果是自己的服务器的话,可以在服务器上也 DROP 掉 RST 的包,对 SS 有奇效。
KCheshireCat
2017-01-25 21:01:28 +08:00
@JJaicmkmy #18
这么弄的话好像会触发路由黑洞,以前看别人提过。
Siril
2017-02-06 14:34:52 +08:00
awesome idea , but.....
看 issue ,疑似有误伤,求解惑。
不知可否在其他发行版复现这个问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/336301

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX