Listas de distribución con Mailman en GNU Linux

Siempre he tenido curiosidad en saber el funcionamiento de las listas de correo, de las que suelo ser partícipe. Ya que de ésta manera puedo estar informado de las últimas novedades y proyectos, y poder así aportar mi grano de arena en las discusiones y temas. Por lo tanto hoy hablaré del funcionamiento de dichas listas de correo y la instalación del sistema en un servidor GNU Linux, utilizando la potente herramienta GNU mailman.

mailman-logo

Sobre las listas de correo

Simplificando un poco podemos decir que las listas utilizan los sistemas de correo electrónico para la distribución masiva de información entre más de un usuario, de hecho decenas, centenas o miles. Su funcionamiento es bien sencillo, una vez ya estamos subscritos a una, desde nuestro correo podemos mandar un mensaje a una dirección de la lista, por ejemplo, lista@ochobits.com, y de ésta manera dicho mensaje le llegará a todos los correos inscritos en ella.

Se trata de una herramienta clave sobre todo para organizaciones, asociaciones o grupos, ya que de ésta manera pueden mantener una comunicación fluida, desde sus computadores o dispositivos móviles, ya sean tabletas o smartphones. Para organizar un evento o proyecto. Por ejemplo en una escuela los alumnos pueden debatir sobre un tema específico o bien los profesores charlar sobre las próximas actividades.

Su funcionamiento suele ser en la mayoría de los casos de forma automática mediante un gestor de listas. Y a cada lista se le asocia una dirección de correo con la que trabajar. Una vez llega un correo a la dirección de la lista, éste se reenvía a todos los que están inscritos en ella.

Por normal general cada lista tendrá disponible una dirección para inscribirse, por ejemplo, alta.lista@ochobits.com o para darse de baja, bajas.lista@ochobits.com También podemos pedir que nos llegue un resumen diario de todos los mensajes, llamado “digest” Añadido que existe la posibilidad de consultar todos los mensajes de una lista de correo, si así si configura, para poder consultarse vía web.

Tipos de listas

Básicamente existen dos tipo o sistemas de distribución de dichas listas de correo. Uno sería utilizarlas como un canal de información de una sola dirección, tipo boletín de noticias, en el cual sólo recibiremos la información deseada por el administrador de la lista. El otro tipo, que es el que nos interesa, es el de lista de debate. Donde podrá escribir y recibir mensajes cualquier suscriptor. En éste caso también puede existir la figura del moderador, que puede filtrar los mensajes enviados a la lista.

Reglas de uso

Queda claro que al igual que cuando escribimos un correo o en una web un artículo, debemos respetar la reglas ortográficas, y añadido, para no sobrecargar el servidor, por lo tanto, texto formateado, imágenes, adjuntos, publicidad de terceros, etcétera, tendrían que quedar descartados. La educación y las buenas formas se sobreentienden. Y bueno, ceñirse al tema de la lista ante todo.

Sabemos que existen servicios en Internet para crear dichas listas, no creo que haga falta que los menciono, ya que no quiero hacer publicidad de entidades privativas, por lo que utilizaremos en nuestro servidor Mailman, del proyecto GNU, fundado por Richard Stallman hace ya más de treinta años.

Sobre Mailman

Se trata de un software libre, no confundir con gratis, para la gestión y creación de listas de correo electrónico. Mailman nos permitirá interactuar con dichas listas desde una interfaz web, desde allí los usuarios podrán interactuar con las listas, y los administradores gestionarlas. Dicho programa tiene muchas ventajas, como almacenamiento de ficheros, filtrado de contenidos, resúmenes diarios o digest, filtros de spam, sistema de devolución o bounce, etcétera. Si queremos ver todas sus características, aquí.

Instalación sobre un sistema GNU Linux con Debian

Si seguís la web desde hace tiempo sabéis que prácticamente la mayoría de tutoriales los hago sobre para mi la mejor distribución del Pingüino y el Ñu, es decir, Debian.

Para el tutorial voy a crear un VPS en DigitalOcean. Las instrucciones de como crearlo ya lo expliqué ayer en el artículo de como crear un servidor en GNU Linux desde cero. Mi idea es sólo usarlo para unos días, aunque quizás más adelante cambie de idea. A diferencia del servidor de correo que lo cree utilizando Ubuntu, en éste caso utilizaré Debian, en su última versión a fecha de hoy, es decir, Jessie. Con las mismas caracaterísticas, 512 MB de memoria, 20 GB de disco duro y un núcleo. He llamado al VPS listas.ochobitsunbyte.pw

A nivel de seguridad como siempre, recomiendo tener el sistema actualizado, utilizando un puerto diferente en ssh y limitar el tiempo de conexión.

Como paso previo debemos instalar el servidor web Apache:

  1. apt-get -y install apache2

La instalación en Debian es bien sencilla:

  1. apt-get -y install mailman

Durante la instalación escogeremos el idioma con el que trabajar, y también nos indicará que más adelante lo podremos cambiar utilizando la herramienta «dpkg-reconfigure mailman»  en la consola de comandos.

mailman-gnu-linux-001

mailman-gnu-linux-002

Y nos pedirá que creemos una lista, para tareas tan básicas como los recordatorios de contraseña.  Es tan esencial que para iniciar el servicio debemos crear almenos una.

mailman-gnu-linux-003

Para ello, tal y como vemos en la imagen, utilizaremos el comando «newlist mailman«, pero antes modificaremos el fichero de configuración /etc/mailman/mm_cfg.py,yo he utilizado el editor nano, aunque podemos utilizar otros como vim, joe o emacs.

mailman-gnu-linux-004

En la parte superior del fichero vemos en inglés la licencia de software libre, que como vemos pertenece a la Free Software Foundation. Ahora debemos configurar varias cosas, entre ellas la dirección de dominio que queremos que aparezca en los correos , la dirección del servidor web y el idioma. Lo podemos ver en la imagen:

mailman-config-01

Es decir, sería así:

  1. DEFAULT_EMAIL_HOST = 'listas.ochobitsunbyte.pw'
  2. DEFAULT_URL_HOST   = 'listas.ochobitsunbyte.pw'
  3. DEFAULT_SERVER_LANGUAGE = 'es'

También descomentaremos la línea sobre MTA. Aquí indicaremos POSTFIX como el agente de transporte de correo.

  1. MTA = 'Postfix'

Ahora haremos que el servidor tengo un nombre cualificado FQDN, por lo tanto modificamos el fichero /etc/hosts, con los siguientes datos:

  1. 127.0.0.1 listas.ochobitsunbyte.pw listas.ochobitsunbyte.pw
  2. 127.0.1.1 listas.ochobitsunbyte.pw listas
  3. ip.servidor listas.ochobitsunbyte.pw listas

Tenemos que modificar las DNS del dominio ochobitsunbyte.pw para añadir un registro «A» que apunte al nuevo servidor, llamado listas. También un registro MX que apunte al servidor listas.ochobitsunbyte.pw Recordad que en el servidor de correo las DNS las tenía en CloudFlare. Si tenéis algunda duda respecto a éste punto me podéis escribir un comentario o enviarme un correo en la página de contacto y os echaré un mano.

En la siguiente parte crearemos una lista de correo especial llamada «mailman«, dicha lista la utilizaremos para enviar recordatorios de contraseñas y es necesaria para el correcto funcionamiento del sistema.

Para crearla escribiremos en la consola de comandos:

  1. newlist mailman

Nos pedirá una cuenta de correo para administrar las listas, escogemos una. A continuación debemos editar el fichero /etc/aliases y añadir la siguiente información:

  1. mailman:              "|/var/lib/mailman/mail/mailman post mailman"
  2. mailman-admin:        "|/var/lib/mailman/mail/mailman admin mailman"
  3. mailman-bounces:      "|/var/lib/mailman/mail/mailman bounces mailman"
  4. mailman-confirm:      "|/var/lib/mailman/mail/mailman confirm mailman"
  5. mailman-join:         "|/var/lib/mailman/mail/mailman join mailman"
  6. mailman-leave:        "|/var/lib/mailman/mail/mailman leave mailman"
  7. mailman-owner:        "|/var/lib/mailman/mail/mailman owner mailman"
  8. mailman-request:      "|/var/lib/mailman/mail/mailman request mailman"
  9. mailman-subscribe:    "|/var/lib/mailman/mail/mailman subscribe mailman"
  10. mailman-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe mailman"

Y ejecutamos el comando ‘newaliases’ :

  1. newaliases

Si todo ha ido bien con el comando ‘cat’ podemos revisar el fichero /var/lib/mailman/data/aliases, y allí debemos ver la misma información, si no es así, tenemos que ejecutar el comando:

  1. /usr/lib/mailman/bin/genaliases

Y arrancamos el servicio:

  1. service mailman start

Configuración de Postfix para mailman

Para enviar los correo utilizaremos postfix, su instalación es muy sencilla:

  1. apt-get -y install postfix

Como sabéis su fichero de configuración está ubicado /etc/postfix/main.cf, lo primero que haremos es guardar el original:

  1. cp main.cf main.cf.original

Antes de modificar nada, en nuestro servidor de correo debemos crear una cuenta para los envíos, en mi caso es listas@ochobitsunbyte.pw.

La sentencia SQL necesaria para crearla en el servidor de correo, si tenemos en cuenta que sólo tenemos la que utilizamos en el otro tutorial:

  1. INSERT INTO `servermail`.`virtual_users`
  2. (`id`, `domain_id`, `password` , `email`)
  3. VALUES
  4. ('2', '1', ENCRYPT('laclave', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'listas@ochobitsunbyte.pw');

Una vez hecho volvemos al servidor de las listas de correo, y modificamos el fichero /etc/postfix/main.cf, en dicho servidor añadimos las credenciales de la cuenta. Podemos guiarnos con el tutorial que escribí en su día.

En cualquier caso el fichero main.cf deberá quedar como sigue, modificando en cada caso con nuestras datos:

  1. relayhost = [correo.ochobitsunbyte.pw]:587
  2. smtp_use_tls = yes
  3. smtp_tls_CAfile = /etc/postfix/cacert.pem
  4. smtp_sasl_auth_enable = yes
  5. smtp_sasl_password_maps = hash:/etc/postfix/sasl/passwd
  6. smtp_sasl_security_options = noanonymous
  7.  
  8. myhostname = listas.ochobitsunbyte.pw
  9.  
  10. mynetworks = 127.0.0.0/8
  11.  
  12. mydestination = $mydomain,$myhostname,localhost,locahost.domain,correo.ochobitsunbyte.pw,listas.ochobitsunbyte.pw
  13.  
  14. owner_request_special = no
  15. recipient_delimiter = +
  16. unknown_local_recipient_reject_code = 550
  17. mailbox_command = /usr/bin/procmail -a "$EXTENSION"
  18. relay_domains = correo.ochobitsunbyte.pw
  19.  
  20.  
  21. alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
  22. alias_database = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
  23. virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman

Configurar Apache para mailman

Al instalar el servicio web Apache, se crea la carpeta /etc/apache2, y dentro de ella los directorios y ficheros de configuración. Para poder trabajar con mailman debemos crear un fichero en la carpeta /etc/apache2/sites-available, llamado mailman.conf Para no trabajar desde cero, copiaremos la plantilla /etc/mailman/apache.conf

  1. cp /etc/mailman/apache.conf /etc/apache2/sites-available/mailman.conf

El fichero nos deberá quedar de la siguiente manera, justo en la parte final:

apache2-mailman

Los guardamos y salimos.

El fichero por defecto de apache es /etc/apache2/sites-available/00-default.conf, por lo menos en lo que a Debian 8 se refiere, en la mayoría de casos suele llamarse ‘default‘, para deshabilitar lo haremos de la siguiente manera:

  1. a2dissite 00-default

Y habilitamos nuestra configuración:

  1. a2ensite mailman

Al  reiniciar el servidor apache con «service apache2 restart«, ya debería funcionar, pero a mi me ha dado un error:

forbidden-mailman

Esto es debido por que debemos habilitar el módulo de Apache llamado ‘cgid‘, para activarlo:

  1. a2enmod cgid

Entonces reiniciamos apache2 y mailman:

  1. service mailman restart
  2. service apache2 restart

Entonces ya nos podemos ir a nuestro navegador favorito y escribimos: http://listas.ochobitsunbyte.pw, y veremos la página de bienvenida:

web-mailman-gnu-linux-01

Crear y eliminar listas de correo

Para crear una nueva lista de correo sólo tenemos que utilizar el comando ‘newlist‘, que nos preguntará la dirección del administrador de la lista y una contraseña, cada vez que creamos una debemos reiniciar el servicio con ‘service mailman restart‘ Para eliminar una lista se utiliza el comando ‘rmlist‘, por ejemplo, ‘rmlist lista

Contraseñas para la gestión web

Para la gestión de las listas desde el panel web existen dos tipo de contraseñas, la primera se denomina ‘site password’, que nos dará control total sobre el entorno y viene semejante a la de un administrador. El otro tipo de contraseña sirve para delegar la gestión de las listas a una tercera persona, se denomina ‘list creator password

¡Es imprescindible crear ambas contraseñas para la gestión web!

Creamos la ‘site password‘ de la siguiente manera:

  1. mmsitepass  contraseña

La contraseña ‘list creator password‘ se crea:

  1. mmsitepass  -c contraseña

De ésta manera ya podremos trabajar desde el panel web sin problema.

Para comprobat que todo haya ido bien nos iremos en la web, justo en la parte central a «la página de administración de listas» y nos dirigirá al control de acceso. Una vez entremos la contraseña correcta, veremos el panel de administración:

web-mailman-gnu-linux-02

La instalación de mailman es bastante delicada con el tema de los permisos de las carpetas y los ficheros. Por lo tanto para chequear que toda la instalación es correcta, utilizaremos una de las herramientas disponibles, ubicada en /usr/lib/mailman/bin/, llamada ‘check_perms‘, si nos diese algún error podemos solventarlo escribiendo ‘check_perms -f‘ , si aún así hay ficheros que devuelven error en permisos, como ha sido en mi caso, se puede solucionar cambiando los permisos de forma manual, por ejemplo, en mi instalación una serie de ficheros, en concreto diez, ubicados en /var/lib/mailman/ tenían mal los permisos de propietario, lo solucione escribiendo ‘chgrp -h list /var/lib/mailman/*‘, y quedó solventando el problema.

Por último y no menos importante, es añadir una serie tareas programadas con contrab,Mailman ya viene con una plantilla que podemos utilizar de la siguiente manera:

  1. cat /usr/lib/mailman/cron/crontab.in > mailmancron
  2. crontab mailmancron

Y así dejaríamos una serie de tareas, como enviar avisos, recordatorios, etcétera, programadas.

Si os ha parecido interesante el artículo me gustaría que participaseis de alguna manera, y que mejor manera que inscribirse en una lista de correo que he creado, llamada «Bitadictos»  : )   Sé que el servidor tiene muchas cosas a mejorar como soportar conexión https y garantizar que los correos no vayan a la carpeta de SPAM de los destinatarios, pero eso será para otro artículo.

Para el artículo he revisado bastante material en Internet, por desgracia no lo he apuntado todo:

GNU Mailman | letitknow

Los derechos de la imagen del perro cartero, aquí.