miércoles, septiembre 21, 2016

Servidor de correo Debian 8 Jessie: Instalación certificados generados por autoridad certificadora (CA) windows


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 certificados generados por CA windows.

Esta es mi realidad trabajo con una red mixta con equipos gnu/linux y windows y la de muchos en mi país, así que esta es la motivación de la publicación de este artículo, Bendiciones.

Instalación certificado CA de una autoridad certificadora (CA) Windows.


En primer lugar,  se debe exportar el certificado raiz de la autoridad certificadora (CA):  se debe utilizar la opción [Base-64 encoded X.509 (CER)] y la extensión debe ser crt.

Luego copiamos el certificado micert-ca.crt hacia el servidor de correos.

Copiamos micert-ca.crt hacia el directorio /usr/local/share/ca-certificates/

cp micert-ca.crt /usr/local/share/ca-certificates/ 

Actualizamos la base de certificados

root@server01:~# update-ca-certificates
Updating certificates in /etc/ssl/certs... 1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d....done. 

Instalación certificado para el servidor de correos generado por una autoridad certificadora (CA) window.

 
En primer lugar, generamos el certificado para nuestro dominio, luego lo exportamos el certificado e incluimos las claves privadas (Yes, export the private key), Siguiente y colocamos una contraseña.

Luego copiamos el certificado mail-midominio.pfx hacia el servidor de correos.

Generar todos los certificados incluyendo la clave privada de la siguiente manera:

root@server01:~# openssl pkcs12 -in mail-midominio.pfx -out mail.midominio.sv.txt -nodes


Generar el certificado sin la clave privada
root@server01:~# openssl pkcs12 -in mail-midominio.pfx -out mail.midominio.sv.pem


Generar la clave privadas
root@server01:~# openssl rsa -in mail.midominio.sv.txt -out mail.midominio.sv.key

Finalmente, copie el certificado y la clave privada a las ubicaciones correctas.
root@server01:~# cp mail.midominio.sv.pem /etc/ssl/certs/mail.midominio.sv.pem
root@server01:~# cp mail.midominio.sv.key /etc/ssl/private/mail.midominio.sv.key

Fuente:

miércoles, septiembre 07, 2016

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 

lunes, septiembre 05, 2016

Servidor de correo Debian 8 Jessie: Instalacion del sistema operativo y asegurar las conexiones ssh por medio de llaves.

Este es el primero de una serie de artículos para la instalación completa de un servidor de correos con Debian Jessie 8.5.

Nota importante: se asume que las personas que utilicen este manual tienen conocimientos básicos con GNU/Debian por lo que omitiré algunos detalles, sin embargo pueden consultar por este medio las dudas que tengan y se tratará de contestarles dentro de nuestras posibilidades, bendiciones.

Bueno lo primero es descargar el sistema operativo, lo puede hacer desde la pagina oficial de Debian (https://www.debian.org).

Aquí se utilizó una maquina virtual en vmware 6 para realizar la instalación del sistema operativo, con las siguientes características:
2 GB de RAM
1 disco duro 30 GB
1 tarjeta de red
El particionamiento utilizado es el siguiente:

/ 24,2 GB
/tmp 4 GB
swap 2*RAM 4 GB

Para un ambiente de producción se puede agregar un disco adicional con espacio suficiente para los correos en el punto de montaje /var/vmail esta carpeta se utilizará para los buzones de correos.

Aquí les dejo un enlace donde pueden ver los pasos para instalación de debian workaround.org Install Debian Jessie on your server

En la instalación debemos dejar correctamente configurada nuestra red.

Primeras configuraciones.

Colocamos el nombre del servidor
hostnamectl set-hostname server01

Como estamos en un servidor virtual lo primero es instalar vmware-tools
apt install open-vm-tools

Instalar el editor de texto preferido, aquí se utiliza vim
apt install vim

Aseguramos ssh permitiendo únicamente conexiones con llaves.


Instalamos el servidor de ssh
apt install openssh-server

En primer lugar creamos las llaves
user1@pc01:~$ ssh-keygen -t rsa

Copiamos las claves al servidor
user1@pc01:~$ ssh-copy-id -i .ssh/id_rsa.pub server01

Nos validamos como root  en el servidor
user1@server01:~$  su -

Editamos el archivo /etc/ssh/sshd_config y cambiamos los siguientes parametros:
PermitRootLogin no
PasswordAuthentication no

Reiniciamos el servicio ssh
systemctl restart ssh

Ahora ya podemos ingresamos al servidor con la autenticación por llaves.
user1@pc01:~$ ssh server01

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.