Различия
Показаны различия между двумя версиями страницы.
| 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> | ||