Давным-давно мечтал развернуть свой socks5 сервер, да всё было не когда. Вот тут дошли руки. В качестве платформы выбрал Scaleway. Из плюсов – приемлемая цена, есть выбор размещения виртуалки во Франции или Нидерландах. Описывать регистрацию и запуск виртуальной машины на Scaleway не буду, это достаточно простая процедура. Единственное, что может вызвать небольшую трудность у новичка – это генерация ключей для доступа к вашей виртуалке. Процедура генерации ключей достаточно подробно описана в руководстве пользователя на самом Scaleway. Находится она здесь: https://www.scaleway.com/en/docs/configure-new-ssh-key/
Для чего это нужно? При создании виртуальной машины вы не получаете пароль от учетной записи root, и вся аутентификация основана на использовании SSH ключах. Ключи SSH позволяют выполнять аутентификацию без пароля с вашей виртуальной машиной.
Перед созданием виртуальной машины необходимо создать пару ключей RSA на локальном компьютере. Для этого необходимо (для пользователей MacOS и других *nix систем) в терминале ввести команду:
1 |
ssh-keygen -o -b 4096 |
Вы можете ввести путь для сохранения файла, либо нажав Enter оставить всё по умолчанию. В MacOS ключи будут сохранены в папке .ssh профиле пользователя. Так же вы можете указать пароль на свой ключ, либо так же нажав Enter оставить этот параметр пустым.
1 |
Enter passphrase (empty for no passphrase): |
В результате у вас сгенерируются 2 ключа, открытый id_rsa.pub и закрытый id_rsa.
Содержимое открытого ключа вам необходимо будет скопировать в буфер и добавить в панель вашего профиле (раздел Credentials), где будут храниться все ваши ключи: В разделе «Ключи SSH» нажмите « Добавить новый ключ SSH» и вставьте содержимое вашего открытого ключа в текстовую область, затем нажмите « Добавить ключ SSH» .
Очень важный момент, если у вас уже создана виртуальная машина и вы хотите получать к ней доступ по ssh например с телефона или другого компьютера, после добавления нового ключа, в терминале виртуальной машины необходимо выполнить следующую команду:
1 |
scw-fetch-ssh-keys --upgrade |
Установка SOCKS5 сервера на примере Dante сервера.
В качестве операционной системы я использовал предустановленную операционную систему Ubuntu Bionic
настройки по железу достаточно демократичные:
Итоговая цена 3 евро в месяц:
И так, после 2-3 минутного ожидания мы получаем готовую к использованию виртуальную машину.
Подключаемся к нашей машине по ssh. Я для подключения использую штатную программу терминал входящую в поставку MacOS.
Обновляем систему и устанавливаем Dante Server:
1 |
apt install dante-server |
сервер установлен и практически готов к использованию. В интернете очень много статей, где в качестве авторизации на прокси используется авторизация системного пользователя. Мне этот вариант особо не нравится и я решил использовать метод авторизации pam как более универсальный, в котором будут перечислены пользователи и пароли, используемые на нашем прокси сервере. Для этого нам необходимо будет установить модуль pam_userdb. Установим его:
1 |
apt install db5.3-util |
Открываем файл конфигурации:
1 |
nano /etc/danted.conf |
Вносим необходимые изменения:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
logoutput: syslog /var/log/danted.log # указываем правильно название сетевого адаптера (в моем случае это eth0 и номер порта, # по которому будет доступен наш прокси, например 1188. По умолчанию порт 1080)) internal: eth0 port = 1188 external: eth0 clientmethod: none # указываем socksmethod как pam.username socksmethod: pam.username # необходимы права пользователя root, чтобы использовать аутентификацию через pam user.privileged: root user.unprivileged: nobody user.libwrap: nobody # доступ к серверу разрешаем всем # можно указать только один ip адрес, если у вас фиксированный ip client pass { from: 0.0.0.0/0 to: 0.0.0.0/0 } #доступ к localhost (127.0.0.1) блокируем, включаем лог socks block { from: 0.0.0.0/0 to: 127.0.0.0/8 libwrap: spawn finger @%a log: connect error } #доступ к локальной сети блокируем с логированием socks block { from: 0.0.0.0/0 to: 172.16.0.0/12 libwrap: spawn finger @%a log: connect error } #доступ в интернет разрешаем всем, кто авторизовался socks pass { from: 0.0.0.0/0 to: 0.0.0.0/0 command: bind connect udpassociate log: error connect #disconnect iooperation socksmethod: pam.username #указываем имя сервиса pam.servicename: danted } |
Конфигурационного файла pam изначально нет, его нужно создать
1 |
nano /etc/pam.d/danted |
и добавить следующие строки:
1 2 |
auth required pam_userdb.so db=/etc/danted_users crypt=none icase account required pam_userdb.so db=/etc/danted_users crypt=none icase |
Обратите внимание, что /etc/pam.d/danted не имеет расширения на конце. Итак, метот авторизации через pam проверяет пользователя по файлу базы данных /etc/danted_users.db.
Создадим текстовый файл который будет содержать имя пользователя и пароль и переведем этот файл в db:
1 |
nano /etc/danted_users.txt |
добавим пользователей:
1 2 3 4 5 6 |
user1 password1 user2 password2 user3 password3 |
выполним команду
1 |
db5.3_load -T -t hash -f /etc/danted_users.txt /etc/danted_users.db |
Установим права на файлы:
1 |
chmod 0600 /etc/danted_users* |
Теперь можно перезапустить сервер dante:
1 |
systemctl restart danted |
В настройках файервола нужно не забыть открыть порт 1188, если он закрыт.
Логи работы нашего socks5 сервера можно смотреть здесь:
1 |
/var/log/danted.log |
Для ротации логов можно использовать logrotate:
1 |
nano /etc/logrotate.d/danted |
1 2 3 4 5 6 7 8 9 |
/var/log/danted.log { weekly rotate 4 compress missingok postrotate kill -HUP `cat /var/run/danted.pid` endscript } |
Вот и всё. Наш сервер готов.
Важно! При добавлении новых пользователей в файл danted_users.txt нужно выполнять следующие команды повторно:
1 2 3 |
db5.3_load -T -t hash -f /etc/danted_users.txt /etc/danted_users.db chmod 0600 /etc/danted_users* systemctl restart danted |
Для удобства управления socks5 сервером с телефона я использую программу Termius. Ссылка на Apple AppStore: https://apps.apple.com/ru/app/termius-ssh-client/id549039908
Через это приложение так же генерируются необходимые SSH ключи в разделе Keychain. Запускаем приложение:
Далее идем в раздел Keychain и добавляем новый ключ:
Всё. Наш ключ готов. Осталось его экспортировать в Scaleway.
и выполнить команду на нашей виртуальной машине:
1 |
scw-fetch-ssh-keys --upgrade |
Теперь мы можем подключиться к нашему прокси серверу с телефона:
ffff
Для проверки вашего SOCKS5 сервера можете использовать Telegram, либо любое приложение, поддерживающее SOCKS5 PROXY.
Для написания этой статьи я использовал материал с этих ресурсов:
xenot.ru
debian.ru
blogspot.com
scaleway.com
А так же хотел выразить благодарность https://flammlin.com/ за помощь в написании статьи.