Как ограничить хост mod_proxy_connect? - PullRequest
0 голосов
/ 23 февраля 2012

Я хочу туннелировать свой SSH через порт 80 (прослушивается Apache). mod_proxy и mod_proxy_connect предоставляют мне директиву AllowCONNECT , позволяющую мне использовать CONNECT host:22 HTTP/1.1 для подключения к моему хосту ssh. Но хост, следующий за CONNECT не ограничен, есть ли решение?

Ответы [ 2 ]

0 голосов
/ 26 декабря 2016

Существует решение, которое не требует изменения исходного кода 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.

0 голосов
/ 24 февраля 2012

Я понял это сам. Просто добавьте несколько строк в

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