
Passives DNS-Capture- und Monitoring-Toolkit
Wir erkunden eine verwaltete SaaS-Lösung für dnsmonster! Helfen Sie mit, die Zukunft des passiven DNS-Monitorings zu gestalten, indem Sie Ihr Feedback und Ihre Anforderungen teilen: Nehmen Sie an unserer kurzen Umfrage teil
Inhaltsverzeichnis
Passives DNS-Überwachungsframework, erstellt mit Golang.
dnsmonster implementiert einen Paketsniffer für DNS-Verkehr. Es kann Verkehr aus einer pcap-Datei, einer Live-Schnittstelle oder einem dnstap-Socket akzeptieren und verwendet werden, um Hunderttausende von DNS-Abfragen pro Sekunde zu indizieren und zu speichern. Es hat gezeigt, dass es auf einem handelsüblichen Computer über 200.000 DNS-Abfragen pro Sekunde indizieren kann. Es zielt darauf ab, skalierbar, einfach und benutzerfreundlich zu sein und Sicherheitsteams zu helfen, die Details des DNS-Verkehrs eines Unternehmens zu verstehen. dnsmonster versucht nicht, DNS-Konversationen zu verfolgen, sondern zielt darauf ab, DNS-Pakete sofort zu indizieren, sobald sie eintreffen. Es versucht auch nicht, die Privatsphäre der Endbenutzer zu verletzen, da es Layer-3-IPs (IPv4 und IPv6) maskieren kann, sodass Teams Trendanalysen auf aggregierten Daten durchführen können, ohne die Abfragen einer Einzelperson zuordnen zu können. Blogbeitrag
Der Code vor Version 1.x wird als Beta-Qualität betrachtet und kann breaking changes unterliegen. Bitte besuchen Sie die Release-Notes für jedes Tag, um die Liste der Breaking Scenarios zwischen den einzelnen Versionen zu sehen und wie Sie potenziellen Datenverlust vermeiden können.```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
# Hauptmerkmale
- Fähigkeit, Linux' `afpacket` und Zero-Copy-Paketerfassung zu verwenden.
- Unterstützt BPF
- Fähigkeit, IP-Adressen zu maskieren, um die Privatsphäre zu verbessern
- Fähigkeit, ein Vorverarbeitungs-Sampling-Verhältnis festzulegen
- Fähigkeit, eine Liste von "skip" `fqdn`s zu haben, um das Schreiben bestimmter Domains/Suffixe/Präfixe in den Speicher zu vermeiden
- Fähigkeit, eine Liste von "allow"-Domains zu haben, um Zugriffe auf bestimmte Domains zu protokollieren
- Hot-Reload von Skip- und Allow-Domain-Dateien/URLs
- Modularer Output mit konfigurierbarer Logik pro Ausgabestream.
- Automatische Datenaufbewahrungsrichtlinie unter Verwendung von ClickHouses TTL-Attribut
- Integriertes Grafana-Dashboard für ClickHouse-Output.
- Fähigkeit, als einzelnes, statisch gelinktes Binärprogramm ausgeliefert zu werden
- Fähigkeit, mit Umgebungsvariablen, Befehlszeilenoptionen oder Konfigurationsdatei konfiguriert zu werden
- Fähigkeit, Ausgaben unter Verwendung von ClickHouses SAMPLE-Funktion zu sampeln
- Fähigkeit, Metriken mit `prometheus` und `statstd` zu senden
- Hohe Kompressionsrate dank ClickHouses integriertem LZ4-Speicher
- Unterstützt DNS Over TCP, fragmentiertes DNS (UDP/TCP) und IPv6
- Unterstützt [dnstap](https://github.com/dnstap/golang-dnstap) über Unix-Socket oder TCP
- Integrierte SIEM-Integration mit Splunk und Microsoft Sentinel
# Installation
## Linux
Die beste Möglichkeit, mit `dnsmonster` zu beginnen, ist das Herunterladen der Binärdatei aus dem Release-Bereich. Die Binärdatei ist statisch gegen `musl` gebaut, daher sollte sie auf vielen Distributionen sofort funktionieren. Für `afpacket`-Unterstützung benötigen Sie Kernel 3.x+. Jede moderne Linux-Distribution (CentOS/RHEL 7+, Ubuntu 14.0.4.2+, Debian 7+) wird mit einer 3.x+-Version ausgeliefert, sodass es sofort funktionieren sollte. Wenn Ihre Distribution mit der vorkompilierten Version nicht funktioniert, reichen Sie bitte ein Issue mit den Details ein und bauen Sie `dnsmonster` manuell mit diesem Abschnitt [Manuell bauen](#build-manually).
### Container
Da `dnsmonster` Rohpaketerfassungsfunktionalität verwendet, muss der Docker/Podman-Daemon dem Container die entsprechende Capability gewähren```
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:
Stellen Sie sicher, dass die Pakete go, libpcap-devel und linux-headers installiert sind. Die Namen der Pakete können je nach Ihrer Distribution abweichen. Danach klonen Sie einfach das Repository und führen Sie go build ./cmd/dnsmonster aus.```sh
git clone https://github.com/mosajjal/dnsmonster --depth 1 /tmp/dnsmonster
cd /tmp/dnsmonster
go get
go build -o dnsmonster ./cmd/dnsmonster- ohne `libpcap`:
`dnsmonster` nutzt nur eine einzige Funktion von `libpcap`, und zwar die Umwandlung der `tcpdump`-artigen Filter in BPF-Bytecode. Wenn Sie ohne BPF-Unterstützung auskommen können, können Sie `dnsmonster` ohne `libpcap` bauen. Beachten Sie, dass die Paketerfassung auf allen anderen Plattformen auf `libpcap` zurückfällt, sodass es zu einer harten Abhängigkeit wird (*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