Salta el contingut

Pràctica: Servidor de Correu Complet amb Mailcow i Docker

Objectius

En aquesta pràctica aprendràs a:

  • Desplegar un servidor de correu complet amb Mailcow
  • Configurar dominis virtuals i comptes d'usuari
  • Entendre l'arquitectura multi-contenidor de Mailcow
  • Configurar SPF, DKIM i DMARC per seguretat
  • Provar l'enviament i recepció de correus amb clients
  • Configurar webmail SOGo per accés web

Durada estimada

5-6 hores

Requisits previs

  • Docker i Docker Compose instal·lats
  • Coneixements bàsics de DNS i correu electrònic
  • Mínim 4GB RAM i 20GB disc disponible
  • Accés a modificar el fitxer hosts (per proves locals)

Introducció

Mailcow és una solució de correu electrònic de codi obert basada en Docker que integra tots els components necessaris per a un servidor de correu modern:

  • Postfix: MTA (Mail Transfer Agent) per enviar/rebre correus
  • Dovecot: Servidor IMAP/POP3 i MDA (Mail Delivery Agent)
  • SOGo: Interfície webmail amb calendari i contactes
  • Rspamd: Filtre antispam i signatura DKIM
  • ClamAV: Antivirus per escannejar adjunts
  • MariaDB: Base de dades per configuració
  • Redis: Caché per millorar rendiment
  • Nginx: Servidor web i proxy invers

Aquest stack complet permet tenir un servidor de correu professional amb totes les funcionalitats modernes en minuts.


Part 1: Preparació de l'Entorn

Pas 1: Crear l'estructura de directoris

mkdir -p mailcow-NOMCOGNOM
cd mailcow-NOMCOGNOM

IMPORTANT: Substitueix NOMCOGNOM pel teu nom i cognom en minúscules sense espais (exemple: mailcow-fbarragan).

Pas 2: Descarregar Mailcow

Mailcow proporciona un script d'instal·lació que descarrega tots els fitxers necessaris.Si ho estàs fent amb Windows hauràs de tenir WSL instal·lat amb una distribució d'Ubuntu o Debian. Es recomana fer la instal·lació a /opt

git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized

Pas 3: Generar la configuració

Abans de poder executar la generació de la configuració hauràs d'instal·lar el paquet jq.

apt install jq

Executa el script de generació de configuració.

./generate_config.sh

Quan et demani el hostname, introdueix: mail.NOMCOGNOM.local

Exemple: mail.fbarragan.local

Et demanarà altres paràmetres TimeZone, deixem Europe/Madrid y utilitzem el branch 1 (estable)

Aquest script crearà el fitxer mailcow.conf amb la configuració bàsica.

Pas 4: Personalitzar mailcow.conf

Edita el fitxer mailcow.conf i revisa aquests paràmetres:

# Hostname del servidor
MAILCOW_HOSTNAME=mail.NOMCOGNOM.local

# Zona horària
TZ=Europe/Madrid

# IP pública (per proves locals usa 127.0.0.1)
MAILCOW_PASS_SCHEME=BLF-CRYPT

# Activa HTTPS (per proves locals pots deixar-ho)
SKIP_LETS_ENCRYPT=y

Pas 5: Modificar el fitxer hosts

Per poder accedir localment amb el domini personalitzat, afegeix al fitxer hosts:

Windows: C:\Windows\System32\drivers\etc\hosts Linux/Mac: /etc/hosts

127.0.0.1  mail.NOMCOGNOM.local

Part 2: Desplegament de Mailcow

Pas 1: Iniciar els contenidors

docker-compose pull
docker-compose up -d

Això descarregarà totes les imatges Docker necessàries i iniciarà els contenidors. El procés pot tardar 10-15 minuts la primera vegada. Si un dona error amb la creació de la mailcow-network heu de netejar les docker network existents amb un docker network prune.

Pas 2: Verificar l'estat dels contenidors

docker-compose ps

Hauries de veure ~20 contenidors en estat running o healthy:

  • mailcowdockerized-postfix-mailcow-1
  • mailcowdockerized-dovecot-mailcow-1
  • mailcowdockerized-rspamd-mailcow-1
  • mailcowdockerized-redis-mailcow-1
  • mailcowdockerized-mysql-mailcow-1
  • mailcowdockerized-sogo-mailcow-1
  • mailcowdockerized-nginx-mailcow-1
  • mailcowdockerized-clamd-mailcow-1
  • i altres...

Pas 3: Consultar els logs

Verifica que no hi ha errors crítics:

docker-compose logs -f --tail=50 postfix-mailcow
docker-compose logs -f --tail=50 dovecot-mailcow
docker-compose logs -f --tail=50 rspamd-mailcow

Prem Ctrl+C per sortir.


Part 3: Configuració del Domini i Usuaris

Pas 1: Accedir a la interfície web

Image title

Obre el navegador a: https://mail.NOMCOGNOM.local

NOTA: Accepta el certificat SSL autosignat (afegeix excepció de seguretat).

Inicia sessió amb:

  • Usuari: admin
  • Contrasenya: moohoo

Primer de tot des de l'opció Sistema->Configuració edita l'usuari admin i substitueix per:

  • Usuari: admin-NOMCOGNOM
  • Contrasenya: elteupassword

Image title

Pas 1

  1. Adjunta la imatge de teu mailcow funcionant amb el teu usuari.

Pas 2: Afegir un domini

  1. Ves a E-Mail -> Configuració → Domains
  2. Fes clic a Add domain
  3. Configura:
  4. Domain: NOMCOGNOM.local
  5. Max. number of mailboxes: 10
  6. Max. quota per mailbox: 1024 MB
  7. Default mailbox quota: 512 MB
  8. Fes clic a Add domain and restart SOGo

Pas 3: Crear comptes d'usuari

Crea mínim 3 usuaris amb els teus noms:

  1. Ves a E-Mail -> Configuració → Mailboxes
  2. Fes clic a Add mailbox
  3. Crea el primer usuari:
  4. Username: VOSTRENOM1 (exemple: fbarragan1)
  5. Domain: NOMCOGNOM.local
  6. Full name: VOSTRENOM VOSTRECOGNOM
  7. Password: elteupassword
  8. Quota: 512 MB
  9. Repeteix per crear:
  10. Usuari 2: VOSTRENOM2@NOMCOGNOM.local
  11. Usuari 3: VOSTRENOM3@NOMCOGNOM.local

Pas 4: Configurar un àlies

  1. Ves a E-Mail -> Configuració → Alias
  2. Crea un àlies:
  3. Alias address: admin@NOMCOGNOM.local
  4. Goes to: VOSTRENOM1@NOMCOGNOM.local
  5. Això farà que els correus a admin@NOMCOGNOM.local arribin al teu usuari principal

Part 4: Configuració de Seguretat (SPF, DKIM, DMARC)

Pas 1: Generar claus DKIM

Mailcow genera automàticament les claus DKIM. Per veure-les:

  1. Ves a System → Options → ARC/DKIM Keys
  2. Selecciona el domini NOMCOGNOM.local
  3. Copia el registre DNS DKIM generat

Image title

Pas 2: Configurar registres DNS (simulat)

En un entorn real, afegiries aquests registres al teu DNS. Per a aquesta pràctica, documenta'ls:

Registre SPF:

NOMCOGNOM.local.  IN  TXT  "v=spf1 mx ~all"

Registre DKIM (copiat de la interfície):

dkim._domainkey.NOMCOGNOM.local. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC..."

Registre DMARC:

_dmarc.NOMCOGNOM.local. IN TXT "v=DMARC1; p=quarantine; rua=mailto:admin@NOMCOGNOM.local"

Pas 3: Verificar configuració Rspamd

  1. Configura password per accedir desde el portal d'administració System->Access->Rspamd UI

Image title

  1. Accedeix a Rspamd: https://mail.NOMCOGNOM.local/rspamd
  2. Contrasenya: Consulta-la amb:
    docker-compose exec rspamd-mailcow cat /etc/rspamd/override.d/worker-controller-password.inc
    
  3. Revisa que el servei estigui actiu. Veuràs que ja s'ha carregat el BAYES_SPAM que es un sistema d'IA per detectar correus de SPAM.

Part 5: Proves d'Enviament i Recepció

Pas 1: Configurar client de correu (Thunderbird)

Opció A: Configurar Thunderbird (recomanat)

  1. Obre Mozilla Thunderbird
  2. Afegeix un compte de correu:
  3. Nom: VOSTRENOM VOSTRECOGNOM
  4. Adreça de correu: VOSTRENOM1@NOMCOGNOM.local
  5. Contrasenya: elvostrepassword
  6. Configuració manual:
  7. IMAP: mail.NOMCOGNOM.local, port 993, SSL/TLS, autenticació normal
  8. SMTP: mail.NOMCOGNOM.local, port 587, STARTTLS, autenticació normal
  9. Accepta el certificat SSL
  10. Envia un correu electrònic a VOSTRENOM2@NOMCOGNOM.local i verifica que ha passat pels filtres del RSPAMD.

Image title

Opció B: Utilitzar webmail SOGo

  1. Obre: https://mail.NOMCOGNOM.local/SOGo
  2. Inicia sessió amb: VOSTRENOM1@NOMCOGNOM.local / elvostrepassword

Pas 2: Enviar un correu de prova

Des de Thunderbird o SOGo:

  1. Envia un correu des de VOSTRENOM1@NOMCOGNOM.local
  2. A: VOSTRENOM2@NOMCOGNOM.local
  3. Assumpte: Prova des de Mailcow - VOSTRENOM VOSTRECOGNOM
  4. Cos: "Aquest és un correu de prova del meu servidor Mailcow amb Docker."

Pas 3: Verificar recepció

  1. Configura el segon usuari (VOSTRENOM2) a Thunderbird o SOGo
  2. Comprova que ha arribat el correu
  3. Respon al correu per verificar la comunicació bidireccional

Pas 4: Provar l'àlies

Envia un correu a admin@NOMCOGNOM.local i verifica que arriba a VOSTRENOM1@NOMCOGNOM.local

Pas 5: Verificar headers del correu

A Thunderbird: Fes clic dret al correu → View → Message Source

Busca aquestes capçaleres: - X-Rspamd-Score: Puntuació d'spam (hauria de ser baixa) - Authentication-Results: Verificació SPF/DKIM - DKIM-Signature: Signatura DKIM del nostre servidor - Received: Traça del camí del correu


Part 6: Funcionalitats Avançades

1. Configurar quota d'usuari

  1. Ves a Mailboxes → Edita un usuari
  2. Canvia la quota a 256 MB
  3. Intenta enviar correus amb adjunts grans per provar el límit

2. Activar greylisting

  1. Ves a Configuration → Configuration & Details
  2. A la secció Rspamd, activa Greylisting
  3. Això rebutjarà temporalment correus de servidors desconeguts

3. Consultar logs de Postfix

docker-compose exec postfix-mailcow tail -f /var/log/mail.log

Observa els missatges SMTP en temps real.

4. Explorar la base de dades

docker-compose exec mysql-mailcow mysql -u mailcow -p$(grep DBPASS mailcow.conf | cut -d= -f2) mailcow

Consultes útils:

SHOW TABLES;
SELECT username, name, quota FROM mailbox;
SELECT address, goto FROM alias;
EXIT;


Part 7: Envia un correu a un company de classe

En aquesta part haureu d'investigar/definir com poder enviar un correu electrònic des de la vostra infraestructura a la d'un company de classe.


Qüestions

Qüestió 1: Arquitectura de Components

Explica la funció de cadascun dels components de Mailcow:

a) Postfix:

b) Dovecot:

c) Rspamd:

d) SOGo:

e) Per què utilitzem MariaDB i Redis? Quines dades guarda cadascun?

Qüestió 2: Protocols i Ports

Completa la següent taula:

Protocol Port(s) Ús (enviament/recepció) Seguretat (SSL/TLS/STARTTLS)
SMTP
SMTPS
IMAP
POP3

Qüestió 3: Seguretat i Autenticació

a) Què és SPF i com protegeix contra el phishing?

b) Què és DKIM i com funciona la signatura digital?

c) Què és DMARC i com ajuda als destinataris a validar correus?

d) Per què és important utilitzar STARTTLS en lloc de connexions sense xifrar?

Qüestió 4: Diferència IMAP vs POP3

Explica les diferències principals entre IMAP i POP3. Quin és millor per a un usuari que accedeix al correu des de múltiples dispositius (PC, mòbil, tauleta)?


Lliurament

Captures de pantalla obligatòries

  1. docker-compose ps mostrant tots els contenidors Mailcow en running/healthy
  2. Interfície web d'administració mostrant el domini NOMCOGNOM.local creat
  3. Llista de mailboxes amb els 3 usuaris creats (amb els teus noms)
  4. Configuració DKIM mostrant la clau pública generada
  5. Thunderbird configurat amb el compte VOSTRENOM1@NOMCOGNOM.local
  6. Correu rebut a la safata d'entrada mostrant el teu nom complet
  7. Headers del correu mostrant DKIM-Signature i X-Rspamd-Score
  8. Webmail SOGo amb sessió iniciada i correu visible
  9. Logs de Postfix mostrant l'enviament d'un correu
  10. Consulta SQL mostrant els usuaris de la base de dades

Fitxers a incloure

  • mailcow.conf personalitzat (amb contrasenyes amagades)
  • Captura de docker-compose.yml (primers 50 línies)

Document PDF

Crea un document que inclogui:

  1. Portada amb el teu nom complet i data
  2. Captures de pantalla amb el teu nom visible
  3. Registres DNS (SPF, DKIM, DMARC) generats per al teu domini
  4. Respostes a les qüestions amb explicacions detallades
  5. Reflexió final (250-350 paraules):
  6. Avantatges de Mailcow respecte a configurar cada component manualment
  7. Importància de SPF, DKIM i DMARC en l'actualitat
  8. Diferències entre webmail i client de correu tradicional
  9. Desafiaments trobats durant la pràctica
  10. Possibles millores o configuracions addicionals

Criteris d'Avaluació

Criteri Puntuació
Mailcow desplegat correctament amb tots els contenidors operatius 2,0 punts
Domini i mínim 3 usuaris creats amb personalització 1,5 punts
SPF, DKIM i DMARC configurats i documentats 1,5 punts
Enviament i recepció de correus funcional 2,0 punts
Client de correu (Thunderbird o webmail) configurat 1,0 punt
Captures de pantalla completes amb personalització 1,0 punt
Respostes a qüestions correctes 1,0 punt
TOTAL 10,0 punts

Penalitzacions: - -2,0 punts si no hi ha personalització amb NOMCOGNOM - -1,5 punts si DKIM no està configurat o no funciona - -1,0 punt si no es poden enviar/rebre correus entre usuaris - -0,5 punts si contrasenyes no amagades al document lliurat

Bonificacions opcionals: - +0,5 punts per configuració de greylisting funcional - +0,5 punts per anàlisi avançada dels headers amb totes les capçaleres explicades - +0,5 punts per configuració de regles Sieve per filtrar correus

Màxim bonificació total: +1,5 punts (nota màxima limitada a 10,0)


Recursos Addicionals


Data de creació: Gener 2025 Autor: Curs M0375 - Serveis de Xarxa i Internet