Простая пошаговая настройка SOCKS5 прокси сервера под Ubuntu 16 за 10-15 минут

Данная статья является переводом статьи отсюда. Стиль и особенности речи автора сглажены, но в основном сохранены.

6mvv9isoionswjymlemyefqyo_a.jpeg

Этот пост расскажет как поднять SOCKS5 сервер за 10–15 минут на вашей собственном виртуальном сервере (VDS) у провайдера Digital Ocean за 4 простых шага. Я подразумеваю, что вы как минимум на ты с PC, но при это не являетесь системным администратором.

Эта статья не является рекламой DO, просто там проще всего поднять VDS. Вы можете заменить DO на своего любимого современного провайдера — и скорее всего мало что изменится.

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

Зачем вам вообще свой собственный прокси сервер?


  • Это возможность узнать и научится чему-то новому (и похвастаться перед своей девушкой, например);
  • Существует множество бесплатных прокси и людей, которые обеспечивают бесплатными прокси за просто так. Но вы никогда не сможете быть уверены в том, что они будут делать это достаточно долго и поддерживать их в достаточном качестве, или что их намерения чисты, и они не будут следить за вашим трафиком;
  • Если понадобится, вы сможете расширить прокси до VPN или даже чего-то более мощного;
  • Вы не будете зависеть от провайдеров и какой бы то ни было третьей стороны, если что-то с ними случится;
  • Если вы скинетесь на такой сервис с друзьями, это будет очень дешево (5$ за месяц разделить на количество людей умножить на количество фана);

Сейчас много споров и разговоров про то, что правительства блокируют какие-то сервисы и вводят цензуру на интернет. Особенно в странах СНГ. Я не буду останавливаться на этом, но я скажу, что в современном мире становится все труднее получить доступ до каких то сайтов, сервисов, СМИ изданий, информации, развлечений, и иметь свою точку зрения не попавшую под пропаганду или политизированные источники информации или агрессивный маркетинг каких то корпораций.

В любом случае, если вы по каким-то причинам хотите использовать что-то типа VPN, прокси или чего-то другого, обеспечивающего анонимность и безопасность в интернете, у вас есть три варианта:


  • Использовать легко доступные инструменты (например вот);
  • Использовать B2C сервисы, где вы просто покупаете доступ. Такие сервисы обычно дорогие, или сопоставимы с ценой свой VDS что предлагаю я. Если они бесплатны, то либо медленные или сильно лимитированные, либо просто продают вас и ваши данные;
  • Что-то посередине. Когда большая часть инструментов, что вы используете открытые или бесплатные;

Обычно первое решение требует какого-то времени на настройку, понимания, и отладки. Вы не можете просто взять и все сделать в один клик. Вариант второй может быть дорогим (доступ для одного человека стоит так как и своя VDS, но последнюю легко разделить со множеством друзей), не иметь возможности запуститься на какой-то определенной платформе, быть негибким и прочее прочее. Но если вы можете настроить третий вариант то вы сможете забыть про все и взять контроль в свои руки.

107825c9a3f083a1974768199fcf465b.png
Любой прокси работает как на картинке. Ваше соединение получает доступ до веб-страницы через другую машину-сервер, которая выступает как прокси


Пару моментов перед тем как начать


  • Я выбрал Digital Ocean (DO) как хостинг провайдера для VDS прокси-сервера, в основном, потому что у них замечательная техническая поддержка, API, крутой продукт, и огромное количество полезных и нужных дроплетов полезных сервисов, которые разворачиваются в один клик;
  • В частности вот список того, что DO прекрасно делает за вас:
    • Присвоить ssh ключ новому дроплету;
    • Создать снэпшот (бекап);
    • Создать дроплет в один клик;
    • Профит;
  • Я следовал туториалам, которые нашел в интернете. Благодарности тем ребятам, что их написали:
  • Я выбрал только открытый софт и предполагаю, что вы будете использовать Ubuntu 16;
  • Я буду рассказывать больше для Windows пользователей, обычно блоги представленные выше рассказывают для Linux или Mac пользователей;
  • Если вы используете эту реферальную ссылку, вы получите 10$ на аккаунт Digital Ocean, этого вам хватит на 2 месяца использования, как раз чтобы понять, нужно ли оно вам или нет;

a1e686561ee9581d003148d3dcf414fc.jpg

Итак, начнем.


  • Проследуйте по моей ссылке
  • Создайте аккаунт и добавьте свои платежные данные
  • Выберете самый дешевый тариф как описано ниже (не бойтесь нафакапить, у вас будут списывать деньги за час, а не сразу за весь месяц)

ce820ca1dfb26edb3bd0b4713461d20f.jpg
Просто создайте дроплет. Меню может изменится в будущем, но все будет понятно

1ce635697390e6f8e673bcac289f1b91.jpg
Выберете Ubuntu 16.04. Я все тестировал на этой системе

47658e5a87159dd87f8b6ad013cc6211.jpg
Выберите самый дешевый тариф. Провайдеры типа Vulture или Hetzner дешевле, но у DO отличнейший сервис

0a39a807f145eed5eafc18ae54f972bb.jpg
Выберите регион, который ближе всего к вашему

Вы можете заметить, что у вас нет ssh ключа в вашем аккаунте. Если так, то вот чуть про ssh ключи и как их настроить

Если вы пользователь Windows — не беспокойтесь, я расскажу как легко работать с ssh ключами в Windows.

0a98ad102587af23b0d1f8e58cb2cfac.png

Если вы Linux или Mac пользователь, то вы скорее всего уже знаете как сгенерировать ssh ключи и как использовать их. В этом случае, просто загрузите публичный ключ на ваш аккаунт Digital Ocean и проследуйте дальше.

Также — включение двухфакторной аутентификации добавит безопасности и избавит от головной боли в случае чего.
0d086bea49d60ff7fccaea65cbc2c660.jpg
Это меню находит в разделе Settings → Secuity tab

3ed088d4248813d54959d591e1a00532.jpg
Загрузка вашего ключа это просто копирование и вставка вашего публичного ключа

Есть один момент — DO ожидает формат вашего ключа как если бы он был сгенерирован Linux ssh генератором. Это выглядит вот так:

ssh-rsa AAAAB3NzaC ...7QpNuybOgF snakers41@snakers41-ubuntu


Теперь часть для windows пользователей

Я лично использую Putty и PuttyGen. SSH ключи — это базовый метод контроля Linux серверов и защищенного доступа. Можно прочитать про это на википедии. Если вы Windows пользователь ssh консоль это тоже самое как и cmd.exe.

Не беспокойтесь об этом, на самом деле это довольно просто.

Но если вы сгенерировали ключи через Putty, ваш публичный ключ будет выглядеть как то так и в таком виде он не будет работать с Ubuntu:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20180413"
AAAAB3NzaC1yc2EAAAABJQAAAQEAuBflEQeTW9xfNI8N3krfFzxo8iU/NV/3cgxR
d2dkWZwYTaPaJsAoJFPtWhmsRuFuw7naZZOo/VFiqCuuYGaQcYRLrDqvfFjAusJg
B1ZK2YY57kz/ulzO9LqiVta+Fql4jL5244z9FNHF10YXbBZsmYQikAWJCItCxvZh
goY74Sfa5lPRfGojfC0xwayObJjqRcI9PS7z66ixRqO05vPMBekt/7fKoXQ+pUCP
LOVeH8AAWdaRWkvT6waCFSmjVBwfkHoghtR9pp/PZihAxpS5dM8H7AJXlvLEhNSp
6smFlkkz+XU3d3Z2FqSLV9K6pBNlNCRn+G/60xVtTqGDAsdPNw==
---- END SSH2 PUBLIC KEY ----


Убедиться, что ваш ключ будет работать с DO можно следуя этим указаниям


  • Создать ключ используя Linux как описано здесь. Вы будете использовать этот ключ на сервере DO.
  • Сохраните новые созданные публичный и приватные ключи где нибудь на своем компьютере
  • Загрузите приватный ключ в PuttyGen через Conversion → Import Key
  • Затем нажмите «save private key» — вы будете использовать этот ключ с Putty позже

979b67e9765da51ff1fa9a20785b644d.jpg
Конвертирование ключа в PuttyGen


Если вы не имеет доступа до Linux консоли, вы можете сгенерировать ключи используя следующие действия**:


  • Создайте дроплет в DO, сбросьте root пароль (смотрите картинку), откройте в онлайн консоли. Создайте ключи там и используйте команду cat для вывода ключа
  • Создайте дроплет в DO, сбросьте root пароль, откройте Putty и введите логин, пароль
  • В обоих случаях — будет проще создать новый дроплет после того, как нужные ключи будут установлены

c16f851e3d9f02d875db308fffdbc8be.jpg
Это меню позволяет сбросить пароли и запустить онлайн консоль


Наконец-то получить доступ до своего дроплета используя Putty и ключи


  • Создайте новое соединение в Putty
  • Введите ваш IP адрес и порт (обычно 22)
  • Введите имя для вашего соединения и нажмите сохранить
  • Пойдите в data → Auto-login username и введите root
  • Пойдите в data → SSH → Auth и выберет приватный ключ, который вы сохранили с помощью PuttyGen;
  • Не забудьте вернуться обратно в сессию после всех настроек

560b021f600d81b5ee165dedf1c7f2ca.png
d92297a56dff85aed673bd16ccd75eb1.jpg
5c1fd742bb88c1546953ab287a001e62.jpg

Теперь у вас есть ваш собственный VDS и ssh терминал с root доступом до него. Отлично!

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

8afbb3ceaacb79a2752742c39ba1afe3.jpg


Весь список команд для установки и настройки выглядит вот так

Но мы пройдемся по списку строчка за строчкой, чтобы понять, что происходит

# update packages
sudo apt-get update

# https://www.tazdij.com/post/setup-dante-1.4.1-sockd-dante-server-on-ubuntu-16.04
cd /opt/
mkdir dante-server

# download from the official website
# https://www.inet.no/dante/doc/
wget https://www.inet.no/dante/files/dante-1.4.1.tar.gz
tar -xvf dante-1.4.1.tar.gz
cd dante-1.4.1

# dependencies
apt-get install libwrap0 libwrap0-dev
apt-get install gcc make

# compilation from source
mkdir /home/dante
./configure --prefix=/home/dante
make
make install

# use this config
# for details refer here
# https://la2ha.ru/dev-seo-diy/unix/socks5-proxy-server-ubuntu
# this where the conf will be stored /home/dante/danted.conf
echo '
logoutput: syslog /var/log/danted.log
internal: eth0 port = 1080
external: eth0

socksmethod: username
user.privileged: root
user.unprivileged: nobody

client pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    log: error
}

socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    command: connect
    log: error
    method: username
}' > /home/dante/danted.conf
# run the server once
/home/dante/sbin/sockd -f /home/dante/danted.conf

# run the server as a daemon
/home/dante/sbin/sockd -f /home/dante/danted.conf -D

# do not forget to create the user
sudo useradd --shell /usr/sbin/nologin sockuser && sudo passwd sockuser 
# you then need to input your ip-address(hostname), login, password, port (1080 in this case) to your sock5 client

# basic ufw installation
sudo apt-get install ufw
sudo ufw status

# https://wiki.dieg.info/socks
sudo ufw allow ssh
sudo ufw allow proto tcp from any to any port 1080
sudo ufw status numbered
sudo ufw enable

# now we need to make sure that the service runs on reboot
# start daemon on reboot
sudo apt-get install cron
crontab -e
# insert this into crontab

#Borrowed from anacron
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=your_email@some_mail.com
#End borrowed from anacron
# * * * * * echo ‘Run this command every minute’ >> file.log
@reboot /home/dante/sbin/sockd -f /home/dante/danted.conf -D

Обычно, это хорошая идея обновить пакеты в системе

# update packages
sudo apt-get update

Этот код в основном качает исходные коды SOCKS5 сервера и устанавливает его из исходников.

# https://www.tazdij.com/post/setup-dante-1.4.1-sockd-dante-server-on-ubuntu-16.04
cd /opt/
mkdir dante-server

# download from the official website
# https://www.inet.no/dante/doc/
wget https://www.inet.no/dante/files/dante-1.4.1.tar.gz
tar -xvf dante-1.4.1.tar.gz
cd dante-1.4.1

# dependencies
apt-get install libwrap0 libwrap0-dev
apt-get install gcc make

# compilation from source
mkdir /home/dante
./configure --prefix=/home/dante
make
make install

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

# use this config
# for details refer here
# https://la2ha.ru/dev-seo-diy/unix/socks5-proxy-server-ubuntu
# this where the conf will be stored /home/dante/danted.conf
echo '
logoutput: syslog /var/log/danted.log
internal: eth0 port = 1080
external: eth0

socksmethod: username
user.privileged: root
user.unprivileged: nobody

client pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    log: error
}

socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    command: connect
    log: error
    method: username
}' > /home/dante/danted.conf
# run the server once
/home/dante/sbin/sockd -f /home/dante/danted.conf

# run the server as a daemon
/home/dante/sbin/sockd -f /home/dante/danted.conf -D

После того, как вы запустите /home/dante/sbin/sockd -f /home/dante/danted.conf вам надо будет нажать ctrl+C для остановки программы. Следующая команда запустит демона.

Эти команды создают пользователя для вашего SOCKS5 сервера. Вы должны запомнить эти данные и использовать их в клиентах, в которых вы хотите иметь прокси. Linux консоль попросит вас ввести пароль

# do not forget to create the user
sudo useradd --shell /usr/sbin/nologin sockuser && sudo passwd sockuser 
# you then need to input your ip-address(hostname), login, password, port (1080 in this case) to your sock5 client

После этого вам надо будет установить фаервол ufw. Включение ufw перед тем вы разрешили ssh доступ может быть очень плохой идеей)

# basic ufw installation
sudo apt-get install ufw
sudo ufw status

# https://wiki.dieg.info/socks
sudo ufw allow ssh
sudo ufw allow proto tcp from any to any port 1080
sudo ufw status numbered
sudo ufw enable

Теперь вы должны убедиться, что демон стартует после перезагрузки системы. Некоторое время назад, я нашел отличный шаблон для крона, который я использовал для этого случая. После того как вы выполните команду crontab -e, откроется текстовый редактор, и вам надо будет скопировать текст ниже в конфиг крона (в текстовом редакторе).

# now we need to make sure that the service runs on reboot
# start daemon on reboot
sudo apt-get install cron
crontab -e
# insert this into crontab

#Borrowed from anacron
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=your_email@some_mail.com
#End borrowed from anacron
# * * * * * echo ‘Run this command every minute’ >> file.log
@reboot /home/dante/sbin/sockd -f /home/dante/danted.conf -D

Теперь, давайте создадим пользователя и пароль для него и попробуем прокси с приложением, которое поддерживает SOCKS5 прокси, например Telegram
sudo useradd --shell /usr/sbin/nologin sockuser && sudo passwd sockuser

03cbb8127509b3141c058ff37e195a97.jpg
Hostname это IP адрес вашего дроплета. Порт из конфига данте. Логин и пароль, тот который вы выбрали

Или например, можно использовать браузер Firefox, который из коробки умеет это, в отличии от Chrome и других браузеров на основе Chromium, которые не поддерживают прокси аутентификацию. А еще можно установить в него дополнительные расширения (тысячи их), которые позволять легко управлять прокси для разных сайтов.

А еще кроме того, чтобы не лазить в настройки, телеграм умеет получать настройки прокси по ссылке: t.me/socks? server=example.com&port=9999&user=username&pass=password. И по такой ссылке можно даже послать их своей бабушке)

© Geektimes