RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта


linux:3proxy

centos

Установка SOCKS5 сервера 3proxy

"Установка в один клик"

На Github'е можно найти множество bash скриптов упрощяющих установку 3proxy

Исходные данные: vMACHINA VPS, CentOS 7.5.1804.

Задача: Настроить 3proxy для работы HTTP/Socks прокси с поддержкой работы через IPv6.

Порт HTTP прокси 3333, порт Socks прокси 4444.

Установка

К сожалению последних версий 3proxy в репозиториях нет. Поэтому и для CentOS и для Debian/Ubuntu необходимо будет собирать 3proxy вручную. Старый добрый make install.

Для сборки из исходного кода нам нужен компилятор gcc

# yum install gcc

Скачиваем последнюю доступную версию с Github и компилируем

# cd /tmp
# wget https://github.com/z3APA3A/3proxy/archive/0.8.12.tar.gz
# tar -xvf 0.8.12.tar.gz 
# cd 3proxy-0.8.12/
# make -f Makefile.Linux

make install не делаем.

Добавим нового системного пользователя от имени которого будет работать 3proxy (без доступа к shell и без домашнего каталога)

# useradd -s /usr/sbin/nologin -U -M -r 3proxy

В дальнейшем нам понадобятся UID и GID нового пользователя

# id 3proxy
uid=996(3proxy) gid=994(3proxy) groups=994(3proxy)

Следуя правилам FHS наш 3proxy будет установлен в каталоге /opt.

Создаём необходимые каталоги и копируем скомпилированные файлы

# mkdir -p /opt/3proxy/{bin,etc,log}
# cp src/{3proxy,socks,pop3p,mycrypt} /opt/3proxy/bin/
// При желании можно скопировать конфиг-пример
// cp cfg/3proxy.cfg.sample /opt/3proxy/etc/3proxy.cfg
touch /opt/3proxy/etc/3proxy.cfg
touch /opt/3proxy/etc/3passwd

Делаем chown и chmod

# chown 3proxy:3proxy -R /opt/3proxy
# chmod 444 /opt/3proxy/etc/3proxy.cfg
# chmod 400 /opt/3proxy/etc/3passwd

Пользователи

Пользователей можно указывать в самом конфигурационном файле

users user007:CL:password
users User13:CR:$1$XKgXzzXc$WBKwk7E5HEYODydxancNR.

в отдельном файле

users $/opt/3proxy/etc/3passwd

или же одновременно в конфигурационном файле и отдельном файле

users user007:CL:password
users User13:CR:$1$XKgXzzXc$WBKwk7E5HEYODydxancNR.
users $/opt/3proxy/etc/3passwd

Примечание

  • CL - пароль в открытом тексте
  • CR - пароль в формате crypt() (только MD5)

IPv6

Формат такой

proxy -6 -p[номер_порта] -i[IPv4-адрес] -e[IPv6-адрес]

  • -p - номер порта. Должен быть разный для каждого v6 адреса
  • -i - адрес для подключения
  • -e - исходящий адрес

Пример конфигурационного файла

# HTTP(S) прокси
auth strong
users user1337:CL:CoolPassword
allow *
proxy -6 -n -a -p50001 -i[ipv4] -e[ipv6]
proxy -6 -n -a -p50002 -i[ipv4] -e[ipv6]

# Socks прокси
auth strong
users user1337:CL:CoolPassword
allow *
socks -6 -p50003  -i[ipv4] -e[ipv6]
socks -64 -p50004 -i[ipv4] -e[ipv6] -e[ipv4]

опции -4, -46, -64, -6 задают приоритет разрешения имен в адреса IPv4 и IPv6 (только IPv4, приоритет IPv4, приоритет IPv6, только IPv6). Подробности в 3proxy FAQ

Важно! Если используется только v6, то с socks-сервером могут быть проблемы.

Для плагина FoxyProxy например требуется включить опцию Send DNS through SOCKS5 proxy

При правильной настройке сайт ipv6-test.com покажет следующий результат

IPv6

IPv4+IPv6

Конфигурационный файл

Финальный вариант файла /opt/3proxy/etc/3proxy.cfg

# Общие настройки
daemon
pidfile /opt/3proxy/3proxy.pid
timeouts 1 5 30 60 180 1800 15 60

setgid 994
setuid 996

# DNS серверы и размер кэша
nserver 77.88.8.8
nserver 8.8.8.8
nserver 2a02:6b8::feed:0ff
nserver 2001:4860:4860::8888
nscache 65536

# Внешний интерфейс
external 185.53.170.60

# Можно разрешить глобально. В нашем примере для HTTP-прокси будут открыты только 80 и 443. Для socks-прокси 80, 443 и другие.
# allow * * * 80-88,8080-8088 HTTP
# allow * * * 443,8443 HTTPS
users rootwelt:CL:CoolPassword1337

# Лог файл
log /opt/3proxy/log/3proxy.log D
rotate 7
logformat "L%d-%m-%Y %H:%M:%S %z %N.%p %E %U %C:%c %R:%r %O %I %h %T"
# log /dev/null для отключения логов

# HTTP proxy
auth strong
flush
allow  * * * 80,443
proxy -n -a -p3333

# Socks5
auth strong
flush
allow * * * 80-88,8080-8088 HTTP
allow * * * 443,8443 HTTPS
allow * * * 1500,2087,2222
socks -n -a -p4444

# Статистика для пользователей. Вряд ли это нужно в контексте socks-сервера для обхода блокировок.
# flush
# auth iponly
# allow *
# admin -p8889 -s

# Админ интерфейс. Да, есть такая фича, но лучше не включать.
# flush
# auth strong
# allow Ubermensch 10.20.30.40
# deny *
# admin -p8888

end

Небольшие пояснения по опциям flush и allow

Из FAQ: Команда flush используется для сброса существующего списка доступа (это необходимо для того, чтобы можно было задать различные списки доступа для различных служб).

Мы можем например глобально разрешить только HTTP и HTTPS, но отдельно для socks открыть дополнительный доступ для TCP 1500.

Allow, как нетрудно догадаться служит для разрешения соединения. Синтаксис следующий:

allow <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist> <weekdays> <timeperiodslist>

То есть в нашем тестовом конфигурационном файле разрешено

  • доступ всем пользователям (список логинов)
  • доступ с любых адресов
  • доступ к любым адресам
  • доступ только к указанным портам

Пример ограничения использования прокси-сервера подсетями Telegram (источник)

allow * * 91.108.4.0/22,91.108.8.0/22,91.108.56.0/22,149.154.160.0/20,149.154.164.0/22,91.108.16.0/22,91.108.56.0/23,149.154.168.0/22,91.108.12.0/22,149.154.172.0/22,91.108.20.0/22,91.108.36.0/23,91.108.38.0/23,109.239.140.0/24

Список подсетей Telegram - https://bgp.he.net/search?search%5Bsearch%5D=Telegram&commit=Search

Firewall

В нашем примере http-прокси использует порт TCP 3333, а socks-прокси порт TCP 4444.

iptables

# iptables -A INPUT -p tcp -m tcp --dport 3333 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 4444 -j ACCEPT

firewalld

# firewall-cmd --permanent --zone=public --add-port=3333/tcp
# firewall-cmd --permanent --zone=public --add-port=4444/tcp
# firewall-cmd --reload

init.d/systemd

В CentOS 7 используется systemd, поэтому необходимо создать unit-файл с новым сервисом /etc/systemd/system/3proxy.service

[Unit]
Description=3proxy Proxy Server
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/opt/3proxy/bin/3proxy /opt/3proxy/etc/3proxy.cfg
Restart=on-failure
User=3proxy
Group=3proxy

[Install]
WantedBy=multi-user.target

Обновляем список сервисов в systemd, добавляем сервис в автозагрузку и запускаем его

# systemctl daemon-reload
# systemctl enable 3proxy.service
# systemctl start 3proxy.service

Проверка

Ссылки

Враг у ворот

Список PKH IP для блокировки

Список PKH IP для блокировки

iptables -A INPUT -s 5.61.16.0/21 -j DROP
iptables -A INPUT -s 5.61.232.0/21 -j DROP
iptables -A INPUT -s 79.137.157.0/24 -j DROP
iptables -A INPUT -s 79.137.174.0/23 -j DROP
iptables -A INPUT -s 79.137.183.0/24 -j DROP
iptables -A INPUT -s 94.100.176.0/20 -j DROP
iptables -A INPUT -s 95.163.32.0/19 -j DROP
iptables -A INPUT -s 95.163.212.0/22 -j DROP
iptables -A INPUT -s 95.163.216.0/22 -j DROP
iptables -A INPUT -s 95.163.248.0/21 -j DROP
iptables -A INPUT -s 128.140.168.0/21 -j DROP
iptables -A INPUT -s 178.22.88.0/21 -j DROP
iptables -A INPUT -s 178.237.16.0/20 -j DROP
iptables -A INPUT -s 185.5.136.0/22 -j DROP
iptables -A INPUT -s 185.6.244.0/22 -j DROP
iptables -A INPUT -s 185.16.148.0/22 -j DROP
iptables -A INPUT -s 185.16.244.0/22 -j DROP
iptables -A INPUT -s 188.93.56.0/21 -j DROP
iptables -A INPUT -s 194.186.63.0/24 -j DROP
iptables -A INPUT -s 195.211.20.0/22 -j DROP
iptables -A INPUT -s 195.211.128.0/22 -j DROP
iptables -A INPUT -s 195.218.168.0/24 -j DROP
iptables -A INPUT -s 195.218.190.0/23 -j DROP
iptables -A INPUT -s 208.87.93.0/24 -j DROP
iptables -A INPUT -s 208.87.94.0/23 -j DROP
iptables -A INPUT -s 217.20.144.0/20 -j DROP
iptables -A INPUT -s 217.69.128.0/20 -j DROP
iptables -A INPUT -s 2a00:1148::/29 -j DROP
iptables -A INPUT -s 2a00:1148::/32 -j DROP
iptables -A INPUT -s 2a00:a300::/32 -j DROP
iptables -A INPUT -s 2a00:b4c0::/32 -j DROP
iptables -A INPUT -s 2a00:1148:5::/48 -j DROP

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
 
linux/3proxy.txt · Последнее изменение: 2021/06/23 15:30 — dx