
अविश्वसनीय वर्कलोड के लिए एक ईग्रेस फ़ायरवॉल।
CI जॉब्स, AI कोडिंग एजेंट्स, और सैंडबॉक्स्ड कंटेनर मनमाने आउटबाउंड अनुरोध कर सकते हैं। एक समझौता किया गया डिपेंडेंसी, एक प्रॉम्प्ट इंजेक्शन, या एक दुर्भावनापूर्ण बिल्ड स्टेप सीक्रेट्स को एक्सफिल्ट्रेट कर सकता है, होम फोन कर सकता है, या एक रिवर्स शेल खोल सकता है। अधिकांश टीमों के पास इस बात की शून्य दृश्यता है कि उनके वर्कलोड्स से क्या बाहर जा रहा है, इसे रोकने का तो कोई तरीका ही नहीं।
iron-proxy एक MITM एग्रेस प्रॉक्सी है जिसमें एक अंतर्निहित DNS सर्वर होता है जो आपके अविश्वसनीय वर्कलोड और इंटरनेट के बीच बैठता है। यह नेटवर्क सीमा पर डिफ़ॉल्ट-डिनाई लागू करता है, ताकि वर्कलोड केवल उन डोमेन तक पहुंच सके जिन्हें आप स्पष्ट रूप से अनुमति देते हैं। वास्तविक सीक्रेट्स कभी सैंडबॉक्स में प्रवेश नहीं करते। वर्कलोड्स प्रॉक्सी टोकन का उपयोग करते हैं, और iron-proxy एग्रेस पर वास्तविक क्रेडेंशियल्स को स्वैप कर देता है, जिसका अर्थ है कि एक समझौता किया गया वर्कलोड एक ऐसा टोकन एक्सफिल्ट्रेट कर सकता है जो प्रॉक्सी के बाहर बेकार है।
सिंगल बाइनरी। सिंगल YAML कॉन्फ़िग।
169.254.169.254,
fd00:ec2::254, और fd20:ce::254) और loopback डिफ़ॉल्ट रूप से denied हैं;
proxy.upstream_deny_cidrs या
IRON_PROXY_UPSTREAM_DENY_CIDRS के माध्यम से ओवरराइड करें।HTTP_PROXY, HTTPS_PROXY, या SOCKS5
सेटिंग्स के माध्यम से प्रॉक्सी कॉन्फ़िगरेशन का समर्थन करते हैं।SET ROLE इंजेक्ट करता है, और SQL AST वॉक के माध्यम से क्लाइंट के रोल को बदलने के प्रयासों (SET ROLE,
set_config('role', ...), DO ब्लॉक्स, आदि) को अस्वीकार करता है। PostgreSQL रो-लेवल सिक्योरिटी के साथ
जोड़ी बनाकर प्रति-टेनेंट डेटा आइसोलेशन प्रदान करता है जब
एप्लिकेशन एक साझा सेवा-खाता उपयोगकर्ता के रूप में कनेक्ट होता है। PgBouncer (यदि उपयोग किया जाता है) को pool_mode = session में चलाने की आवश्यकता होती है — ट्रांजैक्शन या
स्टेटमेंट पूल मोड्स क्वेरीज़ के बीच बैकएंड्स को चुपचाप रीबाइंड कर देते हैं और
नीति को विफल कर देंगे। विवरण के लिए docs.iron.sh देखें।CI पाइपलाइन्स, GitHub Actions, AI एजेंट्स (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 और एक डेमो क्लाइंट शुरू करता है जो प्रॉक्सी के माध्यम से पाँच अनुरोध भेजता है। अनुमत, अवरुद्ध, और secret-rewritten अनुरोधों को देखने के लिए लॉग जाँचें:```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 स्तर पर लॉग किया जाता है। पूर्ण स्कीमा के लिए
Audit log format देखें।
iron-proxy आपके द्वारा प्रदान किए गए CA द्वारा हस्ताक्षरित लीफ प्रमाणपत्रों को मौके पर जनरेट करके TLS को टर्मिनेट करता है। क्लाइंट कंटेनरों को इस 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
अपने secrets के साथ एक env फ़ाइल बनाएँ (इसे version control से बाहर रखें):```bash echo "OPENAI_API_KEY=sk-real-key" > .env
यहाँ तक कि अगर आपको लगता है कि आपका सिस्टम सुरक्षित है, तो भी नियमित रूप से स्कैन करना एक अच्छा अभ्यास है।```bash
docker run -d --name iron-proxy \
--network iron-proxy --ip 172.20.0.2 \
-v $(pwd)/proxy.yaml:/etc/iron-proxy/proxy.yaml:ro \
-v $(pwd)/certs/ca.crt:/etc/iron-proxy/ca.crt:ro \
-v $(pwd)/certs/ca.key:/etc/iron-proxy/ca.key:ro \
--env-file .env \
ironsh/iron-proxy:latest -config /etc/iron-proxy/proxy.yaml
सबसे सरल दृष्टिकोण DNS-आधारित रूटिंग है: कंटेनर के DNS को
iron-proxy पर इंगित करें और सभी होस्टनाम लुकअप प्रॉक्सी IP पर रिज़ॉल्व हो जाएंगे, जिससे ट्रैफ़िक
स्वचालित रूप से इसके माध्यम से रूट हो जाएगा:```bash
docker run --rm
--network iron-proxy
--dns 172.20.0.2
-v $(pwd)/certs/ca.crt:/certs/ca.crt:ro
curlimages/curl --cacert /certs/ca.crt https://httpbin.org/get
अधिक मजबूत प्रवर्तन के लिए, गैर-प्रॉक्सी निर्गम को अवरुद्ध करने के लिए nftables नियमों को परत करें, या कर्नेल-स्तरीय अवरोधन के लिए TPROXY का उपयोग करें। प्रत्येक दृष्टिकोण के विवरण के लिए [प्रॉक्सी को ट्रैफ़िक रूटिंग](#routing-traffic-to-the-proxy) देखें।
## iron-proxy क्यों?