Servidor de Infraestructura en CentOS 7

0
160

¡Hola amigas y amigos!

El objetivo de este documento es brindar una guía para la instalación y configuración de los Servicios Básicos de Infraestructura para un red de computadoras basados en el Internet System Consortium BIND DNS Server, Internet System Consortium DHCP Server y el Network TimeProtocol NTP, sobre el sistema operativo CentOS 7.

Recomendamos encarecidamente la lectura de los artículos introductorios “DNS – Introducción” e “Introducción al protocolo DHCP” antes de sumergirse en éste documento. Wikipedia ofrece una buena introducción al servicio NTP “Network Time Protocol”, por lo que no la escribiremos.

Instalación del sistema operativo CentOS 7

Partimos de la instalación base de un servidor sobre CentOS 7 sin interfaz gráfica. En la pantalla “SELECCIÓN SOFTWARE”, recomendamos elegir en la columna izquierda “Entorno Base” la opción correspondiente a un “Servidor de infraestructura”, mientras que en la columna derecha “Complementos para el Entorno Seleccionado” seleccionar la casilla de verificación “Servidor de nombres DNS”. Los servidores NTP y DHCP lo instalaremos posteriormente.

Después que termine la instalación del sistema operativo base y de los paquetes que seleccionamos, recomendamos revisar el directorio /usr/share/doc/bind-9.9.4/, el cual contiene una buena cantidad de documentación sobre el BIND. El nombre de la carpeta bind-9.9.4 variará acorde a la versión que se instale.

  • Datos generales del equipo:
Nombre del dominio:     swl.fan
Nombre del servidor:    master.swl.fan
Dirección IP:           192.168.10.5
Máscara de subred:      255.255.255.0
Gateway:                192.168.10.1
  • Nombre del host e interfaz de red ens32:
[root@master ~]# nano /etc/hosts
127.0.0.1       localhost localhost.localdomain localhost4 localhost4.localdomain4
::1             localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.5    master.swl.fan    master

[root@master ~]# nano /etc/hostname
master

[root@master ~]# nano /etc/sysconfig/network-scripts/ifcfg-ens32
DEVICE=ens32
ONBOOT=yes
BOOTPROTO=static
HWADDR=00:0c:29:47:1a:30
NM_CONTROLLED=no # NO controlada por el NetworkManager
IPADDR=192.168.10.5
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DOMAIN=swl.fan
DNS1=127.0.0.1

Si modificamos algún parámetro en la configuración de la interfaz:

[root@master ~]# ifdown ens32 && ifup ens32
  • Inhabilitamos el servicio NetworkManager. No es obligatorio:
[root@master ~]# systemctl disable NetworkManager
[root@master ~]# systemctl status NetworkManager
● NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:NetworkManager(8)
[root@master ~]# nano /etc/resolv.conf
nameserver 127.0.0.1
search swl.fan
  • Repositorios:
[root@master ~]# cd /etc/yum.repos.d/
[root@master yum.repos.d]# ls
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo
CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo

Es saludable leer el contenido de los archivos originales de declaración de los repositorios recomendados por CentOS. Los cambios que aquí realizamos se deben a que trabajamos con repositorios locales para mayor rapidez en la instalación de paquetes.

[root@master yum.repos.d]# mkdir originales
[root@master yum.repos.d]# mv CentOS-* originales/

[root@master yum.repos.d]# nano centos.repo
[centos-base]
name=CentOS-$releasever
baseurl=http://192.168.10.1/repos/centos/7/base/
gpgcheck=0
enabled=1

[centos-updates]
name=CentOS-$releasever
baseurl=http://192.168.10.1/repos/centos/7/updates/x86_64/
gpgcheck=0
enabled=1

[root@master yum.repos.d]# yum clean all
[root@master yum.repos.d]# yum update

Si recibimos el mensaje “No packages marked for update” (“No (existen) paquetes marcados para actualizar”) indica que al declarar los repositorios más actualizados a nuestra disposición durante la instalación, se instalaron precisamente los paquetes mas recientes, o que ya actualizamos a todos los paquetes.

BIND

En el caso de que NO seleccionamos el BIND durante la instalación del sistema operativo, lo podemos instalar ahora mediante el comando yum install bind. En muchas distribuciones UNIX®/Linux, el servicio DNS instalado mediante el BIND se denomina namedName Daemon”. En CentOS 7 el named se instala inhabilitado por defecto.

[root@master ~]# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

[root@master ~]# systemctl enable named
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.

[root@master ~]# systemctl start named
[root@master ~]# systemctl status named
[root@master ~]# systemctl restart named
[root@master ~]# systemctl status named

Después que habilitamos el servicio named y lo iniciamos por vez primera, la salida del comando systemctl status named puede mostrar errores. Cuando reiniciemos el servicio, el named creará todos los archivos de configuración que, por defecto, le son necesarios para su correcto funcionamiento. Cuando ejecutemos nuevamente systemctl status named no se mostrarán mas errores. Recomendamos leer con detenimiento la salida de cada comando ejecutado.

  • Clave TSIG para que el DHCP actualice dinamicamente al DNS:

A modo de ejemplo, en vez de generar la clave TSIG – “Transaction SIGnature” para las actualizaciones dinámicas del DNS por parte del DHCP, copiaremos la misma clave rndc.key como dhcp.key.

[root@master ~]# cp /etc/rndc.key /etc/dhcp.key

[root@master ~]# nano /etc/dhcp.key
key "dhcp-key" {
        algorithm hmac-md5;
        secret "UMxN/5rKh82gWTeONdR09Q==";
};

Para que el named pueda leer el archivo recién copiado, modificamos el propietario del grupo:

[root@master ~]# chown root:named /etc/dhcp.key

[root@master ~]# ls -l /etc/rndc.key /etc/dhcp.key
-rw-r-----. 1 root named 77 ago 26 13:26 /etc/dhcp.key
-rw-r-----. 1 root named 77 ago 26 13:20 /etc/rndc.key

Pequeños detalles como el anterior son los que nos pueden volver locos tratando de averiguar ¿donde…. #@X&^ está el problema? con algunos adjetivos más que no escribimos por respeto al Respetable.

  • Archivo principal de configuración del named: /etc/named.conf

Antes de modificar, guardamos el archivo original bajo otro nombre.

[root@master ~]# cp /etc/named.conf /etc/named.conf.original

Las modificaciones realizadas con respecto al original se muestran en negritas.

[root@master ~]# nano /etc/named.conf
//
// 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.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

// Access Control List con las redes de trabajo
acl mired {
    127.0.0.0/8;
    192.168.10.0/24;
};

options {
    // El named también escuchará por la interfaz ens32
    listen-on port 53 { 127.0.0.1; 192.168.10.5; };
    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";

    // forwarders {
    //    0.0.0.0;
    //    1.1.1.1;
    // };

    // Solo permito consultas a mi ACL mired
    allow-query     { mired; };

    // Para comprobar con el comando dig swl.fan axfr
    // desde la estación de trabajo del SysAdmin y el localhost solamente
    // No tenemos servidores DNS esclavos. No lo necesitamos... hasta ahora.
    allow-transfer { localhost; 192.168.10.1; };

    /*
     - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
     - If you are building a RECURSIVE (caching) DNS server, you need to enable
       recursion.
     - If your recursive DNS server has a public IP address, you MUST enable access
       control to limit queries to your legitimate users. Failing to do so will
       cause your server to become part of large scale DNS amplification
       attacks. Implementing BCP38 within your network would greatly
       reduce such attack surface
    */
    // Queremos un servidor AUTORITARIO
    recursion no;

        // Servidor NO conectado a Internet
    dnssec-enable no;
    dnssec-validation no;

    /* Path to ISC DLV key */
    bindkeys-file "/etc/named.iscdlv.key";

    managed-keys-directory "/var/named/dynamic";

    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
};

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";

// Incluimos la clave TSIG para las actualizaciones dinámicas del DNS
// a cargo del DHCP
include "/etc/dhcp.key";

// Declaración del nombre, tipo, ubicación, y permiso de actualización
// de las Zonas de Registros DNS
// Ambas Zonas son MAESTRAS
zone "swl.fan" {
    type master;
    file "dynamic/db.swl.fan";
    allow-update { key dhcp-key; };
};

zone "10.168.192.in-addr.arpa" {
    type master;
    file "dynamic/db.10.168.192.in-addr.arpa";
    allow-update { key dhcp-key; };
};
  • Comprobamos la sintaxis:
[root@master ~]# named-checkconf 
[root@master ~]#

Como el comando anterior no devuelve nada, la sintaxis está OK. Sin embargo, si ejecutamos el mismo comando, pero con la opción -z, la salida será:

[root@master ~]# named-checkconf -z
zone localhost.localdomain/IN: loaded serial 0
zone localhost/IN: loaded serial 0
zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
zone 0.in-addr.arpa/IN: loaded serial 0
zone swl.fan/IN: loading from master file dynamic/db.swl.fan failed: file not found
zone swl.fan/IN: not loaded due to errors.
_default/swl.fan/IN: file not found
zone 10.168.192.in-addr.arpa/IN: loading from master file dynamic/db.10.168.192.in-addr.arpa failed: file not found
zone 10.168.192.in-addr.arpa/IN: not loaded due to errors.
_default/10.168.192.in-addr.arpa/IN: file not found

Por supuesto que los errores que se producen se deben a la ausencia de los archivos de Zonas de Registros DNS en nuestro dominio. Para más información sobre el comado named-checkconf, ejecute man named-checkconf antes de buscar cualquier otra información en Internet. Le aseguro que se ahorrará una buena cantidad de tiempo.

  • Creamos el archivo de la Zona Directa swl.fan:

Como plantilla para crear el archivo de datos de la zona, escogemos el archivo /var/named/named.empty, o el /usr/share/doc/bind-9.9.4/sample/var/named/named.empty. Ambos archivos son idénticos.

[root@master ~]# cp /var/named/named.empty /var/named/dynamic/db.swl.fan

[root@master ~]# nano /var/named/dynamic/db.swl.fan
$TTL 3H
@    IN SOA  master.swl.fan.    root.master.swl.fan. (
                                        1    ; serial
                                        1D    ; refresh
                                        1H    ; retry
                                        1W    ; expire
                                        3H )    ; minimum or
                                                ; Negative caching time to live
;
@               IN    NS    master.swl.fan.
@               IN    MX    10 mail.swl.fan.
@        IN    TXT    "www.gigainside.com. Blog dedicado al Software Libre"
;
sysadmin        IN    A    192.168.10.1
ad-dc           IN    A    192.168.10.3
fileserver    IN    A    192.168.10.4
master          IN    A    192.168.10.5
proxyweb        IN    A    192.168.10.6
blog            IN    A    192.168.10.7
ftpserver    IN    A    192.168.10.8
mail            IN    A    192.168.10.9

[root@master ~]# named-checkzone swl.fan /var/named/dynamic/db.swl.fan
zone swl.fan/IN: loaded serial 1
OK
  • Creamos el archivo de la Zona Inversa 10.168.192.in-addr.arpa:
[root@master ~]# nano /var/named/dynamic/db.10.168.192.in-addr.arpa
$TTL 3H
@    IN SOA  master.swl.fan.    root.master.swl.fan. (
                                        1    ; serial
                                        1D    ; refresh
                                        1H    ; retry
                                        1W    ; expire
                                        3H )    ; minimum or
                                                ; Negative caching time to live
;
@               IN    NS    master.swl.fan.
;
1    IN    PTR     sysadmin.swl.fan.
3    IN    PTR     ad-dc.swl.fan.
4    IN    PTR     fileserver.swl.fan.
5    IN    PTR     master.swl.fan.
6    IN    PTR     proxyweb.swl.fan.
7    IN    PTR     blog.swl.fan.
8    IN    PTR     ftpserver.swl.fan.
9    IN    PTR     mail.swl.fan.

[root@master ~]# named-checkzone 10.168.192.in-addr.arpa /var/named/dynamic/db.10.168.192.in-addr.arpa
zone 10.168.192.in-addr.arpa/IN: loaded serial 1
OK
  • Ajustamos permisos en archivos de zonas:
[root@master ~]# ls -l /var/named/dynamic/
total 12
-rw-r--r--. 1 root  root  685 ago 26 15:14 db.10.168.192.in-addr.arpa
-rw-r-----. 1 root  root  811 ago 26 15:12 db.swl.fan
-rw-r--r--. 1 named named 720 ago 26 15:21 managed-keys.bind

[root@master ~]# chown named:named /var/named/dynamic/db.*
[root@master ~]# chmod o+r /var/named/dynamic/db.swl.fan 
[root@master ~]# ls -l /var/named/dynamic/
total 12
-rw-r--r--. 1 named named 685 ago 26 15:14 db.10.168.192.in-addr.arpa
-rw-r--r--. 1 named named 811 ago 26 15:12 db.swl.fan
-rw-r--r--. 1 named named 720 ago 26 15:21 managed-keys.bind
  • Antes de reiniciar al named comprobamos su configuración:

Hasta tanto no estemos seguros de que el archivo named.conf y los archivos de zonas no estén correctamente configurados, sugerimos no reiniciar el demonio named. Si lo hacemos y posteriormente modificamos un archivo de zona, debemos incrementar en 1 el número de serie de la zona modificada. Observemos el “.” al final de los nombres de dominio y de hosts.

[root@master ~]# named-checkconf
[root@master ~]# named-checkconf -z
[root@master ~]# named-checkconf -zp

De seguir el procedimiento de modificar el named.conf acorde a nuestras necesidades y comprobar; crear cada archivo de zona y comprobarla, dudamos que tengamos que enfrentar problemas mayores de configuración.

  • Obtuvimos comprobaciones satisfactorias. Reiniciemos el BIND – named:
[root@master ~]# systemctl restart named.service
[root@master ~]# systemctl status named.service

De obtener cualquier tipo de error en la salida del último comando, debemos revisar la configuración completa del named, reiniciar el named.service y volver a comprobar su status. Si los errores desaparecen, entonces el servicio se configuró correctamente.

Ejemplo de salida correcta del status:

 named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
   Active: active (running) since sáb 2017-08-26 15:25:27 EDT; 6min ago
  Process: 1724 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 1735 ExecStart=/usr/sbin/named -u named $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 1733 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z /etc/named.conf; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
 Main PID: 1738 (named)
   CGroup: /system.slice/named.service
           └─1738 /usr/sbin/named -u named

ago 26 15:25:27 master named[1738]: zone 0.in-addr.arpa/IN: loaded serial 0
ago 26 15:25:27 master named[1738]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
ago 26 15:25:27 master named[1738]: zone 10.168.192.in-addr.arpa/IN: loaded serial 1
ago 26 15:25:27 master named[1738]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
ago 26 15:25:27 master named[1738]: zone localhost.localdomain/IN: loaded serial 0
ago 26 15:25:27 master named[1738]: zone swl.fan/IN: loaded serial 1
ago 26 15:25:27 master named[1738]: zone localhost/IN: loaded serial 0
ago 26 15:25:27 master named[1738]: all zones loaded
ago 26 15:25:27 master named[1738]: running
ago 26 15:25:27 master systemd[1]: Started Berkeley Internet Name Domain (DNS).

systemd ubica el archivo de inicio del named en /var/lib/systemd/system/named.service. Las variables de entorno – environment se declaran en el archivo /etc/sysconfig/named.

  • Arreglamos el Firewall para el DNS:

Debemos adicionar el servicio dns en el Firewall -puertos 53 tcp y 53 udp- para que el BIND reciba las consultas desde otros equipos conectados a la red LAN.

[root@master ~]# man firewall-cmd
[root@master ~]# firewall-cmd --state
running
[root@master ~]# firewall-cmd --get-active-zones
public
  interfaces: ens32
[root@master ~]# firewall-cmd --info-zone public
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens32
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

[root@master ~]# firewall-cmd --zone=public --add-service=dns --permanent
success

[root@master ~]# firewall-cmd --reload
success

[root@master ~]# firewall-cmd --info-zone public
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens32
  sources:
  services: dhcpv6-client dns ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:
  • Consultas para comprobar:

Las comprobaciones se pueden ejecutar en el mismo servidor o en una máquina conectada a la LAN. Preferimos ejecutarlas desde el equipo sysadmin.swl.fan al cual dimos permiso expreso para que pueda recibir Transferencias de Zonas desde master.swl.fan. El archivo /etc/resolv.conf de ese equipo es el siguiente:

buzz@sysadmin:~$ cat /etc/resolv.conf 
# Generated by NetworkManager
search swl.fan
nameserver 192.168.10.5

buzz@sysadmin:~$ dig swl.fan axfr

; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> swl.fan axfr
;; global options: +cmd
swl.fan.        10800    IN    SOA    master.swl.fan. root.master.swl.fan. 1 86400 3600 604800 10800
swl.fan.        10800    IN    NS    master.swl.fan.
swl.fan.        10800    IN    MX    10 mail.swl.fan.
swl.fan.        10800    IN    TXT    "www.gigainside.com. Blog dedicado al Software Libre"
ad-dc.swl.fan.        10800    IN    A    192.168.10.3
blog.swl.fan.        10800    IN    A    192.168.10.7
fileserver.swl.fan.    10800    IN    A    192.168.10.4
ftpserver.swl.fan.    10800    IN    A    192.168.10.8
mail.swl.fan.        10800    IN    A    192.168.10.9
master.swl.fan.        10800    IN    A    192.168.10.5
proxyweb.swl.fan.    10800    IN    A    192.168.10.6
sysadmin.swl.fan.    10800    IN    A    192.168.10.1
swl.fan.        10800    IN    SOA    master.swl.fan. root.master.swl.fan. 1 86400 3600 604800 10800
;; Query time: 14 msec
;; SERVER: 192.168.10.5#53(192.168.10.5)
;; WHEN: Sat Aug 26 15:55:15 EDT 2017
;; XFR size: 13 records (messages 1, bytes 386)

buzz@sysadmin:~$ dig 10.168.192.in-addr.arpa axfr

; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> 10.168.192.in-addr.arpa axfr
;; global options: +cmd
10.168.192.in-addr.arpa. 10800    IN    SOA    master.swl.fan. root.master.swl.fan. 1 86400 3600 604800 10800
10.168.192.in-addr.arpa. 10800    IN    NS    master.swl.fan.
1.10.168.192.in-addr.arpa. 10800 IN    PTR    sysadmin.swl.fan.
3.10.168.192.in-addr.arpa. 10800 IN    PTR    ad-dc.swl.fan.
4.10.168.192.in-addr.arpa. 10800 IN    PTR    fileserver.swl.fan.
5.10.168.192.in-addr.arpa. 10800 IN    PTR    master.swl.fan.
6.10.168.192.in-addr.arpa. 10800 IN    PTR    proxyweb.swl.fan.
7.10.168.192.in-addr.arpa. 10800 IN    PTR    blog.swl.fan.
8.10.168.192.in-addr.arpa. 10800 IN    PTR    ftpserver.swl.fan.
9.10.168.192.in-addr.arpa. 10800 IN    PTR    mail.swl.fan.
10.168.192.in-addr.arpa. 10800    IN    SOA    master.swl.fan. root.master.swl.fan. 1 86400 3600 604800 10800
;; Query time: 6 msec
;; SERVER: 192.168.10.5#53(192.168.10.5)
;; WHEN: Sat Aug 26 15:58:41 EDT 2017
;; XFR size: 11 records (messages 1, bytes 329)

buzz@sysadmin:~$ dig IN SOA swl.fan
buzz@sysadmin:~$ dig IN MX swl.fan
buzz@sysadmin:~$ dig IN TXT swl.fan
buzz@sysadmin:~$ host master
master.swl.fan has address 192.168.10.5
buzz@sysadmin:~$ host sysadmin
sysadmin.swl.fan has address 192.168.10.1

... Y cualquier otra comprobación que necesitemos
  • Hasta aquí, tenemos la base para un servidor DNS en nuestra red. Esperamos hayan disfrutado todo el procedimiento el cual fue bastante sencillo, ¿no?. 😉

NTP

Una buena explicación sobre el Network Time Protocol la puede encontrar en la Wikipedia.

  • Instalamos y habilitamos el servicio:
[root@master ~]# yum install ntp
[root@master ~]# systemctl enable ntpd
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.
[root@master ~]# systemctl status ntpd

[root@master ~]# less /etc/ntp.conf.rpmnew
  • Configuramos:
[root@master ~]# nano /etc/ntp.conf
# Servidores configurados durante la instalación
# si es que así lo hicimos. Es el equipo remoto con el cual
# sincroniza su reloj el servidor master.swl.fan.
server 192.168.10.1 iburst

# Para mas información, consulte las páginas del manual de:
# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).

driftfile /var/lib/ntp/drift

# Permitir sincronizar con la fuente de tiempo, pero no
# permitir que la fuente consulte o modifique éste servicio
restrict default nomodify notrap nopeer noquery

# Permitir todo el acceso a la interfaz Loopback
restrict 127.0.0.1
restrict ::1

# Usar los servidores públicos del proyecto pool.ntp.org
# Si desea unirse al proyecto visite
# (http://www.pool.ntp.org/join.html).

# broadcast 192.168.10.255 autokey    # broadcast server
# broadcastclient            # broadcast client
# broadcast 224.0.1.1 autokey        # multicast server
# multicastclient 224.0.1.1        # multicast client
# manycastserver 239.255.254.254    # manycast server
# manycastclient 239.255.254.254 autokey # manycast client
broadcast 192.168.10.255

# Habilitar la criptografía pública.
#crypto
includefile /etc/ntp/crypto/pw

# Archivo de clave que contiene las claves e identificadores de claves
# utilizados al operar con criptografía simétrica de claves
keys /etc/ntp/keys

# Especificar los identificadores de claves de confianza.
#trustedkey 4 8 42

# Especificar el identificador de clave a utilizar con la utilidad ntpdc.
#requestkey 8

# Especificar el identificador de clave a utilizar con la utilidad ntpq.
#controlkey 8

# Habilitar la escritura de los registros de estadísticas.
#statistics clockstats cryptostats loopstats peerstats

# Inhabilitar el monitor de secesos para prevenir la amplificación de
# ataques utilizando el comando ntpdc monlist, cuando la restricción
# por defecto no incluye la bandera noquery. Lea la CVE-2013-5211
# para mas detalles.
# Nota: El Monitor no se inhabilita con la bandera de restricción limitada.
disable monitor
  • Iniciamos el servicio:
[root@master ~]# systemctl start ntpd
[root@master ~]# systemctl status ntpd
  • Sincronizamos con el equipo sysadmin.swl.fan – 192.168.10.1:
[root@master ~]# ntpdate -u sysadmin
26 Aug 16:18:56 ntpdate[2560]: adjust time server 192.168.10.1 offset -0.000083 sec
  • Arreglamos el Firewall para el NTP:
[root@master ~]# firewall-cmd --zone=public --add-service=ntp --permanent
success
[root@master ~]# firewall-cmd --reload
success
[root@master ~]# firewall-cmd --info-zone public
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens32
  sources:
  services: dhcpv6-client dns ntp ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:
  • Probamos a sincronizar desde otro equipo:
buzz@sysadmin:~$ ssh root@gigainside.com
Password for root@gigainside:
Last login: Sat Aug 26 16:20:00 2017
FreeBSD 10.1-RELEASE (GENERIC) #0 r274401: Tue Nov 11 21:02:49 UTC 2014

Welcome to FreeBSD!

Release Notes, Errata: https://www.FreeBSD.org/releases/
Security Advisories:   https://www.FreeBSD.org/security/
FreeBSD Handbook:      https://www.FreeBSD.org/handbook/
FreeBSD FAQ:           https://www.FreeBSD.org/faq/
Questions List: https://lists.FreeBSD.org/mailman/listinfo/freebsd-questions/
FreeBSD Forums:        https://forums.FreeBSD.org/

Documents installed with the system are in the /usr/local/share/doc/freebsd/
directory, or can be installed later with:  pkg install en-freebsd-doc
For other languages, replace "en" with a language code like de or fr.

Show the version of FreeBSD installed:  freebsd-version ; uname -a
Please include that output and any error messages when posting questions.
Introduction to manual pages:  man man
FreeBSD directory layout:      man hier

Edit /etc/motd to change this login announcement.

root@gigainside:~ # ntpdate -u master.swl.fan
26 Aug 16:38:02 ntpdate[1520]: adjust time server 192.168.10.5 offset 0.000582 sec

El equipo con el sistema operativo FreeBSD 10.1 se sincronizó correctamente.

DHCP

  • Instalamos:
[root@master ~]# yum install dhcp
----
Instalado:
  dhcp.x86_64 12:4.2.5-42.el7.centos                                                                                               
¡Listo!
  • Configuramos:
[root@master ~]# nano /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
ddns-update-style interim;
ddns-updates on;
ddns-domainname "swl.fan.";
ddns-rev-domainname "in-addr.arpa.";
ignore client-updates;

authoritative;

option ip-forwarding off;
option domain-name "swl.fan";

include "/etc/dhcp.key";

zone swl.fan. {
        primary 127.0.0.1;
        key dhcp-key;
}
zone 10.168.192.in-addr.arpa. {
        primary 127.0.0.1;
        key dhcp-key;
}

shared-network redlocal {
        subnet 192.168.10.0 netmask 255.255.255.0 {
                option routers 192.168.10.1;
                option subnet-mask 255.255.255.0;
                option broadcast-address 192.168.10.255;
                option domain-name-servers 192.168.10.5;
                option ntp-servers 0.master.swl.fan, 1.sysadmin.swl.fan;
                range 192.168.10.30 192.168.10.250;
        }
}
# FIN dhcpd.conf
  • Comprobamos el archivo de configuración:
[root@master ~]# dhcpd -t
Internet Systems Consortium DHCP Server 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file
  • Habilitamos e iniciamos el servicio:
[root@master ~]# systemctl enable dhcpd
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.

[root@master ~]# systemctl start dhcpd

[root@master ~]# systemctl status dhcpd
 dhcpd.service - DHCPv4 Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; enabled; vendor preset: disabled)
   Active: active (running) since sáb 2017-08-26 17:07:45 EDT; 6s ago
     Docs: man:dhcpd(8)
           man:dhcpd.conf(5)
 Main PID: 2801 (dhcpd)
   Status: "Dispatching packets..."
   CGroup: /system.slice/dhcpd.service
           └─2801 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -gr...

ago 26 17:07:45 master dhcpd[2801]: Internet Systems Consortium DHCP Server....5
ago 26 17:07:45 master dhcpd[2801]: Copyright 2004-2013 Internet Systems Co...m.
ago 26 17:07:45 master dhcpd[2801]: All rights reserved.
ago 26 17:07:45 master dhcpd[2801]: For info, please visit https://www.isc....p/
ago 26 17:07:45 master dhcpd[2801]: Not searching LDAP since ldap-server, l...le
ago 26 17:07:45 master dhcpd[2801]: Wrote 0 leases to leases file.
ago 26 17:07:45 master dhcpd[2801]: Listening on LPF/ens32/00:0c:29:47:1a:3...al
ago 26 17:07:45 master dhcpd[2801]: Sending on   LPF/ens32/00:0c:29:47:1a:3...al
ago 26 17:07:45 master dhcpd[2801]: Sending on   Socket/fallback/fallback-net
ago 26 17:07:45 master systemd[1]: Started DHCPv4 Server Daemon.
Hint: Some lines were ellipsized, use -l to show in full.
  • Arreglamos el Firewall para el DHCP:
[root@master ~]# firewall-cmd --zone=public --add-service=dhcp --permanent
success
[root@master ~]# firewall-cmd --reload
success
[root@master ~]# firewall-cmd --info-zone public
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens32
  sources:
  services: dhcp dhcpv6-client dns ntp ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

Modificación manual de archivos de Zonas

Después que el DHCP entra en el juego de actualizar de forma dinámica a los archivos de zonas del named, si necesitamos en algún momento modificar manualmente un archivo de zona, debemos efectuar el siguiente procedimiento, no sin antes conocer un poco mas el funcionamiento de la utilidad rndc para el control del servidor de nombre.

[root@master ~]# man rndc
....
       freeze [zone [class [view]]]
           Suspend updates to a dynamic zone. If no zone is specified, then
           all zones are suspended. This allows manual edits to be made to a
           zone normally updated by dynamic update. It also causes changes in
           the journal file to be synced into the master file. All dynamic
           update attempts will be refused while the zone is frozen.

       thaw [zone [class [view]]]
           Enable updates to a frozen dynamic zone. If no zone is specified,
           then all frozen zones are enabled. This causes the server to reload
           the zone from disk, and re-enables dynamic updates after the load
           has completed. After a zone is thawed, dynamic updates will no
           longer be refused. If the zone has changed and the
           ixfr-from-differences option is in use, then the journal file will
           be updated to reflect changes in the zone. Otherwise, if the zone
           has changed, any existing journal file will be removed.
....

Básicamente:

  • rndc freeze [zone [class [view]]], suspende la actualización dinámica de una zona. Sino se especifica una, todas se congelarán. El comando permite la edición manual de la zona congelada o de todas las zonas. Se negará cualquier actualización dinámica mientras esté congelada.
  • rndc thaw [zone [class [view]]], habilita las actualizaciones dinámicas en una zona previamente congelada. El servidor DNS recarga el archivo de zona desde el disco y se vuelven a habilitar las actualizaciones dinámicas después que la recarga se termine.

¿Cuidados a tener cuando editamos manualmente un archivo de zona?. Los mismos que si la estuviéramos creando, sin olvidar incrementar en 1 el número de serie o serial antes de guardar el archivo con los cambios definitivos.

Ejemplo:

[root@master ~]# rndc freeze swl.fan

[root@master ~]# nano /var/named/dynamic/db.swl.fan
Modifico el archivo de la zona por cualquier razón, necesaria o no.
Guardo los cambios

[root@master ~]# rndc thaw swl.fan
A zone reload and thaw was started.
Check the logs to see the result.

[root@master ~]# journalctl -f
----
ago 26 17:20:50 master named[1738]: thawing zone 'swl.fan/IN': success
ago 26 17:20:50 master named[1738]: zone swl.fan/IN: zone serial (2) unchanged. zone may fail to transfer to slaves.
ago 26 17:20:50 master named[1738]: zone swl.fan/IN: loaded serial 2
----

El error en la salida anterior, que en la consola también se muestra en rojo, se debe a que “olvidé” aumentar el serial en 1. De seguir el procedimiento correctamente la salida sería:

[root@master ~]# journalctl -f
----
ago 26 17:22:17 master named[1738]: thawing zone 'swl.fan/IN': success
ago 26 17:22:17 master named[1738]: zone swl.fan/IN: journal file is out of date: removing journal file
ago 26 17:22:17 master named[1738]: zone swl.fan/IN: loaded serial 3.

Probamos con clientes

Iniciamos un cliente Windows XP -u otro con Software Libre- y comenzamos las pruebas.

buzz@sysadmin:~$ host equisp
equisp.swl.fan has address 192.168.10.32

buzz@sysadmin:~$ host equisp.swl.fan
equisp.swl.fan has address 192.168.10.32

buzz@sysadmin:~$ host -t TXT equisp.swl.fan
equisp.swl.fan descriptive text "31dc169d8503e15c03abf81084bf3a8d04"

buzz@sysadmin:~$ host 192.168.10.32
30.10.168.192.in-addr.arpa domain name pointer equisp.swl.fan.
buzz@sysadmin:~$ dig swl.fan axfr

; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> swl.fan axfr
;; global options: +cmd
swl.fan.        10800    IN    SOA    master.swl.fan. root.master.swl.fan. 2 86400 3600 604800 10800
swl.fan.        10800    IN    NS    master.swl.fan.
swl.fan.        10800    IN    MX    10 mail.swl.fan.
swl.fan.        10800    IN    TXT    "www.gigainside.com. Blog dedicado al Software Libre"
ad-dc.swl.fan.        10800    IN    A    192.168.10.3
blog.swl.fan.        10800    IN    A    192.168.10.7
fileserver.swl.fan.    10800    IN    A    192.168.10.4
ftpserver.swl.fan.    10800    IN    A    192.168.10.8
mail.swl.fan.        10800    IN    A    192.168.10.9
master.swl.fan.        10800    IN    A    192.168.10.5
proxyweb.swl.fan.    10800    IN    A    192.168.10.6
sysadmin.swl.fan.    10800    IN    A    192.168.10.1
equisp.swl.fan.    3600    IN    TXT    "31dc169d8503e15c03abf81084bf3a8d04"
equisp.swl.fan.    3600    IN    A    192.168.10.32
swl.fan.        10800    IN    SOA    master.swl.fan. root.master.swl.fan. 2 86400 3600 604800 10800
;; Query time: 5 msec
;; SERVER: 192.168.10.5#53(192.168.10.5)
;; WHEN: Sat Aug 26 17:15:28 EDT 2017
;; XFR size: 15 records (messages 1, bytes 459)

En la salida anterior, resaltamos en negritas los TTL -en segundos- para los equipos con direcciones IP otorgadas por el servicio DHCP los que poseen una declaración explícita del TTL 3600 dada por el DHCP. Las IP fijas se guían por el $TTL de 3H -3 horas = 10800 segundos- declarados en el registro SOA de cada archivo de zona. Si deseamos igualar los TTL del BIND y del DHCP, lo mas recomendable es disminiuir a 1 hora los $TTL de cada archivo de zona.

Podemos comprobar de igual forma la zona inversa.

buzz@sysadmin:~$ dig 10.168.192.in-addr.arpa axfr
  • Comandos interesantes en el servidor master.swl.fan:
[root@master ~]# named-journalprint /var/named/dynamic/db.swl.fan.jnl
[root@master ~]# named-journalprint /var/named/dynamic/db.10.168.192.in-addr.arpa.jnl
[root@master ~]# journalctl -f
  • Comprobaciones desde el equipo equisp.swl.fan:

Vamos al menú Inicio –> Ejecutar –> CMD y se abre una consola con el Símbolo del Sistema.

Microsoft Windows XP [Versión 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\buzz>nslookup
Servidor predeterminado: master.swl.fan
Address: 192.168.10.5

> sysadmin
Servidor: master.swl.fan
Address: 192.168.10.5

Nombre: sysadmin.swl.fan
Address: 192.168.10.1

> mail
Servidor: master.swl.fan
Address: 192.168.10.5

Nombre: mail.swl.fan
Address: 192.168.10.9

> set type=TXT
> swl.fan
Servidor: master.swl.fan
Address: 192.168.10.5

swl.fan text =
 "www.gigainside.com. Blog dedicado al Software Libre"
swl.fan nameserver = master.swl.fan
master.swl.fan internet address = 192.168.10.5
> set type=SOA
> swl.fan
Servidor: master.swl.fan
Address: 192.168.10.5

swl.fan
 primary name server = master.swl.fan
 responsible mail addr = root.master.swl.fan
 serial = 6
 refresh = 86400 (1 day)
 retry = 3600 (1 hour)
 expire = 604800 (7 days)
 default TTL = 10800 (3 hours)
swl.fan nameserver = master.swl.fan
master.swl.fan internet address = 192.168.10.5
> exit
C:\Documents and Settings\buzz>
  • Sincronización del tiempo:
equisp.swl.fan
Equipo sincronizando con master.swl.fan

Resumen

Hasta aquí hemos abordado la implementación de un Servidor de Infraestructura Básico. Respetamos muchos nombres en inglés para no caer en traducciones que son a veces imposibles. La inmensa mayoría de los nombres y servicios se pensaron y escribieron originalmente en inglés u otras lenguas diferentes al español. Casi toda la documentación relevante -y mas exacta- sobre la implementación de servicios se encuentra en inglés.

¡Hasta la próxima entrega!.

Dejar respuesta

Please enter your comment!
Please enter your name here