Поиск по сайту:

Как безопасно направлять веб-трафик без VPN с помощью туннеля SOCKS


Автор выбрал программу Write for DOnations.

Введение

В какой-то момент вы можете обнаружить, что находитесь в небезопасной сети или имеет чрезмерно ограничивающий брандмауэр, и вам нужно убедиться, что никто не следит за вашим трафиком. Одним из решений является использование VPN, но для многих VPN требуется специальное клиентское программное обеспечение на вашем компьютере, на установку которого у вас может не быть прав. Однако, если все, что вам нужно для защиты, — это просмотр веб-страниц, есть быстрая, бесплатная и полезная альтернатива: прокси-туннель SOCKS 5.

Прокси-сервер SOCKS — это зашифрованный туннель SSH, в котором настроенные приложения перенаправляют свой трафик вниз, а затем, на стороне сервера, прокси-сервер перенаправляет трафик в общий Интернет. В отличие от VPN, прокси-сервер SOCKS необходимо настраивать для каждого приложения на клиентском компьютере, но вы можете настраивать приложения без какого-либо специального клиентского программного обеспечения, если приложение может использовать прокси-сервер SOCKS. На стороне сервера все, что вам нужно настроить, это SSH.

В этом руководстве вы будете использовать сервер под управлением Ubuntu 20.04 (хотя подойдет любой дистрибутив Linux, к которому вы можете получить доступ через SSH), и веб-браузер Firefox в качестве клиентского приложения. К концу этого руководства вы сможете безопасно просматривать веб-сайты через зашифрованный туннель SSH.

Предпосылки

  • Перейдите сюда, чтобы построить свой туннель на дроплете DigitalOcean.
  • Приложение для настройки с использованием прокси-сервера SOCKS, например веб-браузер Firefox.
  • Пользователям Windows также потребуется либо инструмент PuTTY, либо подсистема Windows для Linux (WSL).

PuTTY используется для настройки прокси-туннеля для пользователей Windows. Пользователи macOS или Linux имеют предварительно установленные инструменты для настройки туннеля.

Шаг 1 (macOS/Linux) — настройка туннеля

На локальном компьютере создайте ключ SSH, если вы не создали свою каплю с уже установленным ключом. После создания ключа убедитесь, что общедоступная сторона добавлена в файл «authorized_keys» на вашем SSH-дроплете. Затем откройте приложение терминала, чтобы создать туннель SSH с включенным прокси-сервером SOCKS.

Настройте туннель с помощью этой команды:

  1. ssh -i ~/.ssh/id_rsa -D 1337 -f -C -q -N sammy@your_domain

Объяснение аргументов

  • -i: путь к ключу SSH, который будет использоваться для подключения к хосту.
  • -D: сообщает SSH, что нам нужен туннель SOCKS на указанном номере порта (вы можете выбрать число между 1025 и 65536). )
  • -f: переводит процесс в фоновый режим
  • -C: сжимает данные перед отправкой
  • -q: использовать тихий режим
  • -N: сообщает SSH, что после запуска туннеля команда не будет отправлена

Обязательно замените sammy@ваш_домен на ваш sudo IP-адрес/доменное имя пользователя и сервера.

Как только вы введете команду, вы сразу же снова попадете в командную строку без каких-либо признаков успеха или неудачи; это нормально.

Убедитесь, что туннель работает, с помощью этой команды:

  1. 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 в фоновый режим:

Примечание: чтобы завершить туннель, вам нужно получить PID через ps. В нашем примере PID — 14345. Затем мы использовали бы команду kill 14345. Мы пройдем через завершение на шаге 3.

Шаг 1 (Windows) — Настройка туннеля

Откройте ПуТТИ.

Если вы еще не установили его, загрузите PuTTY и сохраните его в любом месте. PuTTY не требует прав администратора для установки; просто скачайте .exe и запустите его.

Выполните следующие шаги, чтобы настроить туннель:

Теперь вы можете свернуть окно PuTTY, но не закрывайте его. Ваше SSH-соединение должно быть открыто:

Примечание. Вы можете сохранить свое имя пользователя sudo (sammy) и ключ SSH для этого же сеанса, следуя инструкциям PuTTY SSH Key. Тогда вам не придется каждый раз вводить логин и пароль при открытии соединения.

Шаг 2 — Настройка Firefox для использования туннеля

Теперь, когда у вас есть туннель SSH, пришло время настроить Firefox для использования этого туннеля. Помните, что для работы туннеля SOCKS 5 необходимо использовать локальное приложение, которое может реализовать туннель; В Firefox есть такая возможность:

Этот шаг одинаков для Windows, macOS и Linux.

Убедитесь, что у вас есть номер порта, который вы использовали в своей команде SSH; в наших примерах мы использовали 1337.

(Следующие шаги были выполнены с Firefox версии 80, но должны работать и в других версиях, хотя расположение параметров может отличаться.)

Откройте Фаерфокс.

  1. В правом верхнем углу нажмите на значок гамбургера, чтобы открыть меню Firefox.
  2. Нажмите на пункт меню Настройки или Параметры.
  3. Прокрутите вниз и в разделе Настройки сети нажмите кнопку Настройки....
  4. Под заголовком Настройка прокси-доступа к Интернету выберите Ручная настройка прокси-сервера.
  5. Для хоста SOCKS введите localhost или 127.0.0.1, а для порта используйте пользовательский порт указанный в вашем туннеле, 1337.
  6. Внизу установите флажок Прокси-сервер DNS при использовании SOCKS v5.
  7. Нажмите кнопку ОК, чтобы сохранить и закрыть конфигурацию.

Теперь откройте другую вкладку в Firefox и начните просматривать веб-страницы. Вы должны быть готовы к безопасному просмотру вашего SSH-туннеля. Данные, которые вы получаете с сайта, зашифрованы. Кроме того, поскольку вы выбрали опцию «Прокси-DNS», ваши поисковые запросы DNS также зашифрованы, поэтому ваш интернет-провайдер не может видеть, что вы видите, или где вы пошли, чтобы получить это.

Чтобы убедиться, что вы используете прокси-сервер, вернитесь к настройкам сети в Firefox, введите другой номер порта и сохраните настройки. Теперь, если вы попытаетесь просмотреть веб-страницы, вы должны получить сообщение об ошибке: «Прокси-сервер отказывается от подключений». Это доказывает, что Firefox использует прокси, а не просто соединение по умолчанию. В качестве альтернативы вы можете перейти на общедоступный IP-сайт, такой как ipecho.net, и возвращаемый IP-адрес должен быть IP-адресом вашей капли SSH, поскольку теперь он действует как ваш прокси-сервер.

Шаг 3 — Восстановление прокси в Firefox

Когда вам надоест конфиденциальность туннеля SSH, вернитесь к настройкам сетевого прокси в Firefox. Щелкните переключатель «Использовать настройки системного прокси» и нажмите «ОК». Теперь, когда Firefox больше не использует туннель SOCKS, мы также можем закрыть его. Вы можете оставить туннель включенным, чтобы вы могли включать и отключать прокси в Firefox по своему желанию, но если вы оставите туннель бездействующим слишком долго, он может закрыться.

Закрытие туннеля (macOS/Linux)

Туннель, который мы создали ранее на нашей локальной машине, был отправлен в фоновый режим, поэтому закрытие окна терминала, которое вы использовали для открытия туннеля, не завершит его. Чтобы завершить туннель, нам нужно определить идентификатор процесса (PID) с помощью команды ps, а затем завершить процесс с помощью команды kill.

Давайте найдем все активные процессы ssh на нашей машине:

  1. 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 14345 выделен здесь.

Теперь, когда вы знаете, что такое PID, вы можете использовать команду kill, чтобы отключить туннель. Используйте свой PID, когда вы убиваете процесс:

  1. kill 14345

Закрытие туннеля (Windows)

Закройте окно PuTTY, которое вы использовали для создания туннеля. Вот и все.

Шаг 4 (macOS/Linux) — Создание ярлыков для многократного использования

Для систем macOS или Linux мы можем создать псевдоним или сценарий, чтобы быстро создать для нас туннель. Ниже приведены два способа автоматизации процесса туннелирования:

Оба этих метода быстрого доступа требуют проверки подлинности SSH-ключей без пароля или фразы-пароля на сервере.

Кликабельный BASH-скрипт

Если вам нужен значок, при нажатии на который будет запускаться туннель, мы можем создать небольшой сценарий BASH для выполнения этой работы. Сценарий настроит туннель, а затем запустит Firefox, хотя в первый раз вам все равно потребуется вручную добавить настройки прокси-сервера в Firefox.

В macOS бинарный файл Firefox, который мы можем запустить из командной строки, находится внутри Firefox.app. Предполагая, что приложение находится в папке Applications, двоичный файл будет находиться в /Applications/Firefox.app/Contents/MacOS/firefox.

В системах Linux, если вы установили Firefox через репозиторий или если он был предварительно установлен, его расположение должно быть /usr/bin/firefox. Вы всегда можете использовать команду what firefox, чтобы узнать, где находится Firefox в вашей системе, если он не находится в стандартном расположении.

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

Используя текстовый редактор, такой как nano, создайте новый файл:

  1. 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)
  • Замените sammy@your_domain на имя пользователя SSH @ ваше имя хоста или IP-адрес
  • Замените /Applications/Firefox.app/Contents/MacOS/firefox на путь к двоичному файлу Firefox для вашей системы.

Сохраните свой сценарий. Для nano введите CONTROL + o, а затем, чтобы выйти, введите CONTROL + x.

Сделайте скрипт исполняемым, чтобы при двойном щелчке по нему он выполнялся. В командной строке используйте команду chmod, чтобы добавить разрешения на выполнение:

  1. chmod +x /path/to/socks.sh

В macOS вам, возможно, придется выполнить дополнительный шаг, чтобы указать macOS, что файл .sh должен выполняться как программа, а не открываться в редакторе. Для этого щелкните правой кнопкой мыши файл socks.sh и выберите «Получить информацию».

Измените его на Terminal.app. Если Terminal.app нет в списке, выберите «Другое», а затем перейдите в «Приложения» > «Утилиты» > «Terminal.app» (возможно, вам потребуется установить раскрывающееся меню «Включить» с «Рекомендуемые приложения» на «Все приложения»).

Чтобы сейчас открыть прокси-сервер SOCKS, дважды щелкните файл socks.sh. Сценарий откроет окно терминала, запустит SSH-соединение и запустит Firefox. Не стесняйтесь закрыть окно терминала в этот момент. Пока вы сохранили настройки прокси-сервера в Firefox, вы можете начать просмотр через безопасное соединение:

Этот скрипт поможет вам быстро настроить прокси, но вам все равно придется выполнить перечисленные выше шаги вручную, чтобы найти процесс ssh и убить его, когда вы закончите.

Псевдоним командной строки

Если вы часто оказываетесь в командной строке и хотите вызвать туннель, вы можете создать псевдоним командной строки, который сделает эту работу за вас.

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

Различные дистрибутивы Linux и выпуски macOS сохраняют псевдонимы в разных местах. Лучше всего найти один из следующих файлов и выполнить поиск по alias, чтобы увидеть, где в настоящее время сохраняются другие псевдонимы. Возможности включают в себя:

  • ~/.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 своим пользователем SSH @ имя хоста или IP-адрес
  • Замените /Applications/Firefox.app/Contents/MacOS/firefox на путь к двоичному файлу Firefox

Ваши псевдонимы загружаются только при запуске новой оболочки, поэтому закройте сеанс терминала и запустите новый. Теперь, когда вы вводите:

  1. firesox

Этот псевдоним настраивает ваш туннель, затем запускает Firefox и возвращает вас в командную строку. Убедитесь, что Firefox по-прежнему настроен на использование прокси. Теперь вы можете безопасно просматривать.

Шаг 5 (необязательно) — Устранение неполадок: обход брандмауэров

Если ваше соединение работает, вы можете продолжать чтение. Однако, если вы обнаружили, что не можете установить SSH-соединение из-за ограничительного брандмауэра, вероятно, порт 22, необходимый для создания туннеля, заблокирован. Если вы можете управлять настройками SSH прокси-сервера (имея root-доступ к дроплету DigitalOcean, вы сможете это сделать), вы можете настроить SSH для прослушивания порта, отличного от 22.

Какой порт вы можете использовать, если он не заблокирован?

Порты, которые часто открыты, включают 80 (общий веб-трафик) и 443 (TLS, защищенный веб-трафик).

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

Из места без брандмауэра подключитесь по SSH к дроплету DigitalOcean, который вы используете для прокси-сервера, или используйте встроенную консоль из панели управления Digital Ocean.

Отредактируйте настройки SSH сервера:

  1. sudo nano /etc/ssh/sshd_config

Найдите строку Порт 22.

Мы можем либо полностью заменить «22», либо добавить второй порт для прослушивания SSH. Мы выберем прослушивание SSH на нескольких портах, поэтому мы добавим новую строку под Порт 22, которая будет читать Порт 443. Вот пример:

. . .

Port 22
Port 443

. . .

Перезапустите SSH, чтобы перезагрузить конфигурацию SSH, которую вы только что отредактировали. В зависимости от вашего дистрибутива имя демона сервера SSH может отличаться, но, скорее всего, это будет ssh или sshd. Если один не работает, попробуйте другой:

  1. sudo service ssh restart

Чтобы убедиться, что ваш новый SSH-порт работает, откройте новую оболочку (пока не закрывайте текущую, на случай, если вы случайно заблокируете себя) и SSH, используя новый порт:

  1. ssh sammy@your_domain -p 443

Если вы добились успеха, теперь вы можете выйти из обеих оболочек и открыть свой туннель SSH, используя новый порт:

  1. 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 можно быстро настроить и использовать в крайнем случае, и у вас есть полный контроль над ним. Они являются отличным вариантом для безопасного просмотра.