¿Qué es mitmproxy?
mitmproxy es un proxy HTTP interceptor, interactivo y compatible con TLS, pensado para pentesters y desarrolladores. Apunta hacia él un navegador, un móvil, una CLI o un contenedor entero y cada petición y cada respuesta pasan por donde puedes verlas: cabeceras, cuerpos, tiempos, detalles de TLS. Puedes detener una petición a medio camino, editarla y dejarla seguir, repetirla cien veces o reescribir el tráfico automáticamente con unas pocas líneas de Python. Habla HTTP/1, HTTP/2, HTTP/3, WebSocket y TLS en bruto, y funciona como proxy normal, transparente, inverso, upstream, SOCKS5, WireGuard o de captura local. Un solo paquete te da tres interfaces: mitmproxy, la interfaz de consola interactiva, mitmweb, lo mismo en tu navegador, y mitmdump, la versión de línea de comandos, un tcpdump para HTTP.
⚡ Funciones clave de mitmproxy
🔓 Ve dentro de TLS
mitmproxy genera su propia autoridad de certificación en ~/.mitmproxy/ en el primer arranque y emite certificados al vuelo para cada host que visitas. Confía en esa CA una vez en un cliente y su tráfico HTTPS se vuelve legible, petición a petición.
✋ Interceptar y editar
Pulsa i en la consola, dale un filtro como ~d api.example.com y las peticiones que coinciden se detienen en el sitio. e edita el método, la URL, las cabeceras o el cuerpo, a la deja seguir su camino.
🔁 Repetir lo que sea
r repite una petición desde la consola. Guarda una sesión con -w y reproduce el lado del cliente con --client-replay, o responde a un cliente con respuestas grabadas usando --server-replay.
🐍 Addons en Python
Carga un script con -s script.py y engánchate a cada petición, respuesta, mensaje WebSocket o handshake TLS. Reescribe cabeceras, simula endpoints, quita rastreadores, registra en un archivo: la API de addons es la misma sobre la que están construidas las funciones del propio mitmproxy.
🧭 Todos los modos de proxy
Normal, transparente, inverso (--mode reverse:https://example.com), upstream, SOCKS5, WireGuard para móviles y máquinas virtuales, y captura local de una sola aplicación. Pasa --mode más de una vez para ejecutar varios a la vez.
🌐 Consola, web o sin interfaz
La consola manejada con teclado para una terminal o una sesión SSH, mitmweb en http://127.0.0.1:8081 para una lista de flujos de apuntar y hacer clic, y mitmdump para scripts, trabajos de CI y capturas largas desatendidas.
apt upgrade te mantiene en la última versión.
📦 Instalación desde deb.griffo.io
Paso 1: Añadir el repositorio
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 updatesudo apt install extrepo
sudo extrepo enable griffo
sudo apt update🆓 Existe un espejo gratis para siempre. deb-free.griffo.io sirve paquetes gratis para siempre: sin cuenta, sin suscripción, como máximo 2 meses por detrás del upstream, correcciones de seguridad inmediatas. Ahora mismo incluye cliamp, Ghostty, lazydocker, Oh My Posh, Uncloud y Zed; mitmproxy no está entre ellas, así que hoy el repositorio de arriba es la única forma de instalarlo — pídelo y puede añadirse.
🧩 Sobre la opción extrepo. extrepo es la herramienta propia de Debian para repositorios externos: escribe el archivo de sources e instala la clave de firma por ti, comprobándola antes contra metadatos firmados. Este repositorio está registrado en ella como griffo, y el espejo gratuito para siempre como griffo-free, así que en Debian (bookworm, trixie, forky y sid) los comandos de arriba son toda la configuración.
extrepo solo configura el archivo de sources y la clave: las credenciales de una suscripción siguen yendo en /etc/apt/auth.conf.d/deb.griffo.io.conf. Ubuntu no está cubierto, porque extrepo publica metadatos solo para las suites de Debian: allí usa los comandos con sudo o como root.
Paso 2: Instalar mitmproxy
# Instalar la última versión de mitmproxy
sudo apt install mitmproxy
# Un paquete, tres comandos: mitmproxy, mitmweb y mitmdump.
# Trae su propio Python y OpenSSL, así que no arrastra nada más
# Verificar la instalación
mitmproxy --version
mitmdump --version# Instalar la última versión de mitmproxy
apt install mitmproxy
# Un paquete, tres comandos: mitmproxy, mitmweb y mitmdump.
# Trae su propio Python y OpenSSL, así que no arrastra nada más
# Verificar la instalación
mitmproxy --version
mitmdump --versionPaso 3: Primer arranque
# Arrancar la interfaz de consola, escuchando en el puerto 8080
mitmproxy
# O la interfaz web, que abre http://127.0.0.1:8081
mitmweb
# En otra terminal, enviar una petición a través de él
curl -x http://127.0.0.1:8080 http://example.com
# El primer arranque generó una CA en ~/.mitmproxy/. Con un cliente
# pasando por el proxy, visita http://mitm.it para instalarla en ese
# cliente, o confía en ella en todo el sistema de esta máquina
sudo cp ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy.crt
sudo update-ca-certificates# Arrancar la interfaz de consola, escuchando en el puerto 8080
mitmproxy
# O la interfaz web, que abre http://127.0.0.1:8081
mitmweb
# En otra terminal, enviar una petición a través de él
curl -x http://127.0.0.1:8080 http://example.com
# El primer arranque generó una CA en ~/.mitmproxy/. Con un cliente
# pasando por el proxy, visita http://mitm.it para instalarla en ese
# cliente, o confía en ella en todo el sistema de esta máquina
cp ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy.crt
update-ca-certificates🎯 Ejemplos básicos de uso
Capturar tráfico:
# Escuchar en otro puerto
mitmproxy --listen-port 9090
# Pasar un solo comando por el proxy
HTTPS_PROXY=http://127.0.0.1:8080 curl https://example.com
# Grabar todo en un archivo sin interfaz
mitmdump -w session.mitm
# Mostrar solo las peticiones a un host
mitmdump "~d api.example.com"
# Guardar un archivo HAR para las herramientas del navegador o un informe de error
mitmdump --set hardump=./session.harRepetir e inspeccionar:
# Abrir una sesión guardada en la consola
mitmproxy -r session.mitm
# Imprimir sus peticiones POST sin arrancar un proxy
mitmdump -n -r session.mitm "~m POST"
# Volver a enviar las peticiones grabadas
mitmdump -n --client-replay session.mitm
# Responder a los clientes con respuestas grabadas en vez del servidor real
mitmdump --server-replay session.mitmModos de proxy y addons:
# Proxy inverso delante de un servidor
mitmproxy --mode reverse:https://example.com --listen-port 8443
# SOCKS5 y un proxy normal desde la misma instancia
mitmdump --mode socks5 --mode regular
# WireGuard: escanea el código QR de mitmweb con la app WireGuard del móvil
mitmweb --mode wireguard
# Reescribir tráfico con un addon en Python, p. ej. addon.py con:
# def response(flow):
# flow.response.headers["x-seen-by"] = "mitmproxy"
mitmdump -s addon.py🔧 Integraciones
mitmproxy se sitúa entre las herramientas que ya usas y la red con la que hablan:
- curl, wget y la mayoría de CLIs: todo lo que respeta
HTTP_PROXYyHTTPS_PROXYpasa por mitmproxy con una variable de entorno, ycurl -xlo hace comando a comando - Navegadores y móviles: pon el proxy en el puerto 8080, abre
http://mitm.ite instala la CA para esa plataforma, o usa el modo WireGuard en Android e iOS sin ningún ajuste de proxy - Herramientas de desarrollo del navegador:
hardumpescribe un archivo HAR, y mitmproxy lee archivos HAR con-r, así que una captura va y viene entre él y Chrome o Firefox - Addons en Python: los scripts cargados con
-scorren dentro del Python incluido en mitmproxy, así que pueden importar la biblioteca estándar y lo que trae mitmproxy, pero no los paquetes instalados para elpython3del sistema - Suites de pruebas y CI:
mitmdumpcon--server-replaysirve respuestas grabadas, lo que vuelve repetibles en los tests de integración las APIs de terceros poco fiables
🚀 ¿Por qué elegir deb.griffo.io?
- Debian oficial: la 8.1.1 de 2022 en bookworm, forky y sid, y nada en absoluto en trixie, la estable actual
- pipx o pip: actualizado, pero atado al Python del sistema que tengas e invisible para apt
- El tarball upstream: la misma compilación autónoma que trae este paquete, desempaquetada a mano y actualizada a mano
- deb.griffo.io: última versión con actualizaciones automáticas
- ✅ Años por delante de los archivos: la versión actual de mitmproxy en lugar de la 8.1.1, con HTTP/3 y los modos WireGuard y de captura local incluidos
- ✅ Tres comandos, un paquete:
mitmproxy,mitmwebymitmdumpllegan todos a tu PATH, con los nombres que usan todos los tutoriales - ✅ Actualizaciones automáticas: los paquetes se actualizan pocas horas después de cada versión upstream
- ✅ Paquete completo: la compilación oficial autónoma de upstream para Linux, sin añadidos ni parches
- ✅ Sin dependencias de Python: trae su propio Python y OpenSSL, así que nunca choca con los paquetes de Python del sistema ni espera a que se actualicen
- ✅ Dos arquitecturas: amd64 y arm64, la misma compilación autónoma en todas las suites
- ✅ Multidistribución: funciona en Bookworm, Trixie, Forky y Sid
- ✅ Mantenimiento sencillo: actualizaciones con los comandos apt de siempre
📦 Repositorio de compilación del paquete
Los paquetes de Debian se compilan y mantienen automáticamente en este repositorio de GitHub:
- 🕵️ mitmproxy-debian - Compilaciones de las últimas versiones
🔗 Paquetes relacionados
También disponibles en deb.griffo.io:
- yq - Consulta y transforma los cuerpos JSON que saques de una captura
- Headscale - Red WireGuard autoalojada, para el otro extremo del túnel
- k9s - Una interfaz de terminal para los servicios de Kubernetes que acabas pasando por el proxy
- lazydocker - Una interfaz de terminal para los contenedores cuyo tráfico estás depurando