Servidor de correo Debian 8 Jessie: Instalación de Postfix, Dovecot y Roundcube con autenticacion AD


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

Instalación del software.


INSTALACIÓN DE MYSQL

Instalamos un generador de contraseñas
apt install pwgen pwgen -s 30 1
AlK8MmQ0AgZReUGaqE8IjwDkrdr5Xl

Instalamos MySQL, utilicemos la contraseña generada AlK8MmQ0AgZReUGaqE8IjwDkrdr5Xl para el usuario root de MySQL
apt install mysql-server

Creamos archivo de conexión para ingresar a MySQL sin tener que escribir la contraseña.

vi /root/.my.cnf
[client] password=AlK8MmQ0AgZReUGaqE8IjwDkrdr5Xl

Damos permisos
chmod u=rw,go= /root/.my.cnf

probamos la conexión
mysql

Podemos ejecutar el script mysql_secure_installation para mejorar la seguridad MySQL
mysql_secure_installation

INSTALACIÓN APACHE

apt install apache2

Editamos el archivo /etc/apache2/sites-available/default-ssl.conf
y cambiamos los siguientes parametros con el certificado para el servidor
SSLCertificateFile /etc/ssl/certs/mail.midominio.sv.pem
SSLCertificateKeyFile /etc/ssl/private/mail.midominio.sv.key

habilitamos la encriptación y reiniciamos
a2enmod ssl
a2ensite default-ssl

systemctl reload apache2

Probamos apache desde un navegador
http://server01/
https://server01/

Hacemos redirección permanente hacia https
Editamos el archivo /etc/apache2/sites-available/000-default.conf

Agregamos la linea
Redirect permanent / https://server01/
...

systemctl reload apache2


INSTALAR POSTFIX

apt install postfix postfix-pcre postfix-ldap
Deberá colocar el nombre del sitio en internet.

apt --purge remove 'exim4*'
apt install spamassassin spamass-milter

INSTALAR DOVECOT

apt-get install dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-ldap dovecot-managesieved dovecot-sieve

INSTALAR ROUNDCUBE


Agregamos el repositorio backports al archivo /etc/apt/sources.list
deb http://http.debian.net/debian jessie-backports main
apt update

Generamos una clave para roundcube

root@server01:~# pwgen -s 30 1
uTHpbYmQ8aUAF8R1L5qrjszA9joTKN

apt install roundcube roundcube-plugins

Instalamos paquetes Php y paquetes adicionales adicionales utilizados por roundcube
apt install php5 php5-mysql php5-mcrypt php5-intl php-pear php5-ldap libapache2-mod-php5 php-net-ldap2 php-net-ldap3

Verificamos los puertos abiertos
lsof -Pni

Configuración de Postfix

Para evitar ataques de aquellos que fingen no soportar los métodos modernos de encriptación
postconf 'smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3'

Escribir los dominios virtuales en el archivo /etc/postfix/virtual_domains de la siguiente manera
root@srvserver01:/etc/postfix# cat virtual_domains
midominio.com OK
midominio.sv  OK

Crear archivo binario.
postmap hash:/etc/postfix/virtual_domains

Configuramos Postfix para que utilice el archivo creado de la siguiente manera:
postconf virtual_mailbox_domains=hash:/etc/postfix/virtual_domains

Probamos la configuración
postmap -q midominio.sv hash:/etc/postfix/virtual_domains

Configuración de los archivos para la base de direcciones de correo, esta configuracion hará la consulta en un servidor AD windows 2008 y comprobará la dirección de correo.
Se crea el archivo /etc/postfix/ldap_virtual_recipients.cf

root@srvserver01:/etc/postfix# cat ldap_virtual_recipients.cf
server_host     = 172.16.112.250
server_port     = 389
version         = 3
bind            = yes
startt_tls      = no
bind_dn         = CN=correo,OU=Usuarios,DC=midominio,DC=local
bind_pw         = clave
search_base     = ou=Usuarios,dc=midominio,dc=local
scope           = sub
query_filter    = (&(mail=%s)(objectclass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
result_attribute= mail
#result_format   = %d/%u/Maildir/
#debuglevel      = 0

Se crea el archivo /etc/postfix/ldap_virtual_aliases.cf
root@srvserver01:/etc/postfix# cat ldap_virtual_aliases.cf
server_host     = 172.16.112.250
server_port     = 389
version         = 3
bind            = yes
start_tls       = no
bind_dn         = CN=correo,OU=Usuarios,DC=midominio,DC=local
bind_pw         = clave
search_base     = OU=Usuarios,DC=midominio,DC=local
scope           = sub
query_filter    = (&(mailNickname=%s)(objectclass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
result_attribute= mail, mailNickname
#debuglevel      = 0

Se le indica a postfix como utilizar estos archivos
postconf virtual_mailbox_maps=proxy:ldap:/etc/postfix/ldap_virtual_recipients.cf
postconf virtual_alias_maps=proxy:ldap:/etc/postfix/ldap_virtual_aliases.cf

Cambiamos los permisos
chgrp postfix /etc/postfix/ldap_*.cf
chmod u=rw,g=r,o= /etc/postfix/ldap_*.cf

Probamos la configuraciones de los archivos
postmap -q sosorio@midominio.sv ldap:/etc/postfix/ldap_virtual_recipients.cf
postmap -q sosorio@ midominio.com ldap:/etc/postfix/ldap_virtual_aliases.cf


Configuramos certificados
Autoridad Certificadora
postconf smtpd_tls_CAfile=/etc/ssl/certs/dominio-ca.pem

Certificado publico
postconf smtpd_tls_cert_file=/etc/ssl/certs/mail.dominio.sv.pem

Clave privada sin clave
postconf smtpd_tls_key_file=/etc/ssl/private/mail.dominio.sv.key


Configuración Dovecot

Creación de grupo y usuario.
root@srvserver01:/etc/postfix# addgroup --system --gid 5000 vmail
Añadiendo el grupo `vmail' (GID 5000) ...
Hecho.

root@srvserver01:/etc/postfix# adduser --system --home /var/vmail --uid 5000 --gid 5000 --disabled-password --disabled-login vmail
Añadiendo el usuario del sistema `vmail' (UID 5000) ...
Añadiendo un nuevo usuario `vmail' (UID 5000) con grupo `vmail' ...
Creando el directorio personal `/var/vmail' ...

Cambiamos los permisos
chown -R vmail.vmail /var/vmail

Cambiemos las siguientes opciones en el archivo /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes
auth_mechanisms = plain login

#!include auth-system.conf.ext
#!include auth-sql.conf.ext
!include auth-ldap.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext

Cambiamos las siguientes opciones en el archivo /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/var/vmail/%d/%n/Maildir
mail_privileged_group = vmail
mail_uid = 5000
mail_gid = 5000

Cambiamos las siguientes opciones en el archivo /etc/dovecot/conf.d/10-master.conf
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
  mode = 0660
  user = postfix
  group = postfix
}

Este archivo de configuración que maneja los servicios que permiten la comunicación con otros procesos.

Cambiamos las siguientes opciones en el archivo /etc/dovecot/conf.d/10-ssl.conf
#Activamos la encriptación TLS/SSL
ssl = yes
#Colocamos nuestros certificados para el servidor.
ssl_cert =
ssl_key =
Modificamos el archivo /etc/dovecot/conf.d/15-mailboxes.conf de la siguiente manera:
namespace inbox {
inbox = yes
list = yes
location =
prefix = INBOX.
mailbox Drafts {
special_use = \Drafts
auto=subscribe
}
mailbox Junk {
special_use = \Junk
}
mailbox Spam {
special_use = \Junk
auto=subscribe
}
mailbox Trash {
special_use = \Trash
auto=subscribe
}
mailbox Sent {
special_use = \Sent
auto=subscribe
}
mailbox "Sent Messages" {
special_use = \Sent
}
mailbox Archive {
special_use = \Archive
}
mailbox "Archives" {
special_use = \Archive
auto=subscribe
}
}

Agregamos las siguientes opciones en el archivo /etc/dovecot/dovecot-ldap.conf.ext
hosts = 172.16.112.250 # Windows Active Directory
dn = CN=correo,OU=Usuarios,DC=midominio,DC=local
dnpass = clave
tls = no
auth_bind = yes
ldap_version = 3
base = OU=Usuarios,DC=midominio,DC=local
scope = subtree
user_attrs = \
=home=/var/vmail/%d/%{ldap:sAMAccountName}, \
=mail=maildir:/var/vmail/%d/%{ldap:sAMAccountName}/Maildir
user_filter = (&(mail=%u)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
pass_filter = (&(mail=%u)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
iterate_attrs = mail=user
iterate_filter = (objectClass=person)

cambiamos los permisos
root@srvserver01:/# chown root:root /etc/dovecot/dovecot-ldap.conf.ext
root@srvserver01:/# chmod go= /etc/dovecot/dovecot-ldap.conf.ext

reiniciamos dovecote
root@srvserver01:/# systemctl restart dovecot

Cambiamos las siguientes opciones en el archivo /etc/dovecot/conf.d/10-logging.conf
log_path = syslog
syslog_facility =mail
auth_debug = yes

Cambiamos las siguientes opciones en el archivo /etc/dovecot/conf.d/10-master.conf
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0660
user = postfix
}
}
unix_listener auth-userdb {
    mode = 0660
    user = vmail
    group = vmail
}

Configuramos Postfix para comunicarse con Dovecot utilizando LMTP
postconf virtual_transport=lmtp:unix:private/dovecot-lmtp

Cambiamos las siguientes opciones en el archivo /etc/dovecot/conf.d/20-lmtp.conf
mail_plugins = $mail_plugins sieve

Modificamos las siguientes opciones en el archivo /etc/postfix/master.cf:
submission inet n - - - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sender_login_maps=ldap:/etc/postfix/ldap_virtual_recipients.cf
-o smtpd_sender_restrictions=reject_sender_login_mismatch
-o smtpd_sasl_local_domain=$myhostname
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject

smtps inet n - - - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_reject_unlisted_recipient=no
-o smtpd_recipient_restrictions=
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
...
#al final del archivo agregamos la siguiente linea
dovecot unix - n n - - pipe
flags=ODRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -e -f ${sender} -d ${recipient}

reiniciamos el servicios
systemctl restart dovecot postfix

Instalacion y configuracion SASL (Cyrus)

Instalamos el software
apt-get install libsasl2-2 sasl2-bin

Agregamos las siguientes opciones al archivo /etc/postfix/sasl/smtpd.conf
log_level: 3
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN

Cambiamos las siguientes opciones en el archivo /etc/default/saslauthd
START=yes
MECHANISMS="ldap"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

Creamos el siguiente archivo /etc/saslauthd.conf con el siguiente contenido.
ldap_servers: ldap://172.16.112.250/
ldap_search_base: ou=Usuarios,dc=midominio,dc=local
ldap_timeout: 10
ldap_filter: sAMAccountName=%U
ldap_bind_dn: CN=correo,OU=Usuarios,DC=midominio,DC=local
ldap_password: clave
ldap_deref: never
ldap_restart: yes
ldap_scope: sub
ldap_use_sasl: no
ldap_start_tls: no
ldap_version: 3
ldap_auth_method: bind
Cambiamos los permisos
chown root:sasl /etc/saslauthd.conf
chmod 644 /etc/saslauthd.conf

agregamos el usuario postfix al grupo  sasl
adduser postfix sasl

Reiniciamos el servicio
systemctl restart saslauthd

Probamos la conexión.
testsaslauthd -u sosorio@dominio.sv -p secret -f /var/spool/postfix/var/run/saslauthd/mux


Configuracion Postfix y Seguridad sasl

postconf myhostname=mail.midominio.sv
postconf smtp_tls_note_starttls_offer=yes
postconf smtpd_tls_loglevel=0
postconf smtpd_tls_received_header=yes
postconf broken_sasl_auth_clients=yes
postconf smtpd_sasl_auth_enable=yes
postconf smtpd_tls_security_level=may
postconf smtpd_client_new_tls_session_rate_limit=10
postconf 'smtpd_tls_session_cache_database=btree:${data_directory}/smtpd_scache'
postconf smtpd_sasl_authenticated_header=yes

postconf smtpd_tls_auth_only=yes
postconf smtp_use_tls=yes
postconf smtpd_sasl_auth_enable=yes
postconf smtpd_sasl_type=dovecot
postconf local_recipient_maps=
postconf smtpd_use_tls=yes
postconf smtp_tls_note_starttls_offer=yes
postconf smtpd_tls_loglevel=1
postconf smtpd_tls_received_header=yes
postconf smtpd_tls_session_cache_timeout=3600s
postconf tls_random_source=dev:/dev/urandom

postconf smtpd_sasl_type=dovecot
postconf smtpd_sasl_path=private/auth
postconf queue_directory=/var/spool/postfix


postconf smtpd_use_tls=yes
postconf ‘smtpd_tls_session_cache_database=btree:${data_directory}/smtpd_scache’
postconf ‘smtp_tls_session_cache_database=btree:${data_directory}/smtp_scache’
postconf ‘smtpd_tls_exclude_ciphers =EXP EDH-RSA-DES-CBC-SHA ADH-DES-CBC-SHA DES-CBC-SHA SEED-SHA’

# Diffie-Hellman Parameters for Perfect Forward Secrecy
# Can be created with:
# openssl dhparam -2 -out dh_512.pem 512
# openssl dhparam -2 -out dh_1024.pem 1024
postconf ‘smtpd_tls_dh512_param_file=${config_directory}/certs/dh_512.pem’
postconf ‘smtpd_tls_dh1024_param_file=${config_directory}/certs/dh_1024.pem’

Creamos el directorio
mkdir /etc/postfix/certs/
cd /etc/postfix/certs/

Luego generamos los certificados de la siguiente manera:
root@server01:/etc/postfix/certs# openssl dhparam -2 -out dh_512.pem 512
root@server01:/etc/postfix/certs# openssl dhparam -2 -out dh_1024.pem 1024

Reiniciamos los servicios
systemctl restart dovecot postfix saslauthd
systemctl status dovecot postfix saslauthd

Configuracion SpamAssassin

apt install swaks

postconf smtpd_milters=unix:/spamass/spamass.sock
postconf ‘milter_connect_macros="i j {daemon_name} v {if_name} _"’

modificamos en el archivo /etc/default/spamassassin las siguientes opciones:


OPTIONS="--create-prefs -x --max-children 5 --helper-home-dir /var/lib/spamassassin -u debian-spamd --virtual-config-dir=/var/lib/spamassassin/users/%d/%l"
CRON=1

habilitamos el servicio
systemctl enable spamassassin

Cambiamos los siguientes permisos

chmod 775 /var/lib/spamassassin


Agregamos el usuario spamass-milter al grupo debian-spamd y el usuario debian-spamd al grupo spamd
adduser spamass-milter debian-spamd

adduser debian-spamd spamd

systemctl restart spamassassin spamass-milter

probamos la detección de spam
swaks --to sosorio@midominio.sv --server localhost --data /usr/share/doc/spamassassin/examples/sample-spam.txt

Enviamos los spam detectados a la carpeta Spam.

Modificamos en el archivo /etc/dovecot/conf.d/90-sieve.conf la siguiente opción
sieve_after = /etc/dovecot/sieve-after

Creamos la carpeta
mkdir /etc/dovecot/sieve-after

Creamos el archivo /etc/dovecot/sieve-after/spam-to-folder.sieve con el siguiente contenido

require ["fileinto","mailbox"];
if header :contains "X-Spam-Flag" "YES" {
 fileinto :create "INBOX.Spam";
 stop;
}

Compilamos el script
sievec /etc/dovecot/sieve-after/spam-to-folder.sieve

Reiniciamos dovecot
systemctl restart dovecot

probamos el redireccionamiento de los spam
swaks --to sosorio@midominio.sv --server localhost --data /usr/share/doc/spamassassin/examples/sample-spam.txt


Configuracion roundcube

Insertar en el archivo /etc/apache2/sites-available/default-ssl.conf las siguientes lineas entre los tag’s y

Include /etc/roundcube/apache.conf
Alias / /var/lib/roundcube/

Reiniciamos el servicio
systemctl restart apache2

En un navegador podemos colocar la direccion del servidor y nos debe aparecer la pantalla de ingreso de roundcube.
https://server01/

modificamos /etc/roundcube/config.inc.php para que nos quede de la siguiente manera:
//…
$config['default_host'] = 'localhost';
//...
// List of active plugins (in plugins/ directory)
$config['plugins'] = array(
'archive',
'zipdownload',
 'managesieve',         
 'password',            
);

// skin name: folder from skins/
$config['skin'] = 'larry';

$config['session_lifetime'] = 60;
$config['skin_logo'] = './logo_midominio.png';

// configuracion de la libreta de direcciones

$config['ldap_public'] = array(
    'midominio_Ldap' =>array (
        'name' => 'Contactos midominio',
        'hosts' => array('172.16.112.250'),
        'sizelimit' => 6000,
        'port' => 389,
        'use_tls' => false,
        'user_specific' => true,
        'base_dn' => 'OU=Usuarios,DC=midominio,DC=local',
        'bind_dn' => 'CN=correo,OU=Usuarios,DC=mmidominio,DC=local',
        'bind_pass' => 'clave',
        'writable' => false,
        'ldap_version' => 3,
        'search_fields' => array(
           'mail',
           'cn',
        ),
      'fieldmap' => array(
        'name'        => 'cn',
        'surname'     => 'sn',
        'firstname'   => 'givenName',
        'email'       => 'mail',
        'department'  => 'physicalDeliveryOfficeName',
        'jobtitle'    => 'title',
        'phone:home'  => 'homePhone',
        'phone:work'  => 'telephoneNumber',
        'phone:mobile' => 'mobile',
               'phone.work2' => ipphone,
         'country'     => 'c',
         'organization' => 'company',
         'notes'       => 'description',
        ),
        'sort' => 'sn',
        'scope' => 'sub',
        'filter' => '(&(mail=*)(|(&(objectClass=user)(!(objectClass=computer)))(objectClass=group)))',
        'global_search' => true,
        'fuzzy_search' => true
    ),
);

Reiniciamos el servicio
systemctl restart apache2

Fuente
Workaround.org: ISPmail guide for Debian Jessie
Acidx's blog: Installing a Mailserver with Postfix, Dovecot, SASL, LDAP & Roundcube

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

Unknown ha dicho que…
Consulta con la autenticación AD, vos hablas de 2008, es lo mismo con 2012R2?.
Lorenzo Salvador Osorio ha dicho que…
Pues debería ser igual, pero yo no tengo 2012 R2, así que hacé la prueba y nos retroalimentas.