
dns-honeypot
एक इंजीनियर के रूप में जो अपने अधिकांश दिन ऑब्ज़र्वेबिलिटी टूलिंग में डूबा रहता है, मुझे कभी-कभी ऐसा विचार आता है जिसे मुझे आज़माना ही पड़ता है। यह उन प्रयोगों में से एक था: एक साफ़ IP पर एक DNS रिज़ॉल्वर स्थापित करें जिसका कोई विज्ञापन नहीं करता, फिर इंटरनेट को वैसे भी उससे बात करने दें। रिज़ॉल्वर का एकमात्र काम चुप रहना, सब कुछ लॉग करना, और परिणामी क्वेरीज़ को Grafana को फीड करना था। एक docker compose up -d के बाद, मेरे पास Unbound, Loki, Prometheus, Grafana, और Traefik थे जो लाइव ट्रैफ़िक को ट्रैक कर रहे थे और जिज्ञासा, गलत कॉन्फ़िगरेशन और कभी-कभी स्कैनर के हिस्टोग्राम प्रिंट कर रहे थे। यह README उस पहले दिन की रिपोर्ट है, स्टैक क्या कैप्चर करता है, यह मेरे लिए क्यों मायने रखता है, और यह वर्तमान सुरक्षा परिदृश्य के बारे में क्या उजागर करता है।
मैंने जानबूझकर अपनी ओर से कोई सिग्नल नहीं दिया, कोई पैकेट ड्रॉप नहीं, कोई अनुकूलित उत्तर नहीं, कोई शमन नहीं। बस Unbound जिसमें लॉगिंग सक्षम थी, Loki लॉग फ़ाइल को टेल कर रहा था, Prometheus एक्सपोर्टर मीट्रिक्स को स्क्रैप कर रहा था, Traefik Grafana को फ्रंट कर रहा था, और Docker Compose उन्हें एक साथ जोड़ रहा था। रिज़ॉल्वर 94.130.27.226 पर बैठा था, एक ताज़ा "साफ़" IPv4 जो मुझे मिला था (इसकी स्थिति https://www.abuseipdb.com/check/94.130.27.226 पर देखें यदि आप पूर्व-शोर बेसलाइन चाहते हैं), और मैंने दुनिया को अपना काम करने दिया। एक अकेला लैपटॉप हर पैनल देख सकता था, tools/dns_query_storm.sh चला सकता था जब मैं हलचल मचाना चाहता था, और फिर शोर को वापस उन पैटर्नों में बसने देता था जो वैश्विक इंटरनेट भेजना चुनता था।
आप उन डैशबोर्ड को लाइव https://dns.cybersafeintl.co.uk/public-dashboards/eb554b5b74e14f4d95e376c0033ee83d पर देख सकते हैं, हालाँकि वे स्टैक के सबसे निचले-स्तर के सर्वर पर हैं, इसलिए भारी क्वेरी के दौरान धीमे रिफ़्रेश की उम्मीद करें।
unbound_total_num_queries मीट्रिक को स्क्रैप करता है, इसलिए "थ्रूपुट (क्यूपीएस, 5 मिनट दर)" पैनल प्रति सेकंड क्वेरीज़ दिखाता है और इसे स्रोत द्वारा तोड़ता है। वह दृश्य "रिज़ॉल्वर को कौन हथौड़ा मार रहा है?" प्रश्न का उत्तर देता है, अचानक स्पाइक्स सीधे बांग्लादेश या पोलैंड-आधारित ASN की ओर इशारा करते हैं, और लॉग यह देखना आसान बनाते हैं कि क्या SERVFAIL/NXDOMAIN तूफान विस्फोटों के साथ आते हैं।client_ip द्वारा समूहित करता है, और डैशबोर्ड पहले से ही सब कुछ topk(sort_desc(...)) में लपेटते हैं। यह पैनल को साफ रखता है जबकि एक्सपोर्टर स्क्रिप्ट मुझे उन्हीं क्वेरीज़ को CSV में डंप करने देती है ऑफ़लाइन विश्लेषण, रिपोर्टिंग, या पुनरुत्पादक कहानियों के लिए। पहले कैप्चर में 45.179.* और 45.6.* श्रेणियों में पांच IP पते दिखाई दिए, प्रत्येक ने पांच मिनट में 5k+ क्वेरी फायर कीं, या तो एक स्कैनर फार्म या एक आक्रामक क्लाइंट।qname की लोकप्रियता को 5 मिनट और 24 घंटे की विंडो में उजागर करते हैं। 5 मिनट के स्नैपशॉट में scb.se, dhl.com, और cmu.edu शामिल थे, जबकि 24 घंटे के एक्सपोर्ट में cbs.nl, scb.se, atlassian.com, , और शामिल थे। ये डोमेन क्यों? यह दिलचस्प हिस्सा है, क्या ये वैध सेवाएं हैं, गलत कॉन्फ़िगर किए गए रिज़ॉल्वर, या पुराने रिकॉर्ड का पीछा करने वाले अवसरवादी स्कैनर? यदि आपके पास कोई सिद्धांत है तो मुझे एक नोट छोड़ें।आपके द्वारा देखे जाने वाले प्रत्येक पैनल का exports/ में एक समान CSV है; उन्हें बंडल करें (zip -r exports.zip exports/) जब आप कच्ची कहानी को किसी ब्लॉग पोस्ट या घटना रिपोर्ट से संलग्न करना चाहते हैं।
docker-compose.yml एक ही कमांड से Unbound, Unbound एक्सपोर्टर, Loki + Promtail, Prometheus, Grafana, और Traefik को ऊपर लाता है।unbound/ रिज़ॉल्वर कॉन्फ़िग और लॉग संग्रहीत करता है। TTL नियंत्रण, serve-expired, और कैश सेटिंग्स निष्ठा बनाए रखते हैं ताकि हम कैप्चर करें कि क्लाइंट वास्तव में क्या मांगते हैं।prometheus/, loki/, और grafana/ निर्देशिकाओं में डेटा और प्रोविज़निंग फाइलें होती हैं ताकि मीट्रिक्स और डैशबोर्ड रीस्टार्ट के बाद भी बचे रहें।grafana/dashboards/unbound-traffic-insights.json आपके द्वारा देखे जाने वाले दृश्य के साथ पूर्व-प्रावधानित है; सभी PromQL/Loki क्वेरी पहले से ही पैनल को पढ़ने योग्य रखने के लिए एकत्र और सॉर्ट करती हैं।tools/dns_query_storm.sh आपको क्वेरी स्टॉर्म का अनुकरण करने देता है जब आपको प्रतिक्रिया समय का परीक्षण करने की आवश्यकता होती है।redeploy.sh एक ही स्क्रिप्ट के साथ पूरे स्टैक को नीचे ले जाने, अपडेट लाने और पुनर्निर्माण को स्वचालित करता है।export_dashboard_data.py अब डैशबोर्ड JSON में चलता है, प्रत्येक Prometheus/Loki क्वेरी को हिट करता है, और साझा करने के लिए एक निर्देशिका में सैनिटाइज़्ड CSV फाइलें लिखता है।
cd hetzner_deploy/unbound-dnscp .env.example .env और GRAFANA_DOMAIN, Grafana एडमिन क्रेडेंशियल्स, LETSENCRYPT_EMAIL, और आपकी ज़रूरत के किसी भी TLS ओवरराइड को कॉन्फ़िगर करें।sudo chown -R 472:472 grafana-data && sudo mkdir -p prometheus/data && sudo chown -R 65534:65534 prometheus/datadocker compose build && docker compose up -dpip install requests (एक्सपोर्टर शुद्ध Python है)।python export_dashboard_data.py --duration 24h --outdir exports/24h --timeout 90 हर डैशबोर्ड क्वेरी को खींचने, इसे CSV में बदलने, और परिणामों को exports/24h के अंतर्गत रखने के लिए।zip -r exports.zip exports/ कच्ची तालिकाओं को प्रकाशित करने, ब्लॉग पोस्ट से संलग्न करने, या सहयोगियों को भेजने से पहले बंडल करने के लिए।--duration 6h या --end टाइमस्टैम्प के साथ पुनः चलाएं, या यदि आप केवल डोमेन पैनल चाहते हैं तो --filter domains का उपयोग करें।scb.se, dhl.com, cmu.edu, up.pt, और utc.fr प्रत्येक ने सैकड़ों हजारों लुकअप उत्पन्न किए। ये लक्ष्य क्यों? यूरोपीय कॉर्पोरेट डोमेन का तारामंडल मुझे एक CDN, पुनर्स्थापना सेवा, या पुराने कैश को पुन: हाइड्रेट करने की कोशिश करने वाले स्कैनर पर संदेह कराता है।cbs.nl, scb.se, atlassian.com, abb.com, और up.pt ने सामूहिक रूप से 250 मिलियन से अधिक क्वेरी उत्पन्न कीं। वॉल्यूम का वह स्तर यादृच्छिक शोर नहीं है, या तो बड़े पैमाने के क्लाइंट या एक लगातार उपकरण जो कभी हल करना बंद नहीं करता।45.179.* और 45.6.* IPv4 पते थे, प्रत्येक ने देखे गए पांच मिनटों में 5k से अधिक क्वेरी दागीं। वे किसी ISP या स्कैनिंग फार्म का हिस्सा हो सकते हैं, लेकिन वे जो भी हैं, डैशबोर्ड उन्हें ट्रैक करना तुच्छ बना देते हैं।यह क्या उजागर करता है? यह दर्शाता है कि कैसे उजागर DNS बुनियादी ढांचा दिलचस्प ट्रैफ़िक का एक निष्क्रिय फीड बन सकता है, भले ही इसका विज्ञापन न किया गया हो। इंटरनेट प्रश्न पूछता रहता है, और यह सेटअप बस ध्यान से सुनता है। यदि आप उत्सुक हैं कि यह प्रयोग मेरे व्यापक काम में कैसे फिट बैठता है, तो अन्य रिपॉजिटरी देखें, कभी-कभी मैं इस तरह का एक विचार चलाता हूं और देखना होता है कि यह कहां ले जाता है।
exports/ फ़ोल्डर को ज़िप करें या सीधे CSV संलग्न करें जहाँ भी आप कहानी सुनाते हैं।export_dashboard_data.py या Loki क्वेरी को अतिरिक्त मेटाडेटा (क्लाइंट ASN, SERVFAIL कारण, देश) के साथ विस्तारित करें।--duration 12h, --end ...) के साथ एक्सपोर्टर को पुनः चलाएं, आउटपुट को टाइमस्टैम्प्ड निर्देशिकाओं में रखें, और ताजा आँकड़ों के साथ इस README को अपडेट करें ताकि कथानक चालू रहे।यदि आप अपने स्वयं के हनीपॉट के साथ अनुसरण कर रहे हैं, तो अपने निर्यात के आँकड़ों के साथ इस README को अपडेट करें ताकि हम कहानियों की तुलना कर सकें और देख सकें कि क्या वही साइटें और क्लाइंट वापस आते रहते हैं।
यह परियोजना "जैसी है" प्रदान की गई है। किसी भी प्रकार की कोई वारंटी नहीं है, स्पष्ट या निहित, जिसमें व्यापारिकता, किसी विशेष उद्देश्य के लिए उपयुक्तता, या गैर-उल्लंघन शामिल है, लेकिन इन्हीं तक सीमित नहीं है, और मैं इसके उपयोग से उत्पन्न किसी भी क्षति के लिए उत्तरदायी नहीं हूं। आप इस स्टैक को तैनात करने, कॉन्फ़िगर करने या संचालित करने से जुड़े सभी जोखिमों को मानते हैं।
यदि आपको यह परियोजना उपयोगी लगती है, तो इसका समर्थन करने पर विचार करें:
| मुद्रा | पता |
|---|---|
| बिटकॉइन (BTC) | 3QjWqhQbHdHgWeYHTpmorP8Pe1wgDjJy54 |
| एथेरियम (ETH) | 0x5851e6145F4773d1585b8686095FB16E368a4d1A |
| ZCash (ZEC) | t1KSR5YkNPbjqRSCoLKo5AddFWdm9Kzxh1B |
abb.comup.ptexports/