SSH как SOCKS сервер

25.05.2022

Теги: BashDNSHTTPHTTPSLinuxSSHКлиентНастройкаСерверСокет

Допустим, нам нужен доступ к сайту, который заблокирован на территории России. Тогда нам потребуется ssh-сервер с белым ip-адресом где-то за границей. Можно настроить VPN-сервер, чтобы выходить в интернет через него. Но можно обойтись без установки дополнительного программного обеспечения, а использовать возможности ssh-сервера. Вот цитата из документации по команде ssh:

-D [bind_address:]port Dynamic application-level port forwarding. This allocates a socket to listen to port
on the local side. When a connection is made to this port, the connection is forwarded over the secure channel,
and the application protocol is then used to determine where to connect to from the remote machine.

При использовании ключа -D осуществляется динамическая переадресация портов на уровне приложения. На локальном устройстве (где работает ssh-клиент) выделяется/создается сокет для прослушивания определенного порта. Когда с этим портом устанавливается соединение, оно перенаправляется по безопасному каналу на удаленное устройство (на котором работает ssh-сервер). А затем уже там, на удаленном компьютере, для определения того, куда именно должно быть осуществлено соединение, используется прикладной протокол.

$ ssh -D 8080 evgeniy@123.123.123.123

Если ssh-сервер работает на порту, отличном от 22-го, его тоже нужно указать:

$ ssh -p 2222 -D 8080 evgeniy@123.123.123.123

Иногда бывает так, что почти все порты закрыты. Но, как правило, открыт 443-ий порт — так что можно настроить ssh-сервер на этот порт. Мало того, можно настроить работу ssh-сервера на двух портах — для этого редактируем файл конфигурации /etc/ssh/sshd_config.

$ sudo nano /etc/ssh/sshd_config
Port 22
Port 443
$ sudo systemctl restart ssh

Теперь команда будет выглядеть так:

$ ssh -p 443 -D 8080 evgeniy@123.123.123.123

Для удобства можно создать файл конфигурации клиента ~/.ssh/config:

Host ssh-proxy
    Hostname 123.123.123.123
    User evgeniy
    Compression yes
    DynamicForward 127.0.0.1:8080
    Port 443
$ ssh ssh-proxy

Хорошо, с этим разобрались, теперь настроим браузер Firefox — Настройки → Основные → Параметры сети:

Ниже есть дополнительная настройка, которая позволяет отправлять DNS-запросы тоже через наш ssh-сервер. Также там есть настройка, чтобы отправлять DNS-запросы через HTTPS, чтобы скрыть от посторонних глаз, какие сайты планируется посетить. И можно указать подходящий DNS-сервер, который поддерживает такую возможность, или оставить DNS-сервер по умолчанию — это Cloudflare.

При вводе веб-адреса или доменного имени в адресную строку, браузер отправляет запрос через интернет для поиска ip-адреса этого сайта. Традиционно этот запрос отправляется на серверы посредством простого текстового соединения. Это соединение не шифруется, позволяя посторонним видеть, какой веб-сайт будет посещен. DNS через HTTPS (DoH) работает иначе. Он отправляет доменное имя на DNS-сервер, совместимый с DoH, с помощью зашифрованного HTTPS-соединения вместо простого текста. Это предотвращает доступ посторонних к информации о том, какие веб-сайты планируется посетить.

Теперь проверим, что все работает — заходим на Яндекс и вводим запрос «мой ip адрес»:

Кроме того, мы можем изменить команду, чтобы прослушивать все интерфейсы (а не только localhost), включая ethernet или wifi — это позволит другим компьютерам в нашей локальной сети просматривать сайты через ssh-сервер. Теперь в настройках Firefox на других компах сети нужно указать ip-адрес нашего компа, например 192.168.100.2.

$ ssh -p 443 -D 0.0.0.0:8080 evgeniy@123.123.123.123

Не только браузер, но и многие другие приложения могут использовать socks-прокси. У некоторых приложений есть параметры конфигурации для активации прокси-сервера. Другим нужно немного помочь вспомогательной программой — например, proxychains позволяет запустить через прокси Microsoft RDP и другие.

Дополнительно

Поиск: Bash • DNS • HTTP • HTTPS • Linux • SSH • Клиент • Сервер • Сокет • Настройка • SOCKS • прокси • proxy

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.