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

2014-07-30 08:59:49 +08:00
 adkudao
我现在开发并维护一个学校网站,这个学校网站的空间就放在学校内部的服务器上,但是有点奇葩,它是在一个服务器上划分一个虚拟机给我,装的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)?
5484 次点击
所在节点    问与答
33 条回复
zjgsamuel
2014-07-30 09:05:59 +08:00
很是诡异那!
第一条我理解,防火墙做了端口映射的限制以及端口访问的策略; 但是第二条开始,防火墙能够屏蔽PHP的函数? 这不应该那,问问机房的人呢?
oott123
2014-07-30 09:11:58 +08:00
我也遇到过。
给管理老师打电话,列一个白名单出来,让他们打开这些访问就行了。
第二点是学校的 WAF 做特征识别导致的。
除此之外也有一些取巧的办法,比如 ssh tunnel 之类,但是在生产环境基本不可行,可以无视。
btw,难道 lz 和我同一个学校?
adkudao
2014-07-30 09:12:06 +08:00
@zjgsamuel 真是这样,不骗你;

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

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

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

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

好吧,杯具啊;

只能开放ip白名单,那等于我绑定了私人的服务器IP后,我必须每年都从这家空间商续费了,想换个空间商都不行了,不然换个IP就没法玩了;
oott123
2014-07-30 10:58:31 +08:00
@adkudao 换了 ip 让学校给你改白名单就是了…
就是我校老师效率比较低…每次都要催很多次…
adkudao
2014-07-30 10:59:24 +08:00
@oott123 呵呵,好,很高兴认识你,你帮了我的大忙~
RemRain
2014-07-30 12:34:12 +08:00
同@akira,监听80端口,让abc.com访问你,保持长连接就行,不用轮训。如果是abc.com过来的请求,就走长连接逻辑,其他请求转发给http server
arnofeng
2014-07-30 12:48:30 +08:00
@adkudao 同长沙 同情况 中南的么 楼主- - 是不是还要思科的VPN 才能访问

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

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

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

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

© 2021 V2EX