После Windows и macOS режим локального перехвата трафика в mitmproxy добрался и до Linux. В версии 11.1 он одинаково работает на всех трех популярных платформах.
Windows, macOS… и теперь Linux!
Год назад local capture mode появился для macOS и Windows. Теперь Linux получил собственную реализацию на базе eBPF, которая позволяет перехватывать трафик конкретных приложений без изменения системных прокси настроек.
Примеры использования:
|
1 2 3 4 |
# Перехват всего локального трафика mitmproxy --mode local # Перехват только cURL mitmproxy --mode local:curl |
Как это устроено
Классические режимы mitmproxy (HTTP, SOCKS, reverse proxy) работают на любой операционной системе. Локальный перехват требует отдельного подхода.
- macOS предъявляет строгие требования к подписанию системных расширении, но предоставляет удобные API для перенаправления трафика.
- Windows в основном полагается на сторонние библиотеки.
- Linux предлагает много вариантов, но именно eBPF обеспечивает точный и универсальный механизм перехвата.
eBPF: что происходит внутри ядра
iptables и nftables отлично подходят для фильтрации по IP или PID, но не умеют работать по имени процесса. eBPF позволяет перенаправлять трафик прямо в ядре Linux, без модификации ядра и установки полноценных kernel модулей.
Разработка eBPF оказалась непростой: документации мало, ядро часто выдает странные ошибки. Инструменты вроде Aya и документация docs.ebpf.io значительно упрощают работу.
Как работает локальный перехват трафика
- mitmproxy_rs запускает перенаправляющий модуль через sudo для доступа к системному вызову bpf().
- Модуль создает виртуальное сетевое устройство /dev/tun0, загружает eBPF программу и получает список приложении для перехвата.
- Каждый новый сокет проверяется eBPF программои и при необходимости перенаправляется в mitmproxy.
- Пакеты из /dev/tun0 возвращаются в mitmproxy_rs, где собираются в TCP и UDP потоки и передаются дальше.
Такой подход сложнее простого правила iptables, но позволяет точно контролировать, какой трафик перехватывается и из каких приложении.
Ограничения на Linux
- Перехватывается только исходящий трафик (egress). Для входящих соединении используется reverse proxy.
- Для загрузки BPF программы требуются root права.
- Поддерживаются современные ядра Linux версии 6.8 и выше.
- Имена процессов учитываются только по первым 16 символам.
- Перехват трафика из контейнеров возможен только при использовании сети хоста ( --network host).
- WSL не поддерживается, так как eBPF там отключен по умолчанию.
Заключение
Поддержка Linux в режиме локального перехвата делает mitmproxy по настоящему кроссплатформенным инструментом. Теперь один и тот же подход к перехвату трафика работает на Windows, macOS и Linux без необходимости вмешиваться в системные прокси настройки.
Реализация на базе eBPF сложнее классических решении вроде iptables, но именно она обеспечивает точный контроль над тем, какой трафик и из каких приложении перехватывается. Несмотря на существующие ограничения, функциональность уже готова к реальному использованию.
Выход mitmproxy 11.1 с локальным capture mode для Linux — это важный шаг в развитии инструмента. Для разработчиков, инженеров по безопасности и всех, кто анализирует сетевой трафик, это означает больше гибкости, меньше ручных настроек и единый опыт работы на всех основных платформах.


