
dns-honeypot
كمهندس أقضي معظم أيامي غارقًا في أدوات المراقبة، أتلقى أحيانًا فكرة لا بد لي من تنفيذها. كانت هذه إحدى تلك التجارب: تشغيل محلل DNS على عنوان IP نظيف لا يعلن عنه أحد، ثم ترك الإنترنت يتحدث إليه على أي حال. كانت المهمة الوحيدة للمحلل هي البقاء هادئًا، وتسجيل كل شيء، وتغذية 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 الخاص بمصدر Unbound، لذا تُظهر لوحة "الإنتاجية (QPS، معدل 5 دقائق)" الاستعلامات في الثانية وتقسمها حسب المصدر. هذا المنظر يجيب على سؤال "من يقصف المحلل؟"، تشير الارتفاعات المفاجئة مباشرة إلى ASNs مقرها بنغلاديش أو بولندا، وتجعل السجلات من السهل رؤية ما إذا كانت عواصف SERVFAIL/NXDOMAIN تصاحب الاندفاعات.client_ip، وتقوم اللوحات بالفعل بتغليف كل شيء في topk(sort_desc(...)). هذا يحافظ على نظافة اللوحات بينما يتيح لي سكريبت المُصدر تفريغ نفس الاستعلامات في ملفات CSV للتحليل دون اتصال، أو إعداد التقارير، أو القصص القابلة للتكرار. أظهر الالتقاط الأول خمسة عناوين IP في النطاقات 45.179.* و 45.6.* كل منها يطلق أكثر من 5k استعلام في خمس دقائق، إما مزرعة ماسحات ضوئية أو عميل عدواني.qname على مدى نوافذ مدتها 5 دقائق و 24 ساعة. تضمنت لقطة الـ 5 دقائق scb.se و dhl.com و cmu.edu، بينما تضمن تصدير الـ 24 ساعة cbs.nl و scb.se و atlassian.com و abb.com و . لماذا هذه النطاقات؟ هذا هو الجزء المثير للاهتمام، هل هي خدمات شرعية أم محللات تم تكوينها بشكل خاطئ أم ماسحات ضوئية انتهازية تطارد السجلات القديمة؟ أرسل لي ملاحظة إذا كان لديك نظرية.كل لوحة تراها لها ملف CSV مطابق في exports/؛ قم بتجميعها (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 منسقة إلى دليل exports/ للمشاركة.
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.*، كل منها يطلق أكثر من 5k استعلام في الدقائق الخمس التي تمت ملاحظتها. قد يكونون جزءًا من ISP أو مزرعة مسح ضوئي، ولكن مهما كانوا، فإن اللوحات تجعل تتبعهم تافهًا.ما الذي يسلط عليه الضوء؟ يوضح كيف يمكن أن تصبح البنية التحتية لـ DNS المكشوفة مصدرًا سلبيًا لحركة المرور المثيرة للاهتمام حتى عندما لا يتم الإعلان عنها. يواصل الإنترنت طرح الأسئلة، وهذا الإعداد ببساطة يستمع بعناية. إذا كنت فضوليًا حول كيفية تناسب هذه التجربة مع عملي الأوسع، تحقق من المستودعات الأخرى، أحيانًا أقوم بتشغيل فكرة مثل هذه وأضطر لمعرفة أين تقود.
exports/ أو أرفق ملفات CSV مباشرة أينما تروي القصة.export_dashboard_data.py أو استعلامات Loki ببيانات وصفية إضافية (ASN العميل، سبب SERVFAIL، البلد) للإجابة على أسئلة أعمق.--duration 12h، --end ...)، واحتفظ بالمخرجات في أدلة ذات طوابع زمنية، وقم بتحديث هذا README بالإحصائيات الجديدة حتى يظل الرسم البياني محدثًا.إذا كنت تتابع مع مصيدة الخادم الخاصة بك، قم بتحديث هذا README بإحصائيات من تصديراتك حتى نتمكن من مقارنة القصص ومعرفة ما إذا كانت نفس المواقع والعملاء يعودون باستمرار.
هذا المشروع مقدم "كما هو". لا توجد أي ضمانات من أي نوع، صريحة أو ضمنية، بما في ذلك على سبيل المثال لا الحصر قابلية التسويق أو الملاءمة لغرض معين أو عدم الانتهاك، ولست مسؤولاً عن أي أضرار ناشئة عن استخدامه. أنت تتحمل جميع المخاطر المرتبطة بنشر أو تكوين أو تشغيل هذا المكدس.
إذا وجدت هذا المشروع مفيدًا، فكر في دعمه:
| العملة | العنوان |
|---|---|
| بيتكوين (BTC) | 3QjWqhQbHdHgWeYHTpmorP8Pe1wgDjJy54 |
| إيثريوم (ETH) | 0x5851e6145F4773d1585b8686095FB16E368a4dA1 |
| زيكاش (ZEC) | t1KSR5YkNPbjqRSCoLKo5AddFWdm9Kzxh1B |
up.pt