
Межсетевой экран исходящего трафика для недоверенных рабочих нагрузок.
Задачи CI, агенты программирования на базе ИИ и изолированные контейнеры могут выполнять произвольные исходящие запросы. Скомпрометированная зависимость, внедрение через промпт или вредоносный шаг сборки могут привести к утечке секретов, обращению к внешним серверам или открытию обратной оболочки. Большинство команд не имеют никакой видимости того, что покидает их рабочие нагрузки, не говоря уже о способах это остановить.
iron-proxy — это MITM-прокси для исходящего трафика со встроенным DNS-сервером, который располагается между вашей недоверенной рабочей нагрузкой и интернетом. Он применяет политику запрета по умолчанию на сетевой границе, поэтому рабочая нагрузка может обращаться только к доменам, которые вы явно разрешили. Настоящие секреты никогда не попадают в песочницу. Рабочие нагрузки используют прокси-токены, а iron-proxy подставляет реальные учётные данные на выходе, что означает, что скомпрометированная рабочая нагрузка может похитить токен, бесполезный за пределами прокси.
Единый бинарный файл. Единый конфиг YAML.
169.254.169.254,
fd00:ec2::254 и fd20:ce::254) и loopback запрещены по умолчанию;
переопределяется через proxy.upstream_deny_cidrs или
IRON_PROXY_UPSTREAM_DENY_CIDRS.HTTP_PROXY, HTTPS_PROXY или настройки SOCKS5.SET ROLE в вышестоящую
сессию и отклоняет попытки клиента изменить роль (SET ROLE,
set_config('role', ...), DO-блоки и т. д.) через обход SQL AST. В паре с
row-level security PostgreSQL обеспечивает изоляцию данных по арендаторам, когда
приложение подключается как общий пользователь сервисной учётной записи. Требует,
чтобы PgBouncer (если используется) работал в pool_mode = session — режимы пула transaction или
statement молча перепривязывают бэкенды между запросами и
свели бы политику на нет. Подробности см. на docs.iron.sh.Создан для конвейеров CI, GitHub Actions, ИИ-агентов (Claude Code, Cursor, Codex) и любой среды, где вы запускаете код, которому не полностью доверяете.
Образы Docker доступны на Docker Hub, а готовые бинарные файлы для Linux/macOS (amd64/arm64) — на GitHub Releases.
Или соберите из исходного кода:```bash go build -o iron-proxy ./cmd/iron-proxy
## Быстрый старт```bash
cd examples/docker-compose
docker compose up
Запускаются iron-proxy и демонстрационный клиент, который отправляет пять запросов через прокси. Проверьте логи, чтобы увидеть разрешённые, заблокированные запросы и запросы с перезаписанными секретами:```bash docker compose logs proxy
Каждый запрос создаёт структурированную запись аудита в формате JSON:```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"] }] }
}
]
}
Отклонённые запросы включают поле rejected_by и записываются в журнал на уровне WARN. Полную схему см. в разделе
Формат журнала аудита.
iron-proxy завершает TLS, генерируя листовые сертификаты на лету, подписанные
CA, который вы предоставляете. Клиентские контейнеры должны доверять этому 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. Создайте сеть Docker
iron-proxy нужен фиксированный IP, чтобы контейнеры могли направлять свой DNS на него:```bash
docker network create --subnet=172.20.0.0/24 iron-proxy
Создайте env-файл с вашими секретами (не добавляйте его в систему контроля версий):```bash echo "OPENAI_API_KEY=sk-real-key" > .env
| `--no-color` | Отключить цветной вывод |
| `--debug` | Включить режим отладки |
| `--verbose` | Включить подробный вывод |
| `--silent` | Подавить весь вывод, кроме ошибок |
| `--json` | Выводить результаты в формате JSON |
| `--csv` | Выводить результаты в формате CSV |
| `--html` | Выводить результаты в формате HTML |
| `--markdown` | Выводить результаты в формате Markdown |
| `--output FILE` | Записать вывод в FILE |
| `--config FILE` | Использовать файл конфигурации FILE |
| `--threads N` | Использовать N потоков |
| `--timeout SEC` | Установить тайм-аут в секундах |
| `--retry N` | Повторить неудачные запросы N раз |
| `--proxy URL` | Использовать прокси-сервер по указанному URL |
| `--user-agent STRING` | Установить пользовательский User-Agent |
| `--cookie STRING` | Установить пользовательские cookie |
| `--header STRING` | Установить пользовательский заголовок |
| `--rate-limit N` | Ограничить запросы до N в секунду |
| `--random-agent` | Использовать случайный User-Agent |
| `--tor` | Маршрутизировать трафик через Tor |
| `--check-tor` | Проверить, используется ли Tor |
| `--update` | Обновить инструмент до последней версии |
| `--version` | Показать информацию о версии |
| `--help` | Показать справочное сообщение |
### Примеры
```bash
# Basic usage
python3 tool.py -u https://example.com
# Scan multiple targets
python3 tool.py -f targets.txt
# Use custom threads and timeout
python3 tool.py -u https://example.com -t 20 --timeout 30
# Output results to JSON
python3 tool.py -u https://example.com --json --output results.json
# Use a proxy
python3 tool.py -u https://example.com --proxy http://127.0.0.1:8080