Guía para la implementación de servicios integrados a Samba4 como Active Directory Domain Controller (AD DC) en Debian 9/10 – Parte 8

Samba logo

Instalación y configuración de Postfix/Dovecot Mail Server e integración con Samba AD DC.

Instalación de paquetes necesarios

export DEBIAN_FRONTEND=noninteractive
apt install postfix-pcre postfix-ldap dovecot-core dovecot-ldap dovecot-pop3d dovecot-imapd dovecot-lmtpd ldap-utils mailutils
unset DEBIAN_FRONTEND

Configuración del sistema

Crear grupo y usuario locales para el almacén de buzones vmail.

groupadd -g 5000 vmail
useradd -m -g 5000 -u 5000 -d /var/vmail -s /usr/sbin/nologin -c "Virtual Mailbox Storage" vmail

Crear certificado de seguridad TLS/SSL.

Para Debian 9 Stretch.

openssl req -x509 -nodes -days 3650 -sha512 \
    -subj "/C=CU/ST=Provincia/L=Ciudad/O=EXAMPLE TLD/OU=IT/CN=mail.example.tld/[email protected]/" \
    -reqexts SAN -extensions SAN \-config <(cat /etc/ssl/openssl.cnf \
        <(printf "\n[SAN]\nsubjectAltName=DNS:smtp.example.tld,\
        DNS:pop3.example.tld,DNS:imap.example.tld,\
        DNS:webmail.example.tld,IP:192.168.0.4")) \
    -newkey rsa:4096 \
    -out /etc/ssl/certs/exampleMail.crt \
    -keyout /etc/ssl/private/exampleMail.key

Para Debian 10 Buster.

openssl req -x509 -nodes -days 3650 -sha512 \
    -subj "/C=CU/ST=Provincia/L=Ciudad/O=EXAMPLE TLD/OU=IT/CN=mail.example.tld/[email protected]/" \
    -addext "subjectAltName = DNS:smtp.example.tld,\
        DNS:pop3.example.tld,DNS:imap.example.tld,\
        DNS:webmail.example.tld,IP:192.168.0.4" \
    -newkey rsa:4096 \
    -out /etc/ssl/certs/exampleMail.crt \
    -keyout /etc/ssl/private/exampleMail.key

openssl dhparam -out /etc/ssl/dh2048.pem 2048
chmod 0444 /etc/ssl/certs/exampleMail.crt
chmod 0400 /etc/ssl/private/exampleMail.key

Comprobar correcta creación del certificado.

openssl x509 -in /etc/ssl/certs/exampleMail.crt -text -noout

Integración con Samba AD DC

Crear nueva Cuenta de Usuario del Dominio para el servicio postfix.

samba-tool user create 'postfix' 'P@s$w0rd.345' \
    --surname='Dovecot Roundcube' \
    --given-name='Postfix' \
    --company='EXAMPLE' \
    --description='Mail Service Account'

Evitar que la cuenta expire.

samba-tool user setexpiry postfix --noexpiry

Crear registros DNS.

samba-tool dns add localhost example.tld mail A '192.168.0.4' -U 'administrator'%'P@s$w0rd.123'
samba-tool dns add localhost 0.168.192.in-addr.arpa 4 PTR 'mail.example.tld.' -U 'administrator'%'P@s$w0rd.123'
samba-tool dns add localhost example.tld @ MX 'mail.example.tld 10' -U 'administrator'%'P@s$w0rd.123'
samba-tool dns add localhost example.tld @ TXT "'v=spf1 a:example.tld mx -all'" -U 'administrator'%'P@s$w0rd.123'
samba-tool dns add localhost example.tld smtp CNAME 'mail.example.tld' -U 'administrator'%'P@s$w0rd.123'
samba-tool dns add localhost example.tld pop3 CNAME 'mail.example.tld' -U 'administrator'%'P@s$w0rd.123'
samba-tool dns add localhost example.tld imap CNAME 'mail.example.tld' -U 'administrator'%'P@s$w0rd.123'
samba-tool dns add localhost example.tld webmail CNAME 'mail.example.tld' -U 'administrator'%'P@s$w0rd.123'

Crear nueva Unidad Organizativa Email para grupos de correo electrónico, perteneciente a ACME.

samba-tool ou create 'OU=Email,OU=ACME,DC=example,DC=tld' --description='Email Groups Organizational Unit'

Crear Grupos de Usuarios de correo electrónico.

samba-tool group add Everyone --groupou='OU=Email,OU=ACME' --description='All Users Email Group' --mail='[email protected]'

samba-tool group add Management --groupou='OU=Email,OU=ACME' --description='Management Email Group' --mail='[email protected]'

samba-tool group add Support --groupou='OU=Email,OU=ACME' --description='Technical Support Email Group' --mail='[email protected]'

Añadir usuarios a los grupos creados.

samba-tool group addmembers ‘Everyone’ sheldon,leonard,rajesh
samba-tool group addmembers ‘Management’ sheldon
samba-tool group addmembers ‘Support’ rajesh,sheldon

Configuración de Postfix

Realizar copia de seguridad de los ficheros de configuración.

cp /etc/postfix/main.cf{,.org}
cp /etc/postfix/master.cf{,.org}

Declarar dominio de correo a gestionar.

postconf -e "mydomain = example.tld"
postconf -e "smtpd_sasl_local_domain = example.tld"
postconf -e "virtual_mailbox_domains = example.tld"

Definir transporte virtual del dominio de correo.

postconf -e "virtual_transport = lmtp:unix:private/dovecot-lmtp"

Definir usuarios virtuales de correo electrónico.

postconf -e "smtpd_sender_login_maps = proxy:ldap:/etc/postfix/virtual_sender_login_maps.cf"

nano /etc/postfix/virtual_sender_login_maps.cf

server_host = dc.example.tld
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = [email protected]
bind_pw = P@s$w0rd.345
search_base = OU=ACME,DC=example,DC=tld
scope = sub
query_filter = (&(objectClass=person)(userPrincipalName=%s)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
result_attribute = userPrincipalName
debuglevel = 0

Definir buzón almacén de correo electrónico.

postconf -e "always_bcc = [email protected]"

Definir buzones virtuales de correo electrónico.

postconf -e "virtual_minimum_uid = 5000"
postconf -e "virtual_uid_maps = static:5000"
postconf -e "virtual_gid_maps = static:5000"
postconf -e "virtual_mailbox_base = /var/vmail"
postconf -e "virtual_mailbox_maps = proxy:ldap:/etc/postfix/virtual_mailbox_maps.cf"

nano /etc/postfix/virtual_mailbox_maps.cf

server_host = dc.example.tld
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = [email protected]
bind_pw = P@s$w0rd.345
search_base = OU=ACME,DC=example,DC=tld
scope = sub
query_filter = (&(objectClass=person)(userPrincipalName=%s)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
result_attribute = userPrincipalName
result_format = %d/%u/Maildir/
debuglevel = 0

Definir listas y aliases virtuales de correo electrónico.

postconf -e "virtual_alias_maps = proxy:ldap:/etc/postfix/virtual_list_maps.cf, proxy:ldap:/etc/postfix/virtual_alias_maps.cf"

nano /etc/postfix/virtual_list_maps.cf

server_host = dc.example.tld
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = [email protected]
bind_pw = P@s$w0rd.345
search_base = OU=ACME,DC=example,DC=tld
scope = sub
query_filter = (&(objectClass=person)(memberOf=cn=%u,OU=Email,OU=ACME,DC=example,DC=tld)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
result_attribute = userPrincipalName
debuglevel = 0

nano /etc/postfix/virtual_alias_maps.cf

server_host = dc.example.tld
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = [email protected]
bind_pw = P@s$w0rd.345
search_base = OU=ACME,DC=example,DC=tld
scope = sub
query_filter = (&(objectClass=person)(otherMailbox=%s)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
result_attribute = userPrincipalName
debuglevel = 0

NOTA: El atributo otherMailbox puede editarse utilizando el comando samba-tool user edit ; o mediante las herramientas administrativas GUI RSAT o Apache Directory Studio.

Habilitar puerto seguro TCP\587 Submission y establecer comunicación con dovecot.

nano /etc/postfix/master.cf

submission inet n - y - 10 smtpd
    -o syslog_name=postfix/submission
    -o smtpd_tls_security_level=encrypt
    -o smtpd_sasl_auth_enable=yes
    -o smtpd_tls_cert_file=/etc/ssl/certs/exampleMail.crt
    -o smtpd_tls_key_file=/etc/ssl/private/exampleMail.key
    -o smtpd_client_restrictions=permit_sasl_authenticated,reject
dovecot unix - n n - - pipe
    flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}

Comprobaciones

postmap -q [email protected] ldap:/etc/postfix/virtual_sender_login_maps.cf
postmap -q [email protected] ldap:/etc/postfix/virtual_mailbox_maps.cf
postmap -q [email protected] ldap:/etc/postfix/virtual_list_maps.cf
postmap -q [email protected] ldap:/etc/postfix/virtual_alias_maps.cf

Reiniciar el servicio.

systemctl restart postfix.service

Configuración del servicio Dovecot

Realizar salva de seguridad del fichero de configuración principal.

cp /etc/dovecot/dovecot.conf{,.org}

Crear script de alerta de sobreuso de cuota y asignar permiso de ejecución.

nano /usr/local/bin/quota-warning

#!/bin/bash

PERCENT=${1}
USER=${2}
DOMAIN=${USER#*@}

cat << EOT | /usr/lib/dovecot/dovecot-lda -d ${USER} -o "plugin/quota=maildir:User quota:noenforcing"
From: no-reply@${DOMAIN}
Subject: ALERTA: USO DE CUOTA SUPERIOR AL ${PERCENT}%

ESTIMADO(A) USUARIO(A),

SU BUZON DE CORREO ACTUALMENTE OCUPA MAS DEL ${PERCENT}% DE LA CUOTA
ASIGNADA. BORRE ALGUNOS CORREOS VIEJOS PARA PODER SEGUIR RECIBIENDO
EMAILS.

MENSAJE AUTOMATIZADO DEL SISTEMA
EOT

exit 0

chmod +x /usr/local/bin/quota-warning

Integración con Samba AD DC

nano /etc/dovecot/dovecot.conf

userdb {
    args = /etc/dovecot/dovecot-ldap.conf
    driver = ldap
}
passdb {
    args = /etc/dovecot/dovecot-ldap.conf
    driver = ldap
}

nano /etc/dovecot/dovecot-ldap.conf

hosts = dc.example.tld:389
auth_bind = yes
ldap_version = 3
dn = [email protected]
dnpass = P@s$w0rd.345
base = OU=ACME,DC=example,DC=tld
deref = never
scope = subtree
user_filter = (&(objectClass=person)(userPrincipalName=%u)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
user_attrs = maxStorage=quota_rule=*:bytes=%$
pass_filter = (&(objectClass=person)(userPrincipalName=%u)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
pass_attrs = userPassword=password
default_pass_scheme = CRYPT

NOTA: El atributo maxStorage puede editarse utilizando el comando samba-tool user edit ; o mediante las herramientas administrativas GUI RSAT o Apache Directory Studio.

Reiniciar el servicio.

systemctl restart dovecot.service

Instalación y configuración del servicio Webmail

Descomprimir el paquete de instalación de Rouncubemail en el sistema y asignar permisos.

tar -xzmf roundcubemail-*-complete.tar.gz -C /opt/
mv /opt/roundcubemail-* /opt/roundcube
ln -s /opt/roundcube/bin/{cleandb,gc}.sh /etc/cron.daily/
chown -R root:www-data /opt/roundcube/
find /opt/roundcube/ -type d \-exec chmod 0755 {} \;
find /opt/roundcube/ -type f \-exec chmod 0644 {} \;
chmod 0770 /opt/roundcube/{logs,temp}

Instalar gestor de base de datos PostgreSQL.

apt install postgresql

Crear base de datos para Roundcubemail.

su - postgres
psql
\password postgres
CREATE DATABASE roundcubemail WITH TEMPLATE template0 ENCODING 'UNICODE';
\q

Inicializar la base de datos.

psql -h localhost -U postgres -W -f /opt/roundcube/SQL/postgres.initial.sql roundcubemail

Variante Nginx

Instalación de paquetes necesarios.

apt install nginx-full php-fpm php-pear php-mbstring php-intl php-ldap php-gd php-imagick php-pgsql

Definir zona horaria.

sed -i "s/^;date\.timezone =.*$/date\.timezone = 'America\/Havana'/;
        s/^;cgi\.fix_pathinfo=.*$/cgi\.fix_pathinfo = 0/" \
        /etc/php/7*/fpm/php.ini

Habilitar el servicio.

nano /etc/nginx/sites-available/roundcube
ln -s /etc/nginx/sites-available/roundcube /etc/nginx/sites-enabled/

Variante Apache

Instalación de paquetes necesarios.

apt install apache2 libapache2-mod-php php-pear php-mbstring php-intl php-ldap php-gd php-imagick php-pgsql

Definir zona horaria.

sed -i "s/^;date\.timezone =.*$/date\.timezone = 'America\/Havana'/;
        s/^;cgi\.fix_pathinfo=.*$/cgi\.fix_pathinfo = 0/" \
        /etc/php/7*/apache2/php.ini

Habilitar el servicio.

nano /etc/apache2/sites-available/roundcube.conf
a2ensite roundcube.conf

Integración con Samba AD DC

nano /opt/roundcube/config/config.inc.php

// Samba AD DC Address Book
$config['autocomplete_addressbooks'] = array(
    'sql',
    'global_ldap_abook'
);
$config['ldap_public']["global_ldap_abook"] = array(
    'name'              => 'Mailboxes',
    'hosts'             => array('dc.example.tld'),
    'port'              => 389,
    'use_tls'           => false,
    'ldap_version'      => '3',
    'network_timeout'   => 10,
    'user_specific'     => false,
    'base_dn'           => 'OU=ACME,DC=example,DC=tld',
    'bind_dn'           => '[email protected]',
    'bind_pass'         => 'P@s$w0rd.345',
    'writable'          => false,
    'search_fields' => array(
        'mail',
        'cn',
        'sAMAccountName',
        'displayName',
        'sn',
        'givenName',
    ),
    'fieldmap' => array(
        'name'          => 'cn',
        'surname'       => 'sn',
        'firstname'     => 'givenName',
        'title'         => 'title',
        'email'         => 'mail:*',
        'phone:work'    => 'telephoneNumber',
        'phone:mobile'  => 'mobile',
        'phone:workfax' => 'facsimileTelephoneNumber',
        'street'        => 'street',
        'zipcode'       => 'postalCode',
        'locality'      => 'l',
        'department'    => 'department',
        'notes'         => 'description',
        'photo'         => 'jpegPhoto',
    ),
    'sort'          => 'cn',
    'scope'         => 'sub',
    'filter'        => '(&(|(objectclass=person))(!([email protected]))(!(userAccountControl:1.2.840.113556.1.4.803:=2)))',
    'fuzzy_search'  => true,
    'vlv'           => false,
    'sizelimit'     => '0',
    'timelimit'     => '0',
    'referrals'     => false,
    'group_filters' => array(
        'departments' => array(
            'name'    => 'Lists',
            'scope'   => 'sub',
            'base_dn' => 'OU=Email,OU=ACME,DC=example,DC=tld',
            'filter'  => '(objectClass=group)',
        ),
    ),
);

Como referencia, debajo se muestra la lista de artículos de esta serie.

  1. Introducción
  2. Configuración de parámetros de red y sincronización de tiempo
  3. Instalación y configuración de Samba4 como AD DC
  4. Instalación y configuración del servidor Bind9 DNS e integración con Samba AD DC
  5. Instalación y configuración del servidor NTP e integración con Samba AD DC
  6. Creación de Unidades Organizativas, Grupos y Cuentas de Usuarios
  7. Instalación y configuración de Squid Proxy e integración con Samba AD DC
  8. Instalación y configuración de eJabberd XMPP e integración con Samba AD DC
  9. Instalación y configuración de Postfix, Dovecot, Roundcube Mail e integración con Samba AD DC
  10. Conclusiones

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 5 / 5. Recuento de votos: 1

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

1 comentario

  1. Firefox 86.0 Firefox 86.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0

    Saludos, he probado esta guía paso a paso, pero el correo no me funciona, no puedo acceder ni por el roundcube ni por el outlook,

Responder a Armando Cancelar la respuesta

Tu dirección de correo electrónico no será publicada.


*