Alojamiento virtual de Postfix con backend LDAP y con Dovecot como servidor IMAP/POP3 en Ubuntu Bionic Beaver 18.04 LTS

Este howto describirá cómo instalar y configurar el alojamiento de correo virtual con un backend LDAP.

El software que utilizaremos en este howto:Postfix(MTA), Dovecot(IMAP / POP3),Gnarwl(vacaciones), OpenLDAP(LDAP) yvMailpanelcomo interfaz de gestión.

Son opcionalesProftpd FTP,Roundcube(webmail) yMariaDB (backend SQL para Roundcube).

A mí me ha funcionado, pero no puedo garantizar que esta configuración te funcione a ti, por lo que este manual no ofrece ninguna garantía.

Supuestos

Este tutorial asume las siguientes configuraciones, si tu instalación difiere de ésta, entonces reemplaza las entradas de abajo con tu configuración real.

Ruta de entrega del correo (buzones):

/home/vmail/

Usuariovmail:

UID:1000, GID:1000

Usuariopostfix:

UID: 108, GID:108

Dn base de OpenLDAP:

dc=example,dc=tld

Cuenta de administrador de OpenLDAP:

cn=admin,dc=example,dc=tld

vMailpanel search dn:

o=hosting,dc=example,dc=tld

Una cuenta de sólo lectura para el árbol o=hosting,dc=example,dc=tld:

cn=vmail,o=hosting,dc=example,dc=tld

Durante esta guía utilizarás a root como usuario.

Si quieres, por ejemplo, o=maildomains o ou=domains, asegúrate de sustituir o=hosting por lo que quieras, especialmente en el acl.ldif. Este archivo acl es estricto, phamm no funcionará correctamente si no es exactamente como debe ser. Si quieres un usuario de sólo lectura diferente a phamm, sustituye cn=phamm por cn=wat-you en todas las partes de esta guía.

Esta guía también asume que has instalado y configurado tu servidor Ubuntu según tus necesidades, hay muchas buenas guías enHowtoforgepor ejemplo:

El servidor perfecto – Ubuntu 18.04 (Bionic Beaver) con Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot e ISPConfig 3.1

Puedes parar después de la instalación y configuración de Apache2.

Paso 1: Descarga vMailpanel

Descarga el paquete vMailpanel:

cd /usr/share

Consigue la última versión de vMailpanel:

git clone https://git.com/wolmfan68/vMailpanel

Bien, ahora podemos empezar.

Paso 2: Instalar y configurar OpenLDAP

Instala OpenLDAP y ldap-utils:

apt -y install slapd ldap-utils php-ldap

Reconfigura slapd para asegurarte de que refleja tu configuración deseada

dpkg-reconfigure slapd

Tendrás que responder a algunas preguntas:

Omit OpenLDAP server configuration? No
 DNS domain name: example.tld ==>put your domain name here
Organization name: example.tld ==> put your organization here
 Administrator password: secret ==> put your password
 Confirm password: secret 
Database backend to use: MDB
 Do you want the database to be removed when slapd is purged? Yes
 Move old database? Yes

Entra en el directorio /etc/ldap/schema:

cd /etc/ldap/schema

Copia los esquemas phamm.schema y perversia.net.schema del paquete phamm al directorio schema:

cp /usr/share/vMailbox/schema/* /etc/ldap/schema.

Ahora añadimos los esquemas a openldap.

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/phamm.ldif 
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/ISPEnv2.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/amavis.ldif 
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/pureftpd.ldif 
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/perversia.net.ldif

Ahora creamos la entrada o=hosting, y la cuenta vmail.

Modifica el texto de abajo según tus necesidades y deseos y genera una contraseña para la cuenta de vmail. El hash que hay actualmente en este archivo establece la contraseña como de sólo lectura

Para crear el hash para la cuenta de vmail emite el siguiente comando:

slappasswd -h {MD5}

Escribe la contraseña deseada dos veces y copia el resultado en el texto de abajo.

nano base.ldif

Contenido de base.ldif

dn: o=hosting,dc=example,dc=tld
objectClass: organization
objectClass: top
o: hosting description: Hosting Organization
# Read only account
dn: cn=vmail,o=hosting,dc=example,dc=tld
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: vmail
userPassword: {MD5}M267sheb6qc0Ck8WIPOvQA==
description: Read only account

Carga el dn base en la base de datos con el siguiente comando:

ldapmodify -a -D cn=admin,dc=example,dc=tld -W -f base.ldif

Ahora tenemos que modificar las acl para que se dé el acceso correcto a cada tipo de usuario.

ldapmodify -Y EXTERNAL -H ldapi:/// -f acl-remove.ldif
ldapmodify -Y EXTERNAL -H ldapi:/// -f acl-new.ldif

Puedes comprobar las nuevas acl’s con el siguiente comando:

slapcat -n 0

Con esto concluye la configuración de OpenLDAP.

Paso 3: Instalar y configurar Postfix

Antes de esto, necesitamos tener el usuariovmaily su directorio raíz.

Crea el usuario y el grupovmail:

useradd vmail

Por defecto, también se crea el grupovmail.

Comprueba en/etc/passwdel número de uid y de grupo reales.

A continuación, crea el directoriovmaily establece la propiedad para el usuario y el grupovmail.

mkdir /home/vmail
mkdir /home/vmail/domains 
chown -R vmail:vmail /home/vmail

Ejecuta el siguiente comando para instalar Postfix y otras aplicaciones necesarias:

apt install postfix postfix-ldap

Se te harán dos preguntas. Contesta lo siguiente:

Tipo de configuración general del correo:<–Solo
Nombre del correo del sistema:<– correo.ejemplo.tld

No instalamos sasl ya que utilizaremos el LDA de Dovecot y el deliver.

Ahora creamos los certificados para TLS:

mkdir /etc/postfix/ssl
cd /etc/postfix/ssl/
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csr
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650

Nota: puedes copiar todos los archivos de examples/postfix a tu directorio etc/postfix y hacer los cambios correspondientes. Por razones de exhaustividad, a continuación daré la configuración completa.

Ahora vamos a configurar postfix:

cd /etc/postfix 
mv /etc/postfix/main.cf /etc/postfix/main.cf.bck
nano /etc/postfix/main.cf

Y pegar lo siguiente en él. Ten en cuenta que esta configuración permite el envío (relaying) de correos por parte de usuarios autentificados, y también el envío de correos locales (como por ejemplo a root, postmaster, …) a los respectivos alias si están configurados.

smtpd_banner = $nombre_del_hostel ESMTP $nombre_del_correo
biff = no

# append_dominio es tarea del MUA.
append_dot_mydomain = no

# Descomenta la siguiente línea para generar avisos de «correo retrasado»
delay_warning_time = 4h

# Parámetros TLS
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache

myhostname = mail.example.tld
alias_maps = hash:/etc/aliases,
alias_database = hash:/etc/aliases
myorigin = localhost
relayhost =
mynetworks = 127.0.0.0/8
dovecot_destination_recipient_limit = 1
mailbox_command = /usr/lib/deliver
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
#smtp_bind_address = tu dirección ip (opcional) ==>desmarca y cambia la dirección ip de tu configuración.
smtpd_sasl_local_domain =
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
broken_sasl_auth_clients = sí
smtpd_tls_auth_only = no

smtp_use_tls = sí
smtp_tls_note_starttls_offer = sí
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

home_mailbox = Maildir/

smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_invalid_hostname
reject_non_fqdn_hostname
reject_non_fqdn_sender
reject_non_fqdn_recipient
reject_unauth_destination
reject_unauth_pipelining
reject_invalid_hostname
reject_unknown_sender_domain
reject_rbl_client list.dsbl.org
reject_rbl_client cbl.abuseat.org
reject_rhsbl_sender dsn.fc-ignorant.org

smtpd_data_restrictions =
reject_unauth_pipelining,
reject_multi_recipient_bounce,
permit

smtpd_helo_required = yes

# transport_maps
maildrop_destination_concurrency_limit = 2
maildrop_destination_recipient_limit = 1
gnarwl_destination_concurrency_limit = 1
gnarwl_destination_recipient_limit = 1
transport_maps = hash:/etc/postfix/transport, ldap:/etc/postfix/ldap-transport.cf
mydestination = $transport_maps, localhost, localhost.localdomain, $myhostname, localhost.$mydomain, $mydomain

virtual_alias_maps =
ldap:/etc/postfix/ldap-aliases.cf,
ldap:/etc/postfix/ldap-virtualforward.cf,
ldap:/etc/postfix/ldap-accountsmap.cf

# cuentas virtuales para la entrega
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps =
ldap:/etc/postfix/ldap-accounts.cf
virtual_minimum_uid = 1000 ==> Cámbialo por el uid real del usuario vmail
virtual_uid_maps = static:1000==> Cámbialo por el uid real del usuario vmail
virtual_gid_maps = static:1000 ==> Cámbialo por eluid real del usuario vmail

local_recipient_maps = $alias_maps

recipient_bcc_maps = ldap:/etc/postfix/ldap-vacation.cf

nano /etc/postfix/master.cf

Y pega lo siguiente en él (añade el final):

dovecot   unix  -       n       n       -       -       pipe
         flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
gnarwl    unix  -       n       n       -       -       pipe
         flags=F  user=vmail argv=/usr/bin/gnarwl -a ${user}@${nexthop} -s ${sender}

Ahora tenemos que escribir los diferentes archivos ldap-xxx.cf

nano ldap-accounts.cf

Y pegar en él lo siguiente

server_host = localhost
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = cn=vmail,o=hosting,dc=example,dc=tld
bind_pw = readmonly
search_base = o=hosting,dc=example,dc=tld
scope = sub
query_filter = (&(&(objectClass=VirtualMailAccount)(mail=%s))(forwardActive=FALSE)(accountActive=TRUE)(delete=FALSE))
result_attribute = mailbox

nano ldap-accounstmap.cf

Y pega lo siguiente

server_host = localhost
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = cn=vmail,o=hosting,dc=example,dc=tld
bind_pw = readonly
search_base = o=hosting,dc=example,dc=tld
scope = sub
query_filter = (&(&(objectClass=VirtualMailAccount)(mail=%s))(forwardActive=FALSE)(accountActive=TRUE)(delete=FALSE))
result_attribute = mail

nano ldap-aliases.cf

Y pega lo siguiente

server_host = localhost
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = cn=vmail,o=hosting,dc=example,dc=tld
bind_pw = readonly
search_base = o=hosting,dc=example,dc=tld
scope = sub
query_filter = (&(&(objectClass=VirtualMailAlias)(mail=%s))(accountActive=TRUE))
result_attribute = maildrop

nano ldap-transport.cf

Y pega lo siguiente

server_host = localhost
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = cn=vmail,o=hosting,dc=example,dc=tld
bind_pw = readonly
search_base = o=hosting,dc=example,dc=tld
scope = sub
query_filter = (&(&(vd=%s)(objectClass=DominioVirtual))(accountActive=TRUE)(delete=FALSE))
result_attribute = postfixTransport

nano ldap-vacaciones.cf

Y pega en él lo siguiente

server_host = localhost
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = cn=vmail,o=hosting,dc=example,dc=tld
bind_pw = readonly
search_base = o=hosting,dc=example,dc=tld
scope = sub
query_filter = (&(&(objectClass=VirtualMailAccount)(mail=%s))(vacationActive=TRUE)(forwardActive=FALSE)(accountActive=TRUE)(delete=FALSE))
result_attribute = mailAutoreply

nano ldap-virtualforward.cf

Y pega en él lo siguiente

server_host = localhost
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = cn=vmail,o=hosting,dc=example,dc=tld
bind_pw = readonly
search_base = o=hosting,dc=example,dc=tld
scope = sub
query_filter = (&(&(objectClass=Cuenta de correo virtual)(mail=%s))(vacationActive=FALSE)(forwardActive=TRUE)(accountActive=TRUE)(delete=FALSE))
result_attribute = maildrop

Con esto concluye la configuración de Postfix.

Paso 4: Instalar y configurar Dovecot

apt install dovecot-imapd dovecot-pop3d dovecot-ldap

Esto instalará dovecot y todos los archivos necesarios y también creará los certificados SSL estándar para IMAP y POP3.

Primero, cambiamos al directorio de dovecot.

Nota: puedes copiar todos los archivos de examples/dovecot a tu directorio etc/dovecot y hacer los cambios correspondientes. Por razones de exhaustividad, a continuación daré la configuración completa.

 cd /etc/dovecot

Ahora configuramos los diferentes archivos de configuración de dovecot.

nano dovecot-ldap.conf.ext

Y haz los siguientes cambios

hosts = localhost:389
ldap_version = 3
auth_bind = yes
dn= cn=vmail,o=hosting,dc=example,dc=tld
dnpass = sólo lectura
base = o=hosting,dc=hosting,dc=tld
scope= subárbol
deref = nunca

user_attrs = quota=quota=maildir:storage
user_attrs = quota=quota=maildir:storage=%$B
user_filter = (&(objectClass=VirtualMailAccount)(accountActive=TRUE)(mail=%u))
pass_attrs = mail,userPassword
pass_filter = (&(objectClass=VirtualMailAccount)(accountActive=TRUE)(mail=%u))
default_pass_scheme = MD5

cd conf.d
vi 10-auth.conf

Y cambia la secciónBases de datos de contraseñas yusuarios por esto

#!incluye auth-deny.conf.ext
#!incluye auth-master.conf.ext

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

vi 10-mail.conf 

Y haz los siguientes cambios

mail_location = maildir:/home/vmail/%d/%u

mail_uid = 1000 ==> cambiar al valor real del uidde vmail

mail_gid = 1000 ==> cámbialo por el valor real del gidde vmail

first_valid_uid = 1000 ==> cámbialo por elvalor real de vmail uid

first_valid_gid = 1000==> cámbialo por el valor real del gid de vmail

vi 10-master.conf 

Y haz los siguientes cambios

unix_listener auth-userdb {
mode = 0666
user = vmail
group = vmail
}

# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
}

 vi 15-lda.conf

Y haz los siguientes cambios

postmaster_address = [email protected]

lda_mailbox_autocreate = sí

Esto concluye la configuración de Dovecot.

Paso 5: Instalar y configurar gnarwl

Vamos a instalar gnarwl:

apt install gnarwl

Ahora vamos a configurar gnarwl.

Primero, vamos a hacer una copia de seguridad del archivo de configuración original y a sustituirlo por uno nuevo.

mv /etc/gnarwl.conf /etc/gnarwl.conf.bck

Ahora creamos el nuevo archivo conf:

vi /etc/gnarwl.conf

E inserta lo siguiente:

map_sender $sender
map_receiver $recepient
map_subject $subject
map_field $begin vacationStart
map_field $end vacationEnd
map_field $fullname cn
map_field $deputy vacationForward
map_field $reply mail
server localhost
port 389
scope sub
login cn=vmail,o=hosting,dc=example,dc=tld
password readonly
protocol 0
base dc=example,dc=tld
queryfilter (&(mailAutoreply=$recepient)(vacationActive=TRUE))
result vacationInfo
blockfiles /var/lib/gnarwl/block/
umask 0644
blockexpire 48
mta /usr/sbin/sendmail -F $recepient -t $sender
maxreceivers 64
maxheader 512
charset ISO8859-1
badheaders /var/lib/gnarwl/badheaders.db
blacklist /var/lib/gnarwl/blacklist.db
forceheader /var/lib/gnarwl/header.txt
forcefooter /var/lib/gnarwl/footer.txt
recvheader To Cc
loglevel 3

Haz que el directorio gnarwl sea legible para el usuario vmail

chown -R vmail:vmail /var/lib/gnarwl/

A continuación, tenemos que añadir el transporte gnarwl a postfix

vi /etc/postfix/transport

Inserta lo siguiente:

.autoreply      gnarwl:

Ahora tenemos que crear el transport.db

postmap /etc/postfix/transport

Esto concluye la configuración de gnarwl.

Paso 6: Instalar y configurar vMailpanel

Como ya hemos descargado vMailpanel, podemos empezar directamente con la configuración de la interfaz de vMailpanel.

chown -R www-data:www-data /usr/share/phamm
cd /usr/share/vMailpanel

Ahora configuraremos phamm para su uso real.

cp config.inc.example.php config.inc.php
nano config.inc.php

Cambia los parámetros de conexión ldap para que se ajusten a tu configuración real.

// *============================*
// *=== LDAP Server Settings ===*
// *============================*

// The server address (IP or FQDN)
define ('LDAP_HOST_NAME','127.0.0.1');

// The protocol version [2,3]
define ('LDAP_PROTOCOL_VERSION','3');

// The server port
define ('LDAP_PORT','389');

// The container
define ('SUFFIX','dc=example,dc=tld');

// The admin bind dn (could be rootdn)
define ('BINDDN','cn=admin,dc=example,dc=tld');

// The Phamm container
define ('LDAP_BASE','o=hosting,dc=example,dc=tld');

y cambia

// Welcome message
define ('SEND_WELCOME',1);
$welcome_msg = '../welcome_message.txt';
$welcome_subject = 'Welcome!';
# $welcome_sender = '[email protected]';
$welcome_bcc = '[email protected]';

Esto enviará un mensaje de bienvenida y una copia oculta (bcc) a tu cuenta postmaster.

Habilita el plugin fpt y person quitando el // en la sección de plugins. Si quieres también puedes habilitar los plugins davical y/o jabber, el esquema necesario para estos plugins está instalado.

En el config.inc.php encontrarás:

define ('DELETE_ACCOUNT_IMMEDIATELY', false);

Si lo estableces como verdadero, la eliminación de la cuenta o del dominio tiene efecto inmediato. Sin embargo, no se elimina el buzón físico (ni el directorio del dominio). Para eliminar el buzón físico, debemos utilizar el script cleaner.sh. Éste se describe a continuación.

Puedes editarplugins/mail.xmlpara cambiar los valores por defecto de SMTP y cuota, modificándolos según tus necesidades. El valor por defecto es de 1GB de cuota.

Puedes editarplugins/ftp.xmlpara cambiar los valores por defecto del directorio ftp (base) y la cuota, modifícalos según tus necesidades.

No olvides crear los alias y/o buzones para postmaster, webmaster ya que estos son utilizados por los funcionarios y los ISP para enviar el correo en caso de … No tener estas direcciones podría suponer entrar en una lista negra.

Por defecto se crean los alias [email protected] y [email protected] que por defecto son [email protected].

Ahora el script limpiador:

cp tools/cleaner.sh /home/vmail/cleaner.sh

Cambia lo siguiente en cleaner.sh

BINDDN="cn=admin,dc=example,dc=tld"
BINDPW="password"
LDAP_BASE="o=hosting,dc=example,dc=tld"

para que refleje tu instalación

nano /home/vmail/cleaner.sh
crontab -e

Inserta lo siguiente:

*/10 * * * * /home/vmail/cleaner.sh

Esto ejecutará el script limpiador cada 10 minutos. Siéntete libre de cambiar el tiempo.

Ahora añadiremos vMailpanel a Apache

nano /etc/apache2/conf-enabled/000-default.conf

Y añade entre las entradas <VirtualHost> </VirtualHost> lo siguiente:

Alias /vmailpanel /usr/share/vMailpanel/public

Con esto concluye la configuración de vMailpanel.

Paso 7: Instalar y configurar Roundcube webmail

Primero, creamos una base de datos llamadaroundcube:

mysqladmin -u root -p create roundcube

A continuación, vamos a la shell de MySQL:

mysql -u root -p

En la shell de MySQL, creamos el usuarioroundcubecon la contraseñaroundcube_password(sustitúyela por una contraseña de tu elección) que tiene privilegiosSELECT,INSERT,UPDATE,DELETEen la base de datosroundcube. Este usuario será utilizado por Postfix y Courier para conectarse a la base de datos deroundcube:

GRANT SELECT, INSERT, UPDATE, DELETE ON roundcube.* TO 'roundcube'@'localhost' IDENTIFIED BY 'roundcube_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON roundcube.* TO 'roundcube'@'localhost.localdomain' IDENTIFIED BY 'roundcube_password';
FLUSH PRIVILEGES;

Ahora descargamos e instalamos Roundcube:

cd/usr/src 
wget https://github.com/roundcube/roundcubemail/releases/download/1.3.6/roundcubemail-1.3.6.tar.gz
tar xvzf roundcubemail-1.3.6.tar.gz
mv roundcubemail-1.3.6 /var/www/roundcube
chown -R www-data:www-data /var/www/roundcube
cd /var/www/roundcube

Busca siempre la última versión de Roundcube y descárgate esa y modifica los comandos anteriores a la versión de Roundcube que te hayas descargado.

https://roundcube.net/download/

Ahora cargamos las tablas sql en la base de datos que hemos creado antes:

mysql -u roundcube -p roundcube <  SQL/mysql.initial.sql

Ahora editamos la configuración de Roundcube:

cp config/config.inc.php.sample config/config.inc.php

Establece la configuración de la base de datos:

nano config/config.inc.php

Cambia la siguiente línea en la configuración de la base de datos:

$rcmail_config['db_dsnw'] = 'mysql://roundcube:[email protected]/roundcube';

Y cambia lo siguiente

De:

// List of active plugins (in plugins/ directory)
$config['plugins'] = array(
    'archive', 
    'zipdownload',

Hasta:

// List of active plugins (in plugins/ directory)
$config['plugins'] = array(
    'archive', 
    'zipdownload',
    'password',
    'vacation', 

Cambiar:

chars.$rcmail_config['des_key'] = 'rcmail-!24ByteDESkey*Str';

Por:

chars.$rcmail_config['des_key'] = 'your-own-24-digitkeystring';

Cambiar:

$rcmail_config['default_host'] = '';

A:

$rcmail_config['default_host'] = 'localhost'; 

Cambiar:

$rcmail_config['smtp_server'] = ''; 

A

$rcmail_config['smtp_server'] = 'localhost'; 

La configuración del plugin de contraseñas:

cp plugins/password/config.inc.php.dist plugins/password/config.inc.php

Edita la configuración:

nano plugins/password/config.inc.php

Cambia las siguientes entradas

De:

$rcmail_config['password_driver'] = 'sql';

Para:

$rcmail_config['password_driver'] = 'ldap'; 

De:

// LDAP Driver options
// -------------------
// LDAP server name to connect to.
// You can provide one or several hosts in an array in which case the hosts are tried from left to right.
// Exemple: array('ldap1.exemple.com', 'ldap2.exemple.com');
// Default: 'localhost'
$rcmail_config['password_ldap_host'] = 'localhost';

// LDAP server port to connect to
// Default: '389'
$rcmail_config['password_ldap_port'] = '389';

// TLS is started after connecting
// Using TLS for password modification is recommanded.
// Default: false
$rcmail_config['password_ldap_starttls'] = false;

// LDAP version
// Default: '3'
$rcmail_config['password_ldap_version'] = '3';

// LDAP base name (root directory)
// Exemple: 'dc=exemple,dc=com'
$rcmail_config['password_ldap_basedn'] = 'dc=exemple,dc=com';

// LDAP connection method
// There is two connection method for changing a user's LDAP password.
// 'user': use user credential (recommanded, require password_confirm_current=true)
// 'admin': use admin credential (this mode require password_ldap_adminDN and password_ldap_adminPW)
// Default: 'user'
$rcmail_config['password_ldap_method'] = 'user';

// LDAP Admin DN
// Used only in admin connection mode
// Default: null
$rcmail_config['password_ldap_adminDN'] = null;

// LDAP Admin Password
// Used only in admin connection mode
// Default: null
$rcmail_config['password_ldap_adminPW'] = null;

// LDAP user DN mask
// The user's DN is mandatory and as we only have his login,
// we need to re-create his DN using a mask
// '%login' will be replaced by the current roundcube user's login
// '%name' will be replaced by the current roundcube user's name part
// '%domain' will be replaced by the current roundcube user's domain part
// Exemple: 'uid=%login,ou=people,dc=exemple,dc=com'
$rcmail_config['password_ldap_userDN_mask'] = 'uid=%login,ou=people,dc=exemple,dc=com';

// LDAP password hash type
// Standard LDAP encryption type which must be one of: crypt,
// ext_des, md5crypt, blowfish, md5, sha, smd5, ssha, or clear.
// Please note that most encodage types require external libraries
// to be included in your PHP installation, see function hashPassword in drivers/ldap.php for more info.
// Default: 'crypt'
$rcmail_config['password_ldap_encodage'] = 'crypt';

// LDAP password attribute
// Name of the ldap's attribute used for storing user password
// Default: 'userPassword'
$rcmail_config['password_ldap_pwattr'] = 'userPassword';

// LDAP password force replace
// Force LDAP replace in cases where ACL allows only replace not read
// See http://pear.php.net/package/Net_LDAP2/docs/latest/Net_LDAP2/Net_LDAP2_Entry.html#methodreplace
// Default: true
$rcmail_config['password_ldap_force_replace'] = true;

A:

$rcmail_config['password_ldap_host'] = 'localhost';
$rcmail_config['password_ldap_port'] = '389';
$rcmail_config['password_ldap_starttls'] = false;
$rcmail_config['password_ldap_version'] = '3';
$rcmail_config['password_ldap_basedn'] = 'o=hosting,dc=example,dc=tld';

$rcmail_config['password_ldap_method'] = 'user';
$rcmail_config['password_ldap_adminDN'] = null;
$rcmail_config['password_ldap_adminPW'] = null;

$rcmail_config['password_ldap_userDN_mask'] = 'mail=%login,vd=%domain,o=hosting,dc=example,dc=tld';

$rcmail_config['password_ldap_encodage'] = 'md5';
$rcmail_config['password_ldap_pwattr'] = 'userPassword';

$rcmail_config['password_ldap_force_replace'] = true;

Ahora vamos a descargar e instalar el plugin de vacaciones:

cd /usr/src
wget https://github.com/bhuisgen/rc-vacation/archive/master.zip
unzip rc-vacation-master.zip
mv rc-vacation /var/www/roundcube/plugins/vacation
cd /var/www/roundcube/plugins/vacation

Ahora editamos la configuración y cambiamos:

nano plugins/vacation/config.inc.php

Cambiar:

$rcmail_config['vacation_gui_vacationsubject'] = TRUE;

A:

$rcmail_config['vacation_gui_vacationsubject'] = FALSE;

Cambiar:

$rcmail_config['vacation_driver'] = 'sql'; 

A:

$rcmail_config['vacation_driver'] = 'ldap';

Cambiar:

// Base DN
$rcmail_config['vacation_ldap_base'] = 'dc=ldap,dc=my,dc=domain';

// Bind DN
$rcmail_config['vacation_ldap_binddn'] =
'cn=user,dc=ldap,dc=my,dc=domain';

// Bind password
$rcmail_config['vacation_ldap_bindpw'] = 'pa$$w0rd';

A:

// Base DN
$rcmail_config['vacation_ldap_base'] = 'o=hosting,dc=example,dc=tld';

// Bind DN
$rcmail_config['vacation_ldap_binddn'] = 'cn=admin,dc=example,dc=tld';

// Bind password
$rcmail_config['vacation_ldap_bindpw'] = 'yourpassword';

Cambiar:

// Search filter to read data
$rcmail_config['vacation_ldap_search_filter'] = '(objectClass=mailAccount)';

// Search attributes to read data
$rcmail_config['vacation_ldap_search_attrs'] = array ('vacationActive', 'vacationInfo');

// array of DN to use for modify operations required to write data.
$rcmail_config['vacation_ldap_modify_dns'] = array (
'cn=%email_local,ou=Mailboxes,dc=%email_domain,ou=MailServer,dc=ldap,dc=my,dc=domain'
);

A:

// Search base to read data
$rcmail_config['vacation_ldap_search_base'] =
'mail=%username,vd=%email_domain,o=hosting,dc=example,dc=tld';

// Search filter to read data
$rcmail_config['vacation_ldap_search_filter'] = '(objectClass=VirtualMailAccount)';

// Search attributes to read data
$rcmail_config['vacation_ldap_search_attrs'] = array ('vacationActive', 'vacationInfo');

// array of DN to use for modify operations required to write data.
$rcmail_config['vacation_ldap_modify_dns'] = array (
'mail=%username,vd=%email_domain,o=hosting,dc=example,dc=tld'
);

Tenemos que cambiar la raíz del documento en la configuración del servidor Apche2 para que se pueda acceder a Roundcube.

nano /etc/apache2/sites-enabled/000-default.conf

Y cambiar de:

DocumentRoot /var/www/html

A:

DocumentRoot /var/www/

Con esto concluye la configuración de Roundcube.

Paso 8: Instalar y configurar proftpd

Primero instalaremos proftpd y sus requisitos:

apt install proftpd proftpd-mod-ldap

Dependiendo de tu carga puedes decidir entre stand alone o inet.d.

Nota: Puedes copiar los archivos de configuración de examples/proftpd a /etc/proftpd, pero para mayor claridad, resumiré todos los pasos de configuración.

Edita/etc/proftpd/proftpd.conf:

nano /etc/proftpd/proftpd.conf

Y cambia de:

# Use this to jail all users in their homes
# DefaultRoot                   ~

Por:

# Use this to jail all users in their homes
DefaultRoot      

Y cambia de:

#RequireValidShell               off

Por:

RequireValidShell               off

Y cambiar:

# Alternative authentication frameworks
#
# Include /etc/proftpd/ldap.conf
#Include /etc/proftpd/sql.conf

A:

# Alternative authentication frameworks
#
Include /etc/proftpd/ldap.conf
#Include /etc/proftpd/sql.conf
             ~

Ahora edita/etc/proftpd/modules.conf:

nano /etc/proftpd/modules.conf 

Y cambia de:

# Install proftpd-mod-ldap to use this
#LoadModule mod_ldap.c

Por:

# Install proftpd-mod-ldap to use this
LoadModule mod_ldap.c

Y de:

# Install proftpd-mod-ldap to use this
# LoadModule mod_quotatab_ldap.c

A:

# Install proftpd-mod-ldap to use this
LoadModule mod_quotatab_ldap.c 

No edita/etc/proftpd/ldap.conf y establece lo siguiente:

<IfModule mod_ldap.c>
#
#LDAPServer ldap://ldap.example.com
#LDAPBindDN "cn=admin,dc=example,dc=com" "admin_password"
#LDAPUsers dc=users,dc=example,dc=com (uid=%u) (uidNumber=%u)
#LDAPUseTLS on
#
#
#LDAPServer ldaps://ldap.example.com
#LDAPBindDN "cn=admin,dc=example,dc=com" "admin_password"
#LDAPUsers dc=users,dc=example,dc=com (uid=%u) (uidNumber=%u)
#
LDAPServer ldap://127.0.0.1/??sub
LDAPBindDN "cn=vmail,o=hosting,dc=example,dc=tld "readonly"
LDAPUsers "o=hosting,dc=example,dc=tld" "(&(uid=%v)(objectclass=posixAccount))"
LDAPDefaultGID 33
LDAPDefaultUID 33
LDAPForceDefaultGID True
LDAPForceDefaultUID True

</IfModule>

Los siguientes comandos establecen el usuario por defecto a www-data que me conviene, puedes cambiar estos valores para que se adapten a tu configuración o dejarlos fuera para usar el uid/gid de inicio de sesión.

LDAPDefaultGID                  33
LDAPDefaultUID 33
LDAPForceDefaultGID True
LDAPForceDefaultUID True

33 Es el uid/gid de mi configuración de prueba, puede ser diferente en tu configuración.

Con esto concluye la instalación de proftpd.

Paso 9: Reunirlo todo

Emite los siguientes comandos para reiniciar todos los servicios:

service slapd restart 
service postfix restart
service dovecot restart
service proftpd restart
service apache2 restart

Ahora puedes ir a phamm y empezar a añadir dominios y usuarios de correo.

Disfruta.

Nota: notifícame cualquier error o problema con este procedimiento para que pueda mejorar y modificar este procedimiento.

Utiliza este hilo en el foro:

https://www.howtoforge.com/community/threads/postfix-virtual-hosting-with-ldap-backend-and-with-dovecot-as-imap-pop3-server-on-ubuntu-bionic-beav.79408/

Estoy suscrito a este hilo, por lo que recibiré notificaciones de nuevos mensajes en este hilo.

También te podría gustar...