Данная статья посвящена установке Dante – бесплатного SOCKS5 сервера на собственный VPS сервер. Данный сервер подходит для использования в качестве SOCKS прокси в SmartTube и других программах, с поддержкой SOCKS5 с авторизацией.
Dante – A free SOCKS server – Inferno Nettverk A/S
https://www.inet.no/dante/
Шаг 1: Установка утилит разработчика в CentOS
$ sudo yum groupinstall 'Development Tools' -y
$ sudo yum install pam-devel -y
Шаг 2: Загрузка исходного кода, сборка и установка Dante server
$ wget https://www.inet.no/dante/files/dante-1.4.4.tar.gz
$ tar -xvf dante-1.4.4.tar.gz
$ cd dante-1.4.4
$ ./configure
Для работы авторизации пользователей на socks5 прокси, обратить внимание на строку: PAM: Enabled.
$ make
$ sudo make install
$ sockd --version
Если вы видите что-то похожее, то вы движетесь в правильном пути. Dante SOCKS5 прокси установлен в систему CentOS 8. Далее переходим к настройке нашего SOCKS5 прокси.
Шаг 3: Настройка Dante прокси сервера
Создадим конфигурационный файл для нашего SOCKS сервера и отредактируем его.
$sudo touch /etc/sockd.conf
$sudo nano /etc/sockd.conf
Скопируем вот такую конфигурацию в файл /etc/sockd.conf
internal: eth0 port = 8080
external: eth0
user.privileged: root
user.unprivileged: nobody
external.rotation: same-same
socksmethod: username
clientmethod: none
errorlog: /var/log/sockd.err.log
logoutput: /var/log/sockd.log
debug: 0
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect disconnect error ioop
socksmethod: username
}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect disconnect error ioop
socksmethod: username
}
Также настроим автоматический запуск сервиса Dante SOCKS прокси.
Через SysV
Сделаем файл службы:
$sudo touch /etc/init.d/sockd
$sudo nano /etc/init.d/sockd
Наполним файл /etc/init.d/sockd следующим содержимым:
#!/bin/sh
### BEGIN INIT INFO
# Provides: sockd
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start the dante SOCKS server.
# Description: SOCKS (v4 and v5) proxy server daemon (sockd).
# This server allows clients to connect to it and
# request proxying of TCP or UDP network traffic
# with extensive configuration possibilities.
### END INIT INFO
PID="/var/run/sockd/sockd.pid"
CONFIG="/etc/sockd.conf"
# Source function library.
if [ -f /etc/init.d/functions ] ; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
. /etc/rc.d/init.d/functions
else
exit 1
fi
# Avoid using root’s TMPDIR
unset TMPDIR
# Source networking configuration.
. /etc/sysconfig/network
# Check that sockd.conf exists.
[ -f ${CONFIG} ] || exit 6
RETVAL=0
OPTIONS="-D -p ${PID} -f ${CONFIG}"
start() {
KIND="SOCKD"
echo -n $"Starting $KIND services: "
/usr/local/sbin/sockd ${OPTIONS}
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/sockd || \
RETVAL=1
return $RETVAL
}
stop() {
KIND="SOCKD"
echo -n $"Shutting down $KIND services: "
killproc sockd
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/sockd
return $RETVAL
}
restart() {
stop
start
}
rhstatus() {
status -l sockd sockd
return $?
}
# Allow status as non-root.
if [ "$1" = status ]; then
rhstatus
exit $?
fi
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
rhstatus
;;
condrestart)
[ -f /var/lock/subsys/sockd ] && restart || :
;;
*)
echo $"Usage: $0 {start|stop|restart|status|condrestart}"
exit 2
esac
exit 0
Создадим каталог /var/run/sockd/, необходимый для работы службы.
$sudo mkdir -p /var/run/sockd/
$sudo chown -R nobody:nobody /var/run/sockd/
Сделаем исполняемым файл /etc/init.d/sockd, настроим автозапуск службы и запустим наш SOCKS прокси сервер.
$sudo chmod u+x /etc/init.d/sockd
$sudo chkconfig --add sockd
Проверим, что наш SOCKS прокси будет запускаться при старте системы.
$chkconfig --list sockd
Если вы видите, что sockd в состоянии on на уровнях: 3,4,5 — значит, что сервер будет включаться автоматически.
Запускаем нашу службу SOCKS сервера:
$sudo /etc/init.d/sockd start
Дополнительно можно проверить, что сервис функционирует на порту 8080, выполнив следующую команду:
$netstat -antp | grep 8080 | grep LIST
Наличие процессов в статусе LISTEN на порту 8080 показывает, что всё настроено верно.
Через SystemD
Сделаем файл службы:
$sudo touch /lib/systemd/system/sockd.service
$sudo nano /lib/systemd/system/sockd.service
Наполним файл /lib/systemd/system/sockd.service следующим содержимым:
[Unit]
Description=SOCKS (v4 and v5) proxy daemon
Documentation=man:sockd(8) man:sockd.conf(5)
After=network.target
[Service]
Type=forking
PIDFile=/var/run/sockd/sockd.pid
ExecStart=/usr/local/sbin/sockd -f /etc/sockd.conf -D
[Install]
WantedBy=multi-user.target
Перечитаем настройки SystemD, включим автоматический запуск и запустим службу sockd:
$sudo systemctl daemon-reload
$sudo systemctl enable sockd
$sudo systemctl start sockd
Создаём пользователя
Теперь мы создадим пользователя proxyuser для авторизации на нашем SOCKS прокси:
$sudo useradd --shell /usr/sbin/nologin proxyuser
И установим для него пароль:
$sudo passwd proxyuser
Шаг 3.5: Настройка межсетевого экрана
В CentOS 8 могут использоваться различные межсетевые экраны, поэтому приведу настройки двух из них. Если данная настройка не подходит для вашей системы, и вы используете какой-то другой межсетевой экран, то обратитесь к руководству к вашему межсетевому экрану, чтобы настроить его для пропуска входящего трафика на TCP порт 8080 из сети интернет, или с каких-то определённых IP адресов.
Как определить какой из этих способов подойдёт вам? Всё просто, если у вас следующая команда сработает и покажет вывод настроек, а не сообщение "firewall-cmd: command not found", то для вас подходит настройка, через firewalld:
$firewall-cmd --list-all
Если у вас установлены iptables, то следующая команда покажет установленную у вас версию iptables и вам подходит способ настройки межсетевого экрана, с использованием iptables:
$iptables --version
iptables v1.8.5 (nf_tables)
Настройка с использованием firewalld (обычно используется по умолчанию в CentOS):
$sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="1080" accept"
$sudo firewall-cmd --reload
Настройка с использованием iptables (я по старинке используют этот межсетевой экран):
$sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
$sudo iptables-save > /etc/sysconfig/iptables
*обратите внимание, что перед разрешающим правилом в цепочке INPUT нет никаких правил типа REJECT, перекрывающих это правило. Если это так, то обратитесь к документации, чтобы правило INPUT было до REJECT.
Шаг 4: Проверка работы нашего SOCKS5 прокси сервера
Для проверки работы вашего SOCKS прокси выполним следующую команду:
$ curl -4 -x socks5://proxyuser:password@proxy_ip:8080 https://ipecho.net/plain; echo
#в результате вы увидите IPv4 адрес вашего SOCKS5 прокси
*proxy_ip - публичный Ipv4 адрес вашего SOCKS5 сервера.
В настройках Smart Tube укажите данные своего SOCKS5 прокси и нажмите "ТЕСТ". Если всё выполнено верно, то в Статус#1 и Статус#2 вы увидите "200 OK".
Спасибо за внимание, стабильного вам подключения к сети Интернет!