Он искал документацию
Он искал документацию

Вступление:

Доступ к интернету в наши дни напоминает игру в «Сапёра»: никогда не знаешь, где рванёт и какой репозиторий отвалится завтра. Утром ты сеньор-помидор, а к обеду не можешь стянуть дистрибутив, потому что чей-то IP попал под горячую руку регулятора.

Если вы давно живёте в терминале, скорее всего всё это знаете - этот текст для тех, кто ещё не использовал SSH как SOCKS5-прокси.

Конечно, можно развернуть VLESS с XTLS-Reality, обернуть это в CDN и присыпать сверху магией, но иногда нужно решение в стиле «тяп-ляп и в продакшен».

Встречайте: SOCKS5 поверх SSH. Дешево, сердито и работает (если ваш провайдер еще не научился вскрывать SSH-пакеты зубами).

Имея VPS за пару долларов, вы можете вернуть себе доступ к документации (и, чего уж греха таить, к котикам в Instagram) буквально одной командой.

Типичный дешевый сервер
Типичный дешевый сервер

Дисклеймер: учитывайте законодательство вашей страны и условия договора с провайдером при использовании любых прокси и туннелей.

Как это работает?

Как найти документацию
Как найти документацию

SSH — это не только чёрная консоль для красноглазых админов. Он умеет делать динамический прокси (-D).
Никаких Squid, 3proxy или сложных конфигов, от которых хочется выйти в окно. Только стандартный sshd.

Для пользователей Windows 10/11, Linux и macOS:

Забудьте про сторонний софт. В вашей консоли уже, скорее всего, есть всё необходимое.

ssh -D 1081 -N -C user@1.1.1.1

Где:

  • -D 1081: поднимает локальный SOCKS5 на порту 1081.

  • -N: говорит SSH «не открывай мне шелл, я тут только ради туннеля».

  • -C: включает сжатие (полезно, если вы читаете текст, бесполезно, если смотрите 4K-видео).

Для любителей классики и Windows 7 (через plink.exe), можно все вписать proxystart.bat:

plink.exe -ssh user1@1.1.1.1 -pw MySuperSecretPass -D 1081 -N -batch

⚠️ Дисклеймер: Передавать пароль в аргументах командной строки (-pw) — это моветон. Ваш системный администратор увидит это в логах и будет грустно вздыхать. А если это увидит «товарищ майор» в дампе процессов... В общем, используйте ключи, но об этом ниже.

Настраиваем в браузере прокси 127.0.0.1:1081 и наслаждаемся. А здесь должна быть отбивка, зачем нам portable Firefox - а затем, что можно прописать прокси сервер независимо от системы, и каждую сессию стартовать с новой историей и куки, если озаботиться развертыванием из архива перед новой сессией или когда захотим начать с чистого листа.

Настройка доступа через прокси
Настройка доступа через прокси

Автоподключение при старте системы (чтобы не тыкать команду каждый раз)

Если туннель нужен постоянно, надоело руками запускать ssh -D после каждого перезапуска.

Варианты по платформам:

  • Windows

    • Сгенерировать ключ и сохранить его в Pageant (PuTTY-агент).

    • Создать задачу в Планировщике заданий: запуск plink.exe с параметрами -D -N, триггер — при входе пользователя или при старте системы.

  • macOS

    • Описать ssh -D в LaunchAgent (plist-файл в ~/Library/LaunchAgents/) и включить автозапуск через launchctl.

  • Linux

    • Создать systemd --user сервис, который поднимает туннель для конкретного пользователя при входе в сессию.

А если хочется сделать «и чтобы переподнимался сам, если отвалится», можно использовать autossh:

autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -D 1081 -N user@1.1.1.1

autossh будет следить за соединением и перезапускать туннель, если оно оборвётся.

"Брат, дай интернет"

Иногда коллега с грустными глазами просит доступ, чтобы посмотреть мануал для Солидворкса на Ютубе.

Давать ему свой root-пароль — плохая примета (к потере сервера). Создадим для него отдельную «комнату».

# Создаем пользователя без доступа к консоли (только туннель — высший пилотаж паранойи)
sudo useradd -m -s /usr/sbin/nologin friend_user
sudo passwd friend_user

Теперь вы и ваш коллега ходите через один сервер, но если он решит скачать весь торрент-трекер и положить вам канал, вы будете знать, кого бить.

Почему отдельные юзеры — это хорошо?

  1. Изоляция.
    Надоел коллега? sudo userdel friend_user. Быстро, жёстко, эффективно.

  2. Логи.
    В /var/log/auth.log видно, кто и когда заходил (на Debian/Ubuntu). Если увидите вход в 3 часа ночи с IP-адреса в Антарктиде — время менять пароли.

Безопасность: не будьте наивными

SSH-порт, торчащий в интернет на 22-м порту, привлекает ботов сильнее, чем бесплатное пиво — студентов.

1. Fail2Ban — мастхэв!!!

Это вышибала для вашего клуба. Три раза ошибся паролем — иди гуляй на 10 минут.

sudo apt install fail2ban -y
# Он работает из коробки, но лучше проверить конфиг, чтобы не забанить самого себя.

2. Ключи — наше всё

Пароли воруют, подбирают, записывают на стикерах. SSH-ключи — это как биометрия, только для серверов.

На клиенте:

ssh-keygen -t ed25519
ssh-copy-id user@1.1.1.1

Теперь вход выглядит так:

ssh -D 1081 -N user@1.1.1.1

Никаких паролей. Чистая криптография. И вы чувствуете себя хакером из фильмов 90-х.

Ложка дёгтя (Важно!)

SSH-туннель — это не VPN и не VLESS.

  1. DPI видит протокол SSH.
    Если ваш провайдер решит резать SSH-трафик, этот метод перестанет работать.

  2. UDP не поддерживается.
    Звонки в Telegram или Zoom через такой SOCKS5 могут не работать (SSH умеет только TCP, хотя есть костыли, но это тема другой статьи).

  3. DNS.
    Убедитесь, что ваш браузер проксирует и DNS-запросы тоже (галочка "Proxy DNS when using SOCKS v5" в Firefox), иначе провайдер увидит, на какие сайты вы ходите, хоть и не увидит контент.

А теперь провайдер не видит адресную строку
А теперь провайдер не видит адресную строку

Заключение

SSH-прокси — это швейцарский нож. Он не заменит полноценный инструмент для обхода блокировок в условиях жесткой цензуры, но как средство «быстро попасть на любимый сервер» часто работает без навороченных комбайнов.

Настраивается за минуту, не требует установки лишнего софта и спасает нервные клетки. А свобода... свобода нынче начинается с собственных знаний.

Ряд проблем

Проблема 22 порта:
Сейчас многие провайдеры (особенно мобильные) режут или замедляют именно SSH протокол. Можно сменить порт SSH сервера на 443 (если там не веб-сервер) или любой рандомный (например, 2222), чтобы снизить вероятность блокировки по стандартному порту.

Клиентская часть:
Не все любят консоль. Можно рекомендовать для использования Windows: Bitvise SSH Client (умеет socks из коробки и автореконнект). Android/iOS: Termius или ConnectBot (чтобы раздать интернет с телефона через SSH туннель).

Настройка ufw: имеет смысл запретить доступ на сервер со всего интернета и оставить только известный диапазон адресов своего провайдера на случай если Fail2Ban не вывезет.

P.S. Статья написана в основном для неофитов и для побуждения поднять свой уровень образования в части сетевого администрирования и использования сетевых протоколов. Тема статьи бесконечная, и дан абсолютный минимум.

Комментарии (0)