только с SSH: обратный туннельный доступ через прокси-сервер ssh SOCKS

15

Время от времени мне приходится подключаться к серверу, доступ к которому сильно ограничен.
Только входящий SSH разрешен брандмауэром DMZ.
Исходящие HTTP-соединения заблокированы.

Я ищу простой способ туннелирования веб-доступа через мой сеанс SSH, чтобы я мог устанавливать обновления и программное обеспечение через yum / apt-get. В идеале я хотел бы избежать установки дополнительного программного обеспечения / услуг в защищенной области.

Что вы делаете в такой ситуации?

У SSH есть -D <port>опция прокси SOCKS. Но, к сожалению, это только один путь от клиента к серверу, и обратного варианта нет.

Кай
источник

Ответы:

26

Мне наконец удалось сделать это sshтолько с:

  1. запустить локальный SOCKS прокси на вашем клиентском компьютере (используя ssh -D)
  2. подключиться к удаленному серверу и настроить переадресацию обратного порта ( ssh -R) на локальный прокси-сервер SOCKS
  3. настроить серверное программное обеспечение для использования перенаправленного прокси

1. Запустите локальный socks прокси в фоновом режиме

Подключитесь к localhost через SSH и откройте прокси SOCKS на порту 54321.

$ ssh -f -N -D 54321 localhost

-f запускает SSH в фоновом режиме.

Примечание. Если вы закроете терминал, в котором вы запустили команду, процесс прокси будет уничтожен. Также не забудьте убрать за собой, либо закрыв окно терминала, когда вы закончите, либо убив процесс самостоятельно!

2. подключиться к удаленному серверу и настроить переадресацию обратного порта

Свяжите удаленный порт 6666 с локальным портом 54321. Это сделает ваш локальный прокси-сервер socks доступным для удаленного сайта через порт 6666.

$ ssh root@target -R6666:localhost:54321

3. настроить серверное программное обеспечение для использования перенаправленного прокси

Просто настройте yum, apt, curl, wget или любой другой инструмент, который поддерживает SOCKS для использования прокси 127.0.0.1:6666.

Вуаля! Счастливого туннелирования!


4. необязательно: настройте серверное программное обеспечение для использования перенаправленного прокси

Я обнаружил, что установка proxychainsна целевой сервер намного упрощает работу.

Это позволяет любому программному обеспечению использовать прокси-сервер SOCKS (даже telnet), используя LD_PRELOADтрюк для перенаправления запросов TCP и DNS от произвольных команд в прокси.

Настройка /etc/proxychains.confдля использования перенаправленного прокси socks:

[ProxyList]
# SSH reverse proxy
socks5  127.0.0.1 6666

Туннельные произвольные инструменты (которые используют TCP) с proxychains:

$ proxychains telnet google.com 80
$ proxychains yum update
$ proxychains apt-get update
Кай
источник
3

Новые версии SSH позволяют использовать очень простую опцию ssh-R <[bind_address:]port>. Использование только порта на хосте и, возможно, адреса привязки, но без указания порта на стороне клиента создаст обратный прокси-сервер SOCKS.

Об этом также говорится в справочных страницах новых версий SSH:

[...] если не было указано явное место назначения, ssh будет действовать как прокси-сервер SOCKS 4/5 и перенаправлять соединения на места назначения, запрошенные удаленным клиентом SOCKS.

Вы можете проверить это с помощью curl, подключенного к простому API-интерфейсу "дай мне мой IP", например http://ifconfig.io .

$ curl ifconfig.io

против

$ curl --socks5 localhost:<PORT> ifconfig.io

Ричард Метцлер
источник
2
Было бы полезно упомянуть, в каком номере версии была представлена ​​эта функция.
Касперд
намного проще, спасибо!
Кай
1
@kasperd: OpenSSH 7.6 , выпущено 2017-10-03. Проверьте третий пункт в разделе « Новые функции»
MestreLion,