Aquest document és una guia tècnica detallada per implementar un servidor de correu segur en un entorn GNU/Linux. El manual descriu la configuració de Postfix com a agent de transport, Dovecot per a la gestió de bústies i Rainloop com a interfície de correu web. Es posa un èmfasi especial en la seguretat, detallant l’ús de certificats TLS/SSL i l’autenticació SASL. A més, s’inclouen instruccions per integrar una base de dades MariaDB destinada a la gestió de contactes. Tot el procés està orientat a crear una infraestructura completa que permeti l’enviament i la recepció de missatges sota protocols estàndards i xifrats.
En aquest document es descriu el procés d’instal·lació i configuració d’un servidor de correu electrònic segur en un entorn GNU/Linux Ubuntu Server 24.04 utilitzant Postfix, Dovecot i Rainloop.
L’objectiu és implementar una infraestructura completa de correu que permeti:
El sistema es basa en la separació funcional dels diferents components:
El flux de correu dins del sistema és el següent:
La configuració inclou:
Aquesta implementació permet construir un servidor de correu funcional i segur, adequat per a entorns de pràctica o laboratoris formatius, i estableix les bases per a una possible adaptació a entorns de producció.
Servei Port Protocol TLS
SMTP 25 SMTP Opcional
SMTPS 465 SMTP Implícit
Submission 587 SMTP STARTTLS
IMAPS 993 IMAP SSLAbans de començar, fes les configuracions bàsiques del servidor (hostname, IP, hosts, ports i actualització).
# Canvia el nom de la màquina
sudo hostnamectl set-hostname servidor
# Configura la interfície de xarxa
sudo nano /etc/netplan/50-cloud-init.yamlnetwork:
version: 2
ethernets:
enp0s3:
addresses:
- "10.0.3.70/24"
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
search: []
routes:
- to: "default"
via: "10.0.3.1"
# Edita el fitxer de hosts
sudo nano /etc/hosts127.0.0.1 localhost
127.0.1.1 servidor
10.0.3.70 servidor.thos.local thos.local servidor
# Actualitza paquets
sudo apt update
sudo apt upgradeInicialment, pots acceptar els valors per defecte prement Enter per a cada pregunta. Algunes de les opcions de configuració s’investigaran amb més detall a la fase de configuració.
# Instal·la postfix
sudo apt install postfixHi ha quatre coses que has de decidir abans de configurar:
# Configura postfix
sudo dpkg-reconfigure postfixEs mostrarà la interfície d’usuari. A cada pantalla, selecciona els valors següents (exemple):
Lloc d'Internet
thos.local
ramon
thos.local, localhost.localdomain, localhost
No
127.0.0.0/8 10.0.3.0/24
0
+
ipv4
Per definir el format de la bústia de correu, pots editar directament el fitxer o utilitzar postconf. En qualsevol cas, els paràmetres s’emmagatzemen a /etc/postfix/main.cf
# Configura el format de la bústia (Maildir)
sudo postconf -e 'home_mailbox = Maildir/'Això col·locarà el correu nou a /home/<nom d’usuari>/Maildir, de manera que hauràs de configurar el teu agent de lliurament de correu (MDA) per utilitzar la mateixa ruta.
SMTP-AUTH permet a un client identificar-se mitjançant el mecanisme d’autenticació Simple Authentication and Security Layer (SASL), utilitzant Transport Layer Security (TLS) per xifrar el procés d’autenticació. Un cop s’hagi autenticat, el servidor SMTP permetrà al client retransmetre el correu.
Per configurar Postfix per a SMTP-AUTH mitjançant SASL (Dovecot SASL), executa aquestes ordres al terminal:
sudo postconf -e 'smtpd_sasl_type = dovecot'
sudo postconf -e 'smtpd_sasl_path = private/auth'
sudo postconf -e 'smtpd_sasl_local_domain ='
sudo postconf -e 'smtpd_sasl_security_options = noanonymous'
sudo postconf -e 'broken_sasl_auth_clients = yes'
sudo postconf -e 'smtpd_sasl_auth_enable = yes'
sudo postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks,reject_unauth_destination'El paràmetre de configuració smtpd_sasl_path és una ruta relativa al directori de cua de Postfix.
Hi ha diverses propietats del mecanisme SASL que val la pena avaluar per millorar la seguretat del desplegament. L’opció “noanonymous” impedeix l’ús de mecanismes que permeten l’autenticació anònima.
La seguretat requereix xifrar la comunicació. S’utilitzen certificats TLS/SSL (autosignats en laboratoris, o CA en producció).
A continuació, genera o obté un certificat digital per a TLS. Els MUA que es connecten al servidor de correu mitjançant TLS hauran de reconèixer el certificat utilitzat per a TLS. Això es pot fer mitjançant un certificat de Let’s Encrypt, d’una CA comercial o amb un certificat autosignat que els usuaris instal·len/accepten manualment. Per a MTA-a-MTA, els certificats TLS mai es validen sense l’acord previ de les organitzacions afectades. Per a TLS MTA-a-MTA, no hi ha cap raó per no utilitzar un certificat autosignat tret que la política local ho requereixi.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/server.key -out /etc/ssl/certs/server.crt -subj "/C=ES/ST=Barcelona/L=Mataro/O=IES Thos i Codina/OU=ASIX/CN=thos.local/emailAddress=ramon@thosicodina.cat"
sudo postconf -e 'smtp_tls_security_level = may'
sudo postconf -e 'smtpd_tls_security_level = encrypt'
sudo postconf -e 'smtp_tls_note_starttls_offer = yes'
sudo postconf -e 'smtpd_tls_loglevel = 1'
sudo postconf -e 'smtpd_tls_received_header = yes'
sudo postconf -e 'myhostname = thos.local'
sudo postconf -e 'smtpd_tls_cert_file=/etc/ssl/certs/server.crt'
sudo postconf -e 'smtpd_tls_key_file=/etc/ssl/private/server.key'La configuració inicial de Postfix ja s’ha completat. Reinicia el dimoni de Postfix i comprova l’estat.
# Reinicia el dimoni
sudo systemctl restart postfix
# Comprova l'estat
sudo systemctl status postfixPostfix admet el mecanisme d’autenticació SMTP-AUTH tal com es defineix a RFC2554. Està basat en SASL. Tanmateix, encara cal configurar l’autenticació SASL abans de poder utilitzar SMTP-AUTH.
SASL permet autenticació segura per a SMTP. En aquesta guia s’integra amb Dovecot per oferir SMTP-AUTH.
sudo apt install dovecot-core
# Configura el socket d'autenticació per Postfix
sudo nano /etc/dovecot/conf.d/10-master.conf# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
# Activa mecanismes d'autenticació (compatibilitat)
sudo nano /etc/dovecot/conf.d/10-auth.confauth_mechanisms = plain login
# Un cop hagis configurat Dovecot, reinicia-lo i comprova l'estat.
sudo systemctl restart dovecot
sudo systemctl status dovecotComprovació STARTTLS (exemple d’output):
La configuració SMTP-AUTH s’ha completat; ara és el moment de provar la configuració. Per veure si SMTP-AUTH i TLS funcionen correctament, executa l’ordre següent:
sudo telnet thos.local 25ehlo thos.local250-thos.local
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKINGSMTPS (port 465) és el protocol SMTP però amb xifratge TLS des del primer moment (TLS implícit). Es configura al fitxer /etc/postfix/master.cf
sudo nano /etc/postfix/master.cfsmtps inet n - y - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_recipient_restrictions=permit_sasl_authenticated, permit_mynetworks,reject_unauth_destination
# Reinicia el dimoni de Postfix
sudo systemctl restart postfix
# Prova que el 465 dona certificat
sudo openssl s_client -connect thos.local:465 -crlf -servername thos.localSTARTTLS (port 587) és una ordre que permet convertir una connexió no xifrada en una connexió xifrada, utilitzant TLS (TLS explícit). És a dir, comences parlant en text pla i després “actives” el xifratge dins la mateixa connexió. És l’opció habitual per a “Submission” i clients de correu.
sudo nano /etc/postfix/master.cfsubmission inet n - y - - 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_recipient_restrictions=permit_sasl_authenticated,reject
-o smtpd_tls_auth_only=yes
# Reinicia el dimoni de Postfix
sudo systemctl restart postfix
# Comprova que el 587 està escoltant
sudo ss -tlnp | grep 587
# Prova STARTTLS manualment
sudo openssl s_client -starttls smtp -connect thos.local:587Dovecot és el servidor IMAP/POP3 que permet accés a les bústies, i també s’utilitza per autenticació (SASL). Configura l’emmagatzematge en Maildir i activa SSL per IMAPS.
sudo apt install dovecot-imapd dovecot-pop3d
sudo nano /etc/dovecot/dovecot.conflisten = *, ::
sudo nano /etc/dovecot/conf.d/10-auth.confdisable_plaintext_auth = no
auth_username_format = %n
sudo nano /etc/dovecot/conf.d/10-mail.confmail_location = maildir:~/Maildir
# Reinicia el dimoni de dovecot
sudo systemctl restart dovecotPer defecte, Dovecot està configurat per utilitzar SSL automàticament mitjançant el paquet ssl-cert que proporciona un certificat autosignat.
En comptes d’això, pots generar el teu propi certificat personalitzat per a Dovecot utilitzant openssl, per exemple:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/dovecot/private/dovecot.key -out /etc/dovecot/private/dovecot.pem -subj "/C=ES/ST=Barcelona/L=Mataró/O=IES Thos i Codina/OU=ASIX/CN=thos.local/emailAddress=ramon@thosicodina.cat"# Crea un compte (usuari local).
sudo adduser alumne1RainLoop és un client de correu web (webmail) simple, modern i ràpid, basat en web.
Característiques principals:
Aquesta secció instal·la Apache i PHP, descarrega Rainloop, configura permisos i activa HTTPS amb certificat TLS.
# Instal·la Apache i PHP
sudo apt install apache2 php php-fpm php-cli php-curl php-xml php-mbstring php-zip php-json php-intl libapache2-mod-php php-gd php-imap php-opcache unzip
# Descarrega i instal·la Rainloop
sudo mkdir /var/www/rainloop
sudo cd /var/www/rainloop
sudo wget https://www.rainloop.net/repository/webmail/rainloop-latest.zip
sudo unzip rainloop-latest.zip
sudo rm rainloop-latest.zip
sudo find . -type d -exec chmod 755 {} \;
sudo find . -type f -exec chmod 644 {} \;
sudo chown -R www-data:www-data ./
sudo cdGenera un certificat autosignat per a accedir al webmail
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/rainloop.key -out /etc/ssl/certs/rainloop.crt -subj "/C=ES/ST=Barcelona/L=Mataró/O=IES Thos i Codina /OU=ASIX/CN=webmail.thos.local/emailAddress=ramon@thosicodina.cat"
# Copia la configuració de la pàgina predeterminada d'Apache
# amb protocol HTTPS anomenant-la rainloop-ssl.conf
sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/rainloop-ssl.conf
# Edita la configuració de la pàgina de Rainloop amb protocol HTTPS
sudo nano /etc/apache2/sites-available/rainloop-ssl.confServerName webmail.thos.local
DocumentRoot /var/www/rainloop
SSLCertificateFile /etc/ssl/certs/rainloop.crt
SSLCertificateKeyFile /etc/ssl/private/rainloop.key
<Directory /var/www/rainloop/>
AllowOverride All
</Directory>
# Copia la configuració de la pàgina predeterminada d'Apache
# amb protocol HTTP anomenant-la rainloop.conf
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/rainloop.conf
# Edita la configuració de la pàgina de Rainloop amb protocol HTTP
sudo nano /etc/apache2/sites-available/rainloop.conf<VirtualHost *:80>
ServerName webmail.thos.local
Redirect permanent / https://webmail.thos.local
</VirtualHost>
# Crea un fitxer .htaccess
sudo nano /var/www/rainloop/data/.htaccessRequire all denied
# Habilita els mòduls rewrite, headers, env, dir, mime
# i ssl en Apache
sudo a2enmod rewrite headers env dir mime ssl
# Habilita les pàgines de Rainloop
sudo a2ensite rainloop.conf rainloop-ssl.conf
# Reinicia el servei Apache
sudo systemctl restart apache2Accedeix a: https://webmail.thos.local/?admin
Credencials: admin/12345
Modifica:
Per emmagatzemar contactes al webmail, es crea una base de dades MariaDB, un usuari i permisos, i després es configura a Rainloop (PDO).
# Instal·la el servidor de bases de dades MariaDB
sudo apt install mariadb-server php-mysql
# Accedeix a la consola de MariaDB
sudo mysql -u root -pCREATE DATABASE rainloop CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER rainloop@localhost IDENTIFIED BY 'contrasenya';
GRANT ALL PRIVILEGES ON rainloop.* TO rainloop@localhost;
FLUSH PRIVILEGES;
EXIT;
Pantalla de configuració de Contactes (PDO) a Rainloop.
Valors típics (PDO):