Проксі для Transparent Proxy / iptables
У більшості випадків, коли ми говоримо про проксі, ми маємо на увазі «звичайний» або «непрозорий» проксі. Він вимагає явного налаштування в кожному додатку. Але існує й інший, набагато потужніший підхід — прозорий проксі (Transparent Proxy).
Ця технологія перехоплює і перенаправляє мережевий трафік непомітно для кінцевого користувача і його додатків. Програми на комп'ютері користувача навіть не підозрюють, що їх трафік проходить через проксі.
Аналогія:
Звичайний проксі — це як відправити посилку через кур'єрську службу, яку ви самі вибрали і викликали.
Прозорий проксі — це якби все поштове відділення за замовчуванням загортало всі ваші посилки і відправляло їх за спеціальним маршрутом, не ставлячи вас до відома.
Механізм, який робить це можливим у світі Linux, називається iptables. У цьому гайді ми розберемося, як це працює, для чого це потрібно і як налаштувати таку систему на практиці.
⛔️ Важливе попередження перед початком
Цей гайд призначений для досвідчених користувачів. Ви будете працювати з iptables і отримаєте повний root-доступ до системи. Неправильна команда може повністю заблокувати ваш доступ до мережі (включаючи SSH).
- Тестуйте в VM: Завжди тестуйте подібні налаштування спочатку у віртуальній машині.
- Майте план «Б»: Переконайтеся, що у вас є консольний доступ до сервера (не SSH) на випадок, якщо ви заблокуєте собі мережу.
- Довірений провайдер: Ви довіряєте весь свій трафік проксі-серверу. Переконайтеся, що використовуєте надійного і перевіреного провайдера. Не проксіруйте sensitive трафік (банкінг) без end-to-end шифрування.
- Сумісність: Для нових дистрибутивів (Ubuntu 22+, Fedora) перевірте
iptables --version— якщо nft, перейдіть:sudo update-alternatives --set iptables /usr/sbin/iptables-legacy. У контейнерах (Docker) redsocks вимагає cap_net_admin; використовуйте --privileged.
Частина 1. Навіщо потрібен прозорий проксі?
Прозоре проксіювання — це тотальний контроль над трафіком на рівні мережі.
- Корпоративні мережі та Wi-Fi: для фільтрації контенту, кешування даних і централізованого аналізу безпеки.
- Управління пристроями (IoT): ви можете проксірувати трафік з пристроїв, де не можна налаштувати проксі вручну (Smart TV, ігрові консолі, IoT-гаджети).
- Обхід цензури для всієї мережі: замість налаштування VPN на кожному пристрої, можна один раз налаштувати роутер, який буде весь трафік направляти через проксі.
Частина 2. Механізм роботи: iptables
iptables — це інструмент для управління мережевими пакетами в ядрі Linux (Netfilter). Ми будемо використовувати таблицю nat (Network Address Translation).
Ключовий момент — це правильний вибір ланцюжка для перехоплення:
- Ланцюжок PREROUTING: Перехоплює трафік, який проходить КРІЗЬ ваш сервер (транзитний трафік). Це ваш вибір, якщо ви налаштовуєте шлюз або роутер для інших пристроїв у мережі.
- Ланцюжок OUTPUT: Перехоплює трафік, який генерує САМ СЕРВЕР (наприклад, curl, apt-get або скрипти, запущені локально).
Частина 3. Практична реалізація з redsocks
Простий REDIRECT не вміє працювати з віддаленими SOCKS5-проксі, що вимагають аутентифікації. Нам знадобиться redsocks.
redsocks — це демон, який приймає перенаправлений iptables трафік, а потім сам встановлює з'єднання з вашим віддаленим проксі.
Примітка: Оригінальний redsocks досить старий (останні оновлення ~2018). Рекомендуємо використовувати форк redsocks2 (REDSOCKS2), який має фікси, нові фічі (авто-редирект без блекліста, shadowsocks support, IPv6) і актуальний в 2025. Якщо у вашому дистрибутиві є пакет redsocks2 — використовуйте його.
Інакше:git clone https://github.com/semigodking/redsocks && cd redsocks && make && sudo make install
(або аналогічний форк https://github.com/Intika-Linux-Proxy/Red-Socks-2).
Крок 1: Збір облікових даних проксі
Перший і найважливіший крок — переконатися, що у вас є повний набір даних для авторизації. Ці «ключі» дозволять вашому додатку або браузеру підключитися до проксі-сервера і направити трафік через нього.
Обов'язково підготуйте наступні дані:
- IP-адреса (хост-сервер)
- Порт для підключення
- Логін і пароль для авторизації
- Тип протоколу (HTTP/HTTPS або SOCKS5)
*Рис. 1. На цьому скріншоті показано, де в особистому кабінеті **CyberYozh App** знаходяться всі необхідні поля для підключення до проксі-сервера.*Крок 2. Встановлення redsocks
sudo apt update
sudo apt install redsocks # Для оригіналу; для redsocks2 — див. вище
Крок 3. Налаштування redsocks (TCP + DNS)
Відкрийте файл конфігурації sudo nano /etc/redsocks.conf. Надайте йому наступного вигляду, підставивши дані вашого проксі. Ми налаштуємо redsocks для TCP-трафіку, redudp для UDP/DNS і dnstc для TCP-DNS (щоб захоплювати рідкісні TCP-запити).
base {
log_debug = off;
log_info = on;
log = «file:/var/log/redsocks.log»; // Шлях до логів для налагодження
daemon = on;
user = redsocks;
group = redsocks;
redirector = iptables;
}
// Секція для TCP-трафіку (HTTP, HTTPS тощо)
redsocks {
local_ip = 0.0.0.0;
local_port = 12345; // Порт, який буде слухати redsocks для TCP
ip = 51.77.190.247; // IP-адреса вашого віддаленого SOCKS5-проксі
port = 9595; // Порт вашого віддаленого SOCKS5-проксі
type = socks5; // Використовуємо SOCKS5 (можна http-connect для HTTP-проксі або http-relay для чистого HTTP)
login = «pcobLdlPkt-res-any»; // Логін від проксі
password = «PC_7CJ2WQqdHNm42dHWj»; // Пароль від проксі
}
// Секція для DNS-трафіку (UDP)
redudp {
local_ip = 0.0.0.0;
local_port = 10053; // Порт, який буде слухати redsocks для DNS
ip = 51.77.190.247; // Той самий IP SOCKS5-проксі
port = 9595; // Той самий порт SOCKS5-проксі
type = socks5;
login = «pcobLdlPkt-res-any»; // Той самий логін
password = «PC_7CJ2WQqdHNm42dHWj»; // Той самий пароль
}
// Секція для TCP-DNS (щоб захоплювати рідкісні TCP-запити)
dnstc {
local_ip = 127.0.0.1;
local_port = 5300;
}
Крок 4. Налаштування iptables (найважливіший крок)
Ці правила — ядро нашої системи. Вони запобігають витокам і нескінченним циклам.
Важливо: iptables не має вбудованого «режиму редагування», як текстовий редактор. Правила зберігаються в пам'яті ядра і керуються за допомогою команд. Для перегляду, видалення, вставки або заміни використовуйте команди iptables. Для складних правок вивантажте правила у файл, відредагуйте його і завантажте назад. Це особливо зручно з iptables-persistent, де правила зберігаються в /etc/iptables/rules.v4.
Крок 1. Перегляд поточних правил
Спочатку перегляньте існуючі правила, щоб зрозуміти, що редагувати.
# Перегляд всіх правил у таблиці nat з номерами рядків
sudo iptables -t nat -L -n -v --line-numbers
-t nat: Таблиця nat (для наших REDIRECT).-L: Список правил.-n: Числові IP (без DNS).-v: Детально (лічильники пакетів).--line-numbers: Номери правил (для видалення/вставки).
Приклад виводу:
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REDSOCKS all -- * * 0.0.0.0/0 0.0.0.0/0
Крок 2. Просте редагування: Видалення, вставка і заміна
Для дрібних змін:
- Видалити правило за номером: Вкажіть ланцюжок і номер.
# Видалити правило №1 в PREROUTING
sudo iptables -t nat -D PREROUTING 1
- Вставити нове правило на позицію: Використовуйте -I (insert).
# Вставити на позицію 1 в PREROUTING (наприклад, з додатковими портами) sudo iptables -t nat -I PREROUTING 1 -p tcp -m multiport --dports 80,443,8080 -j REDSOCKS - Замінити правило: Використовуйте -R (replace).
# Замінити правило №1 в PREROUTING
sudo iptables -t nat -R PREROUTING 1 -p tcp -m multiport --dports 80,443 -j REDSOCKS
Крок 3. Редагування через файл (для складних змін)
Вивантажте правила в текстовий файл, відредагуйте і завантажте.
- Вивантажити правила:
sudo iptables-save > /tmp/iptables.rules # Тимчасовий файл
# Або для persistent: sudo nano /etc/iptables/rules.v4
Відредагувати файл: Відкрийте в nano або vi. Файл виглядає так (приклад):
*nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :REDSOCKS - [0:0] -A REDSOCKS -d 1.2.3.4 -j RETURN -A REDSOCKS -d 10.0.0.0/8 -j RETURN # ... інші винятки -A REDSOCKS -p tcp -m multiport --dports 80,443 -j REDIRECT --to-port 12345 -A PREROUTING -j REDSOCKS -A PREROUTING -p udp --dport 53 -j REDIRECT --to-port 10053 -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-port 5300 -A POSTROUTING -o eth0 -j MASQUERADE COMMITДодавайте/видаляйте рядки з -A, -I тощо. Збережіть файл.
Завантажити правила:
sudo iptables-restore < /tmp/iptables.rules
# Для persistent: sudo netfilter-persistent reload
Крок 4. Очищення правил (якщо потрібно скинути)
- Очистити ланцюжок:
sudo iptables -t nat -F REDSOCKS(flush). - Видалити ланцюжок:
sudo iptables -t nat -X REDSOCKS. - Повне очищення nat:
sudo iptables -t nat -F(обережно!).
Поради: Після змін перевірте правила (iptables -t nat -L) і протестуйте трафік (curl, dig). Для IPv6 використовуйте ip6tables. Якщо система на nftables, редагуйте /etc/nftables.conf і застосуйте sudo nft -f /etc/nftables.conf.
Приступимо до налаштування iptables:
# ВАЖЛИВО: Вкажіть IP вашого віддаленого проксі
PROXY_IP="51.77.190.247"
# --- ЗАГАЛЬНЕ НАЛАШТУВАННЯ ---
# Очищаємо ланцюжок REDSOCKS (якщо існує, для тесту)
sudo iptables -t nat -F REDSOCKS || true
sudo iptables -t nat -X REDSOCKS || true
# Створюємо новий ланцюжок REDSOCKS для TCP
iptables -t nat -N REDSOCKS
# Виключаємо сам проксі-сервер, щоб уникнути нескінченного циклу
iptables -t nat -A REDSOCKS -d $PROXY_IP -j RETURN
# Ігноруємо локальні та зарезервовані мережі
iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN
# --- ВИПРАВЛЕННЯ: Перенаправляємо тільки ВЕБ-трафік ---
# Ми НЕ хочемо ламати SSH, FTP тощо. Перенаправляємо тільки HTTP і HTTPS.
# Для email (25,465) або інших портів додайте в --dports
iptables -t nat -A REDSOCKS -p tcp -m multiport --dports 80,443 -j REDIRECT --to-port 12345
# (Опціонально) Якщо ви впевнені, що хочете проксірувати ВЕСЬ TCP-трафік:
# iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-port 12345
# --- ВИБЕРІТЬ ВАШ СЦЕНАРІЙ ---
# === СЦЕНАРІЙ А: Проксі для шлюзу (трафік ІНШИХ пристроїв) ===
# Клієнти повинні використовувати сервер як default gateway (через DHCP або статично)
# 1. Включаємо IP-форвардинг (постійно)
echo “net.ipv4.ip_forward=1” | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# 2. Застосовуємо правила до транзитного трафіку
iptables -t nat -A PREROUTING -j REDSOCKS
# 3. Перехоплюємо DNS-трафік (UDP 53) і відправляємо на redsocks
iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-port 10053
# 4. Перехоплюємо TCP-DNS
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-port 5300
# 5. Включаємо MASQUERADE (КРИТИЧНО ВАЖЛИВО для шлюзу)
# Замініть eth0 на ваш ЗОВНІШНІЙ мережевий інтерфейс
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# === СЦЕНАРІЙ Б: Проксі для самого сервера (ЛОКАЛЬНИЙ трафік) ===
# 1. Застосовуємо правила до локального трафіку
iptables -t nat -A OUTPUT -j REDSOCKS
# 2. Перехоплюємо локальний DNS-трафік
iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-port 10053
# 3. Перехоплюємо TCP-DNS
iptables -t nat -A OUTPUT -p tcp --dport 53 -j REDIRECT --to-port 5300
Важливо: Не застосовуйте обидва сценарії одночасно без глибокого розуміння. Виберіть той, який відповідає вашому завданню.
Крок 5. Запуск redsocks
sudo systemctl start redsocks
# Переконайтеся, що сервіс запущений
sudo systemctl status redsocks
Частина 4. Проблеми та просунуті рішення
*Витоки DNS (UDP vs TCP) *
Цей гайд вирішує проблему, перехоплюючи DNS-запити по UDP (порт 53) і TCP з dnstc. Однак, якщо проксі не підтримує UDP-associate (для redudp), DNS не пройде — перевірте логи. Для повного захисту перевірте на dnsleaktest.com.
Проблема з HTTPS і SSL
У redsocks цієї проблеми немає. Він працює на транспортному рівні (TCP) і не намагається розшифрувати ваш HTTPS-трафік. Він просто бере ваш вже зашифрований HTTPS-пакет і «загортає» його цілком в SOCKS5. Власник проксі не може прочитати ваші дані.
# Примітка про сучасні альтернативи
redsocks — потужний, але досить старий інструмент. У 2025 році для нових систем, особливо тих, що використовують nftables, часто рекомендують більш сучасні альтернативи, такі як ss-redir (з shadowsocks-libev) або V2Ray/Xray, які виконують схожі завдання з кращою продуктивністю і плагінами. Для UDP без redsocks розгляньте TPROXY в iptables/nftables. Якщо в контейнерах або на Android/routers (GL.iNet) — redsocks працює, але вимагає кастомного прошивання.
Частина 5. Тестування та налагодження
Якщо щось не працює, ось ваш чек-лист:
- Перевірте IP:
curl ifconfig.me(повинен показати IP вашого SOCKS5-проксі, а не сервера). - Перевірте DNS:
dig google.comабоnslookup google.com. Перевірте IP-адресу, яка відповідає. Перевірте витоки: Відкрийте browserleaks.com або dnsleaktest.com. - Перевірте логи redsocks: Це ваш найкращий друг.
tail -f /var/log/redsocks.log # Або: journalctl -u redsocks
Шукайте повідомлення про помилки підключення або аутентифікації (наприклад, “authentication failed” — неправильний login/password).
- Перевірте доступність проксі: Переконайтеся, що ваш сервер може підключитися до проксі-сервера:
nc -zv 51.77.190.247 9595
# (Очікувана відповідь: Connection to 51.77.190.247 9595 port [tcp/*] succeeded!)
- Перевірте порти:
ss -tuln(повинні слухатися 12345, 10053, 5300). - Перевірте Firewall: Переконайтеся, що ufw або firewalld не блокують ваші нові правила. Якщо SSH зламаний — вимкніть перенаправлення всього TCP.
- Поширені проблеми: «Connecting but not responding» — перевірте proxy-type (http-relay для HTTP). Нескінченний цикл? Переконайтеся, що PROXY_IP виключений.
Частина 6. Збереження правил iptables
Налаштування iptables скидаються при перезавантаженні. Щоб зробити їх постійними, встановіть iptables-persistent.
sudo apt update
sudo apt install iptables-persistent
Під час установки він запитає, чи хочете ви зберегти поточні правила. Погодьтеся. Якщо ви пізніше зміните правила, для їх збереження виконайте:
sudo netfilter-persistent save
Для очищення:sudo iptables -t nat -F REDSOCKS; sudo iptables -t nat -X REDSOCKS; sudo iptables -t nat -D PREROUTING/OUTPUT ...
(видаліть конкретні правила).
Висновок
Прозорий проксі з iptables — це неймовірно потужний інструмент. Завдяки redsocks (або redsocks2) його можна налаштувати для роботи з сучасними SOCKS5-проксі. Головне — пам'ятати про безпеку, уникати перехоплення всього TCP-трафіку (фільтруючи порти), вмикати MASQUERADE для шлюзів і завжди перехоплювати DNS-запити, щоб уникнути витоків.
FAQ
- Не працює підключення? Перевірте проксі в logs: “authentication failed” — невірний login/password.
- Нескінченний цикл? Переконайтеся, що PROXY_IP виключений.
- У контейнерах? Redsocks вимагає cap_net_admin; використовуйте --privileged в Docker.
- Не працює з моїм проксі? Якщо HTTP — використовуйте type = http-connect для HTTPS-сумісності.