Что такое mitmproxy?
mitmproxy — это интерактивный перехватывающий HTTP-прокси с поддержкой TLS для пентестеров и разработчиков. Направьте на него браузер, телефон, консольную утилиту или целый контейнер, и каждый запрос и ответ пройдёт через место, где его видно: заголовки, тела, тайминги, детали TLS. Запрос можно остановить на лету, отредактировать и отпустить дальше, повторить сотню раз или переписывать трафик автоматически несколькими строками на Python. Он понимает HTTP/1, HTTP/2, HTTP/3, WebSocket и «голый» TLS и работает как обычный, прозрачный, обратный, вышестоящий, SOCKS5-, WireGuard-прокси или в режиме локального захвата. Один пакет даёт три интерфейса: mitmproxy — интерактивный консольный UI, mitmweb — то же самое в браузере, и mitmdump — версия для командной строки, tcpdump для HTTP.
⚡ Ключевые возможности mitmproxy
🔓 Видит, что внутри TLS
При первом запуске mitmproxy создаёт собственный удостоверяющий центр в ~/.mitmproxy/ и на лету выпускает сертификаты для каждого хоста, который вы посещаете. Один раз доверьтесь этому CA на клиенте, и его HTTPS-трафик становится читаемым, запрос за запросом.
✋ Перехват и правка
Нажмите i в консоли, задайте фильтр вроде ~d api.example.com, и подходящие запросы замирают на месте. e правит метод, URL, заголовки или тело, a отправляет запрос дальше.
🔁 Повтор чего угодно
r повторяет отдельный запрос прямо из консоли. Сохраните сессию через -w и проиграйте клиентскую сторону с --client-replay или отвечайте клиенту записанными ответами с --server-replay.
🐍 Аддоны на Python
Загрузите скрипт через -s script.py и цепляйтесь к каждому запросу, ответу, сообщению WebSocket или рукопожатию TLS. Переписывать заголовки, подменять эндпоинты, вырезать трекинг, писать в лог: API аддонов — тот же, на котором построены функции самого mitmproxy.
🧭 Любой режим прокси
Обычный, прозрачный, обратный (--mode reverse:https://example.com), вышестоящий, SOCKS5, WireGuard для телефонов и виртуальных машин и локальный захват одного приложения. Укажите --mode несколько раз, чтобы запустить несколько режимов одновременно.
🌐 Консоль, веб или без интерфейса
Консоль с управлением с клавиатуры для терминала или SSH-сессии, mitmweb на http://127.0.0.1:8081 для списка потоков мышкой и mitmdump для скриптов, CI-задач и долгих захватов без присмотра.
apt upgrade держит вас на последней версии.
📦 Установка из deb.griffo.io
Шаг 1: Добавить репозиторий
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt update🆓 Есть вечно бесплатное зеркало. deb-free.griffo.io раздаёт пакеты бесплатно навсегда — без аккаунта, без подписки, не более 2 месяцев позади upstream, исправления безопасности сразу. Сейчас там cliamp, Ghostty, lazydocker, Oh My Posh, Uncloud и Zed; mitmproxy среди них нет, поэтому репозиторий выше — единственный способ установить его сегодня; попросите, и его можно добавить.
Шаг 2: Установить mitmproxy
# Установить последнюю версию mitmproxy
sudo apt install mitmproxy
# Один пакет, три команды: mitmproxy, mitmweb и mitmdump.
# Внутри свой Python и OpenSSL, так что больше ничего не тянется
# Проверить установку
mitmproxy --version
mitmdump --version# Установить последнюю версию mitmproxy
apt install mitmproxy
# Один пакет, три команды: mitmproxy, mitmweb и mitmdump.
# Внутри свой Python и OpenSSL, так что больше ничего не тянется
# Проверить установку
mitmproxy --version
mitmdump --versionШаг 3: Первый запуск
# Запустить консольный UI, слушает порт 8080
mitmproxy
# Или веб-интерфейс, он открывает http://127.0.0.1:8081
mitmweb
# В другом терминале отправить через него запрос
curl -x http://127.0.0.1:8080 http://example.com
# Первый запуск создал CA в ~/.mitmproxy/. С клиента, идущего через
# прокси, откройте http://mitm.it, чтобы установить его на этот клиент,
# или доверьтесь ему во всей системе на этой машине
sudo cp ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy.crt
sudo update-ca-certificates# Запустить консольный UI, слушает порт 8080
mitmproxy
# Или веб-интерфейс, он открывает http://127.0.0.1:8081
mitmweb
# В другом терминале отправить через него запрос
curl -x http://127.0.0.1:8080 http://example.com
# Первый запуск создал CA в ~/.mitmproxy/. С клиента, идущего через
# прокси, откройте http://mitm.it, чтобы установить его на этот клиент,
# или доверьтесь ему во всей системе на этой машине
cp ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy.crt
update-ca-certificates🎯 Базовые примеры использования
Захват трафика:
# Слушать другой порт
mitmproxy --listen-port 9090
# Пропустить через него одну команду
HTTPS_PROXY=http://127.0.0.1:8080 curl https://example.com
# Записывать всё в файл без интерфейса
mitmdump -w session.mitm
# Показывать только запросы к одному хосту
mitmdump "~d api.example.com"
# Сохранить HAR-файл для инструментов разработчика или отчёта об ошибке
mitmdump --set hardump=./session.harПовтор и разбор:
# Открыть сохранённую сессию в консоли
mitmproxy -r session.mitm
# Вывести из неё POST-запросы, не запуская прокси
mitmdump -n -r session.mitm "~m POST"
# Отправить записанные запросы ещё раз
mitmdump -n --client-replay session.mitm
# Отвечать клиентам записанными ответами вместо настоящего сервера
mitmdump --server-replay session.mitmРежимы прокси и аддоны:
# Обратный прокси перед одним сервером
mitmproxy --mode reverse:https://example.com --listen-port 8443
# SOCKS5 и обычный прокси из одного экземпляра
mitmdump --mode socks5 --mode regular
# WireGuard: отсканируйте QR-код в mitmweb приложением WireGuard на телефоне
mitmweb --mode wireguard
# Переписывать трафик аддоном на Python, например addon.py с содержимым:
# def response(flow):
# flow.response.headers["x-seen-by"] = "mitmproxy"
mitmdump -s addon.py🔧 Интеграции
mitmproxy встаёт между инструментами, которыми вы уже пользуетесь, и сетью, с которой они говорят:
- curl, wget и большинство CLI: всё, что уважает
HTTP_PROXYиHTTPS_PROXY, идёт через mitmproxy с одной переменной окружения, аcurl -xделает это для отдельной команды - Браузеры и телефоны: укажите прокси на порту 8080, откройте
http://mitm.itи установите CA для своей платформы, или используйте режим WireGuard на Android и iOS вообще без настроек прокси - Инструменты разработчика в браузере:
hardumpпишет HAR-файл, а mitmproxy читает HAR-файлы обратно через-r, так что захват ходит между ним и Chrome или Firefox в обе стороны - Аддоны на Python: скрипты, загруженные через
-s, выполняются во встроенном Python mitmproxy, поэтому могут импортировать стандартную библиотеку и то, что поставляется с mitmproxy, но не пакеты, установленные для системногоpython3 - Наборы тестов и CI:
mitmdumpс--server-replayотдаёт записанные ответы, и нестабильные сторонние API в интеграционных тестах становятся воспроизводимыми
🚀 Почему стоит выбрать deb.griffo.io?
- Официальная Ubuntu: 8.1.1 2022 года в universe на noble, questing и resolute, а на jammy и вовсе ещё более старая 6.0.2
- pipx или pip: свежо, но привязано к тому системному Python, что у вас стоит, и невидимо для apt
- Архив от разработчика: та же автономная сборка, что и в этом пакете, только распакованная и обновляемая вручную
- deb.griffo.io: последняя версия с автоматическими обновлениями
- ✅ На годы впереди архивов: текущий выпуск mitmproxy вместо 8.1.1, с HTTP/3, режимами WireGuard и локального захвата
- ✅ Три команды, один пакет:
mitmproxy,mitmwebиmitmdumpпопадают в PATH под теми именами, которые используют все руководства - ✅ Автоматические обновления: пакеты обновляются в течение нескольких часов после релиза upstream
- ✅ Полный пакет: официальная автономная сборка upstream для Linux, ничего не добавлено и не пропатчено
- ✅ Никаких зависимостей от Python: внутри свой Python и OpenSSL, так что он никогда не конфликтует с системными пакетами Python и не ждёт их обновления
- ✅ Две архитектуры: amd64 и arm64, одна и та же автономная сборка на любом выпуске
- ✅ Много дистрибутивов: работает на Ubuntu 22.04, 24.04, 25.10 и 26.04
- ✅ Простое обслуживание: обновления обычными командами apt
📦 Репозиторий сборки пакета
Пакеты для Ubuntu собираются и поддерживаются автоматически в этом репозитории GitHub:
- 🕵️ mitmproxy-debian - Сборки последних выпусков
🔗 Похожие пакеты
Также доступны в deb.griffo.io:
- yq - Запросы к JSON-телам, вытащенным из захвата, и их перекройка
- Headscale - Собственная сеть на WireGuard, для другого конца туннеля
- k9s - Терминальный UI для сервисов Kubernetes, которые рано или поздно придётся проксировать
- lazydocker - Терминальный UI для контейнеров, чей трафик вы отлаживаете