标题:限制mod_proxy_connect可代理的host 出处:Felix021 时间:Fri, 24 Feb 2012 19:02:09 +0000 作者:felix021 地址:https://www.felix021.com/blog/read.php?2067 内容: 上一篇TCP Port Multiplexing提到,proxy_connect模块貌似不能限制被代理的HOST。也就是说,通过这台服务器可以PROXY到任意机器这样是有风险的。可是mod_proxy模块又没有提供专门的配置来限制可代理的HOST,所以只好舍近求远写了个multiplexer。 实际上要解决这个问题也是很简单的,可以想到,知道找到相应的地方,直接修改源码,只需要几行就行。虽然以前没有搞过apache的module,但是跟php的也比较类似了。看了下代码发现,前文的“貌似”两个字可以去掉了,的确没有什么地方限制了可代理的HOST。 在Ubuntu下尤其简单:(假定已经配置好了mod_proxy/mod_proxy_connect,比如AllowConnect 22、ProxyRequests On什么的) 引用 $ apt-get source apache2 $ cd apache2-2.2.14/modules/proxy $ vi mod_proxy_connect.c +123 #就是打开123行,这里刚从http请求里分离出HOST 添加如下几行: char *allowed_hosts[] = { "SOME_HOST_NAME", "SOME_IP", "127.0.0.1", "localhost" }; int hosts_num = sizeof(allowed_hosts) / sizeof(allowed_hosts[0]); int k; for (k = 0; k < hosts_num; k++) { if (strncmp(uri.hostname, allowed_hosts[k], strlen(allowed_hosts[k])) == 0) { break; } } if (k == hosts_num) { return ap_proxyerror(r, HTTP_BAD_GATEWAY, apr_pstrcat(p, "host not allowed for: ", uri.hostname, NULL)); } 保存后,执行引用 $ sudo apt-get install apache2-dev $ apxs2 -c mod_proxy_connect.c proxy_util.c $ cp .libs/mod_proxy_connect.so /usr/lib/apache2/modules #这里会覆盖现有的,最好备份一下 $ sudo /etc/init.d/apache2 restart 然后再试试看? Generated by Bo-blog 2.1.0