RTFM.WIKI

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

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

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


Stylesheet conf/userstyle.css not found, please contact the developer of "dokuwiki_2024" template.
linux:3proxy

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

linux:3proxy [2020/02/25 15:43] – внешнее изменение 127.0.0.1linux:3proxy [2021/06/23 15:30] (текущий) dx
Строка 1: Строка 1:
 +{{fl>centos?48&align=right}}
  
 +====== Установка SOCKS5 сервера 3proxy ======
 +
 +<note info>
 +"Установка в один клик"\\
 +
 +На Github'е можно найти множество bash скриптов упрощяющих установку 3proxy
 +  * https://github.com/benjamin74/3proxy
 +  * https://github.com/hidden-refuge/3proxy
 +  * https://github.com/secfall/3proxy_install
 +</note>
 +
 +Исходные данные: vMACHINA VPS, CentOS 7.5.1804.
 +
 +Задача: Настроить 3proxy для работы HTTP/Socks прокси с поддержкой работы через IPv6.
 +
 +Порт HTTP прокси 3333, порт Socks прокси 4444.
 +
 +===== Установка =====
 +
 +К сожалению последних версий 3proxy в репозиториях нет. Поэтому и для CentOS и для Debian/Ubuntu необходимо будет собирать 3proxy вручную. Старый добрый make install.
 +
 +Для сборки из исходного кода нам нужен компилятор gcc
 +
 +<code># yum install gcc</code>
 +
 +Скачиваем последнюю доступную [[https://github.com/z3APA3A/3proxy/|версию с Github]] и компилируем
 +
 +<code>
 +# 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
 +</code>
 +
 +''make install'' не делаем.
 +
 +Добавим нового системного пользователя от имени которого будет работать 3proxy (без доступа к shell и без домашнего каталога)
 +
 +<code># useradd -s /usr/sbin/nologin -U -M -r 3proxy</code>
 +
 +В дальнейшем нам понадобятся UID и GID нового пользователя
 +
 +<code>
 +# id 3proxy
 +uid=996(3proxy) gid=994(3proxy) groups=994(3proxy)
 +</code>
 +
 +Следуя правилам [[https://ru.wikipedia.org/wiki/FHS|FHS]] наш 3proxy будет установлен в каталоге ''/opt''
 +
 +Создаём необходимые каталоги и копируем скомпилированные файлы
 +
 +<code>
 +# 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
 +</code>
 +
 +Делаем chown и chmod
 +
 +<code>
 +# chown 3proxy:3proxy -R /opt/3proxy
 +# chmod 444 /opt/3proxy/etc/3proxy.cfg
 +# chmod 400 /opt/3proxy/etc/3passwd
 +</code>
 +
 +===== Пользователи =====
 +
 +Пользователей можно указывать в самом конфигурационном файле
 +
 +<code>
 +users user007:CL:password
 +users User13:CR:$1$XKgXzzXc$WBKwk7E5HEYODydxancNR.
 +</code>
 +
 +в отдельном файле
 +
 +<code>users $/opt/3proxy/etc/3passwd</code>
 +
 +или же одновременно в конфигурационном файле и отдельном файле
 +
 +<code>
 +users user007:CL:password
 +users User13:CR:$1$XKgXzzXc$WBKwk7E5HEYODydxancNR.
 +users $/opt/3proxy/etc/3passwd
 +</code>
 +
 +**Примечание**
 +  * **CL** - пароль в открытом тексте
 +  * **CR** - пароль в формате crypt() (только MD5)
 +
 +===== IPv6 =====
 +
 +Формат такой
 +
 +proxy -6 -p[номер_порта] -i[IPv4-адрес] -e[IPv6-адрес]
 +
 +  * **-p** - номер порта. Должен быть разный для каждого v6 адреса
 +  * **-i** - адрес для подключения
 +  * **-e** - исходящий адрес
 +
 +Пример конфигурационного файла
 +
 +<code>
 +# 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]
 +</code>
 +
 +опции ''-4'', ''-46'', ''-64'', ''-6'' задают приоритет разрешения имен в адреса IPv4 и IPv6 (только IPv4, приоритет IPv4, приоритет IPv6, только IPv6). Подробности в [[https://github.com/z3APA3A/3proxy/wiki/How-To-(русский)#IPV6|3proxy FAQ]]
 +
 +Важно! Если используется только v6, то с socks-сервером [[https://github.com/z3APA3A/3proxy/issues/73#issuecomment-219999617|могут быть проблемы]].
 +
 +Для плагина FoxyProxy например требуется включить опцию **Send DNS through SOCKS5 proxy**
 +
 +При правильной настройке сайт [[http://ipv6-test.com|ipv6-test.com]] покажет следующий результат
 +
 +**IPv6**
 +
 +{{:linux:3proxy_ipv6.png?nolink&400|}}
 +
 +**IPv4+IPv6**
 +
 +{{:linux:3proxy_ipv6_ipv4.png?nolink&400|}}
 +
 +
 +===== Конфигурационный файл =====
 +
 +Финальный вариант файла ''/opt/3proxy/etc/3proxy.cfg''
 +
 +<code>
 +# Общие настройки
 +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
 +</code>
 +
 +Небольшие пояснения по опциям **flush** и **allow**
 +
 +Из FAQ: Команда flush используется для сброса существующего списка доступа (это необходимо для того, чтобы можно было задать различные списки доступа для различных служб).
 +
 +Мы можем например глобально разрешить только HTTP и HTTPS, но отдельно для socks открыть дополнительный доступ для TCP 1500.
 +
 +Allow, как нетрудно догадаться служит для разрешения соединения. Синтаксис следующий:
 +
 +<code>allow <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist> <weekdays> <timeperiodslist></code>
 +
 +То есть в нашем тестовом конфигурационном файле разрешено
 +  * доступ всем пользователям (список логинов)
 +  * доступ с любых адресов
 +  * доступ к любым адресам
 +  * доступ только к указанным портам
 +
 +Пример ограничения использования прокси-сервера подсетями Telegram ([[https://secfall.com/socks5-proksi-server-dlya-sebya-i-druzey/|источник]])
 +
 +<code>
 +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
 +</code>
 +
 +Список подсетей Telegram - https://bgp.he.net/search?search%5Bsearch%5D=Telegram&commit=Search
 +
 +===== Firewall =====
 +
 +В нашем примере http-прокси использует порт TCP 3333, а socks-прокси порт TCP 4444.
 +
 +iptables
 +
 +<code>
 +# iptables -A INPUT -p tcp -m tcp --dport 3333 -j ACCEPT
 +# iptables -A INPUT -p tcp -m tcp --dport 4444 -j ACCEPT
 +</code>
 +
 +firewalld
 +
 +<code>
 +# firewall-cmd --permanent --zone=public --add-port=3333/tcp
 +# firewall-cmd --permanent --zone=public --add-port=4444/tcp
 +# firewall-cmd --reload
 +</code>
 +
 +===== init.d/systemd =====
 +
 +В CentOS 7 используется systemd, поэтому необходимо создать unit-файл с новым сервисом ''/etc/systemd/system/3proxy.service''
 +
 +<code>
 +[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
 +</code>
 +
 +Обновляем список сервисов в systemd, добавляем сервис в автозагрузку и запускаем его
 +
 +<code>
 +# systemctl daemon-reload
 +# systemctl enable 3proxy.service
 +# systemctl start 3proxy.service
 +</code>
 +
 +===== Проверка =====
 +
 +См. [[linux:dante#плагин_для_браузера|Установка SOCKS5 сервера Dante, Плагин для браузера]]
 +
 +===== Ссылки =====
 +
 +  * Github FAQ: [[https://github.com/z3APA3A/3proxy/wiki/Security-recommendations|Security recommendations]]
 +  * Github FAQ: [[https://github.com/z3APA3A/3proxy/wiki/How-To-(русский)#USERS|Как создать список пользователей]]
 +  * Github FAQ: [[https://github.com/z3APA3A/3proxy/wiki/How-To-(русский)#LAUNCH|Как запустить конкретную службу (HTTP, SOCKS и т.д)]]
 +  * Github FAQ: [[https://github.com/z3APA3A/3proxy/wiki/How-To-(русский)#INSTUNIX|Как установить/удалить 3proxy под Unix/Linux]]
 +  * https://secfall.com/socks5-proksi-server-dlya-sebya-i-druzey/
 +  * http://wiki.sys-adm.org.ua/net/3proxy
 +  * http://www.wertup.ru/ubuntu/3proxy
 +
 +===== Враг у ворот =====
 +
 +<hidden Список PKH IP для блокировки>
 +<code>
 +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
 +</code>
 +</hidden>
 +
 +{{tag>Linux CentOS 3proxy Proxy Socks РКН Блокировки rootwelt}}