
Kit de captura y monitoreo pasivo de DNS
¡Estamos explorando una solución SaaS gestionada para dnsmonster! Ayuda a dar forma al futuro del monitoreo pasivo de DNS compartiendo tus comentarios y requisitos: Responde nuestra breve encuesta
Tabla de contenido
Marco de monitoreo pasivo de DNS construido en Golang.
dnsmonster implementa un sniffer de paquetes para tráfico DNS. Puede aceptar tráfico desde un archivo pcap, una interfaz en vivo o un socket dnstap,
y puede usarse para indexar y almacenar cientos de miles de consultas DNS por segundo, ya que ha demostrado ser capaz de indexar más de 200,000 consultas DNS por segundo en una computadora común. Su objetivo es ser escalable, simple y fácil de usar, y ayudar
a los equipos de seguridad a comprender los detalles del tráfico DNS de una empresa. dnsmonster no busca seguir conversaciones DNS, sino que apunta a indexar paquetes DNS a medida que llegan. Tampoco busca violar
la privacidad de los usuarios finales, con la capacidad de enmascarar IPs de Capa 3 (IPv4 e IPv6), permitiendo a los equipos realizar análisis de tendencias sobre datos agregados sin poder rastrear las consultas hasta un individuo. Blogpost
El código anterior a la versión 1.x se considera de calidad beta y está sujeto a cambios importantes. Visite las notas de la versión para cada etiqueta para ver la lista de escenarios de ruptura entre cada versión y cómo mitigar una posible pérdida de datos.```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
# Funcionalidades principales
- Posibilidad de usar `afpacket` y captura de paquetes con zero-copy en Linux.
- Soporta BPF
- Posibilidad de enmascarar la dirección IP para mejorar la privacidad
- Posibilidad de tener una relación de muestreo de preprocesamiento
- Posibilidad de tener una lista de `fqdn` "omitir" para evitar escribir algunos dominios/sufijo/prefijo al almacenamiento
- Posibilidad de tener una lista de dominios "permitidos", utilizada para registrar el acceso a ciertos dominios
- Recarga en caliente de archivos/urls de dominios omitidos y permitidos
- Salida modular con lógica configurable por flujo de salida.
- Política automática de retención de datos usando el atributo TTL de ClickHouse
- Panel de Grafana integrado para salida de ClickHouse.
- Posibilidad de distribuirse como un único binario enlazado estáticamente
- Posibilidad de configurarse mediante variables de entorno, opciones de línea de comandos o archivo de configuración
- Posibilidad de muestrear salidas usando la capacidad SAMPLE de ClickHouse
- Posibilidad de enviar métricas usando `prometheus` y `statstd`
- Alto ratio de compresión gracias al almacenamiento LZ4 incorporado de ClickHouse
- Soporta DNS sobre TCP, DNS fragmentado (udp/tcp) e IPv6
- Soporta [dnstap](https://github.com/dnstap/golang-dnstap) sobre socket Unix o TCP
- Integración SIEM incorporada con Splunk y Microsoft Sentinel
# Instalación
## Linux
La mejor manera de empezar con `dnsmonster` es descargar el binario desde la sección de lanzamientos. El binario está construido estáticamente contra `musl`, por lo que debería funcionar sin problemas en muchas distribuciones. Para soporte de `afpacket`, debes usar un kernel 3.x+. Cualquier distribución Linux moderna (CentOS/RHEL 7+, Ubuntu 14.0.4.2+, Debian 7+) incluye una versión 3.x+, así que debería funcionar de inmediato. Si tu distribución no funciona con la versión precompilada, por favor envía un issue con los detalles y compila `dnsmonster` manualmente usando esta sección [Compilar manualmente](#build-manually).
### Contenedor
Dado que `dnsmonster` utiliza funcionalidad de captura de paquetes en bruto, el demonio Docker/Podman debe otorgar la capacidad al contenedor```
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:
Asegúrate de tener instalados los paquetes go, libpcap-devel y linux-headers. El nombre de los paquetes puede variar según tu distribución. Después de esto, simplemente clona el repositorio y ejecuta `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- sin `libpcap`:
`dnsmonster` solo usa una función de `libpcap`, y es convertir los filtros de estilo `tcpdump` en bytecode BPF. Si puedes vivir sin soporte BPF, puedes compilar `dnsmonster` sin `libpcap`. Ten en cuenta que para cualquier otra plataforma, la captura de paquetes recurre a `libpcap`, por lo que se convierte en una dependencia obligatoria (*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