我想通过端口 80(由 apache 侦听)来隧道化我的 ssh。mod_proxy & mod_proxy_connect 为我提供了AllowCONNECT指令,允许我使用CONNECT host:22 HTTP/1.1
连接到我的 ssh 主机。但是CONNECT后面的主机不限,有解决办法吗?
问问题
570 次
2 回答
1
有一个不需要更改 Apache 源代码的解决方案。将以下内容放入您的 httpd.conf 文件中:
# By default, deny everyone. If you don't,
# others will be able to connect to port 22 on any host.
<Proxy *>
Order deny,allow
Deny from all
</Proxy>
# Only allow CONNECT to specific hosts;
<ProxyMatch (^(host1\.com|host2|host3):22$)>
Order allow,deny
Allow from all
</ProxyMatch>
更改 Apache 源代码会增加维护负担,因为您必须将补丁重新应用到每个新的 Apache 版本。
于 2016-12-25T23:56:48.367 回答
0
我自己想通了。只需添加几行
apache2.2/modules/proxy/mod_proxy_connect.c +123
char *allowed_hosts[] = {
"your host",
"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));
}
于 2012-02-24T10:52:21.963 回答