Щоб налаштувати власний проксі-сервер, зазвичай встановлюють та конфігурують спеціалізоване проксі-програмне забезпечення, таке як Squid для кешування HTTP/HTTPS, 3proxy для легкої роботи з HTTP/SOCKS, або Dante для надійного SOCKS5, визначаючи порти прослуховування, засоби контролю доступу та механізми автентифікації на Linux-сервері.
Налаштування власного проксі-сервера забезпечує контроль над мережевим трафіком, конфіденційність, доступ до географічно обмеженого контенту або підвищену безпеку для внутрішніх мереж. Вибір програмного забезпечення залежить від конкретних вимог, таких як підтримка протоколів (HTTP, HTTPS, SOCKS), потреби в кешуванні та бажана складність.
Загальні передумови
Перед налаштуванням будь-якого проксі-сервера переконайтеся, що ваш сервер відповідає цим базовим вимогам:
* Операційна система: Зазвичай використовується дистрибутив Linux (наприклад, Ubuntu, Debian, CentOS).
* Доступ до мережі: Сервер повинен мати відповідне мережеве підключення та публічну IP-адресу, якщо потрібен зовнішній доступ.
* Налаштування брандмауера: Відкрийте необхідні порти (наприклад, 3128 для HTTP, 1080 для SOCKS) на брандмауері вашого сервера (наприклад, ufw, firewalld).
Проксі-сервер Squid
Squid — це потужний, повнофункціональний кешуючий проксі для веб-клієнтів, що підтримує HTTP, HTTPS, FTP та інші протоколи. Він чудово кешує часто відвідуваний контент, зменшуючи використання пропускної здатності та покращуючи час відгуку.
Встановлення (Debian/Ubuntu)
sudo apt update
sudo apt install squid
На CentOS/RHEL: sudo yum install squid або sudo dnf install squid.
Базова конфігурація
Основний файл конфігурації зазвичай знаходиться за адресою /etc/squid/squid.conf.
1. Визначення порту прослуховування:
Знайдіть або додайте директиву http_port.
http_port 3128
2. Списки контролю доступу (ACLs):
Squid використовує ACL для визначення мережевих сегментів, користувачів або інших критеріїв, а правила http_access для застосування дій.
```
# Визначення ACL для локальної мережі (замініть на локальну підмережу вашого сервера або IP-адресу клієнта)
acl localnet src 192.168.1.0/24 # Приклад: Дозволити клієнтам з цієї підмережі
acl localhost src 127.0.0.1/32
# Дозволити доступ для визначених ACL
http_access allow localhost
http_access allow localnet
# Заборонити весь інший доступ
http_access deny all
```
Щоб дозволити доступ з будь-якої IP-адреси (менш безпечно, використовуйте з обережністю та автентифікацією):
```
acl all src 0.0.0.0/0
http_access allow all
```
- Перезапуск Squid:
bash sudo systemctl restart squid sudo systemctl enable squid sudo systemctl status squid
Автентифікація користувачів (Basic Auth)
Реалізуйте базову автентифікацію за іменем користувача/паролем для підвищення безпеки.
1. Встановлення утиліт Apache (для htpasswd):
bash
sudo apt install apache2-utils
2. Створення файлу паролів:
bash
sudo htpasswd -c /etc/squid/passwd yourusername
# Введіть та підтвердіть пароль. Щоб додати більше користувачів, пропустіть -c:
# sudo htpasswd /etc/squid/passwd anotheruser
3. Налаштування Squid для автентифікації:
Додайте ці рядки до squid.conf (наприклад, на початку або в розділі AUTH):
```
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 5 startup=5 idle=1
auth_param basic realm "Squid Proxy Authentication"
auth_param basic credentialsttl 2 hours
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
http_access deny all
```
Переконайтеся, що `http_access allow authenticated` з'являється *перед* будь-якими правилами `http_access deny all`, які блокували б автентифікованих користувачів.
- Перезапуск Squid.
Перехоплення HTTPS (прозорий проксі)
Squid може перехоплювати та дешифрувати HTTPS-трафік, що вимагає генерації та довіри до спеціального SSL-сертифіката на клієнтських машинах. Це складна конфігурація, яка в основному використовується в корпоративних середовищах для фільтрації контенту та моніторингу, і зазвичай не рекомендується для особистого використання через наслідки для безпеки та конфіденційності.
Проксі-сервер 3proxy
3proxy — це легкий, універсальний проксі-сервер, що підтримує HTTP, HTTPS (CONNECT), SOCKS4/5, FTP та інші протоколи. Він відомий своїм малим розміром та гнучкою конфігурацією.
Встановлення (компіляція з вихідного коду)
3proxy часто компілюється з вихідного коду для отримання останньої версії та максимального контролю.
1. Встановлення інструментів збірки:
bash
sudo apt update
sudo apt install build-essential git
2. Завантаження та компіляція:
bash
git clone https://github.com/z3APA3A/3proxy.git
cd 3proxy
make -f Makefile.Linux
sudo make -f Makefile.Linux install
Виконувані файли зазвичай встановлюються в /usr/local/bin/3proxy.
Базова конфігурація
Створіть файл конфігурації, наприклад, /etc/3proxy/3proxy.cfg.
1. Розпізнавач DNS:
nserver 8.8.8.8 # Google DNS
nserver 1.1.1.1 # Cloudflare DNS
2. Автентифікація (за бажанням):
auth strong
users yourusername:CL:yourpassword # CL для відкритого тексту, використовуйте хеш для продакшну
3. Визначення проксі:
* HTTP-проксі:
proxy -p3128
* SOCKS5-проксі:
socks -p1080
* Комбінований HTTP та SOCKS:
proxy -p3128
socks -p1080
4. Контроль доступу:
Після users і перед рядками proxy/socks:
allow yourusername # Дозволити тільки вказаному користувачеві
# Або дозволити всім автентифікованим користувачам:
# allow *
# Або дозволити з певної IP-адреси:
# allow 192.168.1.0/24
Базова, менш безпечна конфігурація, що дозволяє будь-кому з будь-якого місця:
allow * *
proxy -p3128
socks -p1080
5. Запуск 3proxy:
bash
/usr/local/bin/3proxy /etc/3proxy/3proxy.cfg
Для фонової роботи використовуйте start 3proxy /etc/3proxy/3proxy.cfg всередині файлу конфігурації або systemd для належного керування службами.
Служба Systemd (необов'язково)
Створіть /etc/systemd/system/3proxy.service:
[Unit]
Description=3proxy Proxy Server
After=network.target
[Service]
ExecStart=/usr/local/bin/3proxy /etc/3proxy/3proxy.cfg
Restart=always
User=nobody # Запустити як непривілейований користувач
[Install]
WantedBy=multi-user.target
Потім:
sudo systemctl daemon-reload
sudo systemctl enable 3proxy
sudo systemctl start 3proxy
sudo systemctl status 3proxy
SOCKS-сервер Dante
Dante — це надійний SOCKS-проксі-сервер, що переважно підтримує SOCKS4 та SOCKS5. Він відомий своєю стабільністю та продуктивністю, що робить його придатним для SOCKS-тунелювання з високим трафіком.
Встановлення (Debian/Ubuntu)
sudo apt update
sudo apt install dante-server
На CentOS/RHEL: sudo yum install dante-server або sudo dnf install dante-server.
Базова конфігурація
Основний файл конфігурації — /etc/danted.conf.
1. Визначення мережевих інтерфейсів та портів:
logoutput: stderr
internal: eth0 port = 1080 # Замініть eth0 на ім'я внутрішнього інтерфейсу вашого сервера
external: eth0 # Замініть eth0 на ім'я зовнішнього інтерфейсу вашого сервера
Якщо у вас лише один інтерфейс, використовуйте його для обох internal та external.
2. Привілеї користувачів:
user.privileged: root
user.notprivileged: nobody
3. Методи автентифікації:
Для автентифікації за іменем користувача/паролем Dante використовує системних користувачів.
socksmethod: username none
username вимагає автентифікації клієнта, none дозволяє неавтентифікований доступ.
4. Правила доступу:
Визначте правила client (хто може підключатися до проксі) та правила socks (який трафік проксі буде пересилати).
```
# Правило для клієнта: Дозволити будь-кому підключатися до проксі
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
socksmethod: username none # Застосувати визначені вище методи автентифікації
}
# Правило SOCKS: Дозволити проксі пересилати трафік куди завгодно
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
socksmethod: username none
}
```
Щоб обмежити доступ клієнтів до певного діапазону IP-адрес:
```
client pass {
from: 192.168.1.0/24 to: 0.0.0.0/0
socksmethod: username none
}
```
- Створення системного користувача для автентифікації:
Якщо використовуєтьсяsocksmethod: username, створіть системного користувача (без домашнього каталогу або доступу до оболонки для безпеки).
bash sudo adduser --no-create-home --shell /usr/sbin/nologin proxyuser # Встановіть надійний пароль для proxyuser - Перезапуск Dante:
bash sudo systemctl restart danted sudo systemctl enable danted sudo systemctl status danted
Таблиця порівняння: Squid проти 3proxy проти Dante
| Функція | Squid | 3proxy | Dante SOCKS Server |
|---|---|---|---|
| Тип | HTTP/HTTPS, кешування, прямий/зворотний | HTTP, HTTPS (CONNECT), SOCKS4/5, FTP | SOCKS4/5 |
| Складність | Від середньої до високої (через велику кількість функцій) | Від низької до середньої (компактна конфігурація) | Середня (надійна реалізація SOCKS) |
| Основне використання | Веб-кешування, фільтрація контенту, контроль доступу | Легкий проксі, SOCKS-шлюз, універсальний | Високопродуктивний SOCKS-проксі, тунелювання |
| Продуктивність | Висока (особливо з кешуванням) | Дуже легкий, ефективний | Висока, оптимізована для SOCKS-трафіку |
| Автентифікація | Basic, Digest, NTLM, зовнішні помічники | Basic, NTLM, на основі IP, зовнішні помічники | Ім'я користувача/пароль (системні користувачі), на основі IP |
| Підтримка ОС | Linux, FreeBSD, Windows (через Cygwin) | Linux, Windows, BSD, macOS | Linux, FreeBSD, Solaris, macOS |
| Конфігурація | Розширена, детальна, текстова | Компактна, скриптоподібна, текстова | Текстова, чіткі розділи |
Загальні міркування щодо безпеки та продуктивності
- Брандмауер: Завжди налаштовуйте брандмауер вашого сервера (наприклад,
ufw,firewalld) так, щоб дозволяти вхідні з'єднання до проксі-порту(ів) лише з довірених IP-адрес або діапазонів IP-адрес. - Автентифікація: Використовуйте надійні, унікальні паролі для автентифікації проксі. Для публічних проксі завжди вмикайте автентифікацію.
- Принцип найменших привілеїв: Запускайте проксі-служби під виділеним, непривілейованим користувачем (наприклад,
nobodyабо спеціальним користувачем), щоб обмежити потенційну шкоду у разі компрометації. - Моніторинг: Регулярно переглядайте журнали проксі на предмет незвичайної активності та моніторте ресурси сервера (CPU, RAM, мережевий ввід/вивід) для виявлення вузьких місць продуктивності або потенційних атак.
- Оновлення: Підтримуйте програмне забезпечення проксі та операційну систему в актуальному стані, щоб виправляти вразливості безпеки.
- Апаратне забезпечення: Переконайтеся, що сервер має достатній CPU, RAM та пропускну здатність мережі для очікуваного навантаження. Для Squid з інтенсивним кешуванням корисним є SSD-накопичувач.