
Um firewall de saída para cargas de trabalho não confiáveis.
Jobs de CI, agentes de codificação com IA e contêineres em sandbox podem fazer requisições de saída arbitrárias. Uma dependência comprometida, uma injeção de prompt ou uma etapa de build maliciosa pode exfiltrar segredos, fazer chamadas para casa ou abrir um reverse shell. A maioria das equipes não tem nenhuma visibilidade sobre o que está saindo de suas cargas de trabalho, muito menos alguma forma de impedir isso.
O iron-proxy é um proxy de saída MITM com um servidor DNS integrado que fica entre sua carga de trabalho não confiável e a internet. Ele aplica negação por padrão no limite da rede, de modo que a carga de trabalho só pode alcançar domínios que você permitir explicitamente. Segredos reais nunca entram no sandbox. As cargas de trabalho usam tokens de proxy, e o iron-proxy substitui por credenciais reais na saída, o que significa que uma carga de trabalho comprometida pode exfiltrar um token que é inútil fora do proxy.
Binário único. Configuração YAML única.
169.254.169.254, fd00:ec2::254 e fd20:ce::254) e loopback são
negados por padrão; substitua via proxy.upstream_deny_cidrs ou
IRON_PROXY_UPSTREAM_DENY_CIDRS.HTTP_PROXY,
HTTPS_PROXY ou configurações SOCKS5.SET ROLE na sessão
upstream e rejeita tentativas do cliente de mutar o papel (SET ROLE,
set_config('role', ...), blocos DO, etc.) por meio de uma travessia de AST
SQL. Combina com row-level security do PostgreSQL para fornecer isolamento
de dados por tenant quando a aplicação se conecta como um usuário de conta de
serviço compartilhada. Requer que o PgBouncer (se usado) seja executado em
pool_mode = session — os modos de pool transaction ou statement
religam backends silenciosamente entre consultas e anulariam a política.
Consulte docs.iron.sh para detalhes.Feito para pipelines de CI, GitHub Actions, agentes de IA (Claude Code, Cursor, Codex) e qualquer ambiente onde você executa código em que não confia totalmente.
Imagens Docker estão disponíveis no Docker Hub e binários pré-compilados para Linux/macOS (amd64/arm64) estão em GitHub Releases.
Ou compile a partir do código-fonte:```bash go build -o iron-proxy ./cmd/iron-proxy
## Início rápido```bash
cd examples/docker-compose
docker compose up
Isso inicia o iron-proxy e um cliente de demonstração que dispara cinco requisições através do proxy. Verifique os logs para ver requisições permitidas, bloqueadas e com segredos reescritos:```bash docker compose logs proxy
Cada requisição produz uma entrada de auditoria JSON estruturada:```json
{
"host": "httpbin.org",
"method": "GET",
"path": "/headers",
"action": "allow",
"status_code": 200,
"duration_ms": 142,
"request_transforms": [
{ "name": "allowlist", "action": "continue" },
{
"name": "secrets",
"action": "continue",
"annotations": { "swapped": [{ "secret": "OPENAI_API_KEY", "locations": ["header:Authorization"] }] }
}
]
}
Requisições rejeitadas incluem um campo rejected_by e são registradas no nível WARN. Consulte
Formato do log de auditoria para o esquema completo.
O iron-proxy encerra o TLS gerando certificados leaf dinamicamente, assinados por
uma CA que você fornece. Os contêineres cliente devem confiar nessa CA.```bash
mkdir -p certs
openssl genrsa -out certs/ca.key 4096
openssl req -x509 -new -nodes
-key certs/ca.key
-sha256 -days 3650
-subj "/CN=iron-proxy CA"
-addext "basicConstraints=critical,CA:TRUE"
-addext "keyUsage=critical,keyCertSign"
-out certs/ca.crt
### 2. Criar uma rede Docker
O iron-proxy precisa de um IP fixo para que os containers possam apontar o seu DNS para ele:```bash
docker network create --subnet=172.20.0.0/24 iron-proxy