Назад | Перейти на главную страницу

обратный прокси http на одном сервере, проходящий через прокси ssh / socks на второй сервер

Есть некоторые веб-сайты, к которым я могу получить доступ только с ограниченного набора машин, но я могу использовать ssh на некоторых из этих машин (только как обычный пользователь) и использовать ssh -D чтобы настроить прокси-сервер SOCKS на моем локальном компьютере, через который я могу получить доступ к сайтам.

Однако я бы предпочел иметь возможность перейти к http://server.that.i.control/some_path/ (защищенный каким-то образом) и пусть он будет обратным прокси через ssh -D или что-то подобное на server.that.i.control.

Возможно ли это, желательно с apache или lighttpd на server.that.i.control?

Я не знаю, как apache или lighttpd использовать прокси-сервер SOCKS, но я думаю, что это все еще можно сделать с помощью только ssh и веб-сервера.

Есть три сервера.

  1. ваш. сервер
  2. gateway.server
  3. веб сервер

ваш. сервер не может получить доступ к веб-сайтам на веб сервер или ssh в веб сервер. Из ваш. сервер вы можете использовать ssh gateway.server. Из gateway.server вы можете получить доступ к веб-сайтам на веб сервер.

Во-первых, настройте ssh так, чтобы при доступе к ранее неиспользованному порту (скажем, 3000) трафик отправлялся через ssh на gateway.server а затем через обычное подключение к порту 80 (или другому соответствующему порту) на веб сервер.

[your.server]$ ssh -fnL 3000:web.server:80 gateway.server

Во-вторых, настройте прокси в apache.

<VirtualHost *:80>
    ServerName your.server
    ProxyPass /some_path http://localhost:3000
    ProxyPassReverse /some_path http://localhost:3000
    ProxyPassReverseCookieDomain web.server your.server
    ProxyPassReverseCookiePath / /some_path
</VirtualHost>

Теперь у вас должен быть доступ к http: //your.server/some_path и получить контент от http: //web.server. Возможно, вы закончили, или может потребоваться еще один шаг.

Потенциальный недостаток этой установки заключается в том, что Хост заголовок будет установлен на localhost когда apache включен ваш. сервер подключается к веб сервер. Если веб сервер размещает несколько сайтов и использует Хост заголовок, чтобы решить, какой сайт возвращать, это не сработает. Я не знаю, как заставить apache mod_proxy изменить Хост заголовок чего-то, кроме хоста, к которому был отправлен запрос (ваш. сервер) или хост внутреннего сервера (который благодаря нашему ssh-туннелю localhost). Чтобы обойти это, отредактируйте файл hosts на ваш. сервер так что доменные имена для сайтов на веб сервер на самом деле указывают на ваш. сервер. Допустим, есть два сайта, к которым вы хотите получить доступ, site1.web.server и site2.web.server. В / etc / hosts вы бы положили

127.0.0.1 site1.web.server site2.web.server

и ваша конфигурация apache изменится на

<VirtualHost *:80>
    ServerName your.server

    ProxyPass /some_path http://site1.web.server:3000
    ProxyPassReverse /some_path http://site1.web.server:3000
    ProxyPassReverseCookieDomain site1.web.server your.server
    ProxyPassReverseCookiePath / /some_path

    ProxyPass /another_path http://site2.web.server:3000
    ProxyPassReverse /another_path http://site2.web.server:3000
    ProxyPassReverseCookieDomain site2.web.server your.server
    ProxyPassReverseCookiePath / /another_path
</VirtualHost>

Чтобы обезопасить доступ к обратному прокси, посмотрите Как пройти аутентификацию Apache.