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 = claveLo 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