
निष्क्रिय DNS कैप्चर और निगरानी टूलकिट
हम dnsmonster के लिए एक प्रबंधित SaaS समाधान की खोज कर रहे हैं! अपनी प्रतिक्रिया और आवश्यकताएं साझा करके निष्क्रिय DNS निगरानी के भविष्य को आकार देने में मदद करें: हमारा त्वरित सर्वेक्षण लें
विषय सूची
Golang पर निर्मित निष्क्रिय DNS निगरानी फ्रेमवर्क।
dnsmonster DNS ट्रैफिक के लिए एक पैकेट स्निफर लागू करता है। यह pcap फ़ाइल, लाइव इंटरफ़ेस या dnstap सॉकेट से ट्रैफिक स्वीकार कर सकता है, और प्रति सेकंड सैकड़ों हजारों DNS क्वेरी को इंडेक्स और स्टोर करने के लिए उपयोग किया जा सकता है, क्योंकि यह एक सामान्य कंप्यूटर पर प्रति सेकंड 200k+ DNS क्वेरी को इंडेक्स करने में सक्षम साबित हुआ है। इसका उद्देश्य स्केलेबल, सरल और उपयोग में आसान होना है, और सुरक्षा टीमों को एक उद्यम के DNS ट्रैफिक के विवरणों को समझने में मदद करना है। dnsmonster DNS वार्तालापों का अनुसरण करने का प्रयास नहीं करता, बल्कि इसका उद्देश्य DNS पैकेट को आते ही इंडेक्स करना है। यह अंतिम-उपयोगकर्ताओं की गोपनीयता का उल्लंघन करने का भी प्रयास नहीं करता, लेयर 3 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
# मुख्य विशेषताएं
- Linux के `afpacket` और शून्य-कॉपी पैकेट कैप्चर का उपयोग करने की क्षमता।
- BPF का समर्थन
- गोपनीयता बढ़ाने के लिए IP पता मास्क करने की क्षमता
- प्री-प्रोसेसिंग सैंपलिंग अनुपात रखने की क्षमता
- स्टोरेज से कुछ डोमेन/सफ़िक्स/प्रीफ़िक्स को लिखने से बचने के लिए "skip" `fqdn` की सूची रखने की क्षमता
- कुछ डोमेन तक पहुंच लॉग करने के लिए "allow" डोमेन की सूची रखने की क्षमता
- Skip और allow डोमेन फ़ाइलों/urls का हॉट-रीलोड
- प्रति आउटपुट स्ट्रीम कॉन्फ़िगरेबल लॉजिक के साथ मॉड्यूलर आउटपुट।
- ClickHouse के TTL विशेषता का उपयोग करके स्वचालित डेटा प्रतिधारण नीति
- ClickHouse आउटपुट के लिए अंतर्निहित Grafana डैशबोर्ड।
- एकल, स्टैटिकली लिंक्ड बाइनरी के रूप में भेजे जाने की क्षमता
- पर्यावरण चर, कमांड लाइन विकल्प या कॉन्फ़िगरेशन फ़ाइल का उपयोग करके कॉन्फ़िगर किए जाने की क्षमता
- ClickHouse की SAMPLE क्षमता का उपयोग करके आउटपुट को सैंपल करने की क्षमता
- `prometheus` और `statstd` का उपयोग करके मेट्रिक्स भेजने की क्षमता
- ClickHouse के अंतर्निहित LZ4 स्टोरेज के कारण उच्च संपीड़न अनुपात
- DNS Over TCP, Fragmented DNS (udp/tcp) और IPv6 का समर्थन
- Unix सॉकेट या TCP पर [dnstap](https://github.com/dnstap/golang-dnstap) का समर्थन
- Splunk और Microsoft Sentinel के साथ अंतर्निहित SIEM एकीकरण
# इंस्टॉलेशन
## लिनक्स
`dnsmonster` के साथ शुरुआत करने का सबसे अच्छा तरीका रिलीज़ सेक्शन से बाइनरी डाउनलोड करना है। बाइनरी `musl` के विरुद्ध स्टैटिकली बनाई गई है, इसलिए यह कई डिस्ट्रोज़ पर बिना किसी बदलाव के काम करनी चाहिए। `afpacket` समर्थन के लिए, आपको कर्नेल 3.x+ का उपयोग करना होगा। कोई भी आधुनिक Linux वितरण (CentOS/RHEL 7+, Ubuntu 14.0.4.2+, Debian 7+) 3.x+ संस्करण के साथ आता है, इसलिए इसे बिना किसी समस्या के काम करना चाहिए। यदि आपका डिस्ट्रो पहले से संकलित संस्करण के साथ काम नहीं कर रहा है, तो कृपया विवरण के साथ एक मुद्दा सबमिट करें, और इस अनुभाग [मैन्युअली बनाएं](#build-manually) का उपयोग करके `dnsmonster` को मैन्युअली बनाएं।
### कंटेनर
चूंकि `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 पर भी काम करता है।