SSH-тунель може використовуватися як SOCKS-проксі за допомогою функції динамічної переадресації портів SSH-клієнта, дозволяючи перенаправляти трафік з локального порту через SSH-сервер до довільних пунктів призначення в мережі, доступних для SSH-сервера.
Розуміння SOCKS через SSH
SOCKS (Socket Secure) — це інтернет-протокол, який маршрутизує мережеві пакети між клієнтом і сервером через проксі-сервер. У поєднанні з динамічною переадресацією портів SSH, SSH-клієнт створює локальний SOCKS-проксі-сервер. Будь-яка програма, налаштована на використання цього локального SOCKS-проксі, матиме свій трафік зашифрованим і маршрутизованим через SSH-з'єднання до віддаленого SSH-сервера. Потім SSH-сервер діє як SOCKS-проксі, встановлюючи з'єднання з кінцевим пунктом призначення від імені клієнта.
Цей механізм ефективно розширює мережевий доступ клієнта до рівня SSH-сервера, одночасно шифруючи всі дані, що передаються між клієнтом і SSH-сервером.
Як працює динамічна переадресація портів
Динамічна переадресація портів, що задається опцією -D в SSH, вказує SSH-клієнту:
1. Прослуховувати вказаний локальний порт для вхідних з'єднань.
2. Коли з'єднання отримано на цьому локальному порту, SSH-клієнт діє як SOCKS-сервер.
3. Він узгоджує протокол SOCKS з клієнтською програмою (наприклад, веб-браузером).
4. На основі SOCKS-запиту (який включає цільовий хост і порт) SSH-клієнт пересилає цей запит через зашифрований SSH-тунель до SSH-сервера.
5. Потім SSH-сервер ініціює з'єднання з цільовим хостом і портом зі свого власного мережевого контексту.
6. Всі подальші дані, що обмінюються між клієнтською програмою та цільовим хостом, передаються через SSH-тунель, зашифровані між клієнтом і SSH-сервером.
Налаштування SSH SOCKS-проксі
Щоб встановити SSH SOCKS-проксі, використовується SSH-клієнт для підключення до віддаленого SSH-сервера. Сервер повинен бути налаштований на дозвіл переадресації TCP (що зазвичай увімкнено за замовчуванням через AllowTcpForwarding yes у sshd_config).
Основна команда для налаштування динамічної переадресації портів:
ssh -D [LOCAL_PORT] [USER]@[SSH_SERVER_IP] -N -f
Пояснення опцій команди:
-D [LOCAL_PORT]: Вказує динамічну переадресацію портів. SSH-клієнт буде прослуховуватиLOCAL_PORTна локальній машині. Цей порт функціонуватиме як SOCKS-проксі. Поширені варіанти дляLOCAL_PORTвключають 1080, 8080, 9050 або будь-який непривілейований порт