Para monitorear y proteger DNS En un servidor Linux, observe continuamente el volumen de consultas, la latencia, los códigos de respuesta y los registros; exporte métricas a Prometheus/Grafana; y refuerce su seguridad. DNS servicio con parches, ACL, DNSReglas SEC, TSIG, RRL y de firewall. Combine el registro de eventos (dnstap/querylog) con IDS/IPS, limitación de velocidad y configuración de privilegios mínimos para prevenir abusos y detectar incidentes con anticipación.
DNS es la guía telefónica de internet, y cuando falla o se abusa de ella, todo en tu servidor se cae. En esta guía, aprenderás exactamente cómo monitorear y proteger DNS en un servidor Linux utilizando pasos prácticos, configuraciones probadas para BIND y Unbound, firewall defensivo y capacidad de observación de nivel de producción, escrito para administradores y propietarios de sitios en cualquier nivel de habilidad.
Por qué DNS La seguridad y la monitorización son importantes en Linux.
DNS cuestiones Causa sitios lentosCorreo electrónico dañado e incidentes de seguridad como el envenenamiento de caché o la amplificación de ataques DDoS. Los atacantes buscan resolvers abiertos, transferencias de zona mal configuradas y reglas de recursión débiles. Mientras tanto, anomalías sutiles (picos en NXDOMAIN, aumento de SERVFAIL o IP de cliente inusuales) suelen preceder a una interrupción. Una monitorización robusta y el refuerzo garantizan la fiabilidad, la integridad y una recuperación rápida.
Lista de verificación rápida: Monitorear y proteger DNS en Linux
- Guardar DNS Paquetes actualizados (BIND, Unbound, Power)DNS) y minimizar los módulos.
- Habilite el registro detallado (querylog o dnstap) y centralice los registros.
- Exportar métricas a Prometheus; visualizar en Grafana con alertas.
- Restrinja la recursión y las transferencias de zona con ACL y TSIG.
- "Permitir" DNSValidación de la SEC; señalizar las zonas autorizadas cuando corresponda.
- Aplicar limitación de tasa de respuesta (RRL) y límites de tasa de firewall.
- Ejecutar DNS Bajo el principio de mínimo privilegio, en un entorno chroot/jail, con SELinux/AppArmor.
- Supervise QPS, latencia, tasas de NXDOMAIN/SERVFAIL, principales usuarios y dominios.
- Automatice las copias de seguridad de configuraciones/zonas y utilice el control de versiones.
- Practique la respuesta a incidentes: verificaciones dig/kdig, captura de paquetes y aislamiento.
Monitoring DNS En Linux: Herramientas y métodos
1) Verifica los conceptos básicos con DNS Nuestros Clientes
Comience con comprobaciones simples y rápidas utilizando clientes de línea de comandos para validar la resolución, la autoridad y DNSSEC. Estas órdenes deben ser un acto reflejo durante los incidentes.
# Install tools (Debian/Ubuntu)
sudo apt update && sudo apt install dnsutils ldnsutils knot-dnsutils -y
# Basic lookups
dig A example.com +nocmd +noall +answer
kdig example.com A @127.0.0.1 +tls-ca # if using DoT upstream
# Trace and DNSSEC status
dig +trace example.com
dig example.com A +dnssec +multi
# Authoritative checks
dig NS yourzone.com @your.authoritative.ip
dig AXFR yourzone.com @authorized-secondary -k Ktsig.key # with TSIG2) Observar el tráfico en vivo (tcpdump, tshark, dnstop)
Las capturas de paquetes revelan anomalías rápidamente: inundaciones repentinas, QTYPE inusuales o fuentes falsificadas. Úselas durante el triaje y para crear líneas base.
# Quick snapshot of queries on port 53
sudo tcpdump -nni any port 53 -vv
# Summarize top talkers/types with dnstop
sudo apt install dnstop -y
sudo dnstop -l 3 any
# Deeper inspection with tshark
sudo tshark -i any -f "port 53" -T fields -e ip.src -e dns.qry.name -e dns.qry.type | head3) Métricas y registros del servidor (BIND/Unbound)
Monitoree QPS, tasa de aciertos de caché, latencia, ratios NXDOMAIN/SERVFAIL y clientes principales. Habilite registros con detalles útiles y luego reenvíelos a un SIEM o syslog central.
# BIND: enable query logging temporarily (performance hit in high QPS)
sudo rndc querylog on
# BIND stats snapshot
sudo rndc stats && sudo tail -n 50 /var/named/named.stats
# Unbound: control and stats
sudo unbound-control status
sudo unbound-control stats_noreset | head
# Journald / rsyslog
journalctl -u named -f
journalctl -u unbound -fPara obtener una visibilidad de gran volumen con una sobrecarga mínima, utilice dnstap para transmitir eventos de consulta/respuesta estructurados a un recopilador.
# BIND dnstap snippet (in options)
dnstap { all; }
dnstap-output file "/var/log/named/dnstap.log";4) Exportar a Prometheus y visualizar en Grafana
Utilice exportadores para convertir estadísticas sin procesar en paneles y alertas útiles.
- bind_exporter o named_exporter: QPS, caché, recuentos de RCODE, cola de tareas.
- unbound_exporter: utilización de subprocesos, caché de mensajes, latencias del histograma.
- Exportador de nodos: CPU, memoria, saturación de la red para la correlación.
# Example Prometheus alert ideas (pseudocode)
ALERT DNSHighNXDOMAIN
IF rate(bind_rcode_nxdomain[5m]) > 200
ALERT DNSServfailSpike
IF rate(bind_rcode_servfail[5m]) > 20
ALERT DNSTopTalkerAnomaly
IF topk(1, sum by(client_ip)(rate(dns_queries_total[5m]))) > 10005) Detectar amenazas con IDS/IPS y Fail2ban
Suricata o Zeek pueden marcar DNS Tunelización, intentos de amplificación y patrones de malware. Combínalo con fail2ban para bloquear a los usuarios malintencionados en el cortafuegos basándose en los registros.
# Example fail2ban jail for BIND (jail.local)
[named-abuse]
enabled = true
filter = named-abuse
port = 53
logpath = /var/log/syslog
maxretry = 50
findtime = 300
bantime = 3600
# Example filter (filter.d/named-abuse.conf)
[Definition]
failregex = named[.*]: client <HOST>#d+: query.*(denied|refused)Asegurar DNS En Linux: Mejores prácticas
Parchear y endurecer el demonio
- Elige el rol adecuado: solo autoritario o resolutivo. Evita la mezcla, a menos que la división cerebral sea intencional.
- Mantenga los paquetes actualizados y deshabilite las funciones o módulos no utilizados.
- Ejecutar como no root, dentro de un chroot/jail, con capacidades de archivos limitadas.
- Habilite los perfiles SELinux/AppArmor para confinar el demonio.
Restringir la recursión, las transferencias y el control
- permitir recursión y permitir consultas solo a redes confiables.
- permitir transferencia solo a secundarios que utilicen TSIG.
- Escuchar en IP específicas; deshabilitar la recursión abierta expuesta a Internet.
- Restrinja RNDC/control no enlazado a subredes de host local o de administración.
Activar DNSSEC (Validación y Firma)
Los solucionadores deben validar DNSLa SEC protege a los usuarios de respuestas falsificadas. Los servidores autorizados deben firmar las zonas para proteger la integridad del dominio. Automatice la renovación de claves con la duración adecuada y supervise atentamente los errores de validación.
Limitación de la tasa de respuesta y controles de firewall
- Habilite la RRL incorporada de BIND para atenuar la amplificación.
- Aplicar límites de velocidad de nftables o iptables y umbrales por host.
- Descartar fuentes falsificadas o fraudulentas en el borde de la red; preferir UDP con respaldo TCP.
Cifrar las rutas del cliente siempre que sea posible
- Para los resolvedores, prefiera los upstreams a través de DNS-sobre-TLS (DoT) o DNS-a través de HTTPS (DoH).
- Para clientes internos, utilice reenvíos compatibles con DoT/DoH para reducir la manipulación en la ruta.
Registro, rotación y privacidad
- Utilice logrotate para registros de consultas y dnstap archivos para evitar el disco presión.
- Conserve sólo lo que necesita; aplique hash o trunque las IP del cliente si así lo requiere la política.
- Reenvía registros a un sistema central (Elastic, Loki, Graylog) para su correlación.
Ejemplos de configuración que puedes usar hoy
BIND9: Resolución de almacenamiento en caché seguro (named.conf.options)
options {
directory "/var/cache/bind";
listen-on { 127.0.0.1; 10.0.0.10; };
listen-on-v6 { none; };
// Recursion restricted to LAN
recursion yes;
allow-recursion { 127.0.0.1; 10.0.0.0/24; };
allow-query { 127.0.0.1; 10.0.0.0/24; };
allow-query-cache { 127.0.0.1; 10.0.0.0/24; };
// Disable open resolver exposure
allow-transfer { none; };
// DNSSEC validation
dnssec-validation auto;
dnssec-enable yes;
// Rate limiting (RRL)
rate-limit {
responses-per-second 20;
window 5;
log-only no;
};
// Minimal responses, reduce amplification
minimal-responses yes;
// Logging
querylog yes; // consider dnstap for performance
};
// Example TSIG for zone transfers (authoritative role)
key "tsig-secondary" {
algorithm hmac-sha256;
secret "BASE64SECRET==";
};
server 192.0.2.53 {
keys { "tsig-secondary"; };
};Sin límites: Resolvedor reforzado (unbound.conf)
server:
interface: 127.0.0.1
interface: 10.0.0.10
access-control: 127.0.0.0/8 allow
access-control: 10.0.0.0/24 allow
hide-identity: yes
hide-version: yes
qname-minimisation: yes
harden-referral-path: yes
harden-algo-downgrade: yes
# DNSSEC
auto-trust-anchor-file: "/var/lib/unbound/root.key"
val-clean-additional: yes
# Cache and performance
prefetch: yes
prefetch-key: yes
msg-cache-size: 128m
rrset-cache-size: 256m
# Logging (tune for volume)
verbosity: 1
# Forward to DNS-over-TLS upstream (optional)
forward-zone:
name: "."
forward-tls-upstream: yes
forward-addr: 1.1.1.1@853#cloudflare-dns.com
forward-addr: 9.9.9.9@853#dns.quad9.netnftables: Permitir y limitar la velocidad DNS
# Basic nftables rules (IPv4)
sudo nft add table inet filter
sudo nft add chain inet filter input { type filter hook input priority 0 ; }
sudo nft add rule inet filter input ct state established,related accept
sudo nft add rule inet filter input iif lo accept
sudo nft add rule inet filter input tcp dport 53 ct state new limit rate 50/second accept
sudo nft add rule inet filter input udp dport 53 limit rate 200/second burst 400 packets accept
sudo nft add rule inet filter input dropRotación de troncos para DNS Logs
# /etc/logrotate.d/named
/var/log/named/*.log {
weekly
rotate 8
compress
missingok
notifempty
postrotate
/usr/sbin/rndc reconfig >/dev/null 2>&1 || true
endscript
}KPI, alertas y un manual práctico de monitoreo
Métricas clave para rastrear
- Tasa de consultas (QPS) por cliente y zona.
- Percentiles de latencia (p50/p95/p99).
- Relaciones RCODE: NOERROR vs. NXDOMAIN vs. SERVFAIL.
- Tasa de aciertos de caché y efectividad de precarga (resolutores).
- Principales hablantes, dominios más consultados, picos de QTYPE raros.
- CPUmemoria, descriptores de archivos, pérdidas de paquetes UDP y pérdida de paquetes.
Tareas diarias/semanales
- Revise los paneles de control para detectar desviaciones de tendencias y el historial de alertas.
- Verifique los registros para detectar consultas denegadas/rechazadas, reintentos excesivos o tiempos de espera.
- Validar DNSEstado de la SEC; renovar las llaves según lo programado.
- Prueba de conmutación por error: servidores secundarios, nodos anycast, accesibilidad ascendente.
- Realizar copias de seguridad de configuraciones y archivos de zona; verificar restauraciones.
Pasos de respuesta a incidentes
- Confirmar el impacto: extraer de múltiples redes; comparar el solucionador con las rutas autorizadas.
- Captura tráfico (tcpdump) y verifica las métricas del exportador para detectar picos.
- Endurecer rápidamente: habilitar RRL/solo cerrar sesión, ajustar las ACL y aumentar los límites del firewall de forma selectiva.
- Aísle las fuentes abusivas con fail2ban o bloqueos temporales.
- Post mortem: mantener PCAP/registros; ajustar alertas y configuraciones para evitar que vuelva a ocurrir.
Trampas comunes a evitar
- Ejecutar un resolvedor abierto en una IP pública sin ACL.
- Permitir transferencias de zona a cualquier persona; no utilizar TSIG.
- Mezcla de roles autoritarios y recursivos en la misma interfaz.
- Inhabilitando DNSSEC debido a errores de validación transitorios En lugar de solucionar problemas anteriores.
- Dejar el registro de consultas con un alto nivel de verbosidad en producción sin rotación.
- Ignorar las caídas de UDP o los límites del kernel (por ejemplo, net.core.rmem) bajo carga.
¿Cuándo elegir la opción gestionada? DNS o servidores gestionados
Si sus aplicaciones son críticas para los ingresos o no tiene cobertura operativa las 24 horas, los 7 días de la semana, managed DNS y manageEl alojamiento Linux ahorra tiempo y reduce riesgos. En YouStable, nuestros ingenieros implementan resolutores/autoritativos reforzados con DNSSEC, RRL, Prometheus/Grafana y respuesta proactiva a incidentes: para que sus dominios se mantengan rápidos, seguros y observables sin la carga de tener que hacerlo usted mismo.
Preguntas frecuentes: Cómo monitorear y proteger DNS en Linux
¿Cuál es la forma más sencilla de ver si mi Linux...? DNS ¿está trabajando?
Utilice dig o kdig localmente y de forma remota. Compruebe A/AAAA, NS, MX y DNSIndicadores SEC. Si la resolución funciona localmente pero falla externamente, inspeccione las reglas del firewall, las restricciones de recursión y las interfaces de escucha. Para los servidores autoritativos, verifique el enlace NS y que los servidores secundarios estén sincronizados.
¿Cómo puedo evitar el abuso del solucionador abierto?
Deshabilite la recursión pública configurando allow-recursion y allow-query solo en subredes de confianza. Vincule interfaces privadas, habilite RRL y agregue límites de velocidad para nftables/iptables. Realice pruebas periódicas desde una IP externa para garantizar que la recursión no esté expuesta.
¿Debería utilizar BIND o Unbound para los resolutores?
Ambos son excelentes. Unbound es ligero, con un fuerte DNSBIND ofrece funciones de seguridad y privacidad, lo que lo hace ideal para resolutores recursivos. Es muy completo y se utiliza ampliamente tanto para funciones autoritativas como recursivas. Elija la opción que mejor se adapte a su equipo y a su ecosistema (exportadores, herramientas).
Realmente necesito DNS¿SEGUNDO?
Sí, por integridad. Los resolvedores deben validar para proteger a los usuarios de respuestas falsificadas. Si ejecuta zonas autoritativas, fírmelas. Si bien DNSSEC no cifra, sino que garantiza la autenticidad, algo fundamental contra los intentos de envenenamiento de caché y secuestro de datos.
¿Qué alertas debo configurar? DNS ¿supervisión?
Alerta sobre picos en NXDOMAIN/SERVFAIL, aumento de percentiles de latencia, aumentos repentinos de QPS, eventos de caída del exportador, caídas de paquetes UDP y hablantes principales anómalos. Correlacionar con las métricas del sistema (CPU, memoria) para distinguir los picos de tráfico del agotamiento de recursos.
