
أداة لالتقاط ومراقبة DNS السلبي
نحن نستكشف حلول SaaS المدارة لـ dnsmonster! ساعد في تشكيل مستقبل مراقبة DNS السلبية من خلال مشاركة ملاحظاتك ومتطلباتك: خذ استبياننا السريع
جدول المحتويات
إطار مراقبة DNS السلبي مبني على جولانج.
dnsmonster ينفذ متشمم حزم لحركة مرور DNS. يمكنه استقبال حركة المرور من ملف pcap، أو واجهة حية، أو مقبس dnstap، ويمكن استخدامه لفهرسة وتخزين مئات الآلاف من استعلامات DNS في الثانية، حيث أظهر قدرته على فهرسة أكثر من 200 ألف استعلام DNS في الثانية على جهاز تجاري. يهدف إلى أن يكون قابلًا للتوسع وبسيطًا وسهل الاستخدام، ويساعد فرق الأمن على فهم تفاصيل حركة مرور DNS في المؤسسة. dnsmonster لا يهدف إلى تتبع محادثات DNS، بل يهدف إلى فهرسة حزم DNS فور وصولها. كما لا يهدف إلى انتهاك خصوصية المستخدمين النهائيين، مع القدرة على إخفاء عناوين IP من الطبقة الثالثة (IPv4 و IPv6)، مما يتيح للفرق إجراء تحليل الاتجاهات على البيانات المجمعة دون القدرة على تتبع الاستعلامات إلى فرد معين. منشور مدونة
يعتبر الكود قبل الإصدار 1.x ذو جودة تجريبية وعرضة لتغييرات جذرية. يرجى زيارة ملاحظات الإصدار لكل علامة للاطلاع على قائمة السيناريوهات الجذرية بين كل إصدار، وكيفية تخفيف فقدان البيانات المحتمل.```mermaid graph TD subgraph Input B1["network input"] B2["pcap file"] B3["dnstap socket"] end
subgraph "Process"
C1["Sampling based of ratio"]
C2["Packet Process"]
C3["Dispatcher"]
O11["Output1"]
O12["Domain Skip (optional)"]
O13["Domain Allow (optional)"]
O21["Output2"]
O22["Domain Skip (optional)"]
O23["Domain Allow (optional)"]
O31["Output3"]
O32["Domain Skip (optional)"]
O33["Domain Allow (optional)"]
end
B1 --> Process
B2 --> Process
B3 --> Process
C1 --> C2
C2 --> C3
C3 --> O11
C3 --> O21
C3 --> O31
O11 --> O12 --> O13
O21 --> O22 --> O23
O31 --> O32 --> O33
subgraph Output
Splunk
Syslog
H["ClickHouse"]
Postgres
Kafka
I["JSON File"]
Influx
Elastic
J["stdout"]
Parquet
Sentinel
end
O13 --> H
O23 --> I
O33 --> J
## الميزات الرئيسية
- إمكانية استخدام قدرة التقاط الحزم `afpacket` وzero-copy في لينكس.
- دعم لـ BPF
- إمكانية إخفاء عنوان IP لتعزيز الخصوصية
- إمكانية وجود نسبة أخذ عينات للمعالجة المسبقة
- إمكانية وجود قائمة بـ "تخطي" `fqdn`s لتجنب كتابة بعض النطاقات/اللواحق/البادئات إلى التخزين
- إمكانية وجود قائمة بنطاقات "السماح"، تُستخدم لتسجيل الوصول إلى نطاقات معينة
- إعادة تحميل فورية لملفات/عناوين تخطي وسماح النطاقات
- إخراج معياري مع منطق قابل للتكوين لكل تيار إخراج
- سياسة احتفاظ تلقائية بالبيانات باستخدام خاصية TTL في ClickHouse
- لوحة تحكم Grafana مدمجة لإخراج ClickHouse.
- إمكانية توزيع الأداة كملف ثنائي ثابت الربط
- إمكانية التهيئة باستخدام متغيرات البيئة، أو خيارات سطر الأوامر، أو ملف التهيئة
- إمكانية أخذ عينات من المخرجات باستخدام قدرة SAMPLE في ClickHouse
- إمكانية إرسال المقاييس باستخدام `prometheus` و `statstd`
- نسبة ضغط عالية بفضل تخزين LZ4 المدمج في ClickHouse
- دعم لـ DNS عبر TCP، و DNS المجزأ (udp/tcp)، و IPv6
- دعم [dnstap](https://github.com/dnstap/golang-dnstap) عبر مقبس يونكس أو TCP
- تكامل SIEM مدمج مع Splunk و Microsoft Sentinel
# التثبيت
## لينكس
أفضل طريقة لبدء استخدام `dnsmonster` هي تنزيل الملف الثنائي من قسم الإصدارات. الملف الثنائي مبني بشكل ثابت ضد `musl`، لذا يجب أن يعمل مباشرة على العديد من التوزيعات. لدعم `afpacket`، يجب استخدام نواة 3.x فأحدث. أي توزيعة لينكس حديثة (CentOS/RHEL 7+، Ubuntu 14.0.4.2+، Debian 7+) تأتي مع إصدار 3.x+ لذا يجب أن يعمل مباشرة. إذا كانت توزيعتك لا تعمل مع الإصدار المجهز مسبقًا، يرجى تقديم مشكلة مع التفاصيل، وبناء `dnsmonster` يدويًا باستخدام هذا القسم [Build Manually](#build-manually).
### الحاوية
بما أن `dnsmonster` يستخدم وظيفة التقاط الحزم الخام، يجب على خفي Docker/Podman منح الإمكانية للحاوية```
sudo docker run --rm -it --net=host --cap-add NET_RAW --cap-add NET_ADMIN --name dnsmonster ghcr.io/mosajjal/dnsmonster:latest --devName lo --stdoutOutputType=1
libpcap:
تأكد من تثبيت حزم go و libpcap-devel و linux-headers. قد يختلف اسم الحزم بناءً على توزيعتك. بعد ذلك، ببساطة انسخ المستودع وشغّل `go build ./cmd/dnsmonster````sh
git clone https://github.com/mosajjal/dnsmonster --depth 1 /tmp/dnsmonster
cd /tmp/dnsmonster
go get
go build -o dnsmonster ./cmd/dnsmonster- بدون `libpcap`:
يستخدم `dnsmonster` وظيفة واحدة فقط من `libpcap`، وهي تحويل مرشحات نمط `tcpdump` إلى كود بايت BPF. إذا كنت تستطيع العيش بدون دعم BPF، فيمكنك بناء `dnsmonster` بدون `libpcap`. لاحظ أنه بالنسبة لأي منصة أخرى، يعود التقاط الحزم إلى `libpcap` لذا يصبح اعتمادًا صلبًا (*BSD، Windows، Darwin)```sh
git clone https://github.com/mosajjal/dnsmonster --depth 1 /tmp/dnsmonster
cd /tmp/dnsmonster
go get
go build -o dnsmonster -tags nolibpcap ./cmd/dnsmonster
البناء أعلاه يعمل أيضًا على ARMv7 (RPi4) و AArch64.
إذا كان لديك نسخة من libpcap.a، يمكنك ربطها بشكل ثابت مع dnsmonster وبنائه بالكامل بشكل ثابت. في الكود أدناه، يرجى تغيير /root/libpcap-1.9.1/libpcap.a إلى موقع نسختك.```
git clone https://github.com/mosajjal/dnsmonster --depth 1 /tmp/dnsmonster
cd /tmp/dnsmonster/
go get
go build --ldflags "-L /root/libpcap-1.9.1/libpcap.a -linkmode external -extldflags "-I/usr/include/libnl3 -lnl-genl-3 -lnl-3 -static"" -a -o dnsmonster ./cmd/dnsmonster
لمزيد من المعلومات حول كيفية إنشاء الثنائي المرتبط بشكل ثابت، ألق نظرة على [هذا](https://github.com/fenkohq/dnsmonster/blob/main/Dockerfile) ملف Dockerfile.
## Windows
البناء على Windows يشبه إلى حد كبير البناء على Linux. فقط تأكد من أن لديك `npcap`. استنسخ المستودع (`--history 1` يعمل)، ثم قم بتشغيل `go get` و `go build ./cmd/dnsmonster`
كما ذكر، يعتمد إصدار Windows من الثنائي على تثبيت [npcap](https://nmap.org/npcap/#download). بعد التثبيت، يجب أن يعمل الثنائي مباشرة. تم اختباره في بيئة Windows 10 وتم تنفيذه دون مشكلة. للعثور على أسماء الواجهات لإعطاء معامل `--devName` وبدء الالتقاط، ستحتاج إلى القيام بما يلي: