Este projeto é um servidor de proxy simples, desenvolvido em Python puro, com foco em gerenciar proxies internos e atender a demandas de pequena escala.
- Características
- Objetivo
- Motivação e contexto
- Tecnologias
- Instalação
- Uso rápido
- Configuração
- Autenticação
- Logs
- Possíveis usos
- Roadmap
- Referências
- Implementação leve e sem dependências externas (python puro).
- Ideal para uso em ambientes de produção controlado, ambientes de teste ou redes locais.
- Fácil de configurar e estender.
Fornecer uma solução prática e minimalista para quem precisa de um proxy funcional, sem a complexidade de grandes ferramentas já existentes.
A ideia é basicamente criar um proxy e um servidor HTTP simples usando apenas Python, para estudos, testes e necessidades internas de baixa complexidade.
Este projeto é utilizado por uma aplicação interna: uma rede de proxies conectados via VPN. Veja mais em Motivação.
- Grande parte do core foi inspirado pelo artigo do blog da Bright Data, o guia “Python Proxy Server” (link).
- A partir dessa base, adotei minhas próprias metodologias de projeto, como a organização em classes, validações de entrada e fluxo.
- Implementei sistema de autenticação simples, sistema de firewall e suporte a tunelamento (metodo CONNECT).
- Python (>= 3.11)
- Uvloop (Opcional)
- Sem frameworks adicionais
- Clone o repositório
- Certifique-se de ter o Python 3.11 instalado
- (Opcional) Crie e ative um ambiente virtual
- Não há dependências externas a instalar
Execute o servidor:
python main.pyPor padrão o proxy sobe em 0.0.0.0:8080.
Exemplo de teste via curl usando o proxy:
curl --proxy "http://admin:admin@ip_do_server:8080" "http://httpbin.org/ip"A configuração principal é feita ao instanciar core.Proxy (veja main.py):
host(str): endereço de bind. Padrão:0.0.0.0port(int): porta de escuta. Padrão:8080backlog(int): tamanho da fila de conexões pendentes nolisten(). Padrão:20max_connections(int): máximo de requisições processadas em paralelo (pool de threads). Padrão:20auth(ProxyAuth | None): autenticação básica. QuandoNone, desabilita auth.firewall(ProxyFirewall | None): regras de allowlist/blocklist eno_auth_required.debug(bool): quandoTrue, usa timeouts curtos para facilitar debug. Padrão:Falsetimeout(int): tempo de timeout para as conexões
Para alterar rapidamente, edite main.py:
from core import Proxy
proxy = Proxy()
proxy.run()Exemplo de teste via curl usando o proxy, apenas instanciando a classe:
curl --proxy "http://ip_do_server:8080" "http://httpbin.org/ip"backlogcontrola apenas a fila de conexões ainda não aceitas (antes doaccept()).max_connectionscontrola quantas requisições são atendidas simultaneamente.- Recomenda-se configurar
backlog >= max_connectionspara cenários com bursts/picos, mas não é obrigatório. Em máquinas com pouca carga, valores menores podem ser suficientes.
Exemplos:
Proxy(backlog=50, max_connections=50)
Proxy(backlog=15, max_connections=10)Autenticação básica (HTTP Proxy-Authorization: Basic) é suportada. Quando habilitada (auth não nulo), o proxy exige credenciais e responde 407 Proxy Authentication Required quando ausentes/incorretas.
- Cabeçalho usado:
Proxy-Authorization: Basic <base64(username:password)> - Para desabilitar a autenticação, passe
auth=NoneaoProxy.
Exemplo com curl (inclui usuário e senha na URL do proxy):
curl --proxy "http://usuario:senha@ip_do_server:8080" "http://httpbin.org/ip"Os logs usam o módulo logging do Python. Níveis:
INFO(padrão emmain.py)- Ajuste para
DEBUGemlogging.basicConfig(level=logging.DEBUG)para ver tráfego e detalhes de forwarding.
- Gerenciamento de tráfego interno.
- Proxy em ambientes de desenvolvimento.
- Estudos e aprendizado sobre redes e sockets em Python.
- Suporte a HTTPS CONNECT
- Regras de bloqueio/allowlist
- Métricas e healthcheck
- Bright Data — Python Proxy Server: link