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

自己优化过的在公司(防火墙非常变态)上网的方案

  •  3
     
  •   geeti · 2014-07-01 05:06:31 +08:00 · 5582 次点击
    这是一个创建于 3810 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前提:网络知识,公网的VPS

    拿我们公司来说,intranet和外边基本是防火墙隔离,上外网只能通过一系列的HTTP/
    HTTPS代理(这些代理屏蔽了所有涉及到网络存储,隧道等相关网站),除了53,80,443
    其他端口一律封闭 。原因很简单,目标太大,几百个B级的IP子网,不统一隔离很难说
    会出现啥灾难。公司对每一个员工的上网做流量监控和统计是肯定的,因为上一点规模
    的Service Router就带有DPI功能,只是有没有人看而已。

    比较简单的方案就是SSH over HTTP,然后通过ssh tunnel做动态端口映射,在自己浏
    览器上用openssh的socks5代理。这样所有被屏蔽的网站全都可以上了,并且被封的端
    口和软件也都可以用(比如迅雷,qq,imessage等),但是缺点也有:这个ssh隧道基
    本是一个不断的长连接,在性能上比较差。另外就是公司监控数据可以看出这是一个
    SSH,如果是长期且大数据量的链接那很显然就是隧道。

    所以我的方案是既不能让公司监控看出是SSH,又不能是长时间大数据量的单一链接:
    1. 在VPS上搭建一个Socks5代理。(Dante就可以)
    2. 用stunnel,把所有数据做TLS加密封装,并且把连接到socks5代理的数据在通过
    http tunnel来连接到vps。(推荐stunnel 5,因为支持SNI)
    这样基本就可以了,每一个http请求都生成一个单独的TLS session,从监控上来看就
    是普通的上网数据。

    进一步优化:虽然已经差不多了,但如果仔细观察DPI数据,会发现每天都有大量数据
    用TLS连接到一个固定的IP地址(最好不要用自己的域名),有点可疑。我的方案是把
    这些TLS数据流伪装成Google或者Apple等正常每天都有的数据。

    介绍一下DPI对Google或者Apple的判别方法:能对TLS数据流进行判别的方法只有几个
    :SNI(类似于http的http host),证书的common name以及organization name, 与证
    书的issuer无关。所以通过openssl很容易可以做一个带有Apple Inc或者Google Inc的
    证书,然后放到VPS上,用stunnel进行连接时交换。新版本的stunnel已经支持SNI功能
    ,可以直接在客户端/服务端的配置文件上手动加入SNI ,比如 itunes.apple.com。 这
    样,所有通过自己代理上网的数据,公司的监控就会显示为Apple iTunes或者Google,
    并且都是正常的符合Web Browsing模型的数据流。
    15 条回复    2014-07-02 09:05:14 +08:00
    mortal
        1
    mortal  
       2014-07-01 07:45:12 +08:00 via Android   ❤️ 1
    和你们公司一样。懒得和他们勾心斗角,上网时用自己的 Air 和 3g-赞一个楼主的方案。
    geeti
        2
    geeti  
    OP
       2014-07-01 07:46:55 +08:00
    @mortal 要是上网听歌无损啥的,一天就上G,有时候还要用个迅雷下点东西,手机数据耗不起啊
    mortal
        3
    mortal  
       2014-07-01 07:51:36 +08:00 via Android
    @geeti 是这样的。不过我们总出口带宽才 100Mbps,1000 多号人用,慢得要死还诸多限制的网不如不用了汗……
    Twinkle
        4
    Twinkle  
       2014-07-01 08:36:48 +08:00
    我们这边只有改到特定的局域网ip才能上,请问这是什么方式的屏蔽呢?
    geeti
        5
    geeti  
    OP
       2014-07-01 09:08:54 +08:00 via iPad
    @Twinkle 这不就是很普通的subnet么
    zhchyu999
        6
    zhchyu999  
       2014-07-01 09:12:26 +08:00
    zhilain吗
    Twinkle
        7
    Twinkle  
       2014-07-01 09:15:03 +08:00
    @geeti 如果不知道哪些ip能上网,有什么办法破解吗=w=
    valianliu
        8
    valianliu  
       2014-07-01 09:21:28 +08:00
    跟楼主的情况类似,不过我公司IT更BT每月是审计流量的,作为TOP10还被点名过。没楼主研究得这么透彻,尤其是VPS自己搭建那块玩不转啊,现在的方案是在通过Goagent,不知道是否对监控有效?另外有联系方式能交流吗,愿意分担VPS费用求全套妥帖的解决方案。
    Tonni
        9
    Tonni  
       2014-07-01 10:05:14 +08:00   ❤️ 2
    Screw You Guys I'm Going Home~
    est
        10
    est  
       2014-07-01 10:09:58 +08:00
    @Tonni 神头像。
    cst4you
        11
    cst4you  
       2014-07-01 10:46:53 +08:00
    @Tonni 神头像神回复
    pfitseng
        12
    pfitseng  
       2014-07-01 11:09:32 +08:00
    楼主能详细说说最后一个吗?是不是自己弄个CA颁发itunes.apple.com这种证书下去?
    geeti
        13
    geeti  
    OP
       2014-07-01 11:13:11 +08:00
    @pfitseng openssl req -new -key stunnel.key -x509 -days 1000
    datou552211
        14
    datou552211  
       2014-07-01 11:18:01 +08:00
    肉鸡之类的?
    lazyphp
        15
    lazyphp  
       2014-07-02 09:05:14 +08:00
    @mortal 我也非常认同。懒得和那些网管去斗了,自己搞个 网络上更好。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5879 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 02:32 · PVG 10:32 · LAX 18:32 · JFK 21:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.