Pour ce premier article dans le domaine de la messagerie, nous allons voir comment mettre en place un serveur SMTP.
Il existe plusieurs serveurs SMTP ayant chacun des avantages et des inconvénients.
Le serveur SMTP qui sera mis en avant dans cet article est qmail. Après installation, nous verons comment gérer l’envoie et la réception de mails pour deux noms de domaines ayant chacun deux utilisateurs.
Qmail
Avant toutes choses, il nous faut récupérer les sources des différents programmes utilisés.
$ cd /usr/local/src $ wget http://www.qmail.org/netqmail-1.06.tar.gz $ wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz $ wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
Pour des raisons de sécurité, les processus qmail tournent sous un compte système sans droit particulier.
Commençons par créer les deux groupes nécessaires.
$ pw groupadd qmail –g 2000 $ pw groupadd nofiles –g 2001
Maintenant, attaquons nous aux utilisateurs.
$ pw useradd qmaild –u 2000 -g nofiles -d /var/qmail -s /nonexistent $ pw useradd alias –u 2001 -g nofiles -d /var/qmail/alias -s /nonexistent $ pw useradd qmaill -u 2002 -g nofiles -d /var/qmail -s /nonexistent $ pw useradd qmailp -u 2003 -g nofiles -d /var/qmail -s /nonexistent $ pw useradd qmailq -u 2004 -g qmail -d /var/qmail -s /nonexistent $ pw useradd qmailr -u 2005 -g qmail -d /var/qmail -s /nonexistent $ pw useradd qmails -u 2006 -g qmail -d /var/qmail -s /nonexistent
Nous pouvons passer à l’installation du serveur SMTP.
$ cd /usr/local/src $ tar zxf netqmail-1.06.tar.gz $ rm netqmail-1.06.tar.gz $ cd netqmail-1.06 $ mkdir /var/qmail $ make setup check
Le script config présent dans le répertoire des sources permet de configurer automatiquement certains fichiers.
$ ./config
Si vous tombez sur ce message d’erreur, vous avez probablement un problème DNS.
Your hostname is mail.worldofunix.fr. soft error Sorry, I couldn't find your host's canonical name in DNS. You will have to set up control/me yourself.
Vérifiez en utilisant la commande host, par exemple, que la résolution du nom complet de votre serveur est possible.
$ host mail.worldofunix.fr mail.worldofunix.fr has address 192.168.33.30
Faire de même pour la résolution DNS inverse.
$ host 192.168.33.30 30.33.168.192.in-addr.arpa domain name pointer mail.worldofunix.fr.
On s’aperçoit que la résolution DNS fonctionne dans les deux sens, le script config peut être relancé.
On peut tout de même continuer malgrès l’avertissement en utilisant un autre script fournit avec les sources du programme.
$ ./config-fast mail.worldofunix.fr Your fully qualified host name is mail.worldofunix.fr Putting mail.worldofunix.fr into control/me... Putting mail.worldofunix.fr into control/defaultdomain... Putting mail.worldofunix.fr into control/plusdomain... Putting mail.worldofunix.fr into control/locals... Putting mail.worldofunix.fr into control/rcpthosts... Now qmail will refuse to accept SMTP messages except to mail.worldofunix.fr. Make sure to change rcpthosts if you add hosts to locals or virtualdomains!
Notre serveur SMTP qmail est installé avec une partie de sa configuration effectuée.
Ucspi-tcp
Avant de passer à l’installation, faisons une courte présentation de ce programme.
Ucspi-tcp est un démon TCP identique à inetd offrant la possibilité de déclarer des variables d’environnement pour chaque connexions acceptées.
Ceci va nous permettre d’autoriser certaines IP à utiliser le serveur SMTP pour envoyer des mails sur Internet.
$ cd /usr/local/src $ tar zxf ucspi-tcp-0.88.tar.gz $ rm ucspi-tcp-0.88.tar.gz $ cd ucspi-tcp-0.88
Un patch est fournit avec les sources du programme qmail.
$ patch < /usr/local/src/netqmail-1.06/other-patches/ucspi-tcp-0.88.errno.patch
$ make $ make setup check
Daemontools
Daemontools est une suite de binaires permettant le contrôle du serveur SMTP qmail.
Le binaire supervise, comme son nom l'indique, gère le processus parent de qmail. Si le processus meurt, supervise est là pour le relancer grâce au binaire svc qui permet d'arrêter, de mettre sur pause ou de redémarrer le service.
$ mkdir /package $ mv /usr/local/src/daemontools-0.76.tar.gz /package $ chmod 1755 /package $ cd /package $ tar zxf daemontools-0.76.tar.gz $ rm daemontools-0.76.tar.gz $ cd admin/daemontools-0.76/src
Comme pour le binaire ucspi-tcp, nous devons appliquer un patch avant installation.
$ patch < /usr/local/src/netqmail-1.06/other-patches/daemontools-0.76.errno.patch
$ cd .. $ ./package/install
Scripts de démarrage
$ vi /var/qmail/rc #!/bin/sh # Using stdout for logging # Using control/defaultdelivery from qmail-local to deliver messages by default exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start "`cat /var/qmail/control/defaultdelivery`"
Script /var/qmail/bin/qmailctl
$ vi /var/qmail/supervise/qmail-send/run #!/bin/sh exec /var/qmail/rc
$ vi /var/qmail/supervise/qmail-send/log/run #!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail
Script /var/qmail/supervise/qmail-smtpd/run
$ vi /var/qmail/supervise/qmail-smtpd/log/run #!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd
Pour permettre le contrôle des démons depuis daemontools, deux liens symboliques sont nécessaires.
$ ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service
Modification des droits :
$ find /var/qmail/supervise -type f -name run -exec chmod 750 {} \;
$ chmod 750 /var/qmail/rc
$ chmod 750 /var/qmail/bin/qmailctl
Qmail
Première étape, la création des répertoires de journalisation des différents démons.
$ mkdir -p /var/log/qmail/smtpd $ mkdir -p /var/qmail/supervise/qmail-send/log $ mkdir -p /var/qmail/supervise/qmail-smtpd/log $ chown qmaill /var/log/qmail /var/log/qmail/smtpd
Regardons maintenant la configuration du serveur SMTP.
- defaultdelivery : Définit le type de stockage utilisé par défaut. Dans notre cas, ce sera du maildir.
$ echo "./Maildir/" > /var/qmail/control/defaultdelivery
- concurrencyincoming : Nombre de requêtes simultannée entrantes.
$ echo 20 > /var/qmail/control/concurrencyincoming
Relais SMTP
Avec la configuration actuelle, un problème se pose pour l'envoie des mails sur Internet depuis les serveurs internes. En passant par ce serveur, les mails seront rejetés car non présents dans le fichier rcpthosts. Laisser ce fichier vide, transformerait le serveur en relais SMTP ouvert.
Pour contourner ce problème, nous allons utilisé le serveur TCP ucspi-tcp.
$ vi /etc/tcp.smtp 127.0.0.1:allow,RELAYCLIENT="" 192.168.33.:allow,RELAYCLIENT="" :allow $ /var/qmail/bin/qmailctl cdb
Comment lire ce fichier :
Pour toutes connexions en provenance des IP 127.0.0.1 et du réseau 192.168.33.0 on positionne la variable d'environnement RELAYCLIENT. Ces IP sont autorisées à envoyer des mails à des domaines externes.
La dernière ligne autorise n'importe quelle IP à se connecter au serveur SMTP pour envoyer des mails aux domaines présents dans le fichier rcpthosts.
Alias système
Certaines adresses emails sont nécessaires sur un serveur SMTP, nous allons les déclarer alias de l'utilisateur système jaax pour que les mails soient redirigés sur la boîte mails de cet utilisateur.
$ echo jaax > /var/qmail/alias/.qmail-root $ echo jaax > /var/qmail/alias/.qmail-postmaster $ ln -s .qmail-postmaster /var/qmail/alias/.qmail-mailer-daemon $ ln -s .qmail-postmaster /var/qmail/alias/.qmail-abuse $ chmod 644 /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-postmaster
Domaines et utilisateurs virtuels
Il est temps de s'occuper des adresses emails pour nos domaines bsd-aquitaine.fr et bsdaquitaine.fr.
Dans le fichier rcpthosts, les deux domaines doivent être déclarés.
$ cd /var/qmail $ vi control/rcpthosts worldofunix.fr bsd-aquitaine.fr bsdaquitaine.fr
Ajoutons les au fichier virtualdomains.
$ vi control/virtualdomains # Nom de domaine : Alias bsd-aquitaine.fr:1 bsdaquitaine.fr:2
Une fois nos domaines virtuels déclarés, passons à la création des utilisateurs.
$ vi users/assign =1-contact:pop3:2500:2500:/var/qmail/mailnames/bsd-aquitaine.fr/contact::: =1-jaax:pop3:2500:2500:/var/qmail/mailnames/bsd-aquitaine.fr/jaax::: =2-contact:pop3:2500:2500:/var/qmail/mailnames/bsdaquitaine.fr/contact::: =2-jaax:pop3:2500:2500:/var/qmail/mailnames/bsdaquitaine.fr/jaax::: .
Comment lire ce fichier :
Un mail à destination de l'adresse jaax@bsd-aquitaine.fr (1-jaax, 1 étant l'alias de bsd-aquitaine.fr) est géré par le fichier .qmail présent dans le réperoire /var/qmail/mailnames/bsd-aquitaine.fr/jaax.
Qmail déposera ensuite le mail dans le répertoire souhaité avec comme propriétaire 2500 et groupe 2500. Ceci permet d'envisager l'utilisation d'un service pour la réception des mails à partir du protocol POP3 ou IMAP.
Comme pour le fichier tcp.smtp utilisé par ucspi-tcp, le fichier texte contenant les utilisateurs doit être transformé au format CDB.
$ ./bin/qmail-newu $ ls -l users/cdb -rw-r--r-- 1 root qmail 2446 May 19 11:15 users/cdb
Les boîtes mails sont au format maildir ce qui nécessite une arborescence spéciale pour que qmail délivre correctement les messages.
$ mkdir -p /var/qmail/mailnames/bsd-aquitaine.fr $ cd /var/qmail/mailnames/bsd-aquitaine.fr $ mkdir jaax $ /var/qmail/bin/maildirmake jaax/Maildir
Un compte système pop3 est à créer sur le serveur avec les droits d'accès en écriture sur l'arborescence Maildir.
$ pw groupadd pop3 -g 2500 $ pw useradd pop3 -u 2500 -g 2500 -d /nonexistent -s /usr/sbin/nologin $ chown -R pop3 Maildir
$ ls -l jaax/Maildir total 6 drwx------ 2 root qmail 512 May 19 11:17 cur drwx------ 2 root qmail 512 May 19 11:17 new drwx------ 2 root qmail 512 May 19 11:17 tmp
Dernière chose à faire, indiquer à qmail ce qu'il doit faire quand un mail arrive pour une de ces boîtes mails. Pour cela, il faut ajouter à la racine de chaque répertoire Maildir un fichier .qmail.
$ echo "./Maildir/" > jaax/.qmail
Test d'envoi et de réception
Le test le plus simple pour valider la configuration, est d'injecter les mails directement dans le démon qmail-inject.
$ echo "To: jaax@bsd-aquitaine.fr" | /var/qmail/bin/qmail-inject
Si la configuration est correcte, un nouveau fichier devrait être présent dans le répertoire new du compte mail jaax@bsd-aquitaine.fr.
La mise en place de notre serveur SMTP touche à sa fin.
Si vous avez des remarques ou juste pour dire un petit "merci", laissez un commentaire.