Usuarios virtuales con LMTP en FreeBSD
En las entregas anteriores, las direcciones de correo electrónico sólo estaban disponibles para los usuarios del sistema. Esto puede o no ser buena idea según el ámbito que tenga el sistema de correo electrónico que estemos implementando, pero lo que sí es cierto es que implementar usuarios virtuales es algo prácticamente imprescindible.
Con esta premisa haremos que tanto OpenSMTPd como Dovecot se integren utilizando LMTP junto a un fichero que será el que contenga la lista de usuarios virtuales junto a sus contraseñas.
Configuración
Crear el usuario vmail
Necesitamos a este usuario, que será el que almacene el correo de todos los usuarios virtuales.
mkdir /var/vmail
adduser
Username: vmail
Full name:
Uid (Leave empty for default):
Login group [vmail]:
Login group is vmail. Invite vmail into other groups? []:
Login class [default]:
Shell (sh csh tcsh nologin) [sh]: nologin
Home directory [/home/vmail]: /var/vmail
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]: yes
Lock out the account after creation? [no]: yes
Username : vmail
Password : <blank>
Full Name :
Uid : 1002
Class :
Groups : vmail
Home : /var/vmail
Home Mode :
Shell : /usr/sbin/nologin
Locked : yes
OK? (yes/no): yes
adduser: INFO: Successfully added (vmail) to the user database.
adduser: INFO: Account (vmail) is locked.
Add another user? (yes/no): no
Goodbye!
Y le damos la propiedad de su directorio $HOME.
chown -R vmail:vmail /var/vmail
Configurar LMTP para OpenSMTPd
Necesitamos instalar una extensión de OpenSMTPd que le permite utilizar el fichero de usuario y contraseña que mencionamos más arriba.
pkg install -y opensmtp-extras-table-passwd
Editamos /usr/local/etc/mail/smtpd.conf
para incluirlo.
table passwd passwd:/etc/mail/passwd
table virtuals file:/etc/mail/virtuals
Además de redirigir local que gestiona el correo entrante para enviarlo a LMTP que utilizará estos ficheros para comprobar la validez de estos usuarios virtuales como destino.
action "local" lmtp "/var/run/dovecot/lmtp" rcpt-to virtual <virtuals>
Y también necesitmos cambiar la autenticación para que utilice el fichero passwd que vamos a utilizar.
listen on lo1 smtps pki mail.correo.com auth <passwd>
listen on lo1 port submission tls-require pki mail.correo.com auth <passwd>
Nos falta el alias para vmail editando /etc/mail/aliases
.
vmail: /dev/null
Configurar LMTP para Dovecot
Ahora le llega el turno a Dovecot. Necesitamos una réplica de las configuraciones anteriores, pero para que las utilice este último.
Cambiamos la autenticación editando /usr/local/etc/dovecot/conf.d/10-auth.conf
.
#!include auth-system.conf.ext
!include auth-passwdfile.conf.ext
Cambiamos las fuentes de usuario y contraseña en /usr/local/etc/dovecot/conf.d/auth-passwdfile.conf.ext
.
passdb {
driver = passwd-file
args = scheme=CRYPT /etc/mail/passwd
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/vmail/%d/%n
# Default fields that can be overridden by passwd-file
#default_fields = quota_rule=*:storage=1G
# Override fields from passwd-file
#override_fields = home=/home/virtual/%u
}
Recogida de correo en /usr/local/etc/dovecot/conf.d/10-mail.conf
.
mail_location = maildir:/var/vmail/%d/%n
Aquí se generará una estructura jerárquica dentro de /var/vmail
con la siguiente estructura.
/var/vmail
├── dominio1
│ ├── usuario1
├── dominio2
│ ├── usuario1
Crear usuarios virtuales
El fichero /etc/mail/passwd
tiene el formato siguiente.
usuario@dominio.correo:la contraseña enciptada va aquí::::::
Así que necesitamos generar las contraseñas de los usuarios. Para ello.
smtpctl encrypt
A lo que silenciosamente se nos pedirá el texto plano con la contraseña.
supersecreta
$6$eXaww4eIZKR9711q$lM0HOy.W1dAvUscZ1pB9H1odNqZCJA8G3rvIoVSxhe3SIltI5iask.xWXJKkS0vsJXBK6ucRn4TxAzaEveH6U1
Este último hash, en este caso SHA512, es el que introduciremos para el usuario virtual.
Por último, necesitamos mapearlo al usuario vmail para que el correo se entregue en su buzón. Editamos /etc/mail/virtuals
.
usuario@dominio.correo vmail
Reiniciar los demonios
service restart opensmtpd
service restart dovecot
Pruebas
Ahora podemos configurar nuestro cliente de correo y utilizar estas credenciales para hacer algunas pruebas enviando y recibiendo correos electrónicos con el.
Conclusiones
Junto a los otras dos entradas ya publicadas, ésta cierra el core de la implementación de un servidor de correo electrónico. Es obvio que faltan asuntos como la securización, DKIM, DMARC, tratamiento de spam, greylisting, webmail, etc… Esto ya se sale de la funcionalidad básica pero es posible que trate algunos de ellos en futuras entradas.