【问题标题】:How to limit mod_proxy_connect's host?如何限制 mod_proxy_connect 的主机?
【发布时间】:2012-02-23 07:39:23
【问题描述】:

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

【问题讨论】:

  • 那么 apache.conf 中的 <ProxyMatch> 指令呢?

标签: apache ssh mod-proxy tunnel


【解决方案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 版本。

【讨论】:

  • 非常感谢!虽然这么多年过去了,我已经完全放弃了 apache 并切换到了 nginx :)
  • 这实际上不起作用。 Proxy/ProxyMatch 与连接隧道的去向不匹配,它们与正在使用的代理“worker”匹配,字面意思是 * 表示 fwd 代理。
【解决方案2】:

我自己想通了。只需在

中添加几行

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));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 2015-11-17
    • 2018-01-11
    • 2022-08-15
    相关资源
    最近更新 更多