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ñasapt 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 apache2Editamos 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-ldapDeberá 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-sieveINSTALAR 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ónpostconf '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 softwareapt-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.svpostconf 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 swakspostconf 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=1habilitamos 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ónsieve_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’sInclude /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