Источник: Setting Up a SOCKS Proxy Over SSH Tunnels
Начнём с простого примера. Предположим, у нас есть доступ к SSH-серверу sshd_server, который мы хотим использовать как прокси-сервер SOCKS5. Для этого достаточно выполнить команду:
ssh -D 8080 username@sshd_serverПосле этого укажите в настройках прокси браузера, например Firefox, SOCKS5-прокси 127.0.0.1:8080. Готово!
Проверить, какой IP-адрес видят сайты при работе через прокси, можно на странице «Кто я?».
Через SSH можно настроить и более сложную схему. Например, у нас есть SSH-сервер s2 и ещё один узел s1, который будет выступать в роли прокси-сервера. Узел s1 принимает подключения клиентов, а s2 подключается к серверу назначения s3. Общая схема выглядит так:
c0:p0 <--> s1:p1 <==> s2:p2 <--> s3
Как и в простом примере выше, чаще всего c0 и s1 — один и тот же компьютер.
Использовать SSH в качестве прокси для просмотра веб-страниц удобно в нескольких случаях:
- локальный доступ ограничен, например строгим межсетевым экраном в стране, компании или учебном заведении;
- вы находитесь в небезопасном сетевом окружении и хотите войти в свою учётную запись.
Рассмотрим настройку прокси через SSH-туннель. Для этого используется динамическая переадресация портов SSH, которая включается параметром -D. SSH создаёт на локальной стороне сокет, прослушивающий заданный порт; при необходимости сокет можно привязать к определённому IP-адресу. Каждое подключение к этому порту передаётся по SSH-каналу, после чего прикладной протокол определяет, к какому адресу следует подключиться с удалённого узла.
Такой прокси-сервер можно использовать только на локальном компьютере: другим пользователям он недоступен. В приведённой выше схеме c0 и s1 являются одним компьютером.
Команда:
ssh -D p1 username@sshd_serverЗдесь p1 — порт на локальном компьютере. В качестве p1 можно выбрать любой порт с номером больше 1024. После создания прокси-туннеля укажите в настройках браузера SOCKS5-прокси 127.0.0.1:p1. На этом настройка завершена.
Такой прокси-сервер может обслуживать и других пользователей. Они, включая вас, смогут подключаться к нему по адресу s1_ip и порту p1.
Команда:
ssh -D s1_ip:p1 username@sshd_serverКоманда создаёт на s1 прокси-сервер SOCKS5 с адресом s1_ip:p1.
Следующие параметры SSH делают переадресацию портов удобнее:
-C— включает gzip-сжатие всех данных;-T— отключает выделение псевдотерминала;-N— не выполняет команду на удалённом узле, что удобно при использовании SSH только для переадресации портов;-f— переводит SSH в фоновый режим непосредственно перед выполнением команды;-n— перенаправляет стандартный ввод из/dev/null, то есть запрещает чтение из стандартного ввода;-q— включает тихий режим и подавляет большинство предупреждений и диагностических сообщений.
Эти параметры можно использовать вместе с -D в разных сочетаниях. Например:
ssh -CnfND 8080 username@sshd_serverЧтобы закрыть такой SSH-туннель, сначала найдите идентификатор процесса (PID):
ps aux | grep sshЗатем завершите найденный процесс.
Можно также оставить SSH запущенным в текущей оболочке:
ssh -CTND 8080 username@sshd_serverЧтобы принимать подключения на всех адресах узла, выполните:
ssh -D "*:8080" username@sshd_serverЭта статья посвящена главным образом созданию прокси с помощью SSH. Однако SSH-туннель можно использовать и для подключения клиента к прокси-серверу другого типа, например Squid. Здесь приведён только простой пример; подробнее о переадресации портов через SSH рассказано в статье «Переадресация портов через SSH-туннель».
Предположим, адрес и порт прокси-сервера — proxy:port. Перенаправить к нему локальный порт 8080 можно так:
ssh -L 8080:proxy:port username@sshd_serverГлобальный прокси GNOME с NetworkManager в Linux ∞
Если вы используете Linux с NetworkManager, можно настроить глобальный прокси GNOME для работы через SOCKS-прокси, созданный с помощью SSH.
