Найти тему

Socks proxy для Telegram

Оглавление

Установка Dante

Установка необходимых пакетов

apt-get install -y autoconf automake libtool pkg-config checkinstall libwrap0 libwrap0-dev libpam0g-dev

Создание каталога для Dante

mkdir dante && cd ~/dante

Загрузка исходников из официального сайта

wget https://www.inet.no/dante/files/dante-1.4.2.tar.gz

Распаковка архива

tar -zxvf dante-1.4.2.tar.gz
cd dante-1.4.2

Конфигурация сборки

./configure --prefix=/etc/dante

Компиляция исходников

make

Создание deb пакета сервера и установка на текущий сервер

checkinstall
# Нажимаем y, а потом Enter для создания каталога с документацией.
The package documentation directory ./doc-pak does not exist.
Should I create a default set of package docs? [y]: y
Preparing package documentation...OK
# нажимаем Enter
Please write a description for the package.
End your description with an empty line or EOF.

После сборки будет создан файл dante_1.4.2-1_amd64.deb, который можно также установить на любой подходящий сервер

Для удаления сервера используется команда

dpkg -r dante

Проверка установки сервера

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

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

Создание файла конфигурации

nano /etc/sockd.conf

Содержимое конфигурационного файла.

# Лог файлы
errorlog: /var/log/sockd-error.log
logoutput: /var/log/sockd.log
# Входной/выходной интерфейс, порт, ip-адрес
internal: enp0s3 port = 1080 #сетевой интерфейс
external: enp0s3
#сетевой интерфейс
# Пользовательские привилегии
user.privileged: root
user.notprivileged: nobody
# Аутентификация
socksmethod: username
#allow connections from local network
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: error connect disconnect
}
#generic pass statement - bind/outgoing traffic
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: bind connect udpassociate
log: error connect disconnect iooperation
}

internal - входной сетевой интерфейс external - выходной сетевой интерфейс port - порт на котором работает прокси-сервер socksmethod - метод аутентификации пользователя (username - доступ по имени пользователя и паролю) Обязательно измените internal и external и впишите имя своего сетевого интерфейса. У меня он называется enp0s3, у вас может называться по другому. При необходимости можно изменить значение рабочего порта.

Автозапуск сервера

Скрипт для запуска сервера

nano /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=/etc/dante/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

Нужно сделать скрипт исполняемым

chmod +x /etc/init.d/sockd

Рестарт демонов и добавление в автозагрузку

systemctl daemon-reload
systemctl enable sockd
systemctl start sockd

Создание пользователей для прокси-сервера

useradd -s /usr/sbin/nologin username

пароль для пользователя

passwd username

Для предотвращение утечек памяти рекомендуется перезагружать сервер

crontab -e

Добавляем строки

# Перезапуск dante в 23:55
55 23 * * * systemctl restart sockd

Перезагрузка крона

systemctl restart cron