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..
•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
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
- Conocimiento intermedio de manejo del shell en Linux.
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
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.
Se configura el hostname del servidor
DNS
---------------------------------------------------------------------------------------------------------------------
*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
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>
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
sudo firewall-cmd --reload
3.Configuración del servicio named (Bind9)
3.1 Instalación de paquetes
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.
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).
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.
3.2.3 Deshabilitar dnssec y dejar recursion. Dnssec no lo necesitaremos en este red local.
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:
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.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:
5.3 Enable e inicio del
servicio.
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)
No hay comentarios:
Publicar un comentario