Mailutils prétend être le couteau suisse pour la gestion des mails. J'espère, quand même, que le couteau suisse est plus facile à utiliser. Mais vous allez voir, ça va bien se passer...
Ce document s'intéresse, uniquement à l'installation du serveur pop3d de mailutils dans le cadre d'une installation locale où l'on préfère la simplicité à la prétendue sécurité des autres serveurs de mail.
Le but est de servir les mails locaux aux clients comme Thunderbird en utilisant le protocole pop3 ou pop3s aux machines du réseau local.
Depuis que j'ai une machine Linux, j'ai un serveur mail local et pour accéder aux mails locaux, le client mail Thunderbird s'adresse au serveur pop3 qui s'active à la demande par l'intermédiaire de xinetd. Le serveur pop3 a été, successivement, popa3d, qpopper.
Void linux, que j'utilise, est une distribution Linux rolling release, qui n'est rien d'autre qu'une machine de compilation. Elle passe son temps à rechercher les paquets qyi ont évoluées, à les compiler, à compiler les dépendances et à la mettre à disposition sur leurs serveurs.
L'utilisateur, qui vient de faire une instalation, est donc tout de suite en décalage par rapport aux serveurs, ce qui n'empêche pas le fonctionnement.
Le problème survient dès que l'on veut installer une nouvelle application. Il faut, avant d'installer, synchroniser l'installation avec le serveur. Ce faisant, on a des chances de remplacer une application qui fonctioonait auparavent par une qui ne focntioone plus.
Dans mon cas, thundirbird ne sait plus parler à qpopper. Donc remplacons qpopper par pop3d de mailutils pour éviter les serveurs sur-dimensionner comme dovcocote ou cyrus qui sont plus orientés sur le protocole imap.
Vous retrouverez tous les fichiers cités dans la zone de téléchargement.
Après téléchargement et extraction des sources de Mailutils, ici la version 3.15, on peut lancer la configuration par la comande sh doconf dont le contenu suit et qui exécute la commande ./configure.
./configure \ --sysconfdir=/etc \ --enable-debug \ --disable-pam \ --disable-ldap \ --disable-maildir \ --disable-python \ --without-unistring \ --without-gsasl \ --without-guile \ --with-mail-rc=/etc/mail/mail.conf \ --with-mail-spool=/var/mail \ --disable-nls \ --with-gdbm \ --with-gnutls \ --with-tokyocabinet \ --with-kyotocabinet \ --disable-virtual-domains \ --disable-build-sieve \ --disable-build-guimb \ --disable-build-maidag \ --disable-imap \ --disable-build-imap4d \ --disable-build-lmtpd \ --disable-mh \ --disable-build-mh echo "#define MU_SITE_CONFIG_FILE \"/etc/mail/mailutils.conf\"" >> config.h exit 0 # --without-fribidi # --with-sql=MODLIST # --with-mysql # --with-postgres # --with-odbc[={odbc|iodbc}] # --with-mh-bindir=DIR # --with-virtual-pwddir=DIR # --without-readline # --with-gssapi # --with-guile-site-dir[=DIR] # --with-log-facility=facility # --with-berkeley-db[=ARG] # --with-ndbm # --disable-imap Disables IMAP protocol support. # --disable-pop Disables POP protocol support. # --disable-smtp Disables support for SMTP mailer. # --disable-sendmail Disables support for `Sendmail' mailer. # --disable-mh Disables support for MH mailbox format. # --disable-build-servers do not build server utilities # --disable-build-clients do not build client utilities # --disable-pthread # --disable-build-comsat do not build comsat # --disable-build-frm do not build frm # --disable-build-mail do not build mail # --disable-build-pop3d do not build pop3d # --disable-build-messages do not build messages # --disable-build-movemail do not build movemail # --disable-build-mimeview do not build mimeview # --disable-build-readmsg do not build readmsg # --disable-build-dotlock do not build dotlock
Le but c'est d'enlever au maximum ce qui ne sert pas. Le fichier doconf est construit à partir du fichier READDME et des informations fournies par la commande ./configure --help.
Il y a des options qui ne sont pas définies qu'il faut mettre. Il y a des options qui ne sont pas acceptées et qui sont définies. Il y a des options définies qui n'ont auncune action. La dernière ligne définit la variable MU_SITE_CONFIG_FILE utilisée par toutes les applications mais définit nulle part.
Le résultat de doconf se termine par la table suivante: ce n'est pas trop pire !.
******************************************************************* GNU Mailutils configured with the following settings: Default mailbox scheme ........ mbox Use PAM ....................... no Use -ltdl ..................... yes Use DBM ....................... GDBM Use GNU TLS ................... yes Use GSASL ..................... no Use GSSAPI .................... yes Use TCP wrappers .............. no Pthread support ............... yes Readline support .............. yes Libunistring support .......... no MySQL support ................. no PostgreSQL support ............ no LDAP support .................. yes Radius support ................ no Support for virtual domains ... no IPv6 support .................. yes Interfaces: Guile ......................... no C++ ........................... no Python ........................ no Mailbox formats: IMAP .......................... no POP ........................... yes MH ............................ no maildir ....................... no dotmail ....................... yes Mailers: SMTP .......................... yes Sendmail ...................... yes Utilities to build: Servers ....................... pop3d comsat mda Clients ....................... putmail frm mail messages readmsg dotlock movemail mimeview decodemail ******************************************************************* Before proceeding, verify if these satisfy your requirements. configure: WARNING: unrecognized options: --disable-ldap, --disable-build-guimb, --disable-build-maidag
Avant de compiler, il faut modifier un fichier ./pop3d/cmd.c sinon tls ne fonctioonera pas. Voici le contenu du fichier pop3d.patch:
mailutils-3.15]$ cat pop3d.patch --- ./pop3d/cmd.c~ 2022-02-12 16:20:43.000000000 +0100 +++ ./pop3d/cmd.c 2022-10-01 18:42:36.736840623 +0200 @@ -138,6 +138,7 @@ continue; case MU_TLS_CONFIG_OK: + tls_ok = 1; break; default:
On peut compiler maintenant et installer dans /usr/local:
make sudo make install
Après installation, la commande /usr/local/bin/mail (mailutils) vient perturber la commande /usr/bin/mail (mailx - send and receive Internet mail). On renomme la commande /usr/local/bin/mail.
sudo mv /usr/local/bin/mail /usr/local/bin/mumail sudo mv /usr/local/share/man/man1/mail.1 /usr/local/share/man/man1/mumail.1
Avant de communiquer avec le serveur en tls, il faut générer des certificats auto-signé. On se sert pour cela de la recette de Grégory Soutadé, merci à lui pour son généreux partage.
Voici, en plus bref, les opérations exécutées:
mkdir -p -m665 /etc/mail/certs chown root:mail /etc/mail/certs chmod 660 /etc/mail/certs cd /etc/mail/certs # générer la clé privée et le certificat racine de notre autorité de certification (CA) openssl req -new -x509 -keyout hq_ca.key -out hq_ca.crt -days 36500 -newkey rsa:4096 # => hq_ca.crt hq_ca.key # Il faut commencer par créer une clé privée (2048 bits dans cet exemple) : openssl genrsa -out olix.home.key 4096 # => hq_ca.crt hq_ca.key olix.home.cert # La requête de signature (sans mot de passe) openssl req -key olix.home.key -new -out olix.home.csr # => hq_ca.crt hq_ca.key olix.home.cert olix.home.csr # le certificat final (signé par notre autorité) et valide 1 an (maximum recommandé) openssl x509 -req -days 3650 -in olix.home.csr -CA hq_ca.crt -CAkey hq_ca.key -out olix.home.cert -CAcreateserial -CAserial olix.home_ca.srl # => hq_ca.crt hq_ca.key olix.home.cert olix.home.csr olix.home.key olix.home_ca.srl chmod 600 /etc/mail/certs/hq_ca.key chown root.root /etc/mail/certs/hq_ca.key
Ne pas oublier que pop3d renomme le fichier mailbox /var/mail/<user>. Si on utilise la fonction inotify du noyau linux, il faut refaire le inotify_watch après utilisation de pop3d, en effet le numéro d'inode a changé et ce n'est donc plus le même fichier. L'évèmnement IN_DELETE_SELF peut être utilisé à cet effet.
Les configurations données sont fonctionnelles, mais doivent être considérées comme non optimisées.
Pour tester, il vaut mieux commencer par la configuration sans TLS. Apres avoir installé le fichier de configuration mailutils.conf dans /etc/mail, on peut lancer le serveur pop3d dans un terminal. Pour un démarrage automatique, il faut installer le sevice en eécutant les commandes suivantes (Eh oui, c'est Void Linux !).
mkkdir /etc/sv/pop3d echo #!/bin/sh > /etc/sv/pop3d/run echo exec /usr/local/sbin/pop3d >> /etc/sv/pop3d/run (cd /etc/sv/pop3d ; ln -s run/runit/supervise.pop3d supervise) ln -s /var/service/pop3d /etc/sv/pop3d
Voici le contenu de mailutils.conf pour une configuration sans TLS.
program pop3d { # Set daemon mode. # mode inetd; mode daemon; # Run in foreground. foreground true; # Maximum number of children processes to run simultaneously. max-children 20; # Store PID of the master process in file. pidfile /var/run/pop3d.pid; # Default port number. port 110; # Set idle timeout. timeout 60; ldap { # Enable LDAP lookups. enable false; } debug { # Set Mailutils debugging level. level auth.trace2; # Prefix debug messages with Mailutils source locations. line-info true; } tls { # Specify SSL certificate file. ssl-certificate-file /etc/mail/certs/olix.home.cert; # Specify SSL certificate key file. ssl-key-file /etc/mail/certs/olix.home.key; # Specify trusted CAs file. ssl-ca-file /etc/mail/certs/hq_ca.crt; # Set the priorities to use on the ciphers, methods, etc. # ssl-priorities string; # Set timeout for I/O operations during TLS handshake (seconds). handshake-timeout 60; } tls-file-checks { # Configure safety checks for SSL key file. key-file none; # Configure safety checks for SSL certificate. cert-file none; # Configure safety checks for SSL CA file. ca-file none; } mailbox { # Use specified url as a mailspool. mail-spool /var/mail; # Create mailbox url using pattern. # mailbox-pattern pattern; # Default mailbox type. mailbox-type mbox; # Default user mail folder. # folder dir; } locking { # Default locker flags. # type dotlock; type kernel; # Set the maximum number of times to retry acquiring the lock. retry-count 10; # Set the delay between two successive locking attempts. retry-sleep 1; # Expire locks older than this amount of time. expire-timeout 1; # Check if PID of the lock owner is active, steal the lock if it not. pid-check true; # Use prog as external locker program. # external-locker prog; } logging { # Send diagnostics to syslog. syslog yes; # Print message severity levels. print-severity yes; # Output only messages with a severity equal to or # greater than this one. severity debug; # Set syslog facility. facility mail; # Log session ID session-id yes; # Tag syslog messages with this string. tag pop3d; } auth { # Set a list of modules for authentication. authentication system; # Set a list of modules for authorization. authorization system; } server 0.0.0.0:110 { # Run this server as a single process. single-process false; # Log the session transcript. transcript true; # Size of the queue of pending connections backlog 10:10; # Set idle timeout. timeout 60; # Kind of TLS encryption to use for this server. # tls-mode connection; tls-mode no; tls { # Specify SSL certificate file. ssl-certificate-file /etc/mail/certs/olix.home.cert; # Specify SSL certificate key file. ssl-key-file /etc/mail/certs/olix.home.key; # Specify trusted CAs file. ssl-ca-file /etc/mail/certs/hq_ca.crt; # Set the priorities to use on the ciphers, methods, etc. # ssl-priorities string; # Set timeout for I/O operations during TLS handshake (seconds). handshake-timeout 60; } # Set server specific ACLs. acl { /* See ACL Statement. */ }; } }
Configuration de Thunderbird Paramètres du compte / compte / serveurs / paramètres de sécurité :
Apres avoir installé le fichier de configuration mailutils.conf dans /etc/mail, if faut installer le fichier de configuration xinetd dans /etc/xinetd.d et relacer le service winetd. On peut alors se connecter avec le client.
Le fichier de configuration pour xinetd.
service pop3 { disable = no flags = REUSE NAMEINARGS socket_type = stream wait = no user = root server = /usr/local/sbin/pop3d server_args = stderr instances = 50 port = 110 per_source = 10 log_type = SYSLOG mail debug } # # Second setup is for port 995. This is here primarily for Outlook # and Outlook Express, which seem unable to get STARTTLS properly # implemented. # service pop3s { disable = yes flags = REUSE NAMEINARGS socket_type = stream wait = no user = root server = /usr/local/sbin/pop3d server_args = stderr instances = 50 per_source = 10 port = 995 log_type = SYSLOG mail debug }
Voici le contenu de mailutils.conf pour une configuration sans TLS avec xinetd.
program pop3d { # Set daemon mode. mode inetd; # mode daemon; # Run in foreground. foreground true; # Maximum number of children processes to run simultaneously. max-children 20; # Store PID of the master process in file. pidfile /var/run/pop3d.pid; # Default port number. port 110; # Set idle timeout. timeout 60; ldap { # Enable LDAP lookups. enable false; } debug { # Set Mailutils debugging level. level auth.trace2; # Prefix debug messages with Mailutils source locations. line-info true; } tls { # Specify SSL certificate file. ssl-certificate-file /etc/mail/certs/olix.home.cert; # Specify SSL certificate key file. ssl-key-file /etc/mail/certs/olix.home.key; # Specify trusted CAs file. ssl-ca-file /etc/mail/certs/hq_ca.crt; # Set the priorities to use on the ciphers, methods, etc. # ssl-priorities string; # Set timeout for I/O operations during TLS handshake (seconds). handshake-timeout 60; } tls-file-checks { # Configure safety checks for SSL key file. key-file none; # Configure safety checks for SSL certificate. cert-file none; # Configure safety checks for SSL CA file. ca-file none; } mailbox { # Use specified url as a mailspool. mail-spool /var/mail; # Create mailbox url using pattern. # mailbox-pattern pattern; # Default mailbox type. mailbox-type mbox; # Default user mail folder. # folder dir; } locking { # Default locker flags. # type dotlock; type kernel; # Set the maximum number of times to retry acquiring the lock. retry-count 10; # Set the delay between two successive locking attempts. retry-sleep 1; # Expire locks older than this amount of time. expire-timeout 1; # Check if PID of the lock owner is active, steal the lock if it not. pid-check true; # Use prog as external locker program. # external-locker prog; } logging { # Send diagnostics to syslog. syslog yes; # Print message severity levels. print-severity yes; # Output only messages with a severity equal to or # greater than this one. severity debug; # Set syslog facility. facility mail; # Log session ID session-id yes; # Tag syslog messages with this string. tag pop3d; } auth { # Set a list of modules for authentication. authentication system; # Set a list of modules for authorization. authorization system; } server 0.0.0.0:110 { # Run this server as a single process. single-process false; # Log the session transcript. transcript true; # Size of the queue of pending connections backlog 10:10; # Set idle timeout. timeout 60; # Kind of TLS encryption to use for this server. # tls-mode connection; tls-mode no; tls { # Specify SSL certificate file. ssl-certificate-file /etc/mail/certs/olix.home.cert; # Specify SSL certificate key file. ssl-key-file /etc/mail/certs/olix.home.key; # Specify trusted CAs file. ssl-ca-file /etc/mail/certs/hq_ca.crt; # Set the priorities to use on the ciphers, methods, etc. # ssl-priorities string; # Set timeout for I/O operations during TLS handshake (seconds). handshake-timeout 60; } # Set server specific ACLs. acl { /* See ACL Statement. */ }; } }
Configuration de Thunderbird : comme sans TLS voir au dessus.
Pour tester, apres avoir installé le fichier de configuration mailutils.conf dans /etc/mail, on peut lancer le serveur pop3d dans un terminal. Pour un démarrage automatique, il faut installer le sevice comme dans le cas sans TLS.
Voici le contenu de mailutils.conf pour une configuration sans TLS.
program pop3d { # Set daemon mode. # mode inetd; mode daemon; # Run in foreground. foreground true; # Maximum number of children processes to run simultaneously. max-children 20; # Store PID of the master process in file. pidfile /var/run/pop3d.pid; # Default port number. port 995; # Set idle timeout. timeout 60; ldap { # Enable LDAP lookups. enable false; } debug { # Set Mailutils debugging level. level auth.trace2; # Prefix debug messages with Mailutils source locations. line-info true; } tls { # Specify SSL certificate file. ssl-certificate-file /etc/mail/certs/olix.home.cert; # Specify SSL certificate key file. ssl-key-file /etc/mail/certs/olix.home.key; # Specify trusted CAs file. ssl-ca-file /etc/mail/certs/hq_ca.crt; # Set the priorities to use on the ciphers, methods, etc. # ssl-priorities string; # Set timeout for I/O operations during TLS handshake (seconds). handshake-timeout 60; } tls-file-checks { # Configure safety checks for SSL key file. key-file none; # Configure safety checks for SSL certificate. cert-file none; # Configure safety checks for SSL CA file. ca-file none; } mailbox { # Use specified url as a mailspool. mail-spool /var/mail; # Create mailbox url using pattern. # mailbox-pattern pattern; # Default mailbox type. mailbox-type mbox; # Default user mail folder. # folder dir; } locking { # Default locker flags. type kernel; # type dotlock; # Set the maximum number of times to retry acquiring the lock. retry-count 10; # Set the delay between two successive locking attempts. retry-sleep 1; # Expire locks older than this amount of time. expire-timeout 1; # Check if PID of the lock owner is active, steal the lock if it not. pid-check true; # Use prog as external locker program. # external-locker prog; } logging { # Send diagnostics to syslog. syslog yes; # Print message severity levels. print-severity yes; # Output only messages with a severity equal to or # greater than this one. severity debug; # Set syslog facility. facility mail; # Log session ID session-id yes; # Tag syslog messages with this string. tag pop3d; } auth { # Set a list of modules for authentication. authentication system; # Set a list of modules for authorization. authorization system; } server 0.0.0.0:995 { # Run this server as a single process. single-process false; # Log the session transcript. transcript true; # Size of the queue of pending connections backlog 10:10; # Set idle timeout. timeout 60; # Kind of TLS encryption to use for this server. tls-mode connection; # tls-mode no; tls { # Specify SSL certificate file. ssl-certificate-file /etc/mail/certs/olix.home.cert; # Specify SSL certificate key file. ssl-key-file /etc/mail/certs/olix.home.key; # Specify trusted CAs file. ssl-ca-file /etc/mail/certs/hq_ca.crt; # Set the priorities to use on the ciphers, methods, etc. # ssl-priorities string; # Set timeout for I/O operations during TLS handshake (seconds). handshake-timeout 60; } # Set server specific ACLs. acl { /* See ACL Statement. */ }; } }
Configuration de Thunderbird Paramètres du compte / compte / serveurs / paramètres de sécurité :
Cette configuration n'est pas fonctioonelle, le serveur ne réagit pas ! Si vous avez une solution, n'hésiter pas à me la communiquer.
Commande pour lister les options de pop3d.
pop3d --help
Commande pour tester la syntaxe du fichier de configuration.
pop3d --config-lint
Commande pour générer un modèle de fichier de configuration.
pop3d --config-help