Redsocks

Anonymizers vrelease-0.5 · 27.12.2016 не обновлялся >2 лет

Прозрачный SOCKS/HTTP-редиректор: через iptables REDIRECT перехватывает TCP-трафик любого процесса ОС и заворачивает его через прокси без изменения приложений. В отличие от proxychains (LD_PRELOAD), работает со статически слинкованными бинарями, Go-программами, и с трафиком всей системы. Используется для создания torsocks-аналога на уровне netfilter, для перенаправления трафика контейнеров через прокси, а также в связке с Burp Suite для MITM всего трафика хоста.

vrelease-0.5
27.12.2016 current
Добавлен 24.06.2026 · Обновлён 24.06.2026 · Anonymizers
Установка
apt install redsocks

# Конфиг /etc/redsocks.conf:
# redsocks { local_ip=127.0.0.1; local_port=12345;
#   ip=127.0.0.1; port=9050; type=socks5; }

# iptables-правила для перехвата:
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 12345
iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-port 12345
переведено ИИ

redsocks – прозрачный перенаправитель TCP на прокси

Этот инструмент позволяет перенаправлять любое TCP-соединение через SOCKS или HTTPS-прокси, используя ваш межсетевой экран, что делает перенаправление системным или сетевым.

Когда redsocks полезен?

  • вы хотите маршрутизировать часть TCP-трафика через порт SOCKS5 с динамическим пробросом (DynamicForward) OpenSSH с помощью политик межсетевого экрана. Это была первоначальная цель разработки redsocks;
  • вы используете DVB-провайдера, и этот провайдер предоставляет доступ в интернет через специальную службу, которая также может называться "ускорителем интернета", и ускоритель работает как прокси, но не имеет функции "прозрачного прокси", а вам она нужна. Globax был примером подобного ускорителя, но Globax 5 уже имеет функцию прозрачного прокси. Это была вторая цель разработки redsocks;
  • вам необходимо пропускать трафик через прокси из-за ограничений корпоративной сети. Это никогда не было целью redsocks, но пользователи сообщали об успехе с некоторыми конфигурациями прокси.

Когда redsocks, вероятно, не подходит?

  • для перенаправления трафика в tor. Во-первых, вы обязаны использовать программное обеспечение, понимающее tor, для анонимности. Во-вторых, используйте TransPort, если вам на самом деле не нужна анонимность. В-третьих, сомневайтесь во всем :-)
  • при попытке перенаправить трафик значительного количества соединений через одно SSH-соединение. Это не совсем TCP поверх TCP, но блокировка головы очереди все равно произойдет, и производительность приложений реального времени (мгновенные сообщения, интерактивные веб-приложения) может ухудшиться во время массовых передач;
  • при попытке сделать непрозрачный HTTP-прокси (не HTTPS-прокси) прозрачным с помощью модуля http-relay. Во-первых, он, скорее всего, будет работать некорректно, так как код является хаком. Во-вторых, код уязвим к CVE-2009-0801 и вряд ли когда-либо будет исправлен;
  • для создания "действительно" прозрачного прокси, redsocks работает на уровне TCP, поэтому тройное рукопожатие завершается и redsocks принимает соединение до того, как будет установлено соединение через прокси (и к прокси);
  • при попытке перенаправить трафик значительного количества соединений в среде с ограниченными ресурсами, такой как домашний или малый офисный Linux-маршрутизатор. Пропускная способность одного соединения может быть достаточно хорошей, например 40 Мбит/с на TP-Link TD-W8980, но количество одновременных соединений может стать ограничивающим фактором, поскольку буферы TCP по-прежнему потребляются;
  • для перенаправления трафика в прокси на мобильном устройстве под управлением Android или iOS, так как это потребует получения root-доступа для обновления правил межсетевого экрана. Вероятно, лучший способ - использовать встроенный демон VPN для перехвата трафика через VpnService API для Android и NETunnelProvider семейство API для iOS. Это может потребовать некоторого кода для сборки TCP-сегментов, такого как tun2socks.

Поддерживается Linux/iptables. OpenBSD/pf и FreeBSD/ipfw могут работать с некоторыми доработками. У автора нет постоянного root-доступа к машинам с OpenBSD, FreeBSD и MacOSX для тестирования и разработки под эти платформы.

Transocks — похожий проект, но он имеет заметный штраф к производительности.

Transsocks_ev тоже похожий проект, но он не поддерживает HTTPS-прокси и не поддерживает аутентификацию.

Несколько приложений для Android также используют redsocks "под капотом": ProxyDroid и sshtunnel . А это более 1 500 000 скачиваний! Вау!

Возможности

Перенаправлять любое TCP-соединение на SOCKS4, SOCKS5 или HTTPS (HTTP/CONNECT) прокси-сервер.

Поддерживается аутентификация по логину/паролю для SOCKS5/HTTPS-соединений. SOCKS4 поддерживает только имя пользователя, пароль игнорируется. Для HTTPS в настоящее время поддерживаются только схемы Basic и Digest.

Перенаправлять UDP-пакеты через прокси-сервер SOCKS5. Примечание: UDP по-прежнему идет через UDP, поэтому вы не можете пересылать UDP через OpenSSH.

Обрабатывать DNS/UDP-запросы, отправляя "усеченный ответ" в качестве ответа или превращая их в DNS/TCP-запросы к некоторому рекурсивному резолверу.

Перенаправлять любое HTTP-соединение в прокси, который не поддерживает прозрачную проксификацию (например, старый SQUID имел сломанный `acl myport' для таких соединений).

Принудительное использование DNS поверх TCP с помощью dnstc

DNS работает поверх UDP, и это может быть проблемой в некоторых средах, так как прокси- серверы обычно не обрабатывают UDP как первоклассного гражданина. Redsocks включает dnstc, который является поддельным и действительно глупым DNS-сервером, возвращающим "усеченный ответ" на каждый запрос по UDP. RFC-совместимый резолвер должен повторить тот же запрос по TCP в этом случае - тогда запрос может быть перенаправлен с помощью обычных средств redsocks.

Известные совместимые резолверы:

  • bind9 (сервер);
  • dig, nslookup (инструменты, основанные на коде bind9).

Известные несовместимые резолверы:

  • eglibc-резолвер завершается с ошибкой без какой-либо попытки отправить запрос по TCP;
  • powerdns-recursor не может правильно запуститься без сетевой связанности по UDP, так как он не может загрузить корневые подсказки.

С другой стороны, DNS по TCP с использованием bind9 может быть невероятно медленным. Если ваша конфигурация bind9 действительно медленная, вы можете попробовать кэширующий сервер pdnsd, который может работать в режиме только TCP.

Пересылка DNS/UDP в DNS/TCP через dnsu2t

Код действует как DNS-сервер, который мультиплексирует несколько UDP-запросов в один поток TCP-запросов поверх соединения keep-alive с вышестоящим DNS-сервером, который должен быть рекурсивным резолвером. TCP-соединение может обрабатываться самим redsocks, если межсетевой экран настроен с соответствующими правилами.

Разные резолверы имеют разные тайм-ауты и допускают разное количество активных соединений, поэтому вам придется настраивать параметры самостоятельно для оптимальной производительности (с помощью некоторой черной магии, так как скрипт для тестирования оптимальных параметров DNS/TCP-соединения еще не написан).

Существуют другие программы, выполняющие аналогичную работу (возможно, с другими ошибками):

Исходный код

Исходный код доступен на GitHub.

Трекер проблем также находится на GitHub, но имейте в виду, что проект не активно поддерживается, поэтому реализация запрошенных функций маловероятна в разумные сроки. Воспроизводимые ошибки с четким описанием, вероятно, будут исправлены. Судьба трудно воспроизводимых ошибок трудно предсказать.

Новые сетевые протоколы вряд ли будут реализованы в этом дереве исходного кода, но если вы ищете протоколы для обхода цензуры, вы можете взглянуть на redsocks2 от Чжуофэй Ванга, также известного как @semigodking, который активно поддерживает форк, учитывая GFW.

Лицензия

Весь исходный код лицензирован по лицензии Apache 2.0. Вы можете получить копию на http://www.apache.org/licenses/LICENSE-2.0.html

Пакеты

  • Archlinux: https://aur.archlinux.org/packages/redsocks-git
  • Debian: http://packages.debian.org/search?searchon=names&keywords=redsocks
  • Gentoo (overlay zugaina): http://gpo.zugaina.org/net-proxy/redsocks
  • Gentoo: https://packages.gentoo.org/packages/net-proxy/redsocks
  • Ubuntu: http://packages.ubuntu.com/search?searchon=names&keywords=redsocks

Компиляция

Требуется libevent-2.0.x.

В настоящее время поддерживаются gcc и clang, другие компиляторы могут использоваться, но могут потребоваться некоторые изменения в коде.

Компиляция так же проста, как запуск make, нет магии ./configure.

Работает GNU Make, другие реализации make не тестировались.

Запуск

Программа имеет следующие опции командной строки:

  • -c задает правильный путь к файлу конфигурации ("./redsocks.conf" по умолчанию)
  • -t проверяет синтаксис файла конфигурации
  • -p задает файл для записи getpid()

Обрабатываются следующие сигналы: SIGUSR1 выводит список подключенных клиентов в журнал, SIGTERM и SIGINT завершают работу демона, все активные соединения закрываются.

Вы можете посмотреть пример файла конфигурации в redsocks.conf.example.

Пример iptables

Вы должны собрать iptables с отслеживанием соединений и целью REDIRECT.

# Создайте новую цепочку
root# iptables -t nat -N REDSOCKS

# Игнорируйте локальные сети и некоторые другие зарезервированные адреса.
# Смотрите http://en.wikipedia.org/wiki/Reserved_IP_addresses#Reserved_IPv4_addresses
# и http://tools.ietf.org/html/rfc5735 для полного списка зарезервированных сетей.
root# iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
root# iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
root# iptables -t nat -A REDSOCKS -d 100.64.0.0/10 -j RETURN
root# iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
root# iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
root# iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
root# iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
root# iptables -t nat -A REDSOCKS -d 198.18.0.0/15 -j RETURN
root# iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
root# iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN

# Все остальное должно быть перенаправлено на порт 12345
root# iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345

# Любое TCP-соединение, установленное от имени `luser', должно быть перенаправлено.
root# iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner luser -j REDSOCKS

# Вы также можете управлять этим более точно, используя `gid-owner` из
# iptables.
root# groupadd socksified
root# usermod --append --groups socksified luser
root# iptables -t nat -A OUTPUT -p tcp -m owner --gid-owner socksified -j REDSOCKS

# Теперь вы можете запустить свое конкретное приложение с GID `socksified`, и оно
# будет... socksified (проксировано через SOCKS). Следующие команды (числа могут отличаться).
# Примечание: вам, возможно, придется перелогиниться, чтобы изменения `usermod` вступили в силу.
luser$ id
uid=1000(luser) gid=1000(luser) groups=1000(luser),1001(socksified)
luser$ sg socksified -c id
uid=1000(luser) gid=1001(socksified) groups=1000(luser),1001(socksified)
luser$ sg socksified -c "firefox"

# Если вы хотите настроить socksifying-маршрутизатор, вам следует посмотреть
# doc/iptables-packet-flow.png, doc/iptables-packet-flow-ng.png и
# https://en.wikipedia.org/wiki/File:Netfilter-packet-flow.svg
# Примечание: у вас должно быть правильное значение `local_ip' для получения внешних пакетов с
# помощью redsocks, значение по умолчанию 127.0.0.1 не будет работать. Подробности смотрите в man-странице
# iptables(8) по цели REDIRECT.
# В зависимости от вашей сетевой конфигурации конфигурация iptables может быть такой простой:
root# iptables -t nat -A PREROUTING --in-interface eth_int -p tcp -j REDSOCKS

Примечание о перенаправлении на основе GID

Имейте в виду, что изменение GID влияет на права доступа к файловой системе, поэтому, если ваше приложение создает какие-то файлы, файлы будут созданы с владельцем/группой luser:socksified. Таким образом, если вы не единственный пользователь в группе socksified и ваш umask позволяет создавать файлы с правами для чтения группой, а также права на директории и т.д., и так далее, и так далее... ТО вы можете открыть доступ к своим файлам для другого пользователя. Ну что ж, вы были предупреждены.

Домашняя страница

http://darkk.net.ru/redsocks/

Список рассылки: redsocks@librelist.com.

Список рассылки также имеет архивы.

Автор

Эта программа была написана Леонидом Евдокимовым leon@darkk.net.ru

Комментарии
Войдите, чтобы оставить комментарий