GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo:Servidor DNS BIND9 autorizado en CentOS 7:Instalación y configuración

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

  1. Preparación básica del servidor.
  2. Instalación de los paquetes de software BIND.
  3. Configuración de los paquetes de software BIND.
  4. Agregar una zona de prueba (dominio)
  5. 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.


Linux
  1. Cómo comprobar los archivos de configuración de bind9 (servidor DNS)

  2. Cómo instalar DenyHost en CentOS 6.7

  3. Cómo instalar el servidor PostgreSQL en CentOS 8

  4. Cómo instalar Redis en CentOS 7

  5. ¿Cómo migrar un servidor BIND DNS a un nuevo hardware?

Cómo instalar Nginx en CentOS 7

Cómo instalar Webmin en CentOS 7

Cómo instalar ownCloud en CentOS 7

Cómo instalar MyWebSQL en CentOS 8

Cómo instalar Relic Server Monitoring en CentOS 8

Cómo instalar WordPress en un servidor CentOS 8