SECURISATION DE POSTFIX


I. INSTALLATION

Il est d'abord préférable de créer avant toute chose un utilisateur postfix qui sera le propriétaire de la file d'attente :


$groupadd -g 101 postfix $useradd -u 101 -g 101 --disable-password -d /var/spool/postfix -s /bin/false postfix

On l'ajoute aussi dans le fichier /etc/aliases :

postfix: root

Ensuite au cours de la procédure d'installation deux solutions sont proposées pour soumettre des mails. Soit le répertoire /var/spool/postfix/maildrop sera accessible à tout le monde, et dans ce cas-là il aura les permissions 1733, soit le programme postdrop aura le bit set-gid positionné. Le fichier INSTALL précise par exemple pour la première solution qu'il est possible qu'un utilisateur local surcharge la file d'attente dans le but de crasher le serveur. Une totale confiance dans les utilisateurs locaux est donc nécessaire, ce qui n'est pas vraiment une bonne solution. Nous retiendrons donc la deuxième solution. Le fichier INSTALL décrit la procédure pour rendre postdrop set-gid.


II. L'ANTI-RELAYAGE

Pour éviter que l'on utilise notre serveur smtp comme relai de messagerie, nous devons configurer le paramètre smtp_recipient_restrictions dans le fichier principal de configuration /etc/postfix/main.cf. Il regarde en fait le champ RCPT TO.

smtpd_recipient_restrictions = permit_mynetworks,check_relay_domains

La valeur permit_mynetworks autorise postfix à relayer les mails... Ce qui n'est pas une mauvaise solution. La valeur permit_mynetworks signifie que postfix autorise à relayer les mails venant d'adresses IP contenues dans $mynetworks. La valeur check_relay_domains elle, permet soit de relayer des messages venant d'adresses IP contenues dans $relay_domains, soit à destination de $relay_domains, ou bien si la destination est $inet_interfaces, $mydestination, ou $virtual_maps. Reste a définir ces valeurs toujours dans main.cf :


mynetworks = 192.168.0.0/24, 127.0.0.0/8
relay_domain = domain.fr

D'autres valeurs existent. Par exemple, reject_unknown_recipient_domain permet de rejeter les mails si le domaine de l'adresse mail du destinataire n'est pas resolvable. Beaucoup d'autres valeurs existent.


III. CHROOTER LE DEMON

Le fait de chrooter Postfix ne rend pas notre système impénétrable, mais limite tout de même les possibilités d'intrusion. Nous avons deux solutions pour mettre en place le chroot. Soit nous utilisons le script examples/chroot-setup/LINUX2 et nous l'adaptons éventuellement, soit nous faisons tout manuellement. Dans les deux cas, les répertoires etc, usr/lib, lib sont créés dans le répertoire /var/spool/postfix, certains fichiers sont copiés et postfix est rechargé. Personnellement, on a utilisé le script qui fonctionnait très bien sur notre configuration.

Le fichier de configuration /etc/postfix/master.cf doit ensuite être adapté pour définir la façon dont sont executés les différents progammes de Postfix :

#
# Postfix master process configuration file. Each line describes how
# a mailer component program should be run. The fields that make up
# each line are described below. A "-" field value requests that a
# default value be used for that field.
#
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (50)
# ==========================================================================
smtp inet n - y - - smtpd
pickup fifo n n y 60 1 pickup
cleanup unix - - y - 0 cleanup
qmgr fifo n - y 300 1 qmgr
#qmgr fifo n - y 300 1 nqmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - y - 0 bounce
defer unix - - n - 0 bounce
flush unix - - y 1000? 0 flush
smtp unix - - y - - smtp
showq unix n - y - - showq
error unix - - n - - error
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
cyrus unix - n n - - pipe
flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
uucp unix - n n - - pipe
flags=F user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=F. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient

Ce fichier de configuration décrit la facon dont chaque programme de Postfix est lancé. Pour cela, le champ chroot est mis à 'y' pour chaque service que nous utilisons et que nous voulons chrooter. Les autres services peuvent rester par défaut. Un petit reload de postfix s'impose:

$postfix reload

MODIFIER LA BANNIERE

Quelques paramètres restent à configurer pour que notre serveur mail soit assez sécurisé. Le paramètre mail_name dans main.cf définit le nom du logiciel de mail dans l'entête "Receveid:". L'intérêt ici est de diffuser le moins d'information possible. Donc si nous mettons

mail_name = Microsoft Exchange

voila ce qui apparaitra dans les entêtes des mails:

Received: by neptune.galaxie.fr (Microsoft Exchange , from userid 1000)
id F0A42C946; Wed, 2 May 2001 00:18:32 +200 (CEST)

C'est aussi possible de configurer la bannière :

mail_version = 5.5
smtpd_banner = ESMTP $mail_name ($mail_version)

Voici ce que nous obtenons:

$telnet localhost 25
Trying 127.0.0.1...
Connected to neptune.
Escape character is '^]'.
220 ESMTP Microsoft Exchange (5.5)

Autre point important, le démon syslogd. Vous devez le configurer pour qu'il prenne en compte les logs de votre serveur de mail. Rajoutez donc dans votre syslog.conf, les lignes suivantes :

mail.* /var/log/mail.log
mail.info /var/log/mail.info
mail.warn /var/log/mail.warn
mail.err /var/log/mail.err

Et on relance le démon syslogd.