Herramientas de usuario

Herramientas del sitio


proyectos:linuxservidor-correo-lista

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:

  1. Escribir A en la primera pregunta: (A)gree/(C)ancel: A
  2. Escribir N en la segunda pregunta: (Y)es/(N)o: n
  3. 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:

  1. Internet Site
  2. 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:

  1. Configure database for mailman3 with dbconfig-common?: Yes
  2. Database type to be used by mailman3: mysql
  3. MySQL application password for mailman3: ENTER (Para genere la clave automaticamente)
  4. Configure database for mailman3-web with dbconfig-common? : Yes
  5. Database type to be used by mailman3-web: mysql
  6. 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:

  1. Reinstall database for mailman3? : Yes
  2. Database type to be used by mailman3: mysql
  3. Connection method for MySQL database of mailman3: Unix socket
  4. MySQL database name for mailman3: ENTER
  5. MySQL username for mailman3: ENTER
  6. MySQL application password for mailman3: ENTER
  7. Password confirmation: ENTER
  8. The password and its confirmation do not match. : Ok
  9. MySQL application password for mailman3: ENTER
  10. Name of the database's administrative user: ENTER
  11. Add the HyperKitty configuration to mailman.cfg?: Yes
sudo dpkg-reconfigure mailman3-web

Contestar las preguntas con:

  1. Reinstall database for mailman3-web? : Yes
  2. Database type to be used by mailman3-web: mysql
  3. Connection method for MySQL database of mailman3-web: Unix socket
  4. MySQL database name for mailman3-web: ENTER
  5. MySQL username for mailman3: ENTER
  6. MySQL application password for mailman3-web: ENTER
  7. Password confirmation: ENTER
  8. The password and its confirmation do not match. : Ok
  9. MySQL application password for mailman3-web: ENTER
  10. Domain name for sender email addresses: lista.p.ejemplo.com
  11. Username of the Postorius superuser:admin
  12. Email address of the Postorius superuser:admin@manu2.p.floresvillatoro.com
  13. Password for the Postorius superuser: MISUPERCLAVE
  14. Web server(s) to configure automatically: none (Dado que ya configuramos manualmente nginx)
  15. 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

  1. 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
  2. Crear una lista nueva https://lista.p.ejemplo.com/postorius/lists/new/ llamada prueba
  3. Crear un usuario local
  4. 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

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:

  1. Configurar el DNS correctamente con los registros en esta guia

Reenvio de correo en postfix

Referencias

proyectos/linuxservidor-correo-lista.txt · Última modificación: por manuel.floresv