3proxy — это кроссплатформенный, легковесный прокси-сервер, предназначенный для обеспечения доступа к сети через HTTP, HTTPS, SOCKSv4/v5, FTP и прозрачный прокси с минимальными системными ресурсами.
Обзор 3proxy
3proxy представляет собой компактное и высокопроизводительное решение для организации прокси-сервера. Его ключевые особенности включают:
* Кроссплатформенность: Работает на Linux, FreeBSD, Solaris, Windows и других системах.
* Многопротокольность: Поддерживает HTTP, HTTPS (CONNECT), SOCKSv4/v5, FTP, POP3, SMTP.
* Низкое потребление ресурсов: Идеален для систем с ограниченными аппаратными возможностями.
* Гибкая конфигурация: Широкие возможности по управлению доступом, аутентификацией и логированием.
* Поддержка цепочек прокси: Возможность перенаправления запросов через другие прокси-серверы.
3proxy часто используется для построения индивидуальных прокси-серверов, организации доступа к внутренней сети, обхода сетевых ограничений или для тестирования.
Установка 3proxy
Установка 3proxy обычно выполняется из исходного кода, что обеспечивает максимальную гибкость и контроль над компиляцией.
Предварительные требования
Для компиляции 3proxy необходимы базовые инструменты разработки.
Для Debian/Ubuntu:
sudo apt update
sudo apt install build-essential git -y
Для CentOS/RHEL/Fedora:
sudo yum update
sudo yum groupinstall "Development Tools" -y
sudo yum install git -y
Сборка и установка из исходного кода
-
Клонирование репозитория:
bash git clone https://github.com/z3APA3A/3proxy.git cd 3proxy -
Компиляция:
Выберите соответствующий Makefile для вашей операционной системы. Для Linux используйтеMakefile.Linux.
bash make -f Makefile.Linux
После успешной компиляции исполняемый файл3proxyбудет находиться в текущем каталоге. -
Установка (необязательно):
Для удобства можно скопировать исполняемый файл и создать каталог для конфигурационных файлов.
bash sudo mkdir -p /etc/3proxy /var/log/3proxy sudo cp src/3proxy /usr/local/bin/ sudo chown -R nobody:nogroup /var/log/3proxy # Или пользователя, от которого будет работать прокси
Или можно использоватьmake install, который копирует бинарник в/usr/local/binи создаёт базовый конфиг в/etc/3proxy/3proxy.cfg.
bash sudo make -f Makefile.Linux install
Базовая настройка 3proxy
Конфигурация 3proxy осуществляется через файл 3proxy.cfg. По умолчанию, при использовании make install, этот файл создаётся в /etc/3proxy/3proxy.cfg. В противном случае его необходимо создать вручную.
Основные директивы конфигурации
Ниже представлены основные директивы для создания функционального прокси-сервера.
daemon: Запускает 3proxy в фоновом режиме как демон.log <путь> <формат>: Указывает путь к файлу логов и формат записи.D: Стандартный формат с датой и временем.L: Расширенный формат логов.
rotate <количество_дней>: Автоматическая ротация логов.users <имя>:<тип_пароля>:<пароль> [<имя2>:<тип_пароля>:<пароль2> ...]: Определяет пользователей и их пароли.CL: Пароль будет автоматически хеширован при первом запуске (рекомендуется).CR: Пароль в открытом виде.
auth <метод1>[,<метод2>...]: Задаёт методы аутентификации.iponly: Авторизация по IP-адресу (без имени пользователя/пароля).none: Без аутентификации.simple: Базовая аутентификация (пароль в открытом виде).strong: Базовая аутентификация (пароль хешируется).ntlm: NTLM-аутентификация.
proxy [-n] [-a] [-p<порт>]: Определяет HTTP/HTTPS прокси-сервер.-n: Не использовать NTLM-аутентификацию.-a: Требовать аутентификацию.-p<порт>: Порт, на котором будет работать прокси (по умолчанию 3128).
socks [-n] [-a] [-p<порт>]: Определяет SOCKSv4/SOCKSv5 прокси-сервер.- Аргументы аналогичны
proxy. Порт по умолчанию 1080.
- Аргументы аналогичны
allow <пользователь> <исходный_IP> <целевой_IP> <целевой_порт> <день_недели> <время_начала>-<время_окончания>: Правило разрешения доступа.deny <пользователь> <исходный_IP> <целевой_IP> <целевой_порт> <день_недели> <время_начала>-<время_окончания>: Правило запрета доступа.
Пример базового файла 3proxy.cfg
Создайте или отредактируйте файл /etc/3proxy/3proxy.cfg:
# Общие настройки и логирование
# Запустить 3proxy в режиме демона
daemon
# Путь к файлу логов и формат D (дата/время)
log /var/log/3proxy/3proxy.log D
# Ротация логов каждые 30 дней
rotate 30
# Использование системного DNS для разрешения имен
nserver 8.8.8.8
nserver 8.8.4.4
# Ограничение количества соединений на пользователя
maxconn 100
# Пользователи
# Пользователь 'user' с паролем 'password'. CL означает, что 3proxy сам хеширует пароль.
# После первого запуска 'password' в файле будет заменено на хеш.
users user:CL:password
# Можно добавить несколько пользователей через запятую или на разных строках
# users user2:CL:password2
# Методы аутентификации
# strong: требует имя пользователя и пароль (хешированный).
# iponly: разрешает доступ без пароля для определенных IP-адресов.
auth strong
# Правила доступа
# Разрешить всем пользователям (*) с любого IP (*) доступ ко всем ресурсам (*)
# Это общее правило, которое будет применяться, если более специфичных нет.
allow * * *
# HTTP/HTTPS прокси
# Запустить HTTP/HTTPS прокси на порту 3128
# -n: не использовать NTLM
# -a: требовать аутентификацию (на основе директивы 'auth')
proxy -n -a -p3128
# SOCKSv5 прокси
# Запустить SOCKSv5 прокси на порту 1080
# -n: не использовать NTLM
# -a: требовать аутентификацию (на основе директивы 'auth')
socks -n -a -p1080
После сохранения файла конфигурации, убедитесь, что права доступа позволяют 3proxy читать его.
Расширенная настройка
Методы аутентификации
3proxy поддерживает различные методы аутентификации. Выбор метода зависит от требований безопасности и интеграции с существующей инфраструктурой.
Метод auth |
Описание | Примечания |
|---|---|---|
iponly |
Авторизация по IP-адресу источника. Не требует имени пользователя/пароля. | Простой, но менее безопасный метод. Используется с allow. |
none |
Отключение аутентификации. Любой клиент может использовать прокси. | Только для закрытых сетей или тестовых сред. |
simple |
Базовая HTTP-аутентификация. Пароль хранится в 3proxy.cfg в открытом виде. |
Не рекомендуется из-за хранения паролей. |
strong |
Базовая HTTP-аутентификация. Пароль хранится в 3proxy.cfg в хешированном виде (CL/CR). |
Рекомендуемый метод для аутентификации по имени/паролю. |
ntlm |
NTLM-аутентификация. Интеграция с Windows-доменом. | Требует наличия Samba/Winbind для работы. |
ext |
Внешняя аутентификация через скрипт или программу. | Позволяет интегрировать 3proxy с внешними системами аутентификации (LDAP, RADIUS и т.д.). |
Пример использования auth iponly:
auth iponly
allow * 192.168.1.0/24 # Разрешить доступ без пароля из локальной сети
deny * * # Запретить всем остальным
proxy -p3128
Управление доступом (allow, deny)
Правила allow и deny определяют, кто и к каким ресурсам может получить доступ через прокси. Порядок правил имеет значение: 3proxy обрабатывает их сверху вниз до первого совпадения. Если правило не указано, доступ по умолчанию запрещён.
# Запретить доступ к определенному домену
deny * * example.com
# Разрешить пользователю 'admin' полный доступ
allow admin * *
# Запретить пользователю 'guest' доступ к порту 22 (SSH)
deny guest * * 22
# Разрешить всем пользователям доступ только к портам 80 и 443
allow * * * 80,443
deny * * * # Запретить остальное
Чейнинг прокси (Proxy Chaining)
3proxy может перенаправлять запросы через другие прокси-серверы. Это полезно для обхода географических ограничений или для дополнительного уровня анонимности.
# Определение родительского прокси
# parent <тип> <IP> <порт> <пользователь> <пароль>
# Типы: http, socks4, socks5
parent 1000 http 192.168.0.1:8080 user:password
# Использование родительского прокси для HTTP/HTTPS
proxy -n -a -p3128 -R1000 # -R1000 указывает на использование родительского прокси с ID 1000
Запуск 3proxy
После настройки 3proxy.cfg сервер можно запустить.
Ручной запуск
Для проверки конфигурации запустите 3proxy в интерактивном режиме:
/usr/local/bin/3proxy /etc/3proxy/3proxy.cfg
Если в конфигурации есть директива daemon, 3proxy сразу перейдёт в фоновый режим. Без daemon, он будет работать в текущем терминале.
Запуск как системная служба (Systemd)
Рекомендуемый способ для производственных систем — настроить 3proxy как службу systemd.
- Создайте файл службы:
bash sudo nano /etc/systemd/system/3proxy.service -
Добавьте следующее содержимое:
```ini
[Unit]
Description=3proxy Lightweight Proxy Server
After=network.target[Service]
Type=forking
ExecStart=/usr/local/bin/3proxy /etc/3proxy/3proxy.cfg
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
User=nobody # Или другой непривилегированный пользователь
Group=nogroup # Или другая непривилегированная группа[Install]
WantedBy=multi-user.target
`` Убедитесь, что пути к исполняемому файлу и конфигурации верны. ИзменитеUserиGroupна соответствующие вашей системе, еслиnobody:nogroup` не подходит. -
Перезагрузите
systemd, включите и запустите службу:
bash sudo systemctl daemon-reload sudo systemctl enable 3proxy sudo systemctl start 3proxy -
Проверка статуса службы:
bash sudo systemctl status 3proxy
Проверьте логи службы для выявления возможных ошибок:
bash journalctl -u 3proxy -f
Устранение неполадок
При возникновении проблем с 3proxy, проверьте следующие моменты:
- Файл конфигурации: Убедитесь, что синтаксис
3proxy.cfgкорректен и пути к файлам (логов, пользователей) существуют и доступны для записи. - Порты: Проверьте, что порты, на которых работает 3proxy (например, 3128, 1080), не заняты другими приложениями.
bash sudo netstat -tulpn | grep 3128 - Брандмауэр: Убедитесь, что брандмауэр (ufw, firewalld, iptables) разрешает входящие соединения на используемые 3proxy порты.
Пример для UFW:
bash sudo ufw allow 3128/tcp sudo ufw allow 1080/tcp sudo ufw reload - Права доступа: Проверьте, что пользователь, от имени которого запущен 3proxy (например,
nobody), имеет права на чтение3proxy.cfgи запись в каталог логов (/var/log/3proxy). - Логи: Внимательно изучайте логи 3proxy (
/var/log/3proxy/3proxy.log) и системные логи (journalctl -u 3proxy) для получения информации об ошибках. - Пароли: При использовании
auth strongиusers user:CL:password, убедитесь, что 3proxy успешно хешировал пароль в файле конфигурации. Если нет, это может быть связано с правами доступа к файлу.