Tabla de Contenidos
Instalación de mailman3 con MariaDB y Postfix
Configuración de DNS y Firewall
Dejar configurado al menos los primeros tres registros en nuestro servidor de DNS:
A listas.p.ejemplo.com X.X.X.X MX listas.p listas.p.ejemplo.com. TXT "v=spf1 ip4:X.X.X.X include:listas.p.ejemplo.com -all" TXT _dmarc.listas.p "v=DMARC1; p=quarantine; rua=mailto:dmarcreports@listas.p.ejemplo.com; adkim=s; aspf=s; sp=quarantine" TXT mail._domainkey.listas.p "v=DKIM1; k=rsa; s=email; p=STRING-LLAVE-PUBLICA;"
Para IpV6
AAAA listas.p.ejemplo.com XXXX:XXXX::XXXX TXT "v=spf1 ip4:X.X.X.X ip6:XXXX:XXXX::XXXX include:listas.p.ejemplo.com -all"
Para el caso del registro DKIM, se debe configurar el servicio opendkim, integrarlo con postfix para poder generar el resgistro TXT del dns.
Para verificar los registros usando dig, pueden ejecutar los comandos:
sudo apt install dnsutils dig listas.ejemplo.com dig MX listas.ejemplo.com dig TXT listas.ejemplo.com dig TXT mail._domainkey.listas.ejemplo.com dig TXT _dmarc.listas.ejemplo.com
Habilitar los puertos web si hay algun firewall para los siguientes puertos
WEB: 80,443 POP:110,995 IMAP:143,993 SMTP:25,26,465
Instalando Utilidades
Instalamos las utilidades con mail y bind
sudo apt install mailutils dnsutils tree bzr git
Instalación de servidor web nginx
Instalar el paquete
sudo apt install nginx-full
Verificar el sitio en la web accediendo a https://listas.p.ejemplo.com
Instalación de Certificados
Instalamos el cerbot para los certificados de seguridad
sudo apt install certbot python3-certbot-nginx python-certbot-nginx
Creamos el certificado para el sitio web
sudo certbot --nginx -d listas.p.ejemplo.com
Configurar con:
- Escribir A en la primera pregunta:
(A)gree/(C)ancel: A
- Escribir N en la segunda pregunta:
(Y)es/(N)o: n
- Escribir 2 en la tercera pregunta para redireccionar http a https:
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Abrir el sitio en http://lista.p.ejemplo.com y verificar que redirecciona a https
Editar el archivo /etc/hosts
para que el dominio apunte al localhost
127.0.0.1 localhost listas.p.ejemplo.com
Instalación de Postfix
Instalamos el postfix con
sudo apt install postfix
Configurar como:
Internet Site
- System mail name:
lista.p.ejemplo.com
( poner el dominio asociado al servidor.)
Reiniciamos el postfix y verificamos su estado con
sudo systemctl restart postfix sudo systemctl status postfix
Enviamos un correo de prueba para ver si nos ha funcionado
Entrega local
echo "This is the body of the email" | mail -s "This is the subject line" root@lista.p.ejemplo.com
Entrega Internet
echo "This is the body of the email" | mail -s "This is the subject line" pepe@gmail.com
Instalación de Mailman3
Instalamos MariaDB
sudo apt install mariadb-server
Instalamos el mailman3 con mariadb
sudo apt install mailman3-full python-mysqldb python3-mysqldb python3-pymysql python-pymysql
Contestar las preguntas con:
- Configure database for mailman3 with dbconfig-common?:
Yes
- Database type to be used by mailman3:
mysql
- MySQL application password for mailman3:
ENTER
(Para genere la clave automaticamente) - Configure database for mailman3-web with dbconfig-common? :
Yes
- Database type to be used by mailman3-web:
mysql
- MySQL application password for mailman3-web:
ENTER
(Para genere la clave automaticamente)
Dado que el configurador de mailman3 y mailman3-web no se ejecuta en la instalación, se debe hacer de forma manual, para ello ejecutamos:
sudo dpkg-reconfigure mailman3
Contestar las preguntas con:
- Reinstall database for mailman3? :
Yes
- Database type to be used by mailman3:
mysql
- Connection method for MySQL database of mailman3:
Unix socket
- MySQL database name for mailman3:
ENTER
- MySQL username for mailman3:
ENTER
- MySQL application password for mailman3:
ENTER
- Password confirmation:
ENTER
- The password and its confirmation do not match. :
Ok
- MySQL application password for mailman3:
ENTER
- Name of the database's administrative user:
ENTER
- Add the HyperKitty configuration to mailman.cfg?:
Yes
sudo dpkg-reconfigure mailman3-web
Contestar las preguntas con:
- Reinstall database for mailman3-web? :
Yes
- Database type to be used by mailman3-web:
mysql
- Connection method for MySQL database of mailman3-web:
Unix socket
- MySQL database name for mailman3-web:
ENTER
- MySQL username for mailman3:
ENTER
- MySQL application password for mailman3-web:
ENTER
- Password confirmation:
ENTER
- The password and its confirmation do not match. :
Ok
- MySQL application password for mailman3-web:
ENTER
- Domain name for sender email addresses:
lista.p.ejemplo.com
- Username of the Postorius superuser:
admin
- Email address of the Postorius superuser:
admin@manu2.p.floresvillatoro.com
- Password for the Postorius superuser:
MISUPERCLAVE
- Web server(s) to configure automatically:
none
(Dado que ya configuramos manualmente nginx) - Should the webserver(s) be restarted now?:
Yes
Verificamos que las bases de datos se hayan creado.
sudo mysql
show databases;
Deberan aparecer esas dos bases de datos en el listado:
| mailman3 | | mailman3web |
Verificamos que esos dominios correspondan al dominio listas.p.ejemplo.com, sino ejecutar los updates:
sudo mysql USE mailman3web SELECT * FROM django_site ; SELECT * FROM django_mailman3_maildomain ; UPDATE django_site SET DOMAIN='listas.p.ejemplo.com'; UPDATE django_site SET name='listas.p.ejemplo.com'; UPDATE django_mailman3_maildomain SET mail_domain='listas.p.ejemplo.com'; SELECT * FROM django_site ; SELECT * FROM django_mailman3_maildomain ;
Ver la información de mailman con
sudo mailman info
Con resultado parecido a:
GNU Mailman 3.2.1 (La Villa Strangiato) Python 3.7.3 (default, Jul 25 2020, 13:03:44) [GCC 8.3.0] config file: /etc/mailman3/mailman.cfg db url: mysql+pymysql://mailman3:608RvGsxZFF9@localhost/mailman3?charset=utf8&use_unicode=1 devmode: DISABLED REST root url: http://localhost:8001/3.1/ REST credentials: restadmin:vX3LkAQ6An0788NZVWkEdWvi5MPLAo9FleEynlKgBOAYL7TD
Posteriormente podremos modificar los valores de la base de datos desde la administración de django desde https://lista.p.ejemplo.com/admin/
Configuración de nginx para mailman3
Configuramos nginx para mailman3
cd /etc/nginx/sites-available/ sudo cp default listas.p.ejemplo.com.conf
Editar el archivo listas.p.ejemplo.com.conf y cambiar server_name _;
por:
server_name listas.p.ejemplo.com;
Borramos la seccion location / en la configuracion por defecto de nginx y agregar esta seccion en server para el 80 y para el 443:
server_tokens off; location / { uwsgi_pass mailman3; include /etc/nginx/uwsgi_params; } location /mailman3/static { alias /var/lib/mailman3/web/static; } location /mailman3/static/favicon.ico { alias /var/lib/mailman3/web/static/postorius/img/favicon.ico; } access_log /var/log/nginx/listas.p.ejemplo.com-access.log combined; error_log /var/log/nginx/listas.p.ejemplo.com-error.log;
NOTA: Mailman3 tiene un archivo de configuración de apache y nginx en /etc/mailman3/
Agregar al inicio del mismo archivo:
upstream mailman3 { server unix:/run/mailman3-web/uwsgi.sock fail_timeout=0; }
Modificamos el mismo archivo para cambiar la redireccion a :
server { if ($request_method = GET) { return 302 https://$host$request_uri; } if ($request_method = POST) { return 307 https://$host$request_uri; } listen 80 ; listen [::]:80 ; server_name lista.p.ejemplo.com; return 404; # managed by Certbot }
Ahora deshabilitamos el sitio default y habilitamos nuestra configuracion de nginx
cd /etc/nginx/sites-enabled/ sudo rm default sudo ln -s ../sites-available/listas.p.ejemplo.com.conf sudo systemctl restart nginx
Luego verificamos nuestro sitio http://listas.p.ejemplo.com y https://listas.p.ejemplo.com y debería aparecernos el sitio de mailman3-web
Configuración de postfix con usuarios locales
Configuramos nuestro servidor para cuentas locales
Configuramos Postfix
Editamos el archivo /etc/postfix/master.cf Y decomentar las lineas:
submission inet n - y - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_tls_auth_only=yes -o smtpd_reject_unlisted_recipient=no # -o smtpd_client_restrictions=$mua_client_restrictions # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions -o smtpd_recipient_restrictions= -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING
Editar el archivo /etc/postfix/main.cf
Comentamos las lineas:
# TLS parameters #smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem #smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key #smtpd_use_tls=yes #smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache #smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
Y agregar al final esto:
smtpd_tls_cert_file=/etc/letsencrypt/live/listas.p.ejemplo.com/fullchain.pem smtpd_tls_key_file=/etc/letsencrypt/live/listas.p.ejemplo.com/privkey.pem smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_tls_security_level=may smtpd_tls_protocols = !SSLv2, !SSLv3 local_recipient_maps = proxy:unix:passwd.byname $alias_maps
Modificamos la linea con:
local_recipient_maps = hash:/var/lib/mailman3/data/postfix_lmtp proxy:unix:passwd.byname $alias_maps
Agregamos aliases de usuario editando el archivo /etc/aliases y agregando las siguientes lineas
nobody: root hostmaster: root usenet: root news: root webmaster: root www: root ftp: root abuse: root admin: root
Luego ejecutamos el comando:
sudo newaliases
Instalamos el dovecot
sudo apt install dovecot-core dovecot-imapd dovecot-common
Editar el archivo /etc/dovecot/dovecot.conf Borrar su contenido, y dejar las siguientes lineas:
disable_plaintext_auth = no mail_privileged_group = mail mail_location = mbox:~/mail:INBOX=/var/mail/%u userdb { driver = passwd } passdb { args = %s driver = pam } protocols = " imap" protocol imap { mail_plugins = " autocreate" } plugin { autocreate = Trash autocreate2 = Sent autosubscribe = Trash autosubscribe2 = Sent } service auth { unix_listener /var/spool/postfix/private/auth { group = postfix mode = 0660 user = postfix } } ssl=required ssl_cert = /et ssl=required ssl_cert = /etc/letsencrypt/live/listas.p.ejemplo.com/fullchain.pem ssl_key = /etc/letsencrypt/live/listas.p.ejemplo.com/privkey.pem
Reiniciamos el postfix y el dovecot
systemctl restart postfix; systemctl status postfix; systemctl restart dovecot; systemctl status dovecot;
Registramos el administrador de mailman3 via web
Ingresamos a la URL https://lista.p.ejemplo.com/accounts/login/
Intentamos acceder con el usuario y clave que elegimos cuando ejecutamos depkg-reconfigure mailman3-web
.
Nos pedirá que verifiquemos el correo, lo podremos ver leyendo el correo de root (ya que es una alias) ejecutando:
sudo cat /var/mail/root Hello from example.com! You're receiving this e-mail because user admin has given yours as an e-mail address to connect their account. To confirm this is correct, go to https://lista.p.ejemplo.com/accounts/confirm-email/MQ:1kK1X1:cDNpj2pT8oX9mb6zxu8nyMrlkrE/ Thank you from example.com! example.com
Abrir la pagina para confirmar el correo y confirmar el correo
Volver a acceder con las claves.
Configuración de postfix para mailman3
Verificamos que postfix tenga las configuraciones para mailman3 y viceversa
sudo cat /etc/postfix/main.cf|grep -P "recipient_delimiter|unknown_local_recipient_reject_code|owner_request_special|transport_maps|hash|local_recipient_maps|relay_domains" sudo cat /etc/mailman3/mailman.cfg |grep -P "incoming|outgoing|lmtp_host|lmtp_port|smtp_host|smtp_port"
Editamos el siguiente archivo:
sudo nano /etc/postfix/main.cf
Agregar estas lineas al final del archivo (Borrar la entrada local_recipient_maps y sustituirla por la que aparece aca)
#Para mailman3 unknown_local_recipient_reject_code = 550 owner_request_special = no transport_maps = hash:/var/lib/mailman3/data/postfix_lmtp local_recipient_maps = hash:/var/lib/mailman3/data/postfix_lmtp proxy:unix:passwd.byname $alias_maps relay_domains = hash:/var/lib/mailman3/data/postfix_domains
Editamos el archivo de mailman
sudo nano /etc/mailman3/mailman.cfg
Modificamos las lineas
site_owner: admin@lista.p.ejemplo.com smtp_host: listas.p.ejemplo.com lmtp_port: 8024
Editar el archivo /usr/share/mailman3-web/settings_local.py
o y copiar la llave de la entrada MAILMAN_ARCHIVER_KEY y se vera como:
MAILMAN_ARCHIVER_KEY = 'Lj6qHTK2hIWTDFFoQ9wm51mX/B5WRhwrU'
Pegar esa llave en al archivo /etc/mailman3/mailman-hyperkitty.cfg
y dejar la configuracion como:
base_url: http://localhost/hyperkitty/ api_key: Lj6qHTK2hIWTDFFoQ9wm51mX/B5WRhwrU
Reiniciar el postfix, dovecot, mailman3 y mailman3-web para verificar que no hay error
sudo systemctl restart postfix; sudo systemctl status postfix; sudo systemctl restart dovecot; sudo systemctl status dovecot; sudo systemctl restart mailman3; sudo systemctl status mailman3; sudo systemctl restart mailman3-web; sudo systemctl status mailman3-web;
Crear y probar nuestra lista de correo
- En el sitio https://lista.p.ejemplo.com/postorius/domains/new/ crear un dominio llamado lista.p.ejemplo.com en el webhost lista.p.ejemplo.com
- Crear una lista nueva https://lista.p.ejemplo.com/postorius/lists/new/ llamada prueba
- Crear un usuario local
- Agregar miembros incluido el nuevo usuario a la lista https://lista.p.ejemplo.com/postorius/lists/prueba.lista.p.ejemplo.com/mass_subscribe/
- Enviar un correo a la lista desde un usuario
echo "This is the body of the email" | mail -s "This is the subject line" prueba@lista.p.ejemplo.com
Otros comandos
root@mailmanprueba2:/etc/mailman3# /usr/bin/django-admin runjob -l --pythonpath /usr/share/mailman3-web/ --settings settings /usr/bin/django-admin runjob new_lists_from_mailman --pythonpath /usr/share/mailman3-web/ --settings settings vi /usr/share/doc/mailman3-web/README.Debian.gz django-admin createsuperuser --pythonpath /usr/share/mailman3-web \ --settings settings --username <user> --email <mail-addr>
Errores
Si se ve en el log algo como:
==> /var/log/mailman3/mailman.log <== Sep 20 17:56:32 2020 (5141) HyperKitty failure on http://localhost/mailman3/hyperkitty/api/mailman/archive: <!DOCTYPE html> <html lang="en"> <head> . . . <h1>Page not found</h1> <div class="alert alert-danger">This page either doesn't exist, or it moved somewhere else.</div> . . .
Verificar la configuracion de nginx (Si el sistema esta en /mailman3/ o en /)
Verificar la configuracion del archivador hyperkitty /etc/mailman3/mailman-hyperkitty.cfg
en la parte:
base_url: http://localhost/hyperkitty/
Tiene que concordar la configuración de la URL hyperkitty y nginx
ToDo
Revisar
- Mensaje de bienvenida
- El pie del correo para desuscribirse
- Plantilla para agregar mas dominios
- Verificar el mensaje de bienvenida
Crear usuario admin
django-admin createsuperuser –pythonpath /usr/share/mailman3-web –settings settings –username usuarioadmin –email usuarioadmin@gmail.com
VPS Linode Notas
Para tener un servidor de correo con mailman3 se debe hacer:
- Solicitar a soporte que abran los puertos: https://www.linode.com/community/questions/11162/is-linode-blocking-port-25
- Configurar el DNS correctamente con los registros en esta guia
- Configurar el RDNS en el VPS : https://grokshop.tv/postfix-mail-server-install-configure-forward-to-gmail/
Reenvio de correo en postfix
Referencias
- Configurar DKIM: https://www.mailjet.com/blog/news/setting-up-dkim-step-by-step/
- Configurar DKIM: https://tecadmin.net/setup-domainkeys-dkim-on-postfix-centos-rhel/
- Configurar DKIM: https://appmaildev.com/en/dkim
- Configurar DKIM: https://edoceo.com/sys/opendkim
- Verificar registros de correo https://mxtoolbox.com/
- Verificar y crear DMARC https://easydmarc.com/
- Sugerencias: https://postmaster.verizonmedia.com/error-codes
- Sugerencias: https://postmaster.verizonmedia.com/best-practices
- Leer reportes DMARC: https://www.validity.com/how-to-read-your-first-dmarc-reports-part-2/
- Aliases de correo en postfix: https://www.serverwatch.com/guides/adding-users-and-aliases-for-postfix/
- Implementación de postsrsd: https://www.mind-it.info/2014/02/22/forward-postfix-spf-srs/