miércoles, 22 de abril de 2020

CentOS8 | Ubuntu 20.04: DNS server (BIND9) y config Firewalld


CentOS8/Ubuntu 20.04:Configurar BIND9 DNS con zonas/forwarder y reglas Firewalld 


*Disclaimer: Config. para Ubuntu es virtualmente la misma, diferencias al final del post.

Situación Presentada


Un amigo tiene una pequeña empresa, con aprox 30 empleados/usuarios de computadora.
Claro está que no tiene presupuesto para pagar servicios más allá de las licencias que tienen las PC que compró, por lo que me preguntó "Cómo puedo tener correo electrónico sin pagar el relajo de plata que cuesta" .
Entonces yo le dije que con Linux se puede hacer eso y mucho más, para lo que él necesita.

Y qué hacemos entonces?

Citando la última entrada "Para reducirle los costos al mínimo a mi amigo, y de paso hacer gala de lo que se puede hacer usando open source , algo de tiempo  y dedicación" me puse a la tarea de montarle un servidor de emails en Linux (siguiente artículo), pero para llegar a eso, primero es imprescindible correr un servicio DNS debido a que resolver hostnames en una red, es piedra angular de todos los demás servicios.

Esta entrada se enfocará en la instalación y configuración de un servidor DNS , con sus zonas, forwarder, ACL y reglas de Firewall que son necesarias para lograrlo.
No se usará DHCP.

Se usará un entorno virtualizado (usar VirtualBox o VMWare player) para hacer la configuración y pruebas.


Componentes del articulo


•Situación Presentada
•Y qué hacemos entonces?
•Componentes del articulo
1. Pre-requisitos para instalación
2. Configuración de Red y Firewall  
  2.1  Usar comando nmtui para la red y hostname  
  2.2  Abrir puerto a la red con firewall-cmd (metodo 1)  
  2.3  Abrir puerto a la red con el archivo zones/public.xml (metodo 2)
3.  Configuración del servicio named (Bind9)  
  3.1 Instalación de paquetes  
  3.2 Configuración de named (Bind9)    
    3.2.1 Socket de escucha.    
    3.2.2 ACL para evitar accesos no autorizados   
    3.2.3 Deshabilitar dnssec y dejar recursion.    
    3.2.4 Logs, canales y categorias.    
    3.2.5 Archivos de Zonas y Forwarder.
4.Configuración de zona:  
  4.1  Zona principal  
  4.2  PTR (reverse lookup)  
  4.3  Enable e inicio del servicio.
5.Pruebas:  
  5.1 Desde el mismo servidor.  
  5.2 Desde otra PC Linux.  
  5.3 Desde otra PC Windows..
•Diferencias con Ubuntu
•Referencias. 13

1. Pre-requisitos para instalación
  • Un PC con CentOS 8 o Ubuntu (ver al final), usado en este tutorial.
  • Una NIC conectada a la red sin firewall de por medio.
  • Una conexión de red a internet (cableada preferiblemente)
  • Debe esatar el repositorio EPEL instalado tambien.


   sudo yum install epel-release
   sudo yum update

* Nota: Si aparece un error indicando que no puede sincronizar, ejecutar lo siguiente:

   sudo dnf update -y --releasever=8
  • Conocimiento intermedio de manejo del shell en Linux. 
2. Configuración de Red y Firewall

  2.1  Usar comando nmtui para la red y hostname

Lo primero  es configurar una IP estática para el servidor DNS a configurar.
La red que estoy simulando, es 192.168.116.0/24  , en mi caso no asignaré DHCP (aún) en la red, y he decidido utilizar las IP más bajas para mis servidores, desde la 192.168.116.1-10

Ejecutar comando para llamar el network manager (esta es la practica recomendada para evitar configuraciones no estandard)


sudo nmtui










Cambiar a configuracion de IPv4 manual.

Escribir los valores deseados (notar /24 que es la mascara de subred 255.255.255.0 )
Gateway es quien da acceso a internet.
DNS sera la misma IP del servidor, debido a que más adelante se configurará el forwarder.   

Se configura el hostname del servidor DNS


  













Se reinicia la interfaz para poner los cambios en vigencia. 










---------------------------------------------------------------------------------------------------------------------
*NOTA Si estan virtualizando y el NAT no sirve y no reciben internet, tendrán que agregar otra interfaz de red que sirva de gateway , modo bridge. VirtualBox y VMware player tienen formas diferentes y misteriosas de funcionar, pueden consultar en los comentarios cualquier duda. También deberán comentar/eliminar cualquier entrada automática que genere de servidor DNS en /etc/resolv.conf









----------------------------------------------------------------------------------------------------------------------
Ejecutar el siguiente comando para recargar la consola con el nuevo hostname, y el que sigue para ver que la configuración ya está vigente.

bash
ip a | grep inet
hostname











Ahora para correr el servicio DNS en la red, el servidor debe ser accedido por los siguientes puertos:

Inbound
TCP/53.
UDP/53

2.2  Abrir puerto a la red con firewall-cmd (metodo 1)


Se deben ejecutar los comandos en el firewall para agregar la excepcion del trafico al puerto 53 (TCP y UDP) , la(s) red(es) en las que trabajara el servidor, en este caso  192.168.116.0  y finalmente recargar.

sudo firewall-cmd --zone=public --permanent --add-port=53/tcp
sudo firewall-cmd --zone=public --permanent --add-port=53/udp
sudo firewall-cmd --zone=public --permanent --add-source=192.168.116.0/24
sudo firewall-cmd --reload


2.3  Abrir puerto a la red con el archivo zones/public.xml (metodo 2)

Lo mismo del paso anterior, pero configurando el archivo de configuracion para la zona que estamos usando, en este caso,  /etc/firewalld/zones/public.xml
sudo vim /etc/firewalld/zones/public.xml
Ó si gusta mas de Nano.
sudo nano /etc/firewalld/zones/public.xml

Agregar:
Abajo del tag <description>

<source address="192.168.116.0/24"/>


Y antes del cierre de la sección </zone>


<port port="53" protocol="tcp"/>
<port port="53" protocol="udp"/>



Ejecutar para recargar politicas.


sudo firewall-cmd --reload


3.Configuración del servicio named (Bind9)

3.1 Instalación de paquetes

sudo yum install bind bind-utils -y

Donde “bind” es el software que hace de servidor DNS, y bind-utils los programas extras que sirven para consultarlo o alterar su estado (e.g. rndc)


3.2 Configuración de named (Bind9)

Lo que sigue es configurar parámetros generales del Bind , y se abre el archivo de configuración con sudo usando vim o nano .

sudo vim /etc/named.conf 

Aquí se observan opciones importantes, pero para el funcionamiento básico cómo DNS AUTHORITATIVE with Recursion solo se editarán los siguiente:

3.2.1 Socket de escucha. Siendo TCP/UDP 53 el puerto default para DNS, no queremos que responda por otras interfaces, excepto por la IP que tenemos en nuestra intranet (utilizar la propia en su ambiente).


 listen-on port 53 { 192.168.116.5; }

3.2.2 ACL para evitar accesos no autorizados. Para prevenir ataques de amplificación o de por sí consultas de redes no autorizadas, debemos especificar las que deseamos puedan consultar nuestro DNS. Se pueden colocar redes completas, o IP individuales, separados por punto y coma.


allow-query     { 192.168.116.0/24; 192.168.15.10; };

3.2.3 Deshabilitar dnssec y dejar recursion. Dnssec no lo necesitaremos en este red local.

        recursion yes;
        dnssec-enable no;
        dnssec-validation no;

3.2.4 Logs, canales y categorias. Se puede omitir este paso, sin embargo se recomienda con énfasis tener cuidado con el consumo de espacio de estos logs. Sin embargo si se desea dejar al minimo los logs que se reciben, es decir de Error y Critico unicamente, se puede usar esta configuración:


logging {
        channel default_debug {
                file "data/named.run";
                severity error;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
        category lame-servers{
                nulos;
        };
        channel nulos {
              null;
                severity info;
         };
};

Si deseas saber más información de esta configuración, pueden ver referencias al final del post.

3.2.4 Archivos de Zonas y Forwarder.

Aquí es dónde se prepara el terreno para la base de datos de registros DNS que vamos a tener en nuestra red. Es sumamente importante definir estas ubicaciones, para luego crear los archivo y llevar un control .

Las siguientes lineas se pueden agregar luego del cierre de llave ( } ) de la entrada zone “.” IN { type hint;

- Las bases de datos de nuestros registros DNS los colocaremos en el folder /var/named/

- Se define el archivo de la zona principal que será nuestro dominio en nuestra red:

zone "plecaetc.local" IN {
        type master;
        file "/var/named/plecaetc.local.zone";
        allow-update { none; };
};

-Se define el archivo de la zona de reversa de nuestro dominio en nuestra red (sirve para lo mismo que el anterior, pero en reversa, es decir de IP a hostname )  :

zone "116.168.192.in-addr.arpa" IN {
        type master;
        file "/var/named/116.168.192.in-addr.arpa";
        allow-update { none; };
};

-Finalmente se coloca un forwarder, puede ser un DNS público de google, en este caso tenemos un firewall con función de DNS o puede ser otro servidor entre nuestra red e internet, que tiene la IP:

zone "." IN {
        type forward;
        forwarders {192.168.116.2;};

};

*Nota: Hasta este punto aún está abajo el servicio, ya que se debe levantar hasta que los archivos de base de datos de los records DNS ya estén con la estructura necesaria, que se hará a continuación.

5.Configuración de zona:

  5.1  Zona principal

Creamos el archivo (bd) de los records de nuestra zona principal, usando nano o vim  en sudo .

sudo nano  /var/named/plecaetc.local.zone

Y se escribe la siguiente información que contiene la estructura aceptada por Bind:
Los comentarios se hacen con “; “  al inicio o final de una linea. PRESTARLES ATENCIÓN.

$TTL    86400 ; 24 horas, se puede escribir como 24h or 1d tambien
$ORIGIN plecaetc.local. ; nuestro dominio en la red en que este DNS funcionará
@  1D  IN  SOA ns1.plecatc.local. hostmaster.plecaetc.local. (
                              2002022401 ; serial
                              3H ; refresh
                              15 ; retry
                              1w ; expire
                              3h ; nxdomain ttl
                             )
       IN  NS     ns1.plecaetc.local. ; define que cual será el nameserver del domain
       IN  MX  10 mail.plecaetc.local. ; record MX de nuestro servidor de correo local (en el siguiente post)
; records A de nuestros servidores y equipos en la red
ns1      IN  A      192.168.116.5  ;name server
www    IN  A      192.168.116.6  ;web server (IP simulada por el momento)
mail                   IN  A       192.168.116.4 ;mail server (IP reservada para el siguiente post)
; domain hosts que no son servidores
GatewayPC        IN  A      192.168.116.2
PC1                    IN  A      192.168.116.100
PC2                    IN  A      192.168.116.101

Si deseas saber más información de esta configuración, pueden ver referencias al final del post. PTR (reverse lookup)

  5.2  PTR (reverse lookup)

sudo nano  /var/named/116.168.192.in-addr.arpa


Hacer lo mismo que el paso anterior, pero con la siguiente plantilla, que es para Reverse Lookup Zones Pointers , o busqueda de zona en reversa (de IP a host)

$TTL    86400
$ORIGIN 116.168.192.IN-ADDR.ARPA.
@  1D  IN        SOA ns1.plecaetc.local.    hostmaster.plecaetc.local. (
                              2002022401 ; serial
                              3H ; refresh
                              15 ; retry
                              1w ; expire
                              3h ; minimum
                             )
; Name servers para la zona
       IN  NS ns1.plecaetc.local.
; servidores
5      IN  PTR    ns1.plecaetc.local.
6      IN  PTR    www.plecaetc.local
4      IN  PTR    mail.plecaetc.local.

; no servers solo los demas hosts
2      IN  PTR    GatewayPC.plecaetc.local
100  IN  PTR    PC1.plecaetc.local
101  IN  PTR    PC2.plecaetc.local

Si deseas saber más información de esta configuración, pueden ver referencias al final del post.

  5.3  Enable e inicio del servicio.

Se guardan los cambios y Finalmente Habilitamos el inicio automático, y arrancamos el servicio

systemctl enable named
sudo systemctl start named
sudo systemctl status named


6.Pruebas:

6.1 Desde el mismo servidor.

6.2 Desde otra PC Linux.

Configurar la red , como se guste, en este caso para fines practicos en modo gráfico.






6.3 Desde otra PC Windows.














Diferencias con Ubuntu


1-Nombre del servicio es bind9  en vez de named 

2-Los paquetes a instalar son a bind9 bind9-utils bind9-doc en el apt-get install.

3-El archivo de configuracion en CentOS es uno solo y está en  /etc/named.conf, en Debian/Ubuntu van hacia:

/etc/bind/named.conf.local

/etc/bind/named.conf.options

4-Las zonas, las podemos poner donde queremos y estipularlo en el archivo conf, pero usualmente van en CentOS al directorio que aparece en el post, y en Ubuntu hacia:

/etc/bind/zones (y existe un file /db.local y db.127 para PTR de templates)

Referencias

BIND DNS logging
Understanding Forward and Reverse Lookup Zones in DNS
BIND DNS Zones Template
BIND Best Practices Recursive
LPIC2 study guide, Sybex (ISBN: 978-1-119-15080-0, Sept 2016)
Chapter 8 Directing DNS page 371



No hay comentarios:

Publicar un comentario