лише для SSH: доступ до веб-зворотного тунелю через ssh SOCKS проксі


15

Час від часу мені доводиться підключатися до сервера, де доступ сильно обмежений.
Брандмауер DMZ дозволений лише вхідному SSH.
Вихідні HTTP-з'єднання заблоковані.

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

Що ти робиш у такій ситуації?

SSH має -D <port>опцію проксі-сервера SOCKS. Але на жаль, це лише односторонній шлях від клієнта до сервера і немає зворотного варіанту.

Відповіді:


26

Нарешті мені вдалося досягти цього sshлише:

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

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

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

$ ssh -f -N -D 54321 localhost

-f працює SSH у фоновому режимі.

Примітка: Якщо ви закриєте термінал, де ви запустили команду, процес проксі-сервера буде знищений. Також не забудьте прибрати за собою, закривши вікно терміналу, коли закінчите, або вбивши процес!

2. підключитись до віддаленого сервера та налаштувати переадресацію зворотного порту

Прив’яжіть віддалений порт 6666 до локального порту 54321. Це робить ваш локальний проксі-носок доступним для віддаленого сайту на порту 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для використання переадресованого проксі-шкарпетки:

[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.

Ви можете перевірити це за допомогою завитка, підключення до простого "дайте мені свій IP" -API, як http://ifconfig.io .

$ curl ifconfig.io

проти

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


2
Було б корисно згадати, в якому номері версії ця функція була введена.
kasperd

набагато простіше, ніж подяк!
Каї

1
@kasperd: OpenSSH 7.6 , випущений 2017-10-03. Перевірте 3-ю точку кулі в розділі Нові функції
MestreLion
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.