防火墙

翻墙 | 乌镇因世界互联网大会解封三天互联网

中國防火牆令愈來愈多網站,無法在內地看到。但每逢遇到有一些重要會議,情況就會突然改善。有趣的是,由於內地由即日起至21日舉行World Internet Conference(世界互联网大会),內地的烏鎮將可以正常瀏覽所有網站,但僅僅就是這三天而已。 World Internet...

阅读更多

翻墙 | 朴素VPN 一种VPN新玩法

由于路由管控系统的建立,实时动态黑洞路由已成为最有效的封锁手段,TCP连接重置和DNS污染成为次要手段,利用漏洞的穿墙方法已不再具有普遍意义。对此应对方法是多样化协议的VPN来抵抗识别。这里介绍一种太简单、有时很朴素的“穷人VPN”。朴素VPN只需要一次内核配置(Linux内核),即可永久稳定运行,不需要任何用户态守护进程。所有流量转换和加密全部由内核完成,原生性能,开销几乎没有。静态配置,避免动态握手和参数协商产生指纹特征导致被识别。并且支持NAT,移动的内网用户可以使用此方法。支持广泛,基于L2TPv3标准,Linux内核3.2+都有支持,其他操作系统原则上也能支持。但有两个局限:需要root权限;一个隧道只支持一个用户。朴素VPN利用UDP封装的静态L2TP隧道实现VPN,内核XFRM实现静态IPsec。实际上IP-in-IP隧道即可实现VPN,但是这种协议无法穿越NAT,因此必须利用UDP封装。内核3.18将支持Foo-over-UDP,在UDP里面直接封装IP,与静态的L2TP-over-UDP很类似。创建一个朴素VPN公共设置modprobe l2tp_ethSERVER_IP=xxx.xxx.xxx.xxx SERVER_IF=eth0 CLIENT_IP=192.168.1.2 SESSION=0xdeadbeef COOKIE=baadc0defaceb00c服务器iptables -t nat -A INPUT -i $SERVER_IF -p udp –dport 5353 -m u32 –u32 ‘0>>22&0x3C@12 = 0xdeadbeef && 0>>22&0x3C@16 = 0xbaadc0de && 0>>22&0x3C@20 = 0xfaceb00c’ -j SNAT –to-source 10.53.0.255:6464ip l2tp add tunnel local $SERVER_IP remote 10.53.0.255 tunnel_id 1 peer_tunnel_id 1 encap udp udp_sport 5353 udp_dport 6464ip l2tp add session tunnel_id 1 session_id $SESSION peer_session_id $SESSION cookie $COOKIE peer_cookie $COOKIEip addr add 10.53.0.1 peer 10.53.0.2 dev l2tpeth0ip link set l2tpeth0 up mtu 1480iptables -t nat -A POSTROUTING -o $SERVER_IF -s 10.53.0.2 -j MASQUERADEsysctl -w net.ipv4.ip_forward=1客户端ip l2tp add tunnel local $CLIENT_IP remote $SERVER_IP tunnel_id 1 peer_tunnel_id 1 encap udp udp_sport 6464 udp_dport 5353ip l2tp add session tunnel_id 1 session_id $SESSION peer_session_id $SESSION cookie $COOKIE peer_cookie $COOKIEip addr add 10.53.0.2 peer 10.53.0.1 dev l2tpeth0ip link set l2tpeth0 up mtu 1480ip route add 8.8.8.8 via 10.53.0.1完成了!测试:(创建隧道后ARP启动也许会等几秒。)user@client$ ping 10.53.0.1PING 10.53.0.1 (10.53.0.1) 56(84) bytes of data.64 bytes from 10.53.0.1: icmp_seq=1 ttl=64 time=154 msuser@client$ dig twitter.com @8.8.8.8 +short199.59.148.82199.59.150.7199.59.148.10199.59.150.39链路无污染!分步解释:端口5353、6464可自定义成比如端口53。服务器端口必须公网可访问,客户端可以在NAT内网里。服务端VPN内地址为10.53.0.1,客户端为.2。SESSION和COOKIE一起组成一个32+64位的密码。服务端验证这个密码然后设置SNAT。因此,同时只能有一个用户使用这个VPN。服务端创建静态L2TP隧道l2tpeth0服务端设置转发客户端创建静态L2TP隧道l2tpeth0(NAT内网可)客户端设置路由(全局路由见下)安全性关于协议识别,由于自定义的端口,静态的配置,没有任何动态的握手和参数协商过程,基于指纹的协议识别很难获得任何结果。(见下面附录的封包结构。)流量分析仍然有可能识别出某种特征,但是这种小众协议应该不容易成为目标。关于加密,目前这个隧道未采用加密。我相信不太可能对任意端口的UDP都做深度检测。如果需要的话,可以看下面在隧道内进行IPsec加密的方法。内核的L2TP隧道需要固定一个唯一的远程地址和端口,导致一个VPN只能有一个用户(多用户VPN的都是用户态实现的)。因此我们需要把NAT后的移动IP地址翻译回成固定地址和端口(10.53.0.255:6464)。为了防止拒绝服务,需要在SNAT的时候进行一个简易的认证,使用了L2TP的session id和cookie作为96位的密码。conntrack -L -p udp可以查看是哪个IP地址连接上了。如果用户的地址变了,要等到老SNAT连接记录超时注销(默认是三分钟)才能从新的地址连接,加速这个过程可以ssh登录然后conntrack -D -p udp -s $OLD_CLIENT_IP清除老地址。Foo-over-UDP没有这96位的字段可以用来当作密码,所以认证需要使用另外的状态会略麻烦一些。客户端路由问题可以设置全局VPN,如:ip route add `ip route | sed -n “s/^default/$SERVER_IP/p”`ip route add 0.0.0.0/1 via 10.53.0.1ip route add 128.0.0.0/1 via 10.53.0.1也可以使用chnroutes这类精细方案。加密的朴素VPN(可选)接着上面的设置,运行如下命令配置内核XFRM框架,实现一个朴素的静态IPsec隧道。加密内网服务端地址为10.53.1.1,客户端为.2。安全关联参数spi 102及其静态密钥0xc0de0102和另外一组参数都可改。服务端创建加密隧道ipsec0ip tunnel add ipsec0 mode ipip local 10.53.0.1 remote 10.53.0.2 dev l2tpeth0ip addr add 10.53.1.1 peer 10.53.1.2 dev ipsec0ip link set ipsec0 upip xfrm state add src 10.53.0.1 dst 10.53.0.2 proto esp spi 102 enc blowfish 0xc0de0102ip xfrm state add src 10.53.0.2 dst 10.53.0.1 proto esp spi 201 enc blowfish 0xc0de0201ip xfrm policy add dev l2tpeth0 dir out tmpl proto esp spi 102ip xfrm policy add dev l2tpeth0 dir in tmpl proto esp spi 201iptables -t nat -A POSTROUTING -o eth1 -s 10.53.1.2 -j MASQUERADE客户端创建加密隧道ipsec0ip tunnel add ipsec0 mode ipip local 10.53.0.2 remote 10.53.0.1 dev l2tpeth0ip addr add 10.53.1.2 peer 10.53.1.1 dev ipsec0ip link set ipsec0 upip xfrm state add src 10.53.0.2 dst 10.53.0.1 proto esp spi 201 enc blowfish 0xc0de0201ip xfrm state add src 10.53.0.1 dst 10.53.0.2 proto esp spi 102 enc blowfish 0xc0de0102ip xfrm policy add dev l2tpeth0 dir out tmpl proto esp spi 201ip xfrm policy add dev l2tpeth0 dir in tmpl proto esp spi 102ip route del 8.8.8.8ip route add 8.8.8.8 10.53.1.1关闭VPN如果没有设置IPsec,可以忽略#ipsec之后的命令。服务端iptables -t nat -D INPUT -i eth1 -p udp –dport 5353 -m u32 –u32 ‘0>>22&0x3C@12 = 0xdeadbeef && 0>>22&0x3C@16 = 0xbaadc0de && 0>>22&0x3C@20 = 0xfaceb00c’ -j SNAT –to-source $DUMMY_IP:6464iptables -t nat -D POSTROUTING -o $SERVER_IF -s 10.53.0.2 -j MASQUERADE#ipsecip xfrm state del src 10.53.0.1 dst 10.53.0.2 proto esp spi 102ip xfrm state del src 10.53.0.2 dst 10.53.0.1 proto esp spi 201ip xfrm policy del dev l2tpeth0 dir outip xfrm policy del dev l2tpeth0 dir iniptables -t nat -D POSTROUTING -o $SERVER_IF -s 10.53.1.2 -j MASQUERADE客户端ip route del $SERVER_IP#ipsecip xfrm state del src 10.53.0.2 dst 10.53.0.1 proto esp spi 201ip xfrm state del src 10.53.0.1 dst 10.53.0.2 proto esp spi 102ip xfrm policy del dev l2tpeth0 dir outip xfrm policy del dev l2tpeth0 dir in公共ip tunnel del ipsec0ip l2tp del tunnel tunnel_id 1附录未加密的隧道客户端tcpdump监听curl google.com能看到以下封包结构:Internet Protocol Version 4, Src: 192.168.1.2, Dst: xxx.xxx.xxx.xxxUser Datagram Protocol, Src Port: 59126, Dst Port: 5353Layer 2 Tunneling Protocol version 3 Packet Type: Data Message Session Id=0xdeadbeef Reserved: 0x0000 Session ID: 0xdeadbeef Cookie: baadc0defaceb00cDefault L2-Specific SublayerEthernet II, Src: xx:xx:xx:xx:xx:xx, Dst: xx:xx:xx:xx:xx:xxInternet Protocol Version 4, Src: 10.53.0.2, Dst: 74.125.226.166 (google.com)Transmission Control Protocol, Src Port: 39057, Dst Port: 80, Seq: 1, Ack: 1, Len: 74Hypertext Transfer ProtocolFoo-over-UDP隧道与静态L2TP隧道非常类似,区别只是UDP里面没有封装L2TP包头和以太包头:modprobe fou# on the serverip fou add port 5353 ipproto 4iptables -t nat -A INPUT -i eth0 -p udp –dport 5353 -j SNAT –to-source 10.53.0.255:6464ip link add udptun0 type ipip local $SERVER_IP remote 10.53.0.255 encap fou encap-sport 5353 encap-dport 6464ip addr add 10.53.0.1 peer 10.53.0.2 dev udptun0ip link set udptun0 up# on the clientip fou add port 6464 ipproto 4ip link add udptun0 type ipip local $CLIENT_IP remote $SERVER_IP encap fou encap-sport 6464 encap-dport 5353ip addr add 10.53.0.2 peer 10.53.0.1 dev udptun0ip link set udptun0 up原地址:https://gist.github.com/klzgrad/5661b64596d003f61980翻墙技术博客订阅地址及社交帐号

阅读更多

BBC | 世界互联网大会开幕 习近平谈网络秩序

中国首届世界互联网大会在浙江桐乡市乌镇开幕,正在访问大洋洲的中国国家主席习近平发表贺词,主张要发展“多边、民主、透明的国际互联网治理体系”。习近平的贺词星期三(11月19日)由中国副总理马凯在开幕式上宣读。习近平说,中国愿意在“尊重网络主权,维护网络安全”等原则下深化在互联网方面的国际合作。大会为期三天,来自西方与中国本土的网络巨头负责人将参与讨论。中国当局已敲定日后继续以乌镇为基地每年主办大会,并寻求把“乌镇峰会”发展成“东方达沃斯”。

阅读更多

翻墙 | 中国屏蔽CDN附带屏蔽数千家网站

屏蔽CDN可能是防火长城的大规模杀伤性武器,因为这会附带影响大量使用该CDN服务的网站。在Google被屏蔽之后,使用托管在Google上的字体或脚本的网站出现了加载或访问问题,如使用reCAPTCHA防机器人的网站不能正常显示验证码。现在,防火长城DNS投毒了CDN服务商EdgeCast的域名*edgecastcdn.net,连带着数千家网站被屏蔽了,其中包括了非常无辜的开源内容管理系统drupal.org,索尼移动,大西洋月刊,火狐插件(addons.cdn.mozilla.net托管在 EdgeCast上),Gravatar、speedtest.net,等等。EdgeCast官方博客证实它被防火长城加入到了过滤名单,原因未知。原地址:http://www.solidot.org/story?threshold=0&mode=nested&sid=41926翻墙技术博客订阅地址及社交帐号

阅读更多

CDT/CDS今日重点

十月之声(2024)

【404文库】“再找演员的话,请放过未成年”(外二篇)

【404媒体】“等帘子拉开,模特已经换上了新衣”(外二篇)


更多文章总汇……

CDT专题

支持中国数字时代

蓝灯·无界计划

现在,你可以用一种新的方式对抗互联网审查:在浏览中国数字时代网站时,按下下面这个开关按钮,为全世界想要自由获取信息的人提供一个安全的“桥梁”。这个开源项目由蓝灯(lantern)提供,了解详情

CDT 新闻简报

读者投稿

漫游数字空间