RTFM.WIKI

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

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

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


Боковая панель


Навигация

Линкшэринг

ALARM!

Добавить новую страницу

You are not allowed to add pages
linux:3proxy


Установка 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
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies

Discussion

Enter your comment. Wiki syntax is allowed:
 
linux/3proxy.txt · Последнее изменение: 2020/02/25 15:43 — dx