3proxy - безкоштовний і відкритий проксі-сервер, який використовується для різних цілей, як-от фільтрація трафіку, кешування і блокування конкретних веб-сайтів. Він підтримує різні протоколи, як-от SOCKS v4/v4a/v5, HTTP, HTTPS, FTP, POP3, SMTP, і підтримує методи аутентифікації, як-от SOCKS5 ім'я користувача/пароль, NTLM, LDAP, Kerberos і SSO.
Сервер сильно налаштовується, забезпечуючи детальне управління використанням пропускної здатності та параметрами підключення. 3proxy може бути встановлений на платформах Windows, Linux і macOS. Це легкий і простий у використанні проксі-сервер, що підходить для невеликих і середніх мереж. Можлива оренда vps проксі.
Необхідно акуратно, оскільки небажано встановлювати сервер без авторизації. Це може призвести до несанкціонованого використання сервера зловмисниками для організації розсилки спаму і великого трафіку.
Для початку необхідно встановити кілька пакетів і залежностей.
Для AlmaLinux виконується команда:
yum -y install gcc wget tar
а для Debian:
apt install -y build-essential wget tar
Потім завантажуємо файли з офіційного сайту проекту 3proxy, розпаковуємо архів і компілюємо викачані файли.
Далі створюємо необхідні директорії для конфігураційних файлів і логів, переносимо виконуваний файл 3proxy
, а також створюємо нового користувача"proxyuser
" і призначаємо йому права на директорії. Для створення нового конфігураційного файлу виконуємо команду:
touch /etc/3proxy/3proxy.cfg
Призначаємо права тільки для користувача root за допомогою chmod 600 /etc/3proxy/3proxy.cfg
.
Після створення нового конфігураційного файлу необхідно правильно його заповнити. Для цього записуємо uid
і gid
користувача"proxyuser
", потім використовуємо текстовий редактор для копіювання і вставки тексту з прикладу файлу конфігурації. Зберігаємо зміни у файлі конфігурації й отримуємо встановлений 3proxy з підтримкою http(s) і socks5-proxy.
Нижче наведемо зразок конфігураційного файлу:
Налаштування запуску сервера від користувача proxyuser
(вставляємо uid
і gid
нашого користувача, які ми дізналися раніше). setgid 991
setuid 991
Вказуємо правильні сервери імен. Подивитися можна в /etc/resolv.conf
: nserver 8.8.8.8.8
nserver 8.8.4.4
Використовуємо таймаути і розмір кешу для запитів DNS за замовчуванням: timeouts 1 5 30 60 180 1800 15 60
nscache 65536
Вказуємо режим запуску як daemon: daemon
Вказуємо IP-адресу зовнішнього інтерфейсу сервера: external 111.111.111.111.111
(або ігноруємо рядок, якщо IP один).
Вказуємо IP-адресу внутрішнього інтерфейсу сервера: internal 192.168.0.1
(або ігноруємо, щоб проксі слухав усі IP).
Налаштовуємо http proxy на стандартному порту 3128: proxy -p3128 -n -a
(вкажіть свій порт, попередньо перевіривши, що він працює).
Налаштовуємо socks proxy на стандартному порту 1080: socks -p1080
(вкажіть свій порт, попередньо перевіривши, що він працює).
Вказуємо шлях до логів, формат лога і ротацію: log /var/log/3proxy/3proxy.log D
logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
rotate 30
Далі створюємо файл-ініціалізації для systemd
і налаштовуємо правильні права:
# touch /etc/systemd/system/3proxy.service
# chmod 664 /etc/systemd/system/3proxy.service
У цей файл потрібно вставити такий текст:
[Unit]
Description=3proxy Proxy Server
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/3proxy /etc/3proxy/3proxy.cfg
ExecStop=/bin/kill `/usr/bin/pgrep proxyuser`
RemainAfterExit=yes
Restart=on-failure
[Install]
WantedBy=multi-user.target
Зберігаємо й оновлюємо конфігурацію systemd
:
# systemctl daemon-reload
Запускаємо 3proxy і додаємо його в автозавантаження:
# systemctl start 3proxy
# systemctl enable 3proxy
Налаштування закінчено. На порту 3128 тепер у вас працює http-proxy, на порту 1080 - socks-proxy
.
Перша проблема - є ймовірність, що після реєстрації нового домену він не буде доступний вам через кешування доменних імен. Щоб розв'язати цю проблему, необхідно дочекатися оновлення записів DNS або додати IP-адресу вашого сервера і новий домен у файл hosts
. Це дасть змогу звертатися до нового домену, поки записи в DNS не оновляться.
Проблема друга - якщо використовувати проксі-сервер із дефолтними портами, то рано чи пізно можливе виявлення сервера. Для того, щоб вирішити цю проблему, рекомендується змінити порти.
Наприклад, на http proxy можна встановити порт 7834, а на Socks - 7835. Однак, такі порти також можуть бути виявлені, тому в firewall можна налаштувати доступ до сервера тільки з певних адрес, тоді як іншим буде заборонено доступ. Це рішення є досить надійним, хоча не надто гнучким, оскільки вам може не бути доступна статична IP-адреса.
Проблема третя - якщо ви використовуєте проксі-сервер і ведете логи всіх з'єднань, то згодом вони можуть стати досить об'ємними і зайняти більшу частину вільного місця на диску. Щоб уникнути цієї проблеми, необхідно попередньо подбати про ротацію логів або про те, щоб не вести їх зовсім.
Існують різні методи ротації логів, які дають змогу зберігати тільки останні кілька файлів логів і автоматично видаляти старіші записи. Тому найкраще заздалегідь налаштувати процес ротації логів, щоб уникнути переповнення диска. Це допоможе зберегти всі дані й уникнути втрати інформації під час використання проксі-сервера.
users proxyuser:CL:password
daemon
log /var/log/3proxy/3proxy.log D
rotate 30
auth strong
proxy -n -a
setgid 65534
setuid 65534
Ще необхідно створити директорію під логи і виставити права (ми запускаємо сервер з мінімальними правами nobody в системі, використовуючи директиви setgid/setud
):
mkdir /var/log/3proxy ; chown nobody /var/log/3proxy
Розглянемо варіант встановлення 3proxy в Docker.
Для початку потрібно встановити деякі пакети (а для нещодавно встановлених OS Debian і Ubuntu, можливо, ще буде потрібно оновити індекс пакетів apt
командою # apt update
).
Для AlmaLinux і CentOS:
# yum install docker docker-compose
для Ubuntu і Debian:
# apt install docker docker.io docker-compose
Завантажуємо образ:
# docker pull 3proxy/3proxy
За замовчуванням 3proxy використовує безпечне середовище chroot в /usr/local/3proxy
з uid 65535
і gid 65535
, і очікує, що конфігураційний файл 3proxy буде поміщено в /usr/local/etc/3proxy
. Шляхи в конфігураційному файлі повинні вказуватися відносно /usr/local/3proxy
, тобто має бути /logs
замість /usr/local/3proxy/logs
. У chroot потрібен дозвіл для nserver
.
Для цього створимо директорію і конфігураційний файл 3proxy
:
# mkdir -p /etc/dockerapp/3proxy
# touch /etc/dockerapp/3proxy/3poxy.conf
Далі за допомогою будь-якого зручного для вас текстового редактора необхідно відредагувати створений конфігураційний файл 3proxy.conf
. Для запуску 3proxy в Docker достатньо мінімальної конфігурації:
nserver 8.8.8.8.8
socks -p3129
Для того щоб додати логування і користувача, необхідно в файл конфігурації 3proxy
додати:
log /logs/3proxy.log
auth strong
users "proxyuser:CR:87beeef3f4ee4661ac1897eca216fc26"
Замість "87beeef3f4ee4661ac1897eca216fc26
" необхідно вказати хеш MD5 пароля для користувача proxyuser
. Дізнатися хеш MD5 можна за допомогою онлайн генераторів.
Запустимо 3proxy за допомогою docker-compose
. Для цього потрібно створити файл конфігурації у форматі .yml
:
# touch /etc/dockerapp/3proxy/docker-compose.yml
Вставляємо туди за допомогою текстового редактора наступний текст:
version: "2.1"
services:
3proxysvc:
image: 3proxy/3proxy:latest
container_name: 3proxy
volumes:
- /etc/dockerapp/3proxy/conf:/usr/local/3proxy/conf
ports:
- 8080:3129
restart: unless-stopped
Зберігаємо. У цьому файлі ми вказали зовнішній порт 8080. Тепер можемо запускати:
# docker-compose -f /etc/dockerapp/3proxy/docker-compose.yml up -d
Отримаємо приблизно таку відповідь:
Створення мережі"3proxy_default
" із драйвером за замовчуванням
Створення 3proxy ... done
Перевіряємо:
# docker ps
Отримаємо відповідь, де буде вказано ID контейнера, образ, статус, порти, що використовуються, та ім'я:
48cc0cd140cd 3proxy/3proxy:latest "/bin/3proxy /etc/3p..." 5