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


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



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.


Convenciones utilizadas: se ha tratado de que los comandos que debemos ejecutar en la consola aparezcan en cursivas y los parámetros dentro de los archivos en negritas.


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 de la siguiente manera.
user1@pc01:~$ ssh server01




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


Generamos 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.
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; };
};
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.


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




Instalación certificados generados por autoridad certificadora (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 exportamos el certificado e incluimos las claves privadas (Yes, export the private key) 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




Instalación de Postfix, Dovecot, Spamassassin y Roundcube con autenticacion AD.

INSTALACIÓN DE MYSQL

Instalamos un generador de contraseñas
apt install pwgen


Generamos la contraseña de la siguiente manera:
root@server01:~# 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


Reiniciamos el servicio
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 entre los tags y
Redirect permanent / https://server01/


Reiniciamos el servicio
systemctl reload apache2




INSTALAR POSTFIX

apt install postfix postfix-pcre postfix-ldap


Deberá colocar el nombre del sitio en internet.


Desinstalamos exim4
apt --purge remove 'exim4*'


Instalamos spamassasin
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


Actualizamos los repositorios
apt update


Generamos una clave para roundcube con pwgen
root@server01:~# pwgen -s 30 1
uTHpbYmQ8aUAF8R1L5qrjszA9joTKN


INSTALAMOS ROUNDCUBE
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 configuración 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

La siguiente configuracion es para hacer un redireccionamiento desde una cuenta a otra, se utiliza en AD el campo mailNickname este solo puede ser accesado desde la opción "Editor de atributos" en las propiedades avanzadas.
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

Creación de lista de correo desde grupo de AD

Creamos el archivo /etc/postfix/ldap_virtual_groups.cf con el siguiente contendo
server_host = 172.16.112.250
search_base = OU=Listas de Correo,DC=midominio,DC=local
version = 3
query_filter = (&(objectClass=group)(mail=%s))
leaf_result_attribute = mail
special_result_attribute = member
bind = yes

bind_dn         = CN=correo,OU=Usuarios,DC=midominio,DC=local
bind_pw = clave

Lo agregamos a la configuracion postfix tomando en cuenta el alias que ya teníamos para la redireccion de correos.
postconf virtual_alias_maps=proxy:ldap:/etc/postfix/ldap_virtual_groups.cf,
proxy: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’
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

Reiniciamos el servicio
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 dirección del servidor y nos debe aparecer la pantalla de ingreso de roundcube.
https://server01/


Modificamos /etc/roundcube/config.inc.php de tal forma que incluyamos o modifiquemos los siguientes parametros:
//…
$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


Comentarios