Introducción
En este artículo de instrucciones, lo guiaremos a través de la instalación de un servidor DNS autorizado BIND9 seguro en CentOS 7
¿Qué es BIND?
BIND es un software de código abierto que implementa los protocolos del Sistema de nombres de dominio (DNS) para Internet. Es una implementación de referencia de esos protocolos, pero también es un software de nivel de producción, adecuado para su uso en aplicaciones de alto volumen y alta confiabilidad.
– ISC (Internet Systems Consortium)
Resumen de los pasos de configuración
- Preparación básica del servidor.
- Instalación de los paquetes de software BIND.
- Configuración de los paquetes de software BIND.
- Agregar una zona de prueba (dominio)
- Probando su servidor DNS
Requisitos
Antes de comenzar con este artículo de instrucciones, primero deberá asegurarse de cumplir con estos requisitos previos.
– Servidor CentOS 7:si no tiene un servidor disponible, puede activar uno a través de nuestra página de servicios de alojamiento de VPS.
– Su editor de texto preferido instalado:usaremos nano en este tutorial.
.
1: Preparación básica del servidor
Primero, asegúrese de haber iniciado sesión con la cuenta de usuario raíz.
sudo su -
A continuación, nos aseguraremos de que el sistema operativo central esté completamente actualizado.
yum update -y
Ahora que su sistema está completamente actualizado, actualizaremos el firewall (habilitado de forma predeterminada ) para permitir que DNS (Puerto TCP 53 / Puerto UDP 53) acceda a su servidor.
firewall-cmd --permanent --zone public --add-port 53/tcp firewall-cmd --permanent --zone public --add-port 53/udp firewall-cmd --reload
2:instalación de los paquetes de software BIND DNS
Ahora estamos listos para instalar los paquetes de software BIND en su servidor.
yum install -y bind bind-utils bind-chroot
- vincular : El servidor DNS (Sistema de nombres de dominio) del dominio de nombres de Internet de Berkeley (BIND)
- utilidades de enlace : Utilidades para consultar servidores de nombres DNS
- vincular-chroot : Un entorno de tiempo de ejecución chroot para el servidor DNS de ISC BIND
Ahora que tiene instalados los paquetes de software BIND requeridos, estamos listos para iniciar los servicios BIND y configurarlos para que se inicien automáticamente al reiniciar el servidor.
systemctl start named systemctl enable named
.
3 – Configuración del Servidor DNS BIND
Al iniciar el servidor BIND DNS, el paquete chroot monta automáticamente todos los archivos de configuración en el /var/named/chroot
directorio de su servidor. Cuando ejecuta BIND (o cualquier otro proceso) en una cárcel chroot, el proceso simplemente no puede ver ninguna parte del sistema de archivos fuera de la cárcel.
Como referencia, el directorio base en el que trabajará para cualquier configuración de BIND es /var/named/chroot
Primero, cambiemos a ese directorio para el resto de estos pasos.
cd /var/named/chroot
Ahora, creemos algunos directorios y un archivo de configuración para su nuevo servidor y establezcamos la propiedad. Estos directorios se utilizarán para almacenar archivos de zona de avance y retroceso para su servidor DNS.
mkdir var/named/fwd-zones mkdir var/named/rev-zones chown -R named:named var/named/fwd-zones chown -R named:named var/named/rev-zones touch etc/zones.conf chown root:named etc/zones.conf
A continuación, vamos a editar el etc/named.conf
archivo de configuración. Lo guiaremos a través de toda la configuración para que comprenda qué hace cada opción para su servidor.
nano etc/named.conf
Tras la instalación inicial, el archivo de configuración predeterminado será el siguiente (si desea saltar al etc/named.conf
final , puedes encontrarlo a continuación):
// // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // options { listen-on port 53 { 127.0.0.1; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { localhost; }; recursion yes; dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
Los ajustes y opciones de configuración disponibles en BIND son muy amplios. En este artículo, cubriremos solo las opciones para configurar su servidor para que sea un servidor DNS autoritativo y proteger su servidor de ataques recursivos de amplificación de DNS.
Para obtener una explicación más detallada de todas estas opciones, recomendamos a la gente de Zytrax.com.
Opciones de escucha
La primera opción de configuración que vamos a cambiar son las opciones de escucha para su servidor. De forma predeterminada, el servidor está configurado para escuchar solo en la dirección de bucle invertido local (127.0.0.1). Vamos a cambiar esto para escuchar en todas las interfaces de su servidor. Reemplace las siguientes líneas dentro de options { }
cláusula del archivo de configuración.
listen-on port 53 { any; }; listen-on-v6 port 53 { any; };
ACL (Listas de control de acceso)
Ahora vamos a agregar algunas reglas de ACL (Lista de control de acceso) a la configuración. Estas ACL se utilizarán para ampliar la configuración de seguridad de las opciones de búsqueda de consultas, así como las opciones de consultas recursivas. La primera regla, que llamaremos "consultas permitidas", se utilizará para permitir que cualquier dirección de origen consulte su servidor DNS. La segunda regla, la llamaremos "recursividad permitida", se usará para restringir la búsqueda recursiva solo a la dirección del host local.
Agregue las siguientes reglas de política de ACL justo encima de options { }
cláusula.
// ACL - Allow queries from ANY source address acl "allowed-queries" { any; }; // ACL - Allow recursion from LOCALHOST only. acl "allowed-recursion" { 127.0.0.1; ::1; }; options { ... };
A continuación, vamos a cambiar el valor de configuración de allow-query
variable de declaración para usar la nueva ACL que acabamos de crear. El allow-query
define quién (es decir, redes de origen) puede consultar su servidor DNS. Reemplace la siguiente línea dentro de options { }
cláusula del archivo de configuración.
allow-query { "allowed-queries"; };
Restricción de la recursividad
Ahora necesitamos asegurar el permiso de búsqueda recursiva en su servidor. La recursividad es una técnica en la que un servidor DNS consulta a otros servidores DNS en nombre del cliente solicitante para resolver completamente el nombre y luego envía una respuesta al cliente. Los atacantes pueden usar esta técnica para hacer que los servidores DNS con recursión abierta habilitada participen sin saberlo en un ataque DDoS (Distributed Denial of Service). Por lo tanto, si un servidor DNS en su red no está diseñado para recibir consultas recursivas, la recursividad debe deshabilitarse en ese servidor o asegurarse para que no permita que fuentes no autorizadas utilicen esta técnica.
recursion yes; allow-recursion { "allowed-recursion"; };
Ahora vamos a agregar una declaración de inclusión al archivo de configuración. Esta declaración se utilizará para incluir los datos de la zona autorizada (dominios) a los que su servidor estará configurado para responder. Agregue la siguiente línea debajo del cierre de la opción option { }
cláusula, justo después de la última declaración de inclusión.
include "/etc/zones.conf";
Ahora hemos completado los cambios de configuración en etc/named.conf
archivo de configuración. Ahora puede guardar y salir de sus cambios.
.
Nuevo archivo named.conf
Para revisión, su etc/named.conf
el archivo de configuración ahora debería verse como el siguiente:
// // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // // ACL - Allow queries from ANY source address acl "allowed-queries" { any; }; // ACL - Allow recursion from LOCALHOST only. acl "allowed-recursion" { 127.0.0.1; ::1; }; options { listen-on port 53 { any; }; listen-on-v6 port 53 { any; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { "allowed-queries"; }; recursion yes; allow-recursion { "allowed-recursion"; }; dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; include "/etc/zones.conf";
.
4 - Agregar su primera zona (dominio)
Ahora vamos a agregar su primera zona para la que su servidor DNS tendrá autoridad. Usaremos un dominio de prueba (example.tld ) para este paso como ejemplo.
Primero, crearemos un nuevo archivo en el directorio var/named/fwd-zones
que creamos anteriormente.
touch var/named/fwd-zones/example.tld.zone; chown named:named var/named/fwd-zones/example.tld.zone;
A continuación, agregaremos los datos de registro de zona de ejemplo para este dominio. Edite el nuevo archivo que acabamos de crear y agregue los datos de la zona al archivo de configuración.
nano var/named/fwd-zones/example.tld.zone
Datos de zona
; zone file for example.tld $TTL 14400 ; 4 hours - default TTL for zone $ORIGIN example.tld. ;; SOA Resource Record @ IN SOA ns1.example.tld. hostmaster.example.tld. ( 2015010100 ; se = serial number 12h ; ref = refresh 15m ; ret = update retry 3w ; ex = expiry 3h ; min = minimum ) ;; Name Servers IN NS ns1.example.com. ns1 IN A 192.0.2.3 ;; Mail Exchange Resource Records @ IN MX 10 mail.example.tld. ;; Web Server Resource Records @ IN A 192.0.2.3 www IN CNAME @ ;; FTP Server Resource Records ftp IN A 192.0.2.3
Una vez que haya realizado todos los cambios necesarios, guarde y salga.
Ahora vamos a editar el etc/zones.conf
archivo de configuración para incluir el nuevo dominio que acabamos de crear.
nano etc/zones.conf
Ahora agregue los siguientes parámetros al archivo de configuración.
zone "example.tld" in { type master; file "fwd-zones/example.tld.zone"; allow-transfer { none; }; };
Una vez hecho esto, guarde y salga de este archivo.
Ahora estamos listos para reiniciar sus servicios de DNS para que se carguen todas las configuraciones nuevas.
systemctl restart named
Si todo se reinició con éxito, sin ningún error, debería recibir la siguiente respuesta:
Stopping named: . [ OK ] Starting named: [ OK ]
.
5:prueba de su servidor DNS
Ahora estamos listos para probar la funcionalidad de su nuevo servidor DNS. Primero, vamos a confirmar que su servidor DNS responde para la zona (dominio) que acabamos de crear. Ejecute el siguiente comando:
dig example.tld -t ANY @localhost
Debería ver el siguiente resultado de respuesta similar de su servidor. Los valores de respuesta clave a buscar son el ;; ANSWER SECTION:
valores. Este resultado le permite saber que el servidor ha respondido a su solicitud con los datos de registro que ingresó en los pasos anteriores.
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.2 <<>> example.tld -t ANY @localhost ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61421 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1 ;; QUESTION SECTION: ;example.tld. IN ANY ;; ANSWER SECTION: example.tld. 14400 IN SOA ns1.example.tld. hostmaster.example.tld. 2015010100 43200 900 1814400 10800 example.tld. 14400 IN NS ns1.example.tld. example.tld. 14400 IN MX 10 mail.example.tld. example.tld. 14400 IN A 192.0.2.3 ;; ADDITIONAL SECTION: ns1.example.tld. 14400 IN A 192.0.2.3 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: ;; MSG SIZE rcvd: 147
La segunda prueba que vamos a hacer es verificar que su servidor responda a las búsquedas recursivas del host local. Ejecute el siguiente comando para comenzar la prueba:
dig google.com -t ANY @localhost
Si el servidor está configurado como se esperaba, debería recibir un ;; ANSWER SECTION:
respuesta.
;; ANSWER SECTION: google.com. 86400 IN SOA ns1.google.com. dns-admin.google.com. 4294967295 7200 1800 1209600 300 google.com. 600 IN MX 50 alt4.aspmx.l.google.com. google.com. 600 IN MX 40 alt3.aspmx.l.google.com. google.com. 600 IN MX 10 aspmx.l.google.com. google.com. 600 IN MX 20 alt1.aspmx.l.google.com. google.com. 600 IN MX 30 alt2.aspmx.l.google.com. google.com. 3600 IN TXT "v=spf1 include:_spf.google.com ~all" google.com. 86400 IN TYPE257 \# 19 0005697373756573796D616E7465632E636F6D google.com. 300 IN AAAA 2607:f8b0:4008:804::200e google.com. 300 IN A 216.58.219.78 google.com. 172800 IN NS ns1.google.com. google.com. 172800 IN NS ns3.google.com. google.com. 172800 IN NS ns4.google.com. google.com. 172800 IN NS ns2.google.com. ;; AUTHORITY SECTION: google.com. 172800 IN NS ns4.google.com. google.com. 172800 IN NS ns1.google.com. google.com. 172800 IN NS ns3.google.com. google.com. 172800 IN NS ns2.google.com. ;; ADDITIONAL SECTION: ns2.google.com. 172800 IN A 216.239.34.10 ns1.google.com. 172800 IN A 216.239.32.10 ns4.google.com. 172800 IN A 216.239.38.10 ns3.google.com. 172800 IN A 216.239.36.10
La última prueba que vamos a hacer es validar que su servidor NO abierto a un ataque de amplificación de DNS. La gente de openresolver.com ha configurado una prueba simple que puede usar con dig
:
dig +short test.openresolver.com TXT @1.2.3.4 (replace 1.2.3.4 with the IP address or domain name of the DNS server you are testing)
Una respuesta de "open-resolver-detected"
indica que tiene habilitada la recursividad. Sin respuesta, en este caso, es algo bueno .
El sitio openresolver.com también tiene una herramienta basada en navegador disponible para probar esta vulnerabilidad.
Al realizar la prueba con su dirección IP pública, debería recibir la siguiente respuesta similar:
Prueba exitosa de resolución de DNS recursiva abierta
¡Felicidades!
Ahora tiene un servidor DNS autorizado configurado y en ejecución. ¡Gracias por leer! Consulte algunos de los artículos relacionados a continuación y gracias por probar nuestras confiables soluciones de alojamiento VPS en Atlantic.Net.