Прозрачный SOCKS/HTTP-редиректор: через iptables REDIRECT перехватывает TCP-трафик любого процесса ОС и заворачивает его через прокси без изменения приложений. В отличие от proxychains (LD_PRELOAD), работает со статически слинкованными бинарями, Go-программами, и с трафиком всей системы. Используется для создания torsocks-аналога на уровне netfilter, для перенаправления трафика контейнеров через прокси, а также в связке с Burp Suite для MITM всего трафика хоста.
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
Этот инструмент позволяет перенаправлять любое TCP-соединение через SOCKS или HTTPS-прокси, используя ваш межсетевой экран, что делает перенаправление системным или сетевым.
Когда redsocks полезен?
Когда redsocks, вероятно, не подходит?
TransPort, если вам на самом деле не нужна анонимность. В-третьих, сомневайтесь во всем :-)http-relay. Во-первых, он, скорее всего, будет работать некорректно, так как код является хаком. Во-вторых, код уязвим к CVE-2009-0801 и вряд ли когда-либо будет исправлен;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' для таких соединений).
dnstcDNS работает поверх UDP, и это может быть проблемой в некоторых средах, так как прокси-
серверы обычно не обрабатывают UDP как первоклассного гражданина. Redsocks включает
dnstc, который является поддельным и действительно глупым DNS-сервером, возвращающим "усеченный ответ"
на каждый запрос по UDP. RFC-совместимый резолвер должен повторить тот же запрос по TCP
в этом случае - тогда запрос может быть перенаправлен с помощью обычных средств redsocks.
Известные совместимые резолверы:
Известные несовместимые резолверы:
С другой стороны, DNS по TCP с использованием bind9 может быть невероятно медленным. Если ваша конфигурация bind9 действительно медленная, вы можете попробовать кэширующий сервер pdnsd, который может работать в режиме только 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
Требуется libevent-2.0.x.
В настоящее время поддерживаются gcc и clang, другие компиляторы могут использоваться, но могут потребоваться некоторые изменения в коде.
Компиляция так же проста, как запуск make, нет магии ./configure.
Работает GNU Make, другие реализации make не тестировались.
Программа имеет следующие опции командной строки:
-c задает правильный путь к файлу конфигурации ("./redsocks.conf" по умолчанию)-t проверяет синтаксис файла конфигурации-p задает файл для записи getpid()Обрабатываются следующие сигналы: SIGUSR1 выводит список подключенных клиентов в журнал, SIGTERM и SIGINT завершают работу демона, все активные соединения закрываются.
Вы можете посмотреть пример файла конфигурации в redsocks.conf.example.
Вы должны собрать 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 влияет на права доступа к файловой системе, поэтому, если ваше
приложение создает какие-то файлы, файлы будут созданы с владельцем/группой luser:socksified.
Таким образом, если вы не единственный пользователь в группе socksified и ваш
umask позволяет создавать файлы с правами для чтения группой, а также права на директории и
т.д., и так далее, и так далее... ТО вы можете открыть доступ к своим файлам для другого пользователя.
Ну что ж, вы были предупреждены.
http://darkk.net.ru/redsocks/
Список рассылки: redsocks@librelist.com.
Список рассылки также имеет архивы.
Эта программа была написана Леонидом Евдокимовым leon@darkk.net.ru