СоХабр закрыт.
С 13.05.2019 изменения постов больше не отслеживаются, и новые посты не сохраняются.
Данная статья является переводом статьи отсюда. Стиль и особенности речи автора сглажены, но в основном сохранены.
Этот пост расскажет как поднять SOCKS5 сервер за 10-15 минут на вашей собственном виртуальном сервере (VDS) у провайдера Digital Ocean за 4 простых шага. Я подразумеваю, что вы как минимум на ты с PC, но при это не являетесь системным администратором.
Эта статья не является рекламой DO, просто там проще всего поднять VDS. Вы можете заменить DO на своего любимого современного провайдера — и скорее всего мало что изменится.
Также, вы сможете создать множество логинов с паролями для своих друзей, членов семьи и вообще кому захотите.
Сейчас много споров и разговоров про то, что правительства блокируют какие-то сервисы и вводят цензуру на интернет. Особенно в странах СНГ. Я не буду останавливаться на этом, но я скажу, что в современном мире становится все труднее получить доступ до каких то сайтов, сервисов, СМИ изданий, информации, развлечений, и иметь свою точку зрения не попавшую под пропаганду или политизированные источники информации или агрессивный маркетинг каких то корпораций.
В любом случае, если вы по каким-то причинам хотите использовать что-то типа VPN, прокси или чего-то другого, обеспечивающего анонимность и безопасность в интернете, у вас есть три варианта:
Обычно первое решение требует какого-то времени на настройку, понимания, и отладки. Вы не можете просто взять и все сделать в один клик. Вариант второй может быть дорогим (доступ для одного человека стоит так как и своя VDS, но последнюю легко разделить со множеством друзей), не иметь возможности запуститься на какой-то определенной платформе, быть негибким и прочее прочее. Но если вы можете настроить третий вариант то вы сможете забыть про все и взять контроль в свои руки.
Любой прокси работает как на картинке. Ваше соединение получает доступ до веб-страницы через другую машину-сервер, которая выступает как прокси
Итак, начнем.
Просто создайте дроплет. Меню может изменится в будущем, но все будет понятно
Выберете Ubuntu 16.04. Я все тестировал на этой системе
Выберите самый дешевый тариф. Провайдеры типа Vulture или Hetzner дешевле, но у DO отличнейший сервис
Выберите регион, который ближе всего к вашему
Вы можете заметить, что у вас нет ssh ключа в вашем аккаунте. Если так, то вот чуть про ssh ключи и как их настроить
Если вы пользователь Windows — не беспокойтесь, я расскажу как легко работать с ssh ключами в Windows.
Если вы Linux или Mac пользователь, то вы скорее всего уже знаете как сгенерировать ssh ключи и как использовать их. В этом случае, просто загрузите публичный ключ на ваш аккаунт Digital Ocean и проследуйте дальше.
Также — включение двухфакторной аутентификации добавит безопасности и избавит от головной боли в случае чего.
Это меню находит в разделе Settings -> Secuity tab
Загрузка вашего ключа это просто копирование и вставка вашего публичного ключа
Есть один момент — DO ожидает формат вашего ключа как если бы он был сгенерирован Linux ssh генератором. Это выглядит вот так:
ssh-rsa AAAAB3NzaC ...7QpNuybOgF snakers41@snakers41-ubuntu
Я лично использую 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 ----
Конвертирование ключа в PuttyGen
Это меню позволяет сбросить пароли и запустить онлайн консоль
Теперь у вас есть ваш собственный VDS и ssh терминал с root доступом до него. Отлично!
Также запомните, если вы что то зафейлите, то можно просто удалить дроплет и начать заново, создав новый. Также после того как вы закончите, вы можете использовать снэпшоты для сохранения прогресса.
Но мы пройдемся по списку строчка за строчкой, чтобы понять, что происходит
# 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
Hostname это IP адрес вашего дроплета. Порт из конфига данте. Логин и пароль, тот который вы выбрали
Или например, можно использовать браузер Firefox, который из коробки умеет это, в отличии от Chrome и других браузеров на основе Chromium, которые не поддерживают прокси аутентификацию. А еще можно установить в него дополнительные расширения (тысячи их), которые позволять легко управлять прокси для разных сайтов.
А еще кроме того, чтобы не лазить в настройки, телеграм умеет получать настройки прокси по ссылке: t.me/socks?server=example.com&port=9999&user=username&pass=password. И по такой ссылке можно даже послать их своей бабушке)
комментарии (59)