7.3.5.2.5. mutt (MUA)

Advertencia

El epígrafe desarrolla la configuración del mutt, lo cual sólo tiene interés si se pretende usar el programa como MUA. Si no es así, puede saltarse la lectura, ya que no añade gran cosa al conocimiento general de cómo funciona el envío y recepción del correo.

Nota

El epígrafe no es un tutorial de uso, sino la descripción de cómo ordenar una configuración compleja. Además, se explica cómo configurar mutt para que sea capaz de firmar con el certificado digital de la FNMT.

El MUA para la interfaz de línea de comandos más ampliamente utilizado es el programa mutt. Es muy configurable, cumple muy satisfactoriamente su labor y además:

  • Desde la versión 1.5 incluye un MSA interno lo que evita el uso de uno externo como el servidor local o un MSA puro como msmtp.

  • Soporta la gestión de buzones IMAP remotos, pero no descarga mensajes, esto es, no incluye un MRA.

Traeremos aquí (y comentaremos) una configuración que permite:

  • Hacer modular la configuración, de manera que cada aspecto se almacene en un lugar distinto.

  • Gestionar buzones locales, cuyos mensajes se han obtenido a través de un MRA; y buzones remotos.

  • Al arrancar mutt gestionaremos los buzones locales y tendremos la posibilidad de acceder a la gestión de los buzones remotos.

7.3.5.2.5.1. Configuración base

Mutt dispone de un fichero de configuración general (/etc/Muttrc)[1] y un fichero de configuración particular para cada usuario que se busca en ~/.muttrc o ~/.mutt/muttrc o $XDG_CONFIG_HOME/mutt/muttrc. Si se configura de forma monolítica, este último fichero puede llegar a ser un monstruo intratable, por lo que nos reduciremos a incluir en él este contenido:

# Por defecto, gestionamos el correo descargado.
source ~/.mutt/servers/local.rc

# Configuración modular.
source 'cat ~/.mutt/rc.d/*.rc|'

Al hacerlo nuestra intención es la siguiente:

  • La configuración, dividida en distintos aspectos, se encontrará dentro del subdirectorio ~/.mutt/rc.d

  • Dado que gestionaremos el correo descargado en los buzones locales y, además, distintas cuentas remotas directamente en los buzones de sus respectivos servidores, crearemos otros subdirectorio llamado ~/.mutt/servers dentro del cual habrá un fichero que configure cada cuenta. La configuración para los buzones locales la trataremos como si de otra cuenta se tratara y le reservamos el nombre local.rc. El resto de ficheros, como desarrollan la configuración de una cuenta, contendrán contraseñas, por lo que es indispensable evitar que terceros puedan leerlos:

    $ chmod 700 ~/.mutt/servers
    
  • Dentro de ~/.mutt se encontrará el resto de ficheros relacionados con mutt (mailcap, aliases, etc.). Ya se irán tratando.

  • El certificado para la firma digital se encuentra dentro de ~/.smime.

Por lo pronto, ésta es la configuración modular propuesta, sobre la que pueden ir haciendo recortes y adiciones al gusto.

7.3.5.2.5.2. Módulos de configuración

Hemos decidido dividir la configuración en diferentes ficheros situados dentro del directorio ~/.mutt/rc.d. Cómo se haga esta división puede ser muy discutible. La mía la he dividido del siguiente modo:

7.3.5.2.5.2.1. General (general.rc)

Contiene la configuración más general sobre el comportamiento de mutt.

7.3.5.2.5.2.2. Cabeceras (headers.rc)

Determina cómo se presentan las cabeceras al ver y editar los mensajes.

7.3.5.2.5.2.3. Aspecto (style.rc)

Controla fundamentemente los colores de la interfaz de mutt. Más o menos, están configurados para que sean aquellos que presenta el lector de news slrn.

7.3.5.2.5.2.4. Macros (macros.rc)

Hace algunas redefiniciones de teclas útiles.

7.3.5.2.5.2.5. Edición (edition.rc)

Establece valor para algunas directivas que controlan la edición de mensajes (p.e. cuál será el editor que usemos[2]). También está definido dentro de él cómo se genera la firma, no la digital, sino la firma con la que se cierra el mensaje.

Para esto último se usa un script (~/.mutt/signature/signature.sh) que genera una firma aleatoria gracias al programa fortune. Éste, por su parte, las escoge de las citas incluidas dentro del directorio ~/.mutt/signature/citas. Dentro de él pueden incluirse varios ficheros que contengan citas una debajo de otra separadas por el signo «%»:

%
La juventud es un defecto que se cura con el tiempo
                   --- Enrique Jardiel Poncela ---
%
Harto sabe, si me sabe bien.
                  --- Francisco de Quevedo ---

Los ficheros, no obstante, no pueden usarse directamente, sino que se requiere generar ficheros de índice para acceder a las citas más rápidamente. Para generarlos, suponiendo que tengamos un fichero llamado miscitas:

$ strfile -c % ~/.mutt/signature/citas/miscitas{,.dat}

7.3.5.2.5.2.6. Adjuntos (view_attachment.rc)

Define dos aspectos:

  • Cuáles son los adjuntos que se mostrarán directamente al ver el mensaje. Para ver los restantes habrá que pulsar «v» y seleccionar verlos (»Enter») o descargarlos (»s»).

  • mailcap que es el fichero que asocia las forma en que puede mostrarse el contenido de los adjuntos.

7.3.5.2.5.2.7. Lista de direcciones (alias.rc)

Define cuál es el fichero que se usará para almacenar las direcciones conocidas (en nuestro caso, ~/.mutt/aliases). Las direcciones pueden añadirse editando directamente el fichero o pulsando «a» para añadir la dirección del remitente del mensaje que se muestra.

7.3.5.2.5.2.8. Listas de distribución (lists.rc)

Es interante tratar los mensajes a listas de forma especial y asignarles un buzón por lista. La configuración permite gestionarlas de forma cómoda.

7.3.5.2.5.2.9. Firma digital (smime.rc)

Fundamentalmente define cómo firmar los correos electrónicos. Lo habitual es usar gpg, aunque también es posible usar el certificado expedido por la FNMT.

Nota

Para la perfecta compresión de este apartado, debería echarle un ojo a las explicaciones sobre certificado digital.

Antes de empezar es necesario tener presente (aunque esto puede deducirse del estudio del propio certificado) que los certificados personales expedidos por la FNMT se firman con un certificado intermedio (AC FNMT Usuarios) que a su vez sí se firmó con un certiticado raíz (AC RAIZ FNMT-RCM)[3].

Lo habitual es que nuestro certificado se encuentre en formado PKCS #12, quizás exportado desde el navegador. Existen varias posibilidades:

  • Que el archivo .p12 se limite a recoger nuestro certificado.

  • Que incluya también el certificado intermedio.

  • Que incluya, además, el certificado raíz.

Nota

En principio, el certificado raíz debería estar incluido en el sistema y no necesitamos preocuparnos de él. El antiguo certificado raíz de la FNMT no lo estaba y bera necesario hacerse en formato PEM (codificación Base64). En ese caso era necesario hacerse con él y, una vez creado el directorio ~/.smime como se expone más adelante, copiarlo en el fichero adecuado[4] (siempre formato PEM codificado en Base64):

·$ cat raiz.crt > ~/.smime/ca-bundle.crt

Por otra parte el certificado debería incluir la dirección de correo electrónico:

$ openssl pkcs12 -in micert.p12 -clcerts -nokeys | openssl x509 -ext subjectAltName -noout
X509v3 Subject Alternative Name:
   email:midireccion@example.net, [...]

porque si no la incluye, aunque podremos firmar, tendremos que completar el proceso de instalación manualmente.

Si nuestro .p12 no incluye el certificado intermedio, deberemos obtenermos y generar un .p12 que sí lo incluya. No debería tener problemas para hacer esta operación si ha leído con detenimiento las explicaciones sobre certificados digitales.

Completado esto, si es la primera vez que instalamos el certificado para mutt, deberemos preparar el directorto para certificados (~/.smime):

$ smime_keys init

Y ya preparado basta con instalar el certificado propio y el intermedio:

$ smime_keys add_p12 /tmp/micert.p12
Enter Import Password:
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

You may assign a label to this key, so you don't have to remember
the key ID. This has to be _one_ word (no whitespaces).

Enter label: micert_ceres
==> about to verify certificate of f8ecaf67.0

/home/josem/.smime/certificates/f8ecaf67.0: OK


certificate f8ecaf67.0 (micert_ceres) for midireccion@example.net.com added.
added private key: /home/usuario/.smime/keys/f8ecaf67.0 for midireccion@example.net

Nuestro certificado está asociado al nombre f8ecaf67.0 que será el que haya que incluir en la configuración propuesta para smime.rc.

Podemos, sin embargo, encontrarnos con el problema de que el certificado no incluya la dirección de correo. En ese caso, la orden smime_keys no lo reconocerá como un certificado propio y aunque copiará el certificado público en ~/.smime/certificates/f8ecaf67.0, no lo añadirá al archivo .index de ese directorio, ni instalrá la parte privada en ~/.smime/certifcates/keys. Para solucionarlo podemos completar nosotros mismos la instalación:

$ echo "midireccion@example.net f8ecef67.0 ceres_2021 1fe0bb9f.0 t se" >> ~/.smime/certificates/.index
$ cp micert.key ~/.smime/keys/f8ecef67.0
$ echo "midireccion@example.net f8ecef67.0 ceres_2021 ? t se" >> ~/.smime/keys/.index

donde 1fe0bb9f.0 es el nombre que haya adquirido el certificado intermedio y micert.key el archivo donde hayamos guardado la parte privada de nuestro certificado en formato PEM.

Nota

Con la configuración incluida en smime.rc, se firmarán automáticamente los mensajes cuyo emisor sea la cuenta a la que hayamos asociado el certificado (en el ejemplo, midireccion@example.net), excepto aquellos dirigidos a listas de distribución. No obstante, justamente antes de enviar el mensaje se podrá evitar o incorporar la firma pulsando «C».

7.3.5.2.5.2.10. Declaración de cuentas (servers.rc)

Ya se ha adelantado que se quiere usar mutt para gestionar tanto cuentas para las que se descargan sus mensajes como cuentas que lo gestionan directamente a través de IMAP.

La estrategia que se sigue en este caso es la siguiente:

  • Los buzones cuyo nombre empieza por punto son buzones locales.

  • Los buzones cuyo nombre empieza por .buzon. son para cuentas IMAP. Cada una tendrá un buzón. Ahora bien, estos son sólo buzones auxiliares que no contienen mensajes en absoluto y de hecho hay definido un gancho para que al entrar en estos buzones mutt se redirija directamente al buzón de entrada de cada cuenta.

  • «y» lleva a un índice de buzones en que aparecen los buzones locales y los buzones auxiliares remotos.

  • «c» lleva al índice de buzones asociado a esa cuenta.

El fichero enumera las cuentas, pero no desarrolla la configuración particular de cada una. Para ello están los ficheros incluidos dentro de .mutt/servers que se describirán a continuación.

7.3.5.2.5.3. Configuración de cuentas

Cada fichero contiene básicamente:

  • Identidad y credenciales de la cuenta.

  • Los buzones y qué papel desempeñan.

  • Cómo se envían mensajes.

  • En el caso de cuentas de buzones remotos, cuáles son los datos para la conexión IMAP.

Notas al pie