Прокси для 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 (via 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: Это ваш лучший друг.
Ищите сообщения об ошибках подключения или аутентификации (например, 'authentication failed' — неверный login/password).tail -f /var/log/redsocks.log # Или: journalctl -u redsocks - Проверьте доступность прокси: Убедитесь, что ваш сервер может подключиться к прокси-серверу:
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.
- Common Issues: '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-совместимости.