V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
adkudao
V2EX  ›  问与答

想用 php 访问别的网页, 但被限制了, 请问有什么绕过限制的办法?

  •  
  •   adkudao · 2014-07-30 08:59:49 +08:00 · 5487 次点击
    这是一个创建于 3771 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我现在开发并维护一个学校网站,这个学校网站的空间就放在学校内部的服务器上,但是有点奇葩,它是在一个服务器上划分一个虚拟机给我,装的CentOS, 我有root账号;

    服务器跟外网之间有一个类似于防火墙的设备 or 软件,导致我在虚拟机里做的任何安全设置都形同虚设,完全得按着这个"防火墙"的规则来,打个比方:

    1.不管我在虚拟机中打开多少端口,外部都只能访问虚拟机的80端口,导致我的虚拟机没办法发送邮件,因为邮件端口被屏蔽;

    -- 也就是说,外部只能访问我的网站,而我却没办法给网站会员发送邮件(找回密码的邮件);


    2.在虚拟机中访问Localhost,几乎可以使用任何函数,但是与外界通信时,就会被屏蔽掉一部分他们认为危险的函数,比如我在虚拟机中访问Localhost, 可以查看phpinfo(),但是外网访问时, phpinfo()里的服务器信息,全部都被拦截;
    -- 也就是说, 我在外网访问含有phpinfo()的网页时,只能看到空白页;


    3.最恼人的就是第三点,虚拟机的php,和外部服务器通信几乎都被隔断,我用root账号登录虚拟机后,可以发现php的curl函数没有被禁用,系统本身的curl也没有被禁用, 都可以curl本地的网站,比如127.0.0.1,但是,无法curl外部的网站(虚拟机的DNS是没有问题的,可以nslookup);


    所以我的问题来了,我开发的这个网站,需要使用到百度的云推送,需要和百度的服务器通过curl通信,可是现在被屏蔽了,好吧,然后我又想了一个办法:

    1.我在外部建立一个网站: abc.com, 可以接受GET参数;
    2.当我从任何地方访问abc.com/index.php/tit/hello/content/nihao时,我就可以获取"tit"和"content"两个参数值;
    3.获取到参数后,我通过abc.com与百度的服务器进行通信,把参数发给百度,就OK了;

    这样通过abc.com做中转,就不需要通过虚拟机使用curl操作了,可以在abc.com中使用任何函数,打开任何端口;


    可是!

    尼玛!

    我现在在虚拟机中,连访问abc.com都做不到哇!

    我试过了种种办法,fopen, file_get_contents, curl, fsockopen, 都不可以了,我现在只需要访问一下abc.com/参数/xx这个网址,就能把参数传过去,可是,始终没办法访问,请问大家,有什么办法可以让我在虚拟机中访问abc.com吗(虚拟机的DNS是没有问题的,可以nslookup)?
    33 条回复    2014-07-30 23:13:24 +08:00
    zjgsamuel
        1
    zjgsamuel  
       2014-07-30 09:05:59 +08:00
    很是诡异那!
    第一条我理解,防火墙做了端口映射的限制以及端口访问的策略; 但是第二条开始,防火墙能够屏蔽PHP的函数? 这不应该那,问问机房的人呢?
    oott123
        2
    oott123  
       2014-07-30 09:11:58 +08:00 via Android
    我也遇到过。
    给管理老师打电话,列一个白名单出来,让他们打开这些访问就行了。
    第二点是学校的 WAF 做特征识别导致的。
    除此之外也有一些取巧的办法,比如 ssh tunnel 之类,但是在生产环境基本不可行,可以无视。
    btw,难道 lz 和我同一个学校?
    adkudao
        3
    adkudao  
    OP
       2014-07-30 09:12:06 +08:00
    @zjgsamuel 真是这样,不骗你;

    比如index.php如果是echo 'hello',那么外网可以看到hello;

    但index.php如果是phpinfo(),那么外网只能看到空白页(登录内网或root则可以看到phpinfo给出的服务器信息);
    adkudao
        4
    adkudao  
    OP
       2014-07-30 09:13:37 +08:00
    @oott123 我打过电话,机房管理老师比较死板,说只能开放80端口,其他的一概不允;
    PS: 我在长沙,你们学校在?
    xenme
        5
    xenme  
       2014-07-30 09:18:50 +08:00
    和 @zjgsamuel 观点相同。
    如果没有再CentOS上装学校的防火墙软件Agent,那么一般的防火墙只会对端口进行限制,也就是简单地限制端口访问等。
    对于curl和phpinfo等信息完全没法办法过滤,唯一的一种可能是开启了内容过滤,但是,一般情况下,好像没有这种必要吧?所以,从目前提供的信息来看,问题可能还是在你这边的可能性较大。而其,curl也就是一个普通的访问外网的函数,和其他浏览器等需要连接网络的程序一样。
    可以尝试在serve和Client上抓包看一下是否正常。
    zts1993
        6
    zts1993  
       2014-07-30 09:22:03 +08:00
    屏蔽应该是只能访问80端口,出的端口应该不限制吧,那个server会不是是要经过web登陆验证的那种?
    oott123
        7
    oott123  
       2014-07-30 09:25:10 +08:00 via Android
    @adkudao 我也在长沙,哈哈哈,csu

    @xenme 理论上来说是 waf 做的内容过滤,因为 phpinfo 经常被黑客用来查看一些信息进行进一步攻击。
    ejin
        8
    ejin  
       2014-07-30 09:49:09 +08:00
    把phpinfo用base64编码一下,看看是不是还是空白页
    zjgsamuel
        9
    zjgsamuel  
       2014-07-30 09:49:15 +08:00
    @oott123 还有waf过滤那 学习了~~ @adkudao 我建议在和管理老师沟通一下,肯定要和老师混混熟的那~
    adkudao
        10
    adkudao  
    OP
       2014-07-30 10:06:45 +08:00
    @oott123 哈哈,没错,我维护的就是csu,看来你很熟,WAF开放白名单,是可以把我整个虚拟机都暴露在外网,还是只开放对应的权限,比如curl?

    @xenme @zjgsamuel @zts1993 看来十有八九就是学校WAF导致的了
    oott123
        11
    oott123  
       2014-07-30 10:17:42 +08:00 via Android
    @adkudao 嗯啊 我在 csu 的虚拟化中心有两台虚拟机。
    他是有个防火墙,内网没办法访问外网,外网进来是走 waf 做转发进来的,所以可以访问80。
    要访问外网的话,只能让学校那边给你开放几个指定的 ip ,然后你的虚拟机就能访问那几个 ip 了。
    维护半年多,还没找到其它的方法搞定。
    akira
        12
    akira  
       2014-07-30 10:22:36 +08:00
    让 abc.com访问你
    adkudao
        13
    adkudao  
    OP
       2014-07-30 10:22:41 +08:00
    @oott123 原来如此,等于我可以向机房申请,开放abc.com的ip,然后我就可以在虚拟机中对abc.com的IP进行通信了吗? 不用ip,用网址行不行?比如对baidu.com开放白名单可以不?
    adkudao
        14
    adkudao  
    OP
       2014-07-30 10:23:50 +08:00
    @akira 谢谢,我也想过这个办法,但是需要abc.com不停的访问学校网站,比较消耗abc.com的服务器资源,所以我放弃了这个想法;
    oott123
        15
    oott123  
       2014-07-30 10:49:05 +08:00 via Android
    @adkudao 可以让学校给你开 abc.com ,然后你想干啥都走这台机器当跳板就行啦。
    用网址估计没戏,防火墙一般都是对 ip 做过滤的,百度的 ip 太多,弄不全。
    adkudao
        16
    adkudao  
    OP
       2014-07-30 10:57:20 +08:00
    @oott123

    好吧,杯具啊;

    只能开放ip白名单,那等于我绑定了私人的服务器IP后,我必须每年都从这家空间商续费了,想换个空间商都不行了,不然换个IP就没法玩了;
    oott123
        17
    oott123  
       2014-07-30 10:58:31 +08:00 via Android   ❤️ 1
    @adkudao 换了 ip 让学校给你改白名单就是了…
    就是我校老师效率比较低…每次都要催很多次…
    adkudao
        18
    adkudao  
    OP
       2014-07-30 10:59:24 +08:00
    @oott123 呵呵,好,很高兴认识你,你帮了我的大忙~
    RemRain
        19
    RemRain  
       2014-07-30 12:34:12 +08:00
    同@akira,监听80端口,让abc.com访问你,保持长连接就行,不用轮训。如果是abc.com过来的请求,就走长连接逻辑,其他请求转发给http server
    arnofeng
        20
    arnofeng  
       2014-07-30 12:48:30 +08:00
    @adkudao 同长沙 同情况 中南的么 楼主- - 是不是还要思科的VPN 才能访问
    arnofeng
        21
    arnofeng  
       2014-07-30 12:50:06 +08:00
    @oott123 我也在csu维护一台虚拟机- -爆麻烦
    adkudao
        22
    adkudao  
    OP
       2014-07-30 12:56:26 +08:00
    @RemRain 感谢提供方案,可我打算还是申请白名单算了,没那么麻烦
    adkudao
        23
    adkudao  
    OP
       2014-07-30 12:57:50 +08:00
    @arnofeng
    哈哈,没错,看来都是csu的,真是没想到v2ex居然能碰到这么多csu,而且维护csu虚拟机的;
    我也烦死了,这也限制那也限制~
    arnofeng
        24
    arnofeng  
       2014-07-30 12:59:07 +08:00
    @adkudao 我遇到 这种情况直接让系里在万网买机器
    adkudao
        25
    adkudao  
    OP
       2014-07-30 13:00:00 +08:00
    @arnofeng 我申请过,但是机房方面回复,edu.cn的域名不准指向外网,你们怎么可以指向阿里云?
    arnofeng
        26
    arnofeng  
       2014-07-30 13:03:01 +08:00
    @adkudao 用了别的域名- - 这个学校方案 是今年花了一千多万在VMware公司买的服务好像。。信息网络中心那块管的总共一百多台虚拟机。是好事也是坏事。
    adkudao
        27
    adkudao  
    OP
       2014-07-30 13:08:05 +08:00
    @arnofeng 呵呵,花了这么多钱,照样也被黑过,还被公安局责令整改;
    你们好幸福,可以换域名指向别的空间商
    arnofeng
        28
    arnofeng  
       2014-07-30 13:19:25 +08:00
    @adkudao 你不是也准备用abc.com做跳板吗?哎,看起来你要做的网站很牛啊。可以交流。
    duzhe0
        29
    duzhe0  
       2014-07-30 13:26:04 +08:00
    楼主思路错了。魔高一尺道高一丈,你这次就算用技术手段绕过了限制,被发现后照样能给你堵上。
    楼主说的这些限制, 都是很常用的服务器安全策略。正确的方法是联系管理员问问有没有白名单, 或者能不能解除部分限制。如果都不行, 那就只能放弃用百度云,想想其它解决方案了。
    adkudao
        30
    adkudao  
    OP
       2014-07-30 13:30:32 +08:00
    @arnofeng 不敢说牛,因为涉及到手机APP推送消息, 需要和百度的推送服务器建立通信,所以逼不得已才用跳板,这差不多就意味着双倍的工作量,还是杯具~
    我好想跟你们一样可以正常做网站, 多多交流~
    adkudao
        31
    adkudao  
    OP
       2014-07-30 13:31:22 +08:00
    @ejin 多谢提供思路~
    adkudao
        32
    adkudao  
    OP
       2014-07-30 13:33:45 +08:00
    @duzhe0 这个就算放弃了百度的服务,也没办法正常使用别的服务,那堵神奇的"墙",不是针对百度的,而是针对所有外网; 如你所说,还是要白名单~
    oott123
        33
    oott123  
       2014-07-30 23:13:24 +08:00
    @arnofeng
    @adkudao
    看来大家都是苦逼运维啊哈哈哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5667 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 08:09 · PVG 16:09 · LAX 00:09 · JFK 03:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.