Dante — свободный SOCKS5 прокси-сервер

Dante — это бесплатный прокси-сервер, разрабатываемый компанией Inferno Nettverk A/S. Он содержит в себе как клиентскую часть, так и серверную. Dante реализован в соответствии с RFC 1928. Прокси-сервер имеет большое количество различных настроек и поддерживает плагины. Единственный минус заключается лишь в том, что эти самые плагины платные.

Рассмотрим установку Dante на Ubuntu Server 16.04. Маленькая заметка: собирать сервер мы будем из исходников для того, чтобы иметь возможность работать с актуальной версией сервера.

 

Установка прокси-сервера

Загрузим исходники, выполним извлечение из архива и перейдем в директорию с распакованными файлами. На момент написания данного материала последняя версия Dante имеет номер 1.4.2:

# cd /usr/src
# wget http://www.inet.no/dante/files/dante-1.4.2.tar.gz
# tar -zxf dante-1.4.2.tar.gz
# cd dante-1.4.2/

Установим инструменты, необходимые для компиляции и сконфигурируем параметры сборки:

# apt-get install gcc make
# ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --disable-client --without-libwrap --without-bsdauth --without-gssapi --without-krb5 --without-upnp --without-pam

Если всё прошло успешно, результат будет следующим:

Configure status:

Client:            Disabled, using --disable-client
Server:            Enabled
Preloading:        Enabled
Libwrap:           Disabled, using --without-libwrap
BSD Auth:          Disabled, using --without-bsdauth
PAM:               Disabled, using --without-pam
GSSAPI:            Not found/disabled
KRB5:              Not found/disabled
SASL:              Not found/disabled
UPNP:              Not found/disabled
Compatability:     issetugid setproctitle strlcpy strvis

                     Modules:

redirect:          Not found
bandwidth:         Not found
ldap:              Not found

Установим скомпилированные пакеты командой make:

# make && make install

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

# /usr/sbin/sockd -v
Dante v1.4.2.  Copyright (c) 1997 - 2014 Inferno Nettverk A/S, Norway

 

Конфигурация скрипта демона Dante

Создадим скрипт для остановки и запуска dante-server в папке /etc/init.d/ со следующей информацией:

vim /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
#
# dante SOCKS server init.d file. Based on /etc/init.d/skeleton:
# Version:  @(#)skeleton  1.8  03-Mar-1998  miquels@cistron.nl 
# Via: https://gitorious.org/dante/pkg-debian

PATH=/sbin:/usr/sbin:/bin:/usr/bin
NAME=sockd
DAEMON=/usr/sbin/$NAME
DAEMON_ARGS="-D"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
DESC="Dante SOCKS daemon"
CONFFILE=/etc/$NAME.conf

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions

set -e

# This function makes sure that the Dante server can write to the pid-file.
touch_pidfile ()
{
  if [ -r $CONFFILE ]; then
    uid="`sed -n -e 's/[[:space:]]//g' -e 's/#.*//' -e '/^user\.privileged/{s/[^:]*://p;q;}' $CONFFILE`"
    if [ -n "$uid" ]; then
      touch $PIDFILE
      chown $uid $PIDFILE
    fi
  fi
}

case "$1" in
  start)
    if ! egrep -cve '^ *(#|$)' \
        -e '^(logoutput|user\.((not)?privileged|libwrap)):' \
        $CONFFILE > /dev/null
    then
        echo "Not starting $DESC: not configured."
        exit 0
    fi
    echo -n "Starting $DESC: "
    touch_pidfile
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
        || return 1
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
        $DAEMON_ARGS \
        || return 2
    echo "$NAME."
    ;;
  stop)
    echo -n "Stopping $DESC: "
    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
    RETVAL="$?"
    [ "$RETVAL" = 2 ] && return 2
    start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
    [ "$?" = 2 ] && return 2
    echo "$NAME."
    ;;
  reload|force-reload)
    #
    #   If the daemon can reload its config files on the fly
    #   for example by sending it SIGHUP, do it here.
    #
    #   Make this a do-nothing entry, if the daemon responds to changes in its config file
    #   directly anyway.
    #
     echo "Reloading $DESC configuration files."
     start-stop-daemon --stop --signal 1 --quiet --pidfile \
        $PIDFILE --exec $DAEMON -- -D
  ;;
  restart)
    #
    #   If the "reload" option is implemented, move the "force-reload"
    #   option to the "reload" entry above. If not, "force-reload" is
    #   just the same as "restart".
    #
    echo -n "Restarting $DESC: "
    start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON
    sleep 1
    touch_pidfile
    start-stop-daemon --start --quiet --pidfile $PIDFILE \
      --exec $DAEMON -- -D
    echo "$NAME."
    ;;
  status)
    status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
    ;;
  *)
    N=/etc/init.d/$NAME
    # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
    echo "Usage: $N {start|stop|restart|status|force-reload}" >&2
    exit 1
    ;;
esac

exit 0

Сохраним файл с помощью команды :wq! и дадим ему права на исполнение:

# chmod +x /etc/init.d/sockd
# update-rc.d sockd defaults

 

Конфигурация dante-server

Откроем файл /etc/sockd.conf с помощью соответствующей команды и внесем в него следующую информацию:

# vim /etc/sockd.conf
logoutput: /var/log/socks.log

internal: eth0 port = 1080
external: eth0

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

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

client block {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        log: connect error
}

socks pass {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        log: error connect disconnect
}

socks block {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        log: connect error
}

Сохраним файл с конфигурацией и перейдем к следующему шагу.

 

Запуск службы dante-server

Запустим службу прокси-сервера и убедимся, что она функционирует без ошибок:

# /etc/init.d/sockd start
# /etc/init.d/sockd status

Проверить подключения к прокси-серверу можно с помощью команд ss -t или netstat -tulp
Остановить сервер при необходимости можно с помощью команды

# /etc/init.d/sockd stop
[ ok ] Stopping sockd (via systemctl): sockd.service.

Добавление пользователя:

useradd -m guest1 --shell /usr/sbin/nologin && passwd guest1

Удаление пользователя осуществляется с помощью команды deluser.

Полезные ссылки:

  1. Официальный сайт Inferno Nettverk A/S — https://www.inet.no/dante/index.html
  2. Полезная информация по настройке — https://www.proxyrack.com/how-to-setup-a-socks5-proxy-server-using-dante/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *