Введение
В какой-то момент вы можете оказаться в небезопасной сети или сети с очень строгим брандмауэром, и вам захочется убедиться, что никто не следит за вашим трафиком. Одним из решений является настройка VPN в Ubuntu 22.04 / 20.04 / 18.04, но многие VPN требуют установки специального клиентского ПО на вашем компьютере, на установку которого у вас может не быть прав. Однако, если вам нужен только безопасный веб-сёрфинг, существует быстрая, бесплатная и полезная альтернатива: прокси-туннель SOCKS 5.
SOCKS-прокси — это зашифрованный SSH-туннель, через который настроенные приложения направляют свой трафик, а затем на стороне сервера прокси-сервер перенаправляет его в общедоступный интернет. В отличие от VPN, SOCKS-прокси необходимо настраивать отдельно для каждого приложения на клиентском устройстве, но если приложение поддерживает SOCKS-прокси, вы можете запускать приложения без специального клиентского ПО. На стороне сервера достаточно настроить только SSH.
В этом руководстве вы будете использовать сервер под управлением Ubuntu 22.04 (хотя подойдёт любой дистрибутив Linux, к которому можно получить доступ по SSH) и веб-браузер Firefox в качестве клиентского приложения. К концу этого руководства вы сможете просматривать веб-сайты через зашифрованный SSH-туннель.
Предпосылки
- Сервер Linux под управлением Ubuntu (другие дистрибутивы тоже подойдут) с пользователем
судои SSH-доступ. - Программа для настройки прокси-сервера SOCKS, например веб-браузера Firefox.
- Пользователям Windows также понадобится инструмент PuTTY или подсистема Windows для Linux (WSL).
PuTTY используется для настройки прокси-туннеля для пользователей Windows. Пользователи macOS или Linux имеют предустановленные инструменты для настройки туннеля.
Шаг 1 (macOS/Linux) — Настройка туннеля
На локальном компьютере, если вы ещё не создали свой дроплет, сгенерируйте SSH-ключ. После генерации ключа убедитесь, что открытый ключ добавлен в файл “authorized_keys” вашего SSH-дроплета. Затем откройте терминальное приложение, чтобы создать SSH-туннель с включённым SOCKS-прокси.
Запустите туннель с помощью этой команды:
ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domainОбъяснение доказательства
-я: Путь SSH-ключа для подключения к хосту-Д: сообщает SSH, что нам нужен туннель SOCKS на указанном номере порта (можно выбрать номер от 1025 до 65536)-ф: Перемещает процесс в фоновый режим-С: Сжимает данные перед отправкой-q: Использует беззвучный режим-Н: сообщает SSH, что после закрытия туннеля никакие команды отправляться не будут.
Проверьте, работает ли туннель, с помощью этой команды:
ps aux | grep sshВ выводе вы увидите такую строку:
Output
sammy 14345 0.0 0.0 2462228 452 ?? Ss 6:43AM 0:00.00 ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain
Вы можете выйти из терминала, и туннель останется активным. Это связано с тем, что мы использовали аргумент -f, который переводит сеанс SSH в фоновый режим.
Шаг 1 (Windows) — Настройка туннеля
Откройте PuTTY. Если вы ещё не установили его, скачайте PuTTY и сохраните его в любом месте по вашему выбору. Для установки PuTTY не требуются права администратора. Просто .Exe Загрузите и запустите.
Чтобы настроить туннель, выполните следующие действия:
В разделе «Сеанс» добавьте имя хоста (или IP-адрес) вашего сервера и порт SSH (обычно 22).
Слева перейдите к: Подключение > SSH > Туннели
Введите любой номер порта источника от 1025 до 65536, например, 1337.
Выберите кнопку «Динамическое радио».
Нажмите кнопку Добавить.
Вернитесь к сеансу слева.
Добавьте имя в поле «Сохраненные сеансы» и нажмите кнопку «Сохранить».
Теперь нажмите кнопку «Открыть», чтобы установить соединение.
Имя пользователя судо и введите пароль вашего сервера для входа в систему
Шаг 2 — Настройте Firefox для использования туннеля
Теперь, когда у вас есть SSH-туннель, пора настроить Firefox для его использования. Помните, что для работы туннеля SOCKS 5 необходимо использовать локальное приложение, способное его реализовать. В Firefox есть такая возможность:
Этот шаг одинаков для Windows, macOS и Linux.
Убедитесь, что у вас указан номер порта, который вы использовали в команде SSH. В наших примерах мы использовали 1337.
(Приведенные ниже действия были выполнены в Firefox версии 80, но должны работать и в других версиях, хотя расположение параметров может отличаться.)
Откройте Firefox.
- В правом верхнем углу нажмите на значок гамбургера, чтобы открыть меню Firefox.
- Щелкните пункт меню «Настройки» или «Параметры».
- Прокрутите вниз и нажмите кнопку Настройки… в разделе Настройки сети.
- В разделе «Настройка доступа прокси-сервера к Интернету» выберите Ручная настройка прокси-сервера.
- В качестве хоста SOCKS введите localhost или 127.0.0.1, а в качестве порта используйте указанный в вашем туннеле порт — 1337.
- Внизу установите флажок «DNS-прокси при использовании SOCKS v5».
- Нажмите кнопку «ОК», чтобы сохранить и закрыть настройки.
Теперь откройте другую вкладку в Firefox и начните просматривать веб-страницы. Вы должны быть готовы к безопасному просмотру через SSH-туннель. Данные, получаемые с сайта, зашифрованы. Кроме того, поскольку вы включили опцию «Прокси DNS», ваши DNS-запросы также шифруются, чтобы ваш интернет-провайдер не мог видеть, что вы просматриваете и откуда вы это берёте.
Чтобы убедиться, что вы используете прокси-сервер, вернитесь к настройкам сети в Firefox, введите другой номер порта и сохраните настройки. Теперь при попытке просмотра веб-страниц должно появиться сообщение об ошибке: “Прокси-сервер отклоняет соединения”. Это подтверждает, что Firefox использует прокси-сервер, а не просто подключение по умолчанию. В качестве альтернативы вы можете перейти на сайт с публичным IP-адресом, например, ipecho.net, и возвращаемый им IP-адрес должен быть IP-адресом вашего SSH-сервера, поскольку теперь он выполняет функции вашего прокси-сервера.
Шаг 3 — Сброс прокси в Firefox
Когда вы закончите с обеспечением конфиденциальности SSH-туннеля, вернитесь к настройкам сетевого прокси-сервера в Firefox. Щелкните переключатель «Использовать системные настройки прокси-сервера» и нажмите кнопку «ОК». Теперь, когда Firefox больше не использует SOCKS-туннель, мы можем его отключить. Вы можете оставить туннель активным, чтобы иметь возможность включать и отключать прокси-сервер в Firefox, но если туннель будет слишком долго бездействовать, он может закрыться сам.
Закрыть туннель (macOS/Linux)
Туннель, который мы ранее создали на локальной машине, был переведен в фоновый режим, поэтому закрытие окна терминала, с помощью которого вы его открыли, не завершит его работу. Чтобы завершить туннель, нам нужно определить идентификатор процесса (PID) с помощью команды ps, а затем с помощью убийство Давайте завершим процесс.
Давайте найдем все активные процессы ssh на нашей машине:
ps aux |grep sshНайдите строку, похожую на команду, которую вы ввели ранее для создания туннеля. Вот пример вывода:
Output
sammy 14345 0.0 0.0 2462228 452 ?? Ss 6:43AM 0:00.00 ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domainВ начале строки, в одном из первых двух столбцов, находится число из 3–5 цифр. Это PID. Здесь выделен PID примера 14345.
Теперь, когда вы знаете PID процесса, вы можете использовать команду kill для завершения туннеля. Используйте его PID при завершении процесса:
kill 14345Закрыть туннель (Windows)
Закройте окно PuTTY, в котором вы создали туннель. Вот и всё.
Шаг 4 (macOS/Linux) — Создайте ярлык для частого использования
Для систем macOS или Linux мы можем создать псевдоним или скрипт для быстрого создания туннеля. Существует два способа автоматизировать процесс туннелирования:
Оба этих метода быстрого доступа требуют аутентификации по ключу SSH для доступа к серверу без пароля или парольной фразы.
Кликабельный скрипт BASH
Если вам нужен значок, который запускает туннель при нажатии на него, мы можем создать небольшой BASH-скрипт для этого. Он запустит туннель, а затем Firefox, хотя вам всё равно придётся вручную добавить настройки прокси-сервера в Firefox при первом запуске.
В macOS исполняемый файл Firefox, который можно запустить из командной строки, находится внутри Firefox.app. Если приложение находится в папке «Программы», то исполняемый файл находится в… /Applications/Firefox.app/Contents/MacOS/firefox Он найден.
В системах Linux, если вы установили Firefox из репозитория или он уже установлен, его местоположение должно быть /usr/bin/firefox Если Firefox не находится в стандартном расположении, вы всегда можете воспользоваться командой find firefox, чтобы узнать, где находится Firefox в вашей системе.
В этом скрипте замените путь к Firefox на путь, подходящий для вашей системы. Возможно, вам также потребуется скорректировать строку SSH, чтобы она отражала успешную команду, которую вы использовали ранее для создания туннеля.
Использование текстового редактора
Создайте новый файл с помощью nano:
nano ~/socks.shДобавьте следующие строки:
#!/bin/bash -e
ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@`your_domain`
/Applications/Firefox.app/Contents/MacOS/firefox &
- Замените номер порта на желаемый.
1337(Он должен совпадать с тем, что вы установили в Firefox) - Замените SSH-пользователя@ваше имя хоста или IP-адрес
сэмми@ваш_доменДелать /Applications/Firefox.app/Contents/MacOS/firefoxЗамените на путь к бинарному файлу Firefox для вашей системы.
Сохраните скрипт. Для nano нажмите CONTROL + o, а для выхода — CONTROL + x.
Сделайте скрипт исполняемым, чтобы он запускался при двойном щелчке по нему. В командной строке используйте команду chmod, чтобы добавить права на выполнение:
chmod +x /path/to/socks.shВ macOS вам, возможно, придётся выполнить дополнительные действия, чтобы указать системе, что файл .sh следует запускать как программу, а не открывать в редакторе. Для этого щёлкните правой кнопкой мыши по файлу socks.sh и выберите «Получить информацию».
Найдите раздел «Открыть с помощью:» и, если треугольник раскрытия не направлен вниз, нажмите на него, чтобы увидеть раскрывающееся меню. Xcode может быть установлен в качестве приложения по умолчанию.
Измените его на Terminal.app. Если Terminal.app отсутствует в списке, выберите «Другое» и перейдите в раздел «Приложения» > «Утилиты» > Terminal.app (возможно, потребуется выбрать в раскрывающемся меню «Активные» вместо «Рекомендуемые приложения» значение «Все приложения»).
Чтобы открыть ваш SOCKS-прокси, нажмите на файл носки.ш Дважды щелкните. Скрипт откроет окно терминала, установит SSH-соединение и запустит Firefox. На этом этапе можно безопасно закрыть окно терминала. Если вы сохранили настройки прокси-сервера в Firefox, вы можете начать просмотр веб-страниц через защищённое соединение:
Этот скрипт поможет вам быстро остановить прокси-сервер, но вам все равно придется вручную выполнить перечисленные выше шаги, чтобы найти процесс ssh и завершить его после завершения.
Псевдоним командной строки
Если вы регулярно пользуетесь командной строкой и хотите открыть туннель, вы можете создать псевдоним командной строки, который будет выполнять эту работу автоматически. Самое сложное в создании псевдонима — определить, где хранить команду для псевдонима.
В разных дистрибутивах Linux и версиях macOS псевдонимы хранятся в разных местах. Лучше всего найти один из следующих файлов и псевдоним Выполните поиск, чтобы узнать, где в настоящее время хранятся другие псевдонимы. Возможности включают:
- ~/.bashrc
- ~/.zshrc
- ~/.bash_aliases
- ~/.bash_profile
- ~/.профиль
Найдя нужный файл, добавьте следующий псевдоним к любому существующему файлу или просто в конец файла. В примере ниже мы используем псевдоним “firesox” для обозначения туннеля SOCKS, но вы можете использовать любое слово в качестве псевдонима:
alias firesox='ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain && /Applications/Firefox.app/Contents/MacOS/firefox &'- Замените 1337 на нужный вам номер порта (он должен совпадать с тем, который вы указали в Firefox)
- Замените sammy@your_domain на имя хоста или IP-адрес вашего пользователя SSH.
- Замените /Applications/Firefox.app/Contents/MacOS/firefox на путь к исполняемому файлу Firefox.
Ваш псевдоним будет загружен только при запуске новой оболочки, поэтому закройте сеанс терминала и запустите новую оболочку. Теперь, когда вы вводите:
firesoxЭто настроит ваш псевдоним туннеля, затем запустит Firefox и вернёт вас в командную строку. Убедитесь, что Firefox всё ещё настроен на использование прокси-сервера. Теперь вы можете безопасно пользоваться интернетом.
Шаг 5 (необязательно) – Устранение неполадок: обход брандмауэров
Если подключение работает, всё в порядке, и можно продолжать чтение. Однако, если вы обнаружили, что не можете установить SSH-соединение из-за ограничений брандмауэра, вероятно, порт 22, необходимый для создания туннеля, заблокирован. Если вы можете управлять настройками прокси-сервера SSH (что можно сделать, имея root-доступ к вашему дроплету DigitalOcean), вы можете настроить SSH на прослушивание порта, отличного от 22.
Какой порт можно использовать, чтобы он не был заблокирован?
Часто открываются порты 80 (общий веб-трафик) и 443 (TLS, защищенный веб-трафик).
Если ваш SSH-сервер не обслуживает веб-контент, мы можем указать SSH использовать один из этих веб-портов для связи вместо порта по умолчанию 22. 443 — лучший выбор, поскольку ожидается, что трафик на этом порту будет зашифрован. Трафик SSH будет зашифрован.
Из местоположения без брандмауэра подключитесь по SSH к серверу DigitalOcean, который вы используете для проксирования, или используйте встроенную консоль из панели управления Digital Ocean.
Измените настройки SSH-сервера:
sudo nano /etc/ssh/sshd_configНайдите линию Порт 22.
Мы можем полностью заменить «22» или добавить второй порт для прослушивания SSH. Мы решили, что SSH будет прослушивать несколько портов, поэтому добавляем новую строку под портом 22, которая будет содержать порт 443. Вот пример:
. . . Port 22 Port 443 . . .
Перезапустите SSH, чтобы обновить только что отредактированную конфигурацию SSH. В зависимости от вашего дистрибутива имя SSH-сервера-призрака может отличаться, но, скорее всего, это ssh или sshd. Если один вариант не работает, попробуйте другой:
sudo service ssh restartЧтобы проверить, работает ли ваш новый порт SSH, откройте новую оболочку (пока не закрывайте текущую, на случай, если вы случайно заблокировали себя) и откройте SSH, используя новый порт:
ssh sammy@your_domain -p 443
Если все прошло успешно, вы можете выйти из обеих оболочек и открыть SSH-туннель, используя новый порт:
ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain -p 443Настройки Firefox будут такими же, поскольку он не зависит от порта SSH, а зависит только от порта туннеля (1337 выше).
Результат
В наше время существует множество способов безопасного сёрфинга в потенциально враждебной сети, например, в общедоступной сети Wi-Fi в кафе. В большинстве случаев, если вы можете использовать VPN для защиты всего своего трафика, предпочтительнее использовать именно её. Однако наличие SOCKS-туннеля обеспечивает необходимую защиту при сёрфинге в интернете, когда вы не можете использовать VPN или доверять ей. SOCKS-туннель быстро настраивается и прост в использовании, и вы полностью контролируете его. SOCKS-туннель — отличный вариант для безопасного сёрфинга.












