Servidor de correo Debian 8 Jessie: Instalación de servicio DNS seguro.


Este es el segundo de una serie de artículos para la instalación completa de un servidor de correos con Debian Jessie 8.5. Instalación de servicio DNS seguro.

La instalación del servicio DNS tiene aplicación si se manejan los registros DNS internamente, para que estos registros sean visibles desde Internet se debe utilizar ip's publicas o NAT hacia direcciones publicas.

Instalamos el servicio Bind9
apt install bind9

La definición del servicio la podemos ver en el siguiente archivo:
cat /lib/systemd/system/bind9.service


Paramos el servicio.
systemctl stop bind9.service

Creamos el archivo de configuración chroot.
mkdir /etc/systemd/system/bind9.service.d
creamos el archivo /etc/systemd/system/bind9.service.d/chroot.conf y colocamos lo siguiente:
[Service]
ExecStart=
ExecStart=/usr/sbin/named -f -u bind -t /var/bind9/chroot

Con esto le indicamos a bind9 que el servicio correrá en la ruta /var/bind9/chroot

Creamos la estructura de directorios que utilizará el servicio.
mkdir -p /var/bind9/chroot/{etc,dev/log,var/lib/bind,var/cache/bind,var/run/named,var/log/bind,var/lib/bind}

Movemos el directorio /etc/bind hacia el directorio del chroot y creamos un enlace simbólico.
mv /etc/bind /var/bind9/chroot/etc
ln -s /var/bind9/chroot/etc/bind /etc/bind

Asignamos los permisos a los directorios

chmod 755 /var/bind9/chroot/etc/bind
chmod 644 /var/bind9/chroot/etc/bind/*
chmod 640 /var/bind9/chroot/etc/bind/rndc.key
chown root:bind /var/bind9/chroot/etc/bind/*
chown bind:bind /var/bind9/chroot/etc/bind/rndc.key
chmod 770 /var/bind9/chroot/var/{cache/bind,run/named,lib,lib/bind,log} -Rf
chown root:bind /var/bind9/chroot/var/{cache/bind,run/named,lib,lib/bind,log} -Rf

Creamos los dispositivos null y random utilizados por el servicio.
mknod -m 666 /var/bind9/chroot/dev/null c 1 3
mknod -m 666 /var/bind9/chroot/dev/random c 1 8
chmod 660 /var/bind9/chroot/dev/{null,random,log}
chgrp bind /var/bind9/chroot/dev/{null,random,log}

Podemos copiar el archivo localtime para definir la zona horaria.
cp /etc/localtime /var/bind9/chroot/etc/


Editamos
vim /etc/init.d/bind9

cambiar la siguiente linea
PIDFILE=/var/run/named/named.pid

de la siguiente manera
PIDFILE=/var/bind9/chroot/var/run/named/named.pid

Ejecutamos la siguiente instrucción
echo "\$AddUnixListenSocket /var/bind9/chroot/dev/log" > /etc/rsyslog.d/bind-chroot.conf

Cambiamos en el archivo /etc/bind/named.conf.options la siguiente linea
        listen-on-v6 { any; };

De la siguiente manera, con esto deshabilitamos que bind9 escuche por direcciones ipv6
        listen-on { any; };

Reiniciamos
systemctl daemon-reload
systemctl restart rsyslog; systemctl start bind9

Comprobamos la configuración
/usr/sbin/named-checkconf -t /var/bind9/chroot/ /etc/bind/named.conf

verificamos el estado de bind9
systemctl status bind9

Si todo esta bien podemos continuar con nuestra configuración, deberíamos ver algo parecido a lo siguiente:
 root@server01:~# systemctl status bind9

● bind9.service - BIND Domain Name Server
   Loaded: loaded (/lib/systemd/system/bind9.service; enabled)
  Drop-In: /run/systemd/generator/bind9.service.d
           └─50-insserv.conf-$named.conf
        /etc/systemd/system/bind9.service.d
           └─chroot.conf
   Active: active (running) since mar 2016-09-06 17:36:37 CST; 4min 2s ago
     Docs: man:named(8)
 Main PID: 4071 (named)
   CGroup: /system.slice/bind9.service
           └─4071 /usr/sbin/named -f -u bind -t /var/bind9/chroot

sep 06 17:36:37 server01 named[4071]: automatic empty zone: 8.B.D.0.1.0.0.2.IP6.ARPA
sep 06 17:36:37 server01 named[4071]: command channel listening on 127.0.0.1#953
sep 06 17:36:37 server01 named[4071]: command channel listening on ::1#953
sep 06 17:36:37 server01 named[4071]: managed-keys-zone: loaded serial 2
sep 06 17:36:37 server01 named[4071]: zone 0.in-addr.arpa/IN: loaded serial 1
sep 06 17:36:37 server01 named[4071]: zone 127.in-addr.arpa/IN: loaded serial 1
sep 06 17:36:37 server01 named[4071]: zone localhost/IN: loaded serial 2
sep 06 17:36:37 server01 named[4071]: zone 255.in-addr.arpa/IN: loaded serial 1
sep 06 17:36:37 server01 named[4071]: all zones loaded
sep 06 17:36:37 server01 named[4071]: running


Generar rndckey
rndc-confgen

Copie la llave en archivo /var/bind9/chroot/etc/bind/rndc.key
# Start of rndc.conf
key "rndc-key" {
        algorithm hmac-md5;
        secret "DTngw5O8I5Axx631GjQ9pA==";
};

y agregue las siguientes lineas al principio del archivo /var/bind9/chroot/etc/bind/named.conf

include "/etc/bind/rndc.key";

controls {
    inet 127.0.0.1 port 953
    allow { 127.0.0.1; } keys { "rndc-key"; };
};


Colocamos los permisos para el archivo que contiene la llave
chmod 640 /var/bind9/chroot/etc/bind/rndc.key
chown root:bind /var/bind9/chroot/etc/bind/rndc.key


Reiniciamos
systemctl restart bind9
systemctl status bind9

Agregamos log personalizados a Bind9

Agregamos al principio del archivo /var/bind9/chroot/etc/bind/named.conf la siguiente  linea:
include "/etc/bind/named.conf.log";


El archivo /etc/bind/named.conf.log deberá contener lo siguiente:
logging {
        channel update_debug {
                file "/var/log/bind/update_debug.log" versions 3 size 100k;
                severity debug;
                print-severity  yes;
                print-time      yes;
        };
        channel security_info {
                file "/var/log/bind/security_info.log" versions 1 size 100k;
                severity info;
                print-severity  yes;
                print-time      yes;
        };
        channel bind_log {
                file "/var/log/bind/bind.log" versions 3 size 1m;
                severity info;
                print-category  yes;
                print-severity  yes;
                print-time      yes;
        };

        category default { bind_log; };
        category lame-servers { null; };
        category update { update_debug; };
        category update-security { update_debug; };
        category security { security_info; };
};

Los permisos serán los siguientes:
chown bind /etc/bind/named.conf.log
chmod 644 /etc/bind/named.conf.log

Creamos un enlace simbólico hacia /var/log para que todos nuestros logs estén en la misma ubicación.
ln -s /var/bind9/chroot/var/log/bind /var/log

Reiniciamos el servicio
systemctl restart bind9
systemctl status bind9

Cambiamos las opciones en el archivo /var/bind9/chroot/etc/bind/named.conf.options de la siguiente manera

acl corpnets { 172.16.0.0/16;};
options {
        directory "/var/cache/bind";
        listen-on port 53 { 127.0.0.1; ;};
        allow-query { any; };
        allow-recursion { corpnets; };
        allow-query-cache { corpnets; };

        query-source address * port *;

        allow-transfer { none; };

        version none;
        dnssec-enable yes;
        dnssec-validation auto;

        auth-nxdomain no;    # conform to RFC1035
};

Finalmente creamos los archivos para la resolucion de nuestro dominio, editamos el archivo /var/bind9/chroot/etc/bind/named.conf.local y agregamos las zonas.

Note que la ruta en las configuraciones se hacen a partir de la raiz de chroot la cual es  /var/bind9/chroot y por lo cual esta no se incluye en la referencia a los archivo de zona.

zone "dominio.com" {
      type master;
      file "/var/lib/bind/db.dominio.com";
      allow-update { key rndc-key; };
};

zone "112.16.172.in-addr.arpa" {
       type master;
       file "/var/lib/bind/db.dominio.com.rr";
       allow-update { key rndc-key; };
};



Creamos los archivos a los que hacemos referencia anteriormente /var/bind9/chroot/var/lib/bind/db.dominio.com, agregamos los siguiente:

;
; BIND data file for local loopback interface
;
$TTL 86400
@     IN SOA ns3.dominio.sv. hostmaster.server01.dominio.com. (
                      2016090701 ; Serial
                      21600 ; Refresh
                      3600 ; Retry
                     1814400 ; expire after 3 week
                     43200 ) ; Negative Cache TTL
;
      IN NS ns1.dominio.com.
      IN NS ns2.dominio.com.
      IN MX 10 mail
@     IN A 172.16.112.148
ns1  IN A 172.16.112.148
ns2  IN A 172.16.112.147
ns3  IN A 172.16.112.147
mail  IN A 172.16.112.148
www IN CNAME ns1.dominio.com.
smtp IN CNAME mail.dominio.com.
pop IN CNAME mail.dominio.com.
imap IN CNAME mail.dominio.com.

Creamos el archivo de resolucion inversa /var/bind9/chroot/var/lib/bind/db.dominio.com.rr con la siguiente informacion.
;
; BIND reverse data file for local loopback interface
;
$TTL 604800
@ IN SOA ns3. root.ns1. (
      1 ; Serial
      604800 ; Refresh
      86400 ; Retry
      2419200 ; Expire
      604800 ) ; Negative Cache TTL
;
@    IN NS ns3.dominio.com.
145 IN PTR portal.dominio.com.
146 IN PTR mail.dominio.com.
147 IN PTR mail2.dominio.com.
148 IN PTR cloud.dominio.com.

Cambiamos los permisos a los archivos creados
chmod 660 /var/bind9/chroot/var/lib/bind/db.dominio.com*
chown bind /var/bind9/chroot/var/lib/bind/db.dominio.com*

Reiniciamos el servicio
systemctl restart bind9
systemctl status bind9

Probamos nuestra configuracion
dig @localhost dominio.com
dig @localhost dominio.com NS
dig @localhost dominio.com MX

Fuentes:
https://wiki.debian.org/Bind9
bind9 im chroot unter Debian 8 jessie und systemd
BIND9ServerHowto

Indice.
1. Servidor de correo Debian 8 Jessie: Instalacion del sistema operativo y asegurar las conexiones ssh por medio de llaves.
2. Servidor de correo Debian 8 Jessie: Instalación de servicio DNS seguro.
3. Servidor de correo Debian 8 Jessie: Instalación certificados generados por autoridad certificadora (CA) windows.
4. Servidor de correo Debian 8 Jessie: Instalación de Postfix, Dovecot y Roundcube con autenticacion AD  

Servidor de correo GNU/Debian Jessie: Postfix, Bind9, Dovecot, Sasl, Apache, Roundcube con autenticacion LDAP 

Comentarios