domingo, 26 de abril de 2020

CentOS 8 | Ubuntu 20.04: Configuracion de Red





Configurando la Red básica.

Bueno, nada extravagante, solo una guia rápida para la configuración de red en
Ubuntu Sever 20.04( 18 y19 tambien)  CentOS 8 ( CentOS7 y RedHat 7/8 tambien ),

Contenido

1. Ubuntu 20.04 

1.X Comandos para obtener valores de red.
  1.1 Metodo  Netplan (mejor práctica)
  1.2 Metodo  Manual (obsoleto, 19 hacia abajo)
  1.3 Cambiar a Network Manager (mismo que Centos - mi favorito personal)

2. CentOS 8
2.X Comandos para obtener valores de red.
  2.1  Metodo Network Manager [nmtui]  (mejor práctica)
  2.2  Metodo  Manual (obsoleto)

1. Ubuntu 20.04 

Por default se trabaja con DHCP y todo se autoasigna, por lo que la configuración será para IP manual..

1.X Comandos para obtener valores asignados:

Ver IP actual
ip a | grep inet | grep "/24"
Ver DNS actual
systemd-resolve --status | grep "Curr"
Ver Gateway actual
route -n | grep UG






----------------

1.1 Metodo  Netplan 

El metodo nuevo a partir de 18.04, y que se considera ser la mejor práctica.

Los archivos de configuración estan se pueden ver ejecutando:
ls -l /etc/netplan/*.yaml

Dependiendo la version (Server o Desktop) se mostrará algo como
Server: 00-installer-config.yaml 01-netcfg.yaml 
Desktop:  00-installer-config.yaml o  01-network-manager-all.yaml.

Cotenido del file:
cat /etc/netplan/00-installer-config.yaml










Para editarlo entramos en sudo con nano o vim (es decisión personal):

sudo vim /etc/netplan/00-installer-config.yaml

Y le cambiamos/editamos los valores.(en azul comentarios explicando el contenido)


network:
  ethernets:
    # el nombre de la interfaz que tenemos,en mi caso es ens33,  
    # que se puede ver en el inciso anterior 1.X
    ens33:
      dhcp4: no
      # direccion IP y mascara de subred
      addresses: [192.168.116.4/24]
      # Set default gateway
      gateway4: 192.168.116.2
      nameservers:
        # Nuestro servidor DNS (Utilizar el que sea correcto)
        addresses: [192.168.116.5]
      dhcp6: no
  version: 2
  renderer: networkd

Se ejecuta el comando que prueba nuestra configuración (darle Yes / y ):
sudo netplan try

Y si todo sale bien
sudo netplan apply

Cambiar el hostname de nuestro servidor:

Usando Systemd (Recomendado)

sudo hostnamectl set-hostname nuevo_hostname

O manualmente.

sudo nano /etc/hostname

#por ejemplo yo utilice el siguiente.
mail.plecaetc.local 

Crear el Symlink al archivo correcto que contiene el DNS que estamos usando.

sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf



Guardar los cambios.

Se ejecutan los comandos de inciso 1.X nuevamente para comprobar:










1.2 Metodo  Manual

Metodo antiguo, Modo Rambo , igualmente funciona para 19 hacia abajo, pero este metodo ya está deprecado por Netplan, no usarlo más de ser posible
Sin embargo, para fines academicos se hace de la siguiente forma:

El archivo de configuración se puede abrir ejecutando (vim o nano):

sudo vim /etc/network/interfaces

#Auto significa que Nuestra Interfaz levanta automatico con el OS
#Usar comandos de inciso 1.X para identificar nuestra interfaz
auto ens33
#La interface que se está configurando
iface ens33 inet static
#la IPv4 que queremos usar
address 192.168.116.4
#mascara de subred, la que se uso es equivalente a /24
netmask 255.255.255.0
#el DNS server que usaremos (Colocar el que sea correcto)
dns-servers 192.168.116.5
# puerta de enlace predeterminada
gateway 192.168.116.2

Se guardan los cambios, y se ejecuta

sudo ifdown ens330 && sudo ifup ens330




1.3 Cambiar a Network Manager (Mismo que CentOS)

Esta es mi opcion favorita personal, ya que es Sumamente mas facil, rapido, consistentente  y unificado, desde el DNS , hasta hostname, interfaces, etc, todo se hace desde alli.

Y lo mejor, es que es muy rapido hacerlo:

Descargar el Paquete Network Manager

sudo apt install NetworkManager 

Editar el render del NetPlan, para que tome los valores de la configuracion en el NetworkManager.

sudo vim /etc/netplan/00-installer-config.yaml


network:
  version: 2
  renderer: NetworkManager

Guardar cambios y recergar la red.

sudo netplan apply

Luego de esto proceder a configurar segun el paso 2.1


---------------------------------------------------------------------------------------------------------


2. CentOS/RedHat 8

2.X Comandos para ver valores asignados:

Ver IP actual
ip a | grep inet | grep "/24"
Ver DNS actual
systemd-resolve --status | grep "Curr"
Ver Gateway actual
route -n | grep UG



2.1  Metodo Network Manager [nmtui] (Recomendado)

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 o (255.255.255.0) , en mi caso no asignaré DHCP (aún) en la red, y he decidido utilizar las IP más bajas.

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 la IP de nuestro servidor DNS (Colocar la que sea correcta).



Se configura el hostname del servidor, a lo que sea deseado.


  












Se reinicia la interfaz para poner los cambios en vigencia. 










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










2.2 Metodo Manual (obsoleto)

Dificilmente nos encontraremos en esta situación, pero puede que nos toque resolver alguna situación dónde alguien lo mal configuró.

Abrir el file (que corresponda a nuestra interface , confirmar en el incisco 2.X)
Con nano o vim 

vim /etc/sysconfig/network-scripts/ifcfg-ens33

Y editamos el contenido, a manera que quede de la siguiente forma segun los valores de nuestra red. (en azul comentarios explicando el contenido)


Nuestro ID unico de la interfaz, esto ya viene automatico. 
UUID=11ced30a-a14d-484b-a6a2-88622658812f
La interfaz de nuestro equipo, la que estamos configurando.
DEVICE=ens33
Que levante con el Booteo automaticamente .
ONBOOT=yes
IP address.
IPADDR=192.168.116.4
Mascara de Subred.
PREFIX=24
Servidor DNS.
DNS1=192.168.116.5
Domain name.
DOMAIN=plecaetc.local
Puerta de enlace predeterminada.

GATEWAY=192.168.116.2

Reiniciar la red, ejecutando:

service network restart

Y comprobar los resultados ejecutando comando de inciso 2.X


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