2011-04-26 15:07

FreeBSD : configurer un serveur mail

Je continue donc ma migration sous freeBSD, et c'est maintenant le home-server qui y passe.
Première étape de configuration, le serveur mail, en utilisant Postfix et Procmail.

Ce tutoriel vous permettra de configurer facilement et rapidement un serveur mail. Par contre, chaque boite mail devra correspondre à un utilisateur existant sur le système. Cette méthode est donc inadaptée si vous souhaitez créer un nombre important de boites mail : à chaque fois il faudra créer l'utilisateur, éventuellement le chrooter ou désactiver l'accès ssh, paramétrer le .procmailrc, etc.

Bref, si vous avez des besoins plus complexes, je vous conseille plutôt d'aller voir ce tutoriel, bien plus élaboré mais aussi plus long à mettre en place.


Étape 1 : désactiver sendmail

Sendmail est le M.T.A. installé par défaut sous freeBSD. Comme je souhaite le remplacer par postfix (plus simple à configurer), il va falloir le désactiver.

On va commencer par l'arrêter à l'aide de la commande :

# /etc/rc.d/sendmail forcestop

S'il fait de la résistance, un killall sendmail devrait résoudre le problème.

Sendmail est maintenant désactivé, mais il sera relancé automatiquement au prochain démarrage de l'ordinateur. Afin d'empêcher cela, on prendra soin d'éditer le fichier /etc/rc.conf, et d'ajouter la ligne suivante :

sendmail_enable="NONE"

Étape 2 : installer les programmes nécessaires

Nous allons d'abord installer postfix, le MTA qui remplacera sendmail :

# cd /usr/ports/mail/postfix/
# make config-recursive
# make install clean

Les questions suivantes vous seront posées durant l'installation :

You need user "postfix" added to group "mail". Would you like me to add it [y]?
Would you like to activate Postfix in /etc/mail/mailer.conf [n]?

Il faut répondre oui au deux (en tapant "Y").

Maintenant, installons procmail :

# cd ../procmail/
# make config-recursive
# make install clean

Étape 3 : configurer postfix

Nous allons adapter la configuration de postfix à nos besoins. Le fichier de configuration principal est /usr/local/etc/postfix/main.cf.

Déplaçons le afin d'en garder ne copie intacte :

# mv /usr/local/etc/postfix/main.cf /usr/local/etc/postfix/main.cf.bak

Recréons un fichier vide :

# touch /usr/local/etc/postfix/main.cf

On peut maintenant coller dans le fichier vierge /usr/local/etc/postfix/main.cf ainsi obtenu la configuration suivante :

queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 550
mynetworks_style = host

debug_peer_level = 2

debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5

sendmail_path = /usr/local/sbin/sendmail
mailq_path = /usr/local/bin/mailq
setgid_group = maildrop
html_directory = no
manpage_directory = /usr/local/man
sample_directory = /usr/local/etc/postfix
readme_directory = no
home_mailbox = Maildir/
mailbox_command = /usr/local/bin/procmail -a "$EXTENSION" DEFAULT=$HOME/Maildir/ MAILDIR=$HOME/Maildir
mydomain = mon_nom_de_domaine.fr
myhostname = hote.$mydomain
myorigin = $myhostname
mydestination = $myhostname, localhost,$mydomain

mynetworks = 192.168.1.0/24
mynetworks_style = subnet

Les variables soulignées sont à remplacer par celles correspondant à votre machine. Le nom de domaine fini géralement par .com, .fr, .org (ou tout autre TLD). Le nom d'hôte correspond généralement au nom de la machine affiché sur le prompt, avant le "$" ou le "#".

La ligne home_mailbox = Maildir/ permet à chaque utilisateur d'avoir sa boite mail dans son home. Par exemple, toto pourra accéder à ses mails dans /usr/home/toto/Maildir/, au lieu de /var/mail/toto.

La ligne mailbox_command = /usr/local/bin/procmail -a "$EXTENSION" permet d'appeler procmail à chaque fois qu'on reçoit un mail. On pourra ainsi créer des règles pour trier le courrier.

Le plus gros est fait. On peut maintenant essayer de lancer postfix :

# /usr/local/etc/rc.d/postfix onestart

Étape 4 : tester le fonctionnement de postfix

Afin de tester son fonctionnement, vous pouvez vous envoyer un message à l'aide de mail depuis le serveur. Vous pouvez soit l'utiliser en mode interactif à l'aide de la commande :

% mail <utilisateur>

On rentrera ensuite le sujet, entrée, puis le corps du message. La saisie se termine par "ctrl + D" sur une ligne vide, ou un point sur une ligne vide puis entrée.

On peut aussi tout faire tenir en une ligne de commande :

% echo "<Message_à_envoyer>" | mail -s "<sujet_du_message>" <utilisateur>

Si tout s'est bien passé, un dossier Maildir a dû être créé dans le home de votre utilisateur. Vous devez pouvoir lire votre message :

% cat /usr/home/<utilisateur>/Maildir/new/1303821288.V5bd4c369I14M268867.hote.nomdedomaine.fr

La suite de chiffre est bien sûr variable, et hote.nomdedomaine.fr dépend de votre configuration (heureusement qu'il y a la complétion :-) ).

Donc si tout s'est bien passé, vous pouvez voir votre dossier et votre mail. Ce n'était pas le cas pour moi. J'ai donc été voir le fichier de log (/var/log/message).

% cat /var/log/messages
[...]
Apr 26 12:28:50 <hote> postfix/smtpd[24331]: fatal: open database /etc/aliases.db: No such file or directory
[...]

Il suffit dans ce cas de créer une fichier d'allias vide, de reconstruire la base de donnée, puis de rédémarrer postfix :

# touch /etc/aliases
# postmap /etc/aliases
# /usr/local/etc/rc.d/postfix onestart

Vous pouvez re-tester en vous envoyant un mail, cette fois-ci ça devrait marcher.

Par contre, la configuration telle-quelle ne permet pas l'envoi de mail depuis le serveur : la configuration par défaut de procmail impose un chroot des démons.
Il y a donc deux possibilités :

- on met correctement en place le chroot, afin d'augmenter la sécurité du serveur
- on désactive le chroot dans les fichiers de configuration

J'ai choisi la deuxième solution, je pense que le niveau de sécurité reste largement suffisant. Il faut alors modifier le /usr/local/etc/postfix/main.cf.

Copier le fichier afin d'en garder une copie :

# cp /usr/local/etc/postfix/master.cf /usr/local/etc/postfix/master.cf.bak

Il faut maintenant éditer le fichier, afin de rdéfinir tous les démons comme non chrootés. On peut voir ici une ligne qui défini smtp comme chrooté :

# #================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
#================================================================
smtp inet n - - - - smtpd

Il faudra la modifier en :

# #================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
#================================================================
smtp inet n - n - - smtpd

Il faudra procéder de même pour toutes les lignes non commentées du fichier.

Maintenant que postfix est paramétré, et fonctionne correctement, on peut le lancer au démarrage. Il faut éditer le fichier /etc/rc.conf, et ajouter :

postfix_enable="YES"

Étape 5 : paramétrer procmail

Le paramétrage de procmail se fait directement dans le dossier de l'utilisateur, à l'aide du fichier ~/.procmailrc. Je ne vais pas m'étendre en explications dessus, il y a déjà pas mal de documentation.

Il faut par contre faire bien attention aux droits de ce fichier. Si vous avez un message du types :

Apr 26 21:39:13 <hote> procmail[56673]: Suspicious rcfile "/home/<user>/.procmailrc"

Vérifiez que le .procmailrc appartient bien à l'utilisateur, et que les droits sur le fichier sont à 640.


Conclusion

Voilà, le serveur mail est fonctionnel. Il reste à installer un client en ligne de commande (ex : mutt), un webmail (ex : roundcube), ou à le paramétrer pour le rendre accessible via un M.U.A..


Posted by St3rk | Permanent link | File under: freebsd