0

我想通过端口 80(由 apache 侦听)来隧道化我的 ssh。mod_proxy & mod_proxy_connect 为我提供了AllowCONNECT指令,允许我使用CONNECT host:22 HTTP/1.1连接到我的 ssh 主机。但是CONNECT后面的主机不限,有解决办法吗?

4

2 回答 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 回答