Fork me on GitHub

Поднимаем приватный socks/proxy-сервер на базе 3Proxy

оригинальная статья:

https://bogachev.biz/2018/04/07/%D0%9F%D0%BE%D0%B4%D0%BD%D0%B8%D0%BC%D0%B0%D0%B5%D0%BC-%D0%BF%D1%80%D0%B8%D0%B2%D0%B0%D1%82%D0%BD%D1%8B%D0%B9-socks-proxy-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80-%D0%BD%D0%B0-%D0%B1%D0%B0%D0%B7%D0%B5-3Proxy/

Отключаем SElinux

sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

Установка 3proxy

  • Установим необходимые пакеты, которые понадобятся в процессе сборки.
dnf groupinstall 'Development Tools
wget https://github.com/z3APA3A/3proxy/
tar -xvzf 3proxy.tgz
cd 3proxy
make -f Makefile.Linux
mkdir /usr/local/3proxy
mkdir /usr/local/3proxy/logs
mkdir /usr/local/3proxy/stat
copy 3proxy/src /usr/local/3proxy
copy 3proxy.cfg.sample /usr/local/3proxy/3proxy.cfg
chown -R nobody:nobody /usr/local/3proxy
  • Конфигурационный файл /usr/local/3proxy/3proxy.cfg
daemon
nserver 8.8.8.8
nserver 8.8.4.4
nscache 65536
timeouts 1 5 30 60 180 1800 15 60
users roman:CL:roman
users "test:CR:$1$kf3$4c2AOGcRWsc74kMNZyRzi0"
#include /usr/local/etc/3proxy/users.conf <<-- Можем подключить файл с логинами/паролям.
log /dev/null
auth strong
auth strong
flush
allow test,roman
maxconn 64
socks -p51105 -n -a -u2
proxy -p12732 -n -a
dnspr
setgid 99 # надо узнать корректные id nobody
setuid 99
  • Список пользователей задается с помощью команды users.

С помощью одной команды можно задать несколько пользователей, можно давать несколько команд users. USERDESC - описание пользователя.

Описание пользователя состоит из трех полей разделенных двоеточием - имени, типа пароля и пароля. Например:

users admin:CL:mysecret test:CL:yourpassword test1:CL:password1
users "test:CR:b771$b8745ed1295840eca15e55feb9e"
users test3:NT:BD7DFBF29A93F93C63CB84790DA00E63

Обратите внимание на двойные кавычки - они необходимы для второго пользователя, т.к. в его пароле встречается знак $, который для файла 3proxy.cfg означает включение другого файла.

Поддерживаются следующие типы паролей:

тип не указан - использовать системную авторизацию для данного пользователя (пока не реализовано). CL - пароль в открытом тексте CR - пароль в формате crypt() (только MD5) NT - пароль в формате NT в шестнадцатеричной кодировке NT и crypt пароли могут быть использованы для импорта учетных записей из Windows/Samba и Unix соответственно (для Windows можно использовать утилиты семейства pwdump). Учетные записи удобно хранить в отдельном файле (в таком случае можно хранить их построчно в формате, типичном для файлов паролей).

Создать пароль можем командой:

openssl passwd -1 -salt xyz yourpass
  • Сохраняем конфигурационный файл /etc/systemd/system/3proxy.service:
[Unit]
Description=Start 3proxy
[Service]
ExecStart="/usr/local/3proxy/3proxy /usr/local/3proxy/3proxy.cfg"
Restart=always
RestartSec=60s
[Install]
WantedBy=multi-user.target
  • Запуск сервиса:
service 3proxy start
  • Добавляем в автозапуск:
chkconfig 3proxy on
  • Настройка фаейрвола
# Открываем порт для socks-прокси:
firewall-cmd --permanent --zone=public --add-port=51105/tcp

# Открываем порт для http-прокси:
firewall-cmd --permanent --zone=public --add-port=12732/tcp

# Блокируем ICMP трафик для того, чтоб наш сервер не отвечал на пинги:
firewall-cmd --zone=public --add-icmp-block=echo-reply --permanent
firewall-cmd --zone=public --add-icmp-block=echo-request --permanent
firewall-cmd --reload

social