O que é o mitmproxy?
O mitmproxy é um proxy HTTP interceptador, interativo e com suporte a TLS, para pentesters e desenvolvedores de software. Aponte um navegador, um celular, uma CLI ou um contêiner inteiro para ele e cada requisição e resposta passa por um lugar onde você pode vê-la: cabeçalhos, corpos, tempos, detalhes de TLS. Dá para pausar uma requisição no meio do caminho, editá-la e deixá-la seguir, reenviá-la cem vezes ou reescrever o tráfego automaticamente com algumas linhas de Python. Ele fala HTTP/1, HTTP/2, HTTP/3, WebSocket e TLS puro, e roda como proxy regular, transparente, reverso, upstream, SOCKS5, WireGuard ou de captura local. Um único pacote traz três interfaces: mitmproxy, a interface interativa de console, mitmweb, a mesma coisa no navegador, e mitmdump, a versão de linha de comando, um tcpdump para HTTP.
⚡ Principais recursos do mitmproxy
🔓 Enxerga dentro do TLS
Na primeira execução o mitmproxy gera sua própria autoridade certificadora em ~/.mitmproxy/ e emite certificados na hora para cada host que você visita. Confie nessa CA uma vez num cliente e o tráfego HTTPS dele fica legível, requisição por requisição.
✋ Interceptar e editar
Aperte i no console, passe um filtro como ~d api.example.com, e as requisições que casam param onde estão. e edita o método, a URL, os cabeçalhos ou o corpo, a manda seguir.
🔁 Reenviar qualquer coisa
r reenvia uma requisição pelo console. Grave uma sessão com -w e reproduza o lado do cliente com --client-replay, ou responda a um cliente com respostas gravadas usando --server-replay.
🐍 Addons em Python
Carregue um script com -s script.py e intercepte cada requisição, resposta, mensagem WebSocket ou handshake TLS. Reescreva cabeçalhos, simule endpoints, remova rastreamento, grave em arquivo: a API de addons é a mesma sobre a qual os recursos do próprio mitmproxy são construídos.
🧭 Todos os modos de proxy
Regular, transparente, reverso (--mode reverse:https://example.com), upstream, SOCKS5, WireGuard para celulares e VMs e captura local de um único aplicativo. Passe --mode mais de uma vez para rodar vários ao mesmo tempo.
🌐 Console, web ou sem interface
O console guiado pelo teclado para um terminal ou uma sessão SSH, o mitmweb em http://127.0.0.1:8081 para uma lista de fluxos de apontar e clicar, e o mitmdump para scripts, jobs de CI e capturas longas sem supervisão.
apt upgrade mantém você na versão mais recente.
📦 Instalação a partir do deb.griffo.io
Passo 1: Adicionar o repositório
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 um espelho grátis para sempre. deb-free.griffo.io distribui pacotes grátis para sempre — sem conta, sem assinatura, no máximo 2 meses atrás do upstream, correções de segurança imediatas. Hoje ele traz cliamp, Ghostty, lazydocker, Oh My Posh, Uncloud e Zed; mitmproxy não está entre elas, então o repositório acima é a única forma de instalar hoje — peça e ela pode ser adicionada.
🧩 Sobre a opção extrepo. extrepo é a ferramenta do próprio Debian para repositórios externos: ela escreve o arquivo de sources e instala a chave de assinatura para você, conferindo a chave contra metadados assinados antes de usá-la. Este repositório está registrado nela como griffo, e o espelho gratuito para sempre como griffo-free, então no Debian (bookworm, trixie, forky e sid) os comandos acima são toda a configuração.
O extrepo configura apenas o arquivo de sources e a chave: as credenciais de uma assinatura continuam indo em /etc/apt/auth.conf.d/deb.griffo.io.conf. O Ubuntu não é coberto, porque o extrepo publica metadados só para as suítes do Debian: lá, use os comandos com sudo ou como root.
Passo 2: Instalar o mitmproxy
# Instalar o mitmproxy mais recente
sudo apt install mitmproxy
# Um pacote, três comandos: mitmproxy, mitmweb e mitmdump.
# Ele traz o próprio Python e o próprio OpenSSL, então nada mais é instalado
# Verificar a instalação
mitmproxy --version
mitmdump --version# Instalar o mitmproxy mais recente
apt install mitmproxy
# Um pacote, três comandos: mitmproxy, mitmweb e mitmdump.
# Ele traz o próprio Python e o próprio OpenSSL, então nada mais é instalado
# Verificar a instalação
mitmproxy --version
mitmdump --versionPasso 3: Primeira execução
# Iniciar a interface de console, escutando na porta 8080
mitmproxy
# Ou a interface web, que abre http://127.0.0.1:8081
mitmweb
# Em outro terminal, mandar uma requisição através dele
curl -x http://127.0.0.1:8080 http://example.com
# A primeira execução gerou uma CA em ~/.mitmproxy/. Com um cliente
# passando pelo proxy, abra http://mitm.it para instalá-la nele,
# ou confie nela no sistema inteiro desta máquina
sudo cp ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy.crt
sudo update-ca-certificates# Iniciar a interface de console, escutando na porta 8080
mitmproxy
# Ou a interface web, que abre http://127.0.0.1:8081
mitmweb
# Em outro terminal, mandar uma requisição através dele
curl -x http://127.0.0.1:8080 http://example.com
# A primeira execução gerou uma CA em ~/.mitmproxy/. Com um cliente
# passando pelo proxy, abra http://mitm.it para instalá-la nele,
# ou confie nela no sistema inteiro desta máquina
cp ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy.crt
update-ca-certificates🎯 Exemplos básicos de uso
Capturando tráfego:
# Escutar em outra porta
mitmproxy --listen-port 9090
# Passar um único comando pelo proxy
HTTPS_PROXY=http://127.0.0.1:8080 curl https://example.com
# Gravar tudo num arquivo, sem interface
mitmdump -w session.mitm
# Mostrar só as requisições para um host
mitmdump "~d api.example.com"
# Salvar um arquivo HAR para as ferramentas do navegador ou um relatório de bug
mitmdump --set hardump=./session.harReenviando e inspecionando:
# Abrir uma sessão gravada no console
mitmproxy -r session.mitm
# Imprimir as requisições POST dela sem iniciar um proxy
mitmdump -n -r session.mitm "~m POST"
# Enviar de novo as requisições gravadas
mitmdump -n --client-replay session.mitm
# Responder aos clientes com respostas gravadas em vez do servidor real
mitmdump --server-replay session.mitmModos de proxy e addons:
# Proxy reverso na frente de um servidor
mitmproxy --mode reverse:https://example.com --listen-port 8443
# SOCKS5 e um proxy regular na mesma instância
mitmdump --mode socks5 --mode regular
# WireGuard: leia o QR code do mitmweb com o app WireGuard do celular
mitmweb --mode wireguard
# Reescrever o tráfego com um addon em Python, por exemplo addon.py com:
# def response(flow):
# flow.response.headers["x-seen-by"] = "mitmproxy"
mitmdump -s addon.py🔧 Integrações
O mitmproxy fica entre as ferramentas que você já usa e a rede com que elas conversam:
- curl, wget e a maioria das CLIs: tudo o que respeita
HTTP_PROXYeHTTPS_PROXYpassa pelo mitmproxy com uma variável de ambiente, e ocurl -xfaz isso por comando - Navegadores e celulares: configure o proxy na porta 8080, abra
http://mitm.ite instale a CA para aquela plataforma, ou use o modo WireGuard no Android e no iOS sem nenhuma configuração de proxy - Ferramentas do navegador: o
hardumpgrava um arquivo HAR, e o mitmproxy lê arquivos HAR de volta com-r, então uma captura circula entre ele e o Chrome ou o Firefox nos dois sentidos - Addons em Python: os scripts carregados com
-srodam dentro do Python embutido no mitmproxy, então podem importar a biblioteca padrão e o que o mitmproxy traz, mas não pacotes instalados para opython3do sistema - Suítes de teste e CI: o
mitmdumpcom--server-replayserve respostas gravadas, o que torna repetíveis nos testes de integração as APIs de terceiros instáveis
🚀 Por que escolher o deb.griffo.io?
- Debian oficial: o 8.1.1 de 2022 no bookworm, no forky e no sid — e nem existe no trixie, a stable atual
- pipx ou pip: atual, mas preso ao Python do sistema que você tiver e invisível para o apt
- O tarball upstream: a mesma build independente que este pacote entrega, descompactada à mão e atualizada à mão
- deb.griffo.io: versão mais recente com atualizações automáticas
- ✅ Anos à frente dos arquivos: o lançamento atual do mitmproxy em vez do 8.1.1, com HTTP/3, WireGuard e captura local incluídos
- ✅ Três comandos, um pacote:
mitmproxy,mitmwebemitmdumpvão todos para o seu PATH, com os nomes que todo tutorial usa - ✅ Atualizações automáticas: os pacotes são atualizados poucas horas após cada lançamento upstream
- ✅ Pacote completo: a build oficial independente do upstream para Linux, sem nada adicionado nem remendado
- ✅ Sem dependências de Python: ele traz o próprio Python e o próprio OpenSSL, então nunca entra em conflito com os pacotes Python do sistema nem espera que eles sejam atualizados
- ✅ Duas arquiteturas: amd64 e arm64, a mesma build independente em todas as suítes
- ✅ Multi-distribuição: funciona no Bookworm, Trixie, Forky e Sid
- ✅ Manutenção simples: atualizações com os comandos apt de sempre
📦 Repositório de build do pacote
Os pacotes Debian são construídos e mantidos automaticamente neste repositório do GitHub:
- 🕵️ mitmproxy-debian - Builds dos últimos lançamentos
🔗 Pacotes relacionados
Também disponíveis no deb.griffo.io:
- yq - Consultar e remodelar os corpos JSON que você tira de uma captura
- Headscale - Rede WireGuard auto-hospedada, para o outro lado do túnel
- k9s - Uma interface de terminal para os serviços Kubernetes que você acaba passando pelo proxy
- lazydocker - Uma interface de terminal para os contêineres cujo tráfego você está depurando