Volvemos a las viejas y fiables listas de correo …

… porque al final es un mecanismo casi universal de acceso a la información.

Y para ello estoy instalando un gestor de listas de correo con el que tengo ya cierta experiencia llamado Sympa. Está escrito en Perl, es bastante robusto y dispone de un completo interfaz web con el que gestionar las listas, los subscriptores y el archivo de las mismas.

El programa está empaquetado para Debian en una versión relativamente reciente así que eso es lo que voy a emplear.

Para funcionar Sympa precisa de:

  1. Un nombre de dominio para las listas como por ejemplo grupos.taquiones.net.
  2. Un servidor de correo amigable que permita despachar correo a ciertas direcciones empleando programas.
  3. Una base de datos compatible.
  4. Espacio en disco para archivar los correos.
  5. Un servidor web para gestionar el interfaz visual. También admite órdenes vía mensajes de correo pero eso lo hace muy inapropiado para el humano medio

Configuración

La configuración es prácticamente automática con la instalación del paquete. Se pregunta el nombre del dominio del correo, el tipo de base de datos y sus credenciales, y el servidor web que va a dar acceso al interfaz web.

No hay que hacer mucho más que asegurarse de que el servidor de correo se entiende con Sympa y que servidor web hace lo mismo por su parte.

Conectando con exim4

Al parecer la configuración no es del todo automática en este caso ya que existen varios problemas:

  • A partir de cierta versión de Exim4 ya no se permiten los alias que conectan con procesos (pipes)
  • Los alias de las listas de correo son gestionados por Sympa en un archivo especial del que Exim4 no tiene constancia inicialmente.

Para el primer problema, y teniendo una configuración fragmentada en Exim4, se añaden las siguientes definiciones al archivo /etc/exim4/exim4.conf.localmacrosque crean un transporte para el enrutador system_aliases

#--------------                                                                                                                                                
# Activating pipe transport in system_aliases router (pipes in /etc/aliases)                                                                                   
.ifndef SYSTEM_ALIASES_PIPE_TRANSPORT                                                                                                                          
SYSTEM_ALIASES_PIPE_TRANSPORT = address_pipe                                                                                                                   
.endif                                                                                                                                                         
.ifndef SYSTEM_ALIASES_USER                                                                                                                                    
SYSTEM_ALIASES_USER = sympa                                                                                                                                    
.endif                                                                                                                                                         
.ifndef SYSTEM_ALIASES_GROUP                                                                                                                                   
SYSTEM_ALIASES_GROUP = sympa                                                                                                                                   
.endif                                                                                                                                                         
#--------------

Luego añadimos un nuevo enrutador para los alias de las listas en el archivo /etc/exim4/conf.d/router/450_local-config_sympa_aliases

sympa_aliases:                                                                                                                                                 
  debug_print = "R: system_aliases for $local_part@$domain"                                                                                                    
  driver = redirect                                                                                                                                            
  domains = +local_domains                                                                                                                                     
  allow_fail                                                                                                                                                   
  allow_defer                                                                                                                                                  
  data = ${lookup{$local_part}lsearch{/etc/mail/sympa/aliases}}                                                                                                
  user = sympa                                                                                                                                                 
  group = sympa                                                                                                                                                
  pipe_transport = address_pipe

 

Situándolo en un servidor virtual con Apache

La configuración que me ha funcionado dentro de un servidor virtual es la siguiente:

<VirtualHost *:443>
        ServerAdmin admin@empresa.net
        ServerName  listas.empresa.net
        Include /etc/apache2/ssl.conf

        LogLevel debug
        ErrorLog        /var/log/apache2/listas.empresa.net/error.log
        CustomLog       /var/log/apache2/listas.empresa.net/access.log Combined

        <Location /sympa>
            SetHandler fcgid-script
            Require all granted
        </Location>

        ScriptAlias /sympa /usr/lib/cgi-bin/sympa/wwsympa-wrapper.fcgi

        <Location /sympasoap>
            SetHandler fcgid-script

            Require all granted 
        </Location> 

        ScriptAlias /sympasoap /usr/lib/cgi-bin/sympa/sympa_soap_server-wrapper.fcgi 
 
        Alias /static-sympa /var/lib/sympa/static_content 
        <Directory /var/lib/sympa/static_content> 
                Require all granted 
        </Directory> 
 
        ## Si todo el servidor virtual está dedicado a Sympa
        RewriteEngine on 
        RewriteRule ^/?$ /sympa [R=301] 
</VirtualHost> 

La parte más complicada de entender es que los programas web de Sympa necesitan acceder al mismo contenido que los programas de correo del programa, en las mismas condiciones. Apache funciona con www-data como cuenta mientras que Sympa lo hace con sympa. De ahí que sea necesario utilizar un programa envoltorio con el atributo suid para que llegue a funcionar.

Acceso de usuarios vía LDAP

Sympa tiene varios mecanismos para validar las credenciales de los usuarios que pueden usarse en cadena; todos se incluyen en el archivo /etc/sympa/auth.conf en un orden específico para intentar.

ldap
        regexp                      .*
        host                        ldap.empresa.net:389
        timeout                     30
        suffix                      ou=users,dc=empresa,dc=net
        get_dn_by_uid_filter        (uid=[sender])
        get_dn_by_email_filter      (|(mail=[sender])(mailalternateaddress=[sender]))
        email_attribute             mail
        scope                       sub

user_table
        regexp .*

Como puede verse la primera y a veces única directiva es una expresión regular que puede filtrar el tipo de mecanismo a emplear.

Personalizando interfaz web

Para el logotipo se puede emplear la directiva logo_html_definition en el archivo /etc/sympa/sympa/sympa.conf

logo_html_definition <a href="http://listas.empresa.net"><img style="float: left; margin-top: 7px; margin-left: 37px;" src="https://empresa.net/images/empresa-net-med.png" alt="Listas de Venexma" /></a>

Enlaces y referencias