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.1 | linux:3proxy [2021/06/23 15:30] (текущий) – dx | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | {{fl> | ||
+ | ====== Установка SOCKS5 сервера 3proxy ====== | ||
+ | |||
+ | <note info> | ||
+ | " | ||
+ | |||
+ | На Github' | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | </ | ||
+ | |||
+ | Исходные данные: | ||
+ | |||
+ | Задача: | ||
+ | |||
+ | Порт HTTP прокси 3333, порт Socks прокси 4444. | ||
+ | |||
+ | ===== Установка ===== | ||
+ | |||
+ | К сожалению последних версий 3proxy в репозиториях нет. Поэтому и для CentOS и для Debian/ | ||
+ | |||
+ | Для сборки из исходного кода нам нужен компилятор gcc | ||
+ | |||
+ | < | ||
+ | |||
+ | Скачиваем последнюю доступную [[https:// | ||
+ | |||
+ | < | ||
+ | # cd /tmp | ||
+ | # wget https:// | ||
+ | # tar -xvf 0.8.12.tar.gz | ||
+ | # cd 3proxy-0.8.12/ | ||
+ | # make -f Makefile.Linux | ||
+ | </ | ||
+ | |||
+ | '' | ||
+ | |||
+ | Добавим нового системного пользователя от имени которого будет работать 3proxy (без доступа к shell и без домашнего каталога) | ||
+ | |||
+ | < | ||
+ | |||
+ | В дальнейшем нам понадобятся UID и GID нового пользователя | ||
+ | |||
+ | < | ||
+ | # id 3proxy | ||
+ | uid=996(3proxy) gid=994(3proxy) groups=994(3proxy) | ||
+ | </ | ||
+ | |||
+ | Следуя правилам [[https:// | ||
+ | |||
+ | Создаём необходимые каталоги и копируем скомпилированные файлы | ||
+ | |||
+ | < | ||
+ | # mkdir -p / | ||
+ | # cp src/ | ||
+ | // При желании можно скопировать конфиг-пример | ||
+ | // cp cfg/ | ||
+ | touch / | ||
+ | touch / | ||
+ | </ | ||
+ | |||
+ | Делаем chown и chmod | ||
+ | |||
+ | < | ||
+ | # chown 3proxy: | ||
+ | # chmod 444 / | ||
+ | # chmod 400 / | ||
+ | </ | ||
+ | |||
+ | ===== Пользователи ===== | ||
+ | |||
+ | Пользователей можно указывать в самом конфигурационном файле | ||
+ | |||
+ | < | ||
+ | users user007: | ||
+ | users User13: | ||
+ | </ | ||
+ | |||
+ | в отдельном файле | ||
+ | |||
+ | < | ||
+ | |||
+ | или же одновременно в конфигурационном файле и отдельном файле | ||
+ | |||
+ | < | ||
+ | users user007: | ||
+ | users User13: | ||
+ | users $/ | ||
+ | </ | ||
+ | |||
+ | **Примечание** | ||
+ | * **CL** - пароль в открытом тексте | ||
+ | * **CR** - пароль в формате crypt() (только MD5) | ||
+ | |||
+ | ===== IPv6 ===== | ||
+ | |||
+ | Формат такой | ||
+ | |||
+ | proxy -6 -p[номер_порта] -i[IPv4-адрес] -e[IPv6-адрес] | ||
+ | |||
+ | * **-p** - номер порта. Должен быть разный для каждого v6 адреса | ||
+ | * **-i** - адрес для подключения | ||
+ | * **-e** - исходящий адрес | ||
+ | |||
+ | Пример конфигурационного файла | ||
+ | |||
+ | < | ||
+ | # HTTP(S) прокси | ||
+ | auth strong | ||
+ | users user1337: | ||
+ | allow * | ||
+ | proxy -6 -n -a -p50001 -i[ipv4] -e[ipv6] | ||
+ | proxy -6 -n -a -p50002 -i[ipv4] -e[ipv6] | ||
+ | |||
+ | # Socks прокси | ||
+ | auth strong | ||
+ | users user1337: | ||
+ | allow * | ||
+ | socks -6 -p50003 | ||
+ | socks -64 -p50004 -i[ipv4] -e[ipv6] -e[ipv4] | ||
+ | </ | ||
+ | |||
+ | опции '' | ||
+ | |||
+ | Важно! Если используется только v6, то с socks-сервером [[https:// | ||
+ | |||
+ | Для плагина FoxyProxy например требуется включить опцию **Send DNS through SOCKS5 proxy** | ||
+ | |||
+ | При правильной настройке сайт [[http:// | ||
+ | |||
+ | **IPv6** | ||
+ | |||
+ | {{: | ||
+ | |||
+ | **IPv4+IPv6** | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | ===== Конфигурационный файл ===== | ||
+ | |||
+ | Финальный вариант файла ''/ | ||
+ | |||
+ | < | ||
+ | # Общие настройки | ||
+ | daemon | ||
+ | pidfile / | ||
+ | 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: | ||
+ | nserver 2001: | ||
+ | nscache 65536 | ||
+ | |||
+ | # Внешний интерфейс | ||
+ | external 185.53.170.60 | ||
+ | |||
+ | # Можно разрешить глобально. В нашем примере для HTTP-прокси будут открыты только 80 и 443. Для socks-прокси 80, 443 и другие. | ||
+ | # allow * * * 80-88, | ||
+ | # allow * * * 443,8443 HTTPS | ||
+ | users rootwelt: | ||
+ | |||
+ | # Лог файл | ||
+ | log / | ||
+ | rotate 7 | ||
+ | logformat " | ||
+ | # log /dev/null для отключения логов | ||
+ | |||
+ | # HTTP proxy | ||
+ | auth strong | ||
+ | flush | ||
+ | allow * * * 80,443 | ||
+ | proxy -n -a -p3333 | ||
+ | |||
+ | # Socks5 | ||
+ | auth strong | ||
+ | flush | ||
+ | allow * * * 80-88, | ||
+ | allow * * * 443,8443 HTTPS | ||
+ | allow * * * 1500, | ||
+ | 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, как нетрудно догадаться служит для разрешения соединения. Синтаксис следующий: | ||
+ | |||
+ | < | ||
+ | |||
+ | То есть в нашем тестовом конфигурационном файле разрешено | ||
+ | * доступ всем пользователям (список логинов) | ||
+ | * доступ с любых адресов | ||
+ | * доступ к любым адресам | ||
+ | * доступ только к указанным портам | ||
+ | |||
+ | Пример ограничения использования прокси-сервера подсетями Telegram ([[https:// | ||
+ | |||
+ | < | ||
+ | allow * * 91.108.4.0/ | ||
+ | </ | ||
+ | |||
+ | Список подсетей Telegram - https:// | ||
+ | |||
+ | ===== 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/ | ||
+ | # firewall-cmd --permanent --zone=public --add-port=4444/ | ||
+ | # firewall-cmd --reload | ||
+ | </ | ||
+ | |||
+ | ===== init.d/ | ||
+ | |||
+ | В CentOS 7 используется systemd, поэтому необходимо создать unit-файл с новым сервисом ''/ | ||
+ | |||
+ | < | ||
+ | [Unit] | ||
+ | Description=3proxy Proxy Server | ||
+ | After=syslog.target network.target | ||
+ | |||
+ | [Service] | ||
+ | Type=forking | ||
+ | ExecStart=/ | ||
+ | Restart=on-failure | ||
+ | User=3proxy | ||
+ | Group=3proxy | ||
+ | |||
+ | [Install] | ||
+ | WantedBy=multi-user.target | ||
+ | </ | ||
+ | |||
+ | Обновляем список сервисов в systemd, добавляем сервис в автозагрузку и запускаем его | ||
+ | |||
+ | < | ||
+ | # systemctl daemon-reload | ||
+ | # systemctl enable 3proxy.service | ||
+ | # systemctl start 3proxy.service | ||
+ | </ | ||
+ | |||
+ | ===== Проверка ===== | ||
+ | |||
+ | См. [[linux: | ||
+ | |||
+ | ===== Ссылки ===== | ||
+ | |||
+ | * Github FAQ: [[https:// | ||
+ | * Github FAQ: [[https:// | ||
+ | * Github FAQ: [[https:// | ||
+ | * Github FAQ: [[https:// | ||
+ | * https:// | ||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | ===== Враг у ворот ===== | ||
+ | |||
+ | <hidden Список PKH IP для блокировки> | ||
+ | < | ||
+ | iptables -A INPUT -s 5.61.16.0/ | ||
+ | iptables -A INPUT -s 5.61.232.0/ | ||
+ | iptables -A INPUT -s 79.137.157.0/ | ||
+ | iptables -A INPUT -s 79.137.174.0/ | ||
+ | iptables -A INPUT -s 79.137.183.0/ | ||
+ | iptables -A INPUT -s 94.100.176.0/ | ||
+ | iptables -A INPUT -s 95.163.32.0/ | ||
+ | iptables -A INPUT -s 95.163.212.0/ | ||
+ | iptables -A INPUT -s 95.163.216.0/ | ||
+ | iptables -A INPUT -s 95.163.248.0/ | ||
+ | iptables -A INPUT -s 128.140.168.0/ | ||
+ | iptables -A INPUT -s 178.22.88.0/ | ||
+ | iptables -A INPUT -s 178.237.16.0/ | ||
+ | iptables -A INPUT -s 185.5.136.0/ | ||
+ | iptables -A INPUT -s 185.6.244.0/ | ||
+ | iptables -A INPUT -s 185.16.148.0/ | ||
+ | iptables -A INPUT -s 185.16.244.0/ | ||
+ | iptables -A INPUT -s 188.93.56.0/ | ||
+ | iptables -A INPUT -s 194.186.63.0/ | ||
+ | iptables -A INPUT -s 195.211.20.0/ | ||
+ | iptables -A INPUT -s 195.211.128.0/ | ||
+ | iptables -A INPUT -s 195.218.168.0/ | ||
+ | iptables -A INPUT -s 195.218.190.0/ | ||
+ | iptables -A INPUT -s 208.87.93.0/ | ||
+ | iptables -A INPUT -s 208.87.94.0/ | ||
+ | iptables -A INPUT -s 217.20.144.0/ | ||
+ | iptables -A INPUT -s 217.69.128.0/ | ||
+ | iptables -A INPUT -s 2a00: | ||
+ | iptables -A INPUT -s 2a00: | ||
+ | iptables -A INPUT -s 2a00: | ||
+ | iptables -A INPUT -s 2a00: | ||
+ | iptables -A INPUT -s 2a00: | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | {{tag> |