Product SiteDocumentation Site

Chapitre 11. Services réseau : Postfix, Apache, NFS, Samba, Squid, LDAP, SIP, XMPP, TURN

11.1. Serveur de messagerie électronique
11.1.1. Installation de Postfix
11.1.2. Configuration de domaines virtuels
11.1.3. Restrictions à la réception et à l'envoi
11.1.4. Mise en place du greylisting
11.1.5. Personnalisation des filtres en fonction du destinataire
11.1.6. Intégration d'un antivirus
11.1.7. SMTP authentifié
11.2. Serveur web (HTTP)
11.2.1. Installation d'Apache
11.2.2. Configuration d'hôtes virtuels
11.2.3. Directives courantes
11.2.4. Analyseur de logs
11.3. Serveur de fichiers FTP
11.4. Serveur de fichiers NFS
11.4.1. Sécuriser NFS (au mieux)
11.4.2. Serveur NFS
11.4.3. Client NFS
11.5. Partage Windows avec Samba
11.5.1. Samba en serveur
11.5.2. Samba en client
11.6. Mandataire HTTP/FTP
11.6.1. Installation
11.6.2. Configuration d'un cache
11.6.3. Configuration d'un filtre
11.7. Annuaire LDAP
11.7.1. Installation
11.7.2. Remplissage de l'annuaire
11.7.3. Utiliser LDAP pour gérer les comptes
11.8. Services de communication en temps réel
11.8.1. Paramètres DNS pour les services RTC
11.8.2. Serveur TURN
11.8.3. Serveur Proxy SIP
11.8.4. Serveur XMPP
11.8.5. Services fonctionnant sur le port 443
11.8.6. Ajout de WebRTC
Les services réseau sont les programmes interagissant directement avec les utilisateurs dans leur travail quotidien. C'est la partie émergée de l'iceberg « système d'information » présentée dans ce chapitre. La partie immergée, l'infrastructure sur laquelle ils s'appuient, reste en arrière-plan.
De nombreux services réseau nécessitent une technologie de chiffrement pour fonctionner de manière fiable et sécurisée, tout particulièrement lorsqu'ils sont utilisés sur l'Internet public. Les certificats X.509 (que l'on connaît aussi sous l'appellation de certificats SSL ou certificats TLS) sont fréquemment utilisés à cet effet. Un certificat pour un domaine spécifique peut souvent être partagé entre plusieurs des services présentés dans ce chapitre.

11.1. Serveur de messagerie électronique

Les administrateurs de Falcot SA ont retenu Postfix comme serveur de courrier électronique en raison de sa simplicité de configuration et de sa fiabilité. En effet, sa conception réduit au maximum les droits de chacune de ses sous-tâches, ce qui limite l'impact de toute faille de sécurité.

11.1.1. Installation de Postfix

Le paquet Debian postfix contient le démon SMTP principal. Divers modules (comme postfix-ldap ou postfix-pgsql) offrent des fonctionnalités supplémentaires à Postfix (notamment en termes d'accès à des bases de données de correspondances). Ne les installez que si vous en avez déjà perçu le besoin.
Au cours de l'installation du paquet, plusieurs questions sont posées par l'intermédiaire de debconf. Les réponses permettront de générer un premier fichier /etc/postfix/main.cf.
La première question porte sur le type d'installation. Parmi les choix proposés, seuls deux sont pertinents dans le cadre d'un serveur connecté à Internet. Il s'agit de Site Internet et de Site Internet utilisant un smarthost. Le premier choix est adapté à un serveur qui reçoit et envoie le courrier directement à ses destinataires, mode retenu par les administrateurs de Falcot. Le second correspond à un serveur qui reçoit directement le courrier mais en envoie par le biais d'un serveur SMTP intermédiaire — désigné par le terme smarthost — plutôt que directement au serveur du destinataire. C'est surtout utile pour les particuliers disposant d'une adresse IP dynamique, parce que certains serveurs de messagerie refusent tout message provenant directement d'une telle adresse IP. Le smarthost sera ici le serveur SMTP du fournisseur d'accès à Internet (FAI), qui est toujours configuré pour transmettre le courrier provenant de ses clients. Cette solution est également intéressante pour toute machine qui n'est pas connectée en permanence, car cela lui évite de devoir gérer une file d'attente des messages non délivrables qu'il faudra réessayer d'expédier plus tard.
La deuxième question porte sur le nom complet de la machine, employé pour générer une adresse de courrier électronique depuis un nom d'utilisateur local (c'est la partie suivant l'arobase « @ »). Pour Falcot, la réponse est mail.falcot.com. C'est la seule question posée en standard, mais elle ne suffit pas pour avoir une configuration satisfaisante, les administrateurs exécutent donc dpkg-reconfigure postfix afin de pouvoir personnaliser plus de paramètres.
Parmi les questions supplémentaires, l'ordinateur demande de saisir tous les noms de domaines associés à cette machine. La liste proposée inclut le nom complet de la machine et des synonymes de localhost, mais pas le domaine principal falcot.com, qu'il faut ajouter manuellement. D'une manière générale, il convient habituellement de donner ici tous les noms de domaines pour lesquels cette machine fait office de serveur MX (c'est-à-dire tous ceux pour lesquels le DNS indique qu'elle est apte à accepter du courrier). Ces informations sont ensuite stockées dans la variable mydestination du fichier /etc/postfix/main.cf (principal fichier de configuration de Postfix).
Rôle de l'enregistrement DNS MX dans un envoi de courrier électronique

Figure 11.1. Rôle de l'enregistrement DNS MX dans un envoi de courrier électronique

Selon les cas, l'installation peut également demander d'indiquer les réseaux habilités à envoyer du courrier par l'intermédiaire de cette machine. Par défaut, Postfix est configuré pour n'accepter que des courriers électroniques issus de la machine elle-même ; il faut généralement ajouter le réseau local. Les administrateurs ont donc ajouté 192.168.0.0/16 à la réponse par défaut. Si la question n'est pas posée, il faut modifier le fichier de configuration et y changer la variable mynetworks, comme on le voit sur l'exemple plus loin.
L'emploi de procmail peut aussi être proposé pour délivrer le courrier localement. Cet outil permet aux utilisateurs de trier leur courrier entrant, ce pour quoi ils doivent indiquer des règles de tri dans leur fichier ~/.procmailrc.
Après cette première étape, les administrateurs ont obtenu le fichier de configuration ci-dessous. Il va servir de base pour les sections suivantes, qui le modifieront pour activer certaines fonctionnalités.

Exemple 11.1. Fichier /etc/postfix/main.cf initial

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = mail.falcot.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = mail.falcot.com, falcot.com, localhost.localdomain, localhost
relayhost = 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/16
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all

11.1.2. Configuration de domaines virtuels

Le serveur de messagerie peut recevoir le courrier pour d'autres domaines que le domaine principal ; on parle alors de domaines virtuels. Dans ces situations, il est rare que le courrier soit destiné aux utilisateurs locaux. Postfix offre deux fonctionnalités intéressantes pour gérer ces domaines virtuels.

11.1.2.1. Domaine virtuel d'alias

Un domaine virtuel d'alias ne contient que des alias, c'est-à-dire des adresses électroniques renvoyant le courrier vers d'autres adresses électroniques.
Pour activer un tel domaine, il faut préciser son nom dans la variable virtual_alias_domains et indiquer le fichier stockant les correspondances d'adresses dans la variable virtual_alias_maps.

Exemple 11.2. Directives à ajouter au fichier /etc/postfix/main.cf

virtual_alias_domains = marqueafalcot.tm.fr
virtual_alias_maps = hash:/etc/postfix/virtual
Le fichier /etc/postfix/virtual, décrivant les correspondances, emploie un format relativement simple. Chaque ligne contient deux champs séparés par une série de blancs, dont le premier est le nom de l'alias et le second une liste d'adresses électroniques vers lesquelles il pointe. La syntaxe spéciale @domaine.fr englobe tous les alias restants d'un domaine.

Exemple 11.3. Exemple de fichier /etc/postfix/virtual

webmaster@marqueafalcot.tm.fr  jean@falcot.com
contact@marqueafalcot.tm.fr    laure@falcot.com, sophie@falcot.com
# L'alias ci-dessous est générique, il englobe toutes les
# adresses électroniques du domaine marqueafalcot.tm.fr
# non employées ailleurs dans ce fichier.
# Ces adresses sont renvoyées au même nom d'utilisateur 
# mais dans le domaine falcot.com
@marqueafalcot.tm.fr           @falcot.com

11.1.2.2. Domaine virtuel de boîtes aux lettres

Les courriers destinés à un domaine virtuel de boîtes aux lettres sont stockés dans des boîtes aux lettres qui ne sont pas associées à un utilisateur local du système.
Pour activer un domaine virtuel de boîtes aux lettres, il faut l'écrire dans la variable virtual_mailbox_domains et préciser le fichier donnant les boîtes aux lettres avec la variable virtual_mailbox_maps. Le paramètre virtual_mailbox_base indique le répertoire sous lequel les différentes boîtes aux lettres seront stockées.
Les paramètres virtual_uid_maps et virtual_gid_maps définissent des tables de correspondances entre l'adresse électronique, l'utilisateur et le groupe Unix propriétaire de la boîte aux lettres. Pour indiquer systématiquement le même propriétaire, la syntaxe static:5000 dénote un UID/GID fixe.

Exemple 11.4. Directives à ajouter au fichier /etc/postfix/main.cf

virtual_mailbox_domains = falcot.org
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_mailbox_base = /var/mail/vhosts
Le format du fichier /etc/postfix/vmailbox est de nouveau très simple : deux champs séparés par des blancs. Le premier indique une adresse électronique de l'un des domaines virtuels et le second l'emplacement relatif de la boîte aux lettres associée (par rapport au répertoire donné par virtual_mailbox_base). Si le nom de la boîte aux lettres se termine par une barre de division (/), cette boîte sera stockée au format maildir ; dans le cas contraire, c'est le traditionnel mbox qui sera retenu. Le format maildir emploie un répertoire complet pour représenter la boîte aux lettres et chaque message est stocké dans un fichier. A contrario, une boîte aux lettres au format mbox est stockée dans un seul fichier et chaque ligne débutant par From  (From suivi d'une espace) marque le début d'un nouveau message électronique.

Exemple 11.5. Fichier /etc/postfix/vmailbox

# le courrier de jean est stocké au format maildir 
# (1 fichier par courrier dans un répertoire privé)
jean@falcot.org falcot.org/jean/
# le courrier de sophie est stocké dans un fichier 
# "mbox" traditionnel (tous les courriers concaténés
# dans un fichier)
sophie@falcot.org falcot.org/sophie

11.1.3. Restrictions à la réception et à l'envoi

Avec le nombre croissant de messages non sollicités (spams), il est nécessaire d'être de plus en plus strict sur les messages que le serveur accepte. Cette section présente les différentes stratégies intégrées à Postfix.

11.1.3.1. Restreindre l'accès en fonction de l'adresse IP

La directive smtpd_client_restrictions contrôle les machines autorisées à communiquer avec le serveur de courrier électronique.

Exemple 11.6. Restrictions en fonction de l'adresse du client

smtpd_client_restrictions = permit_mynetworks,
    warn_if_reject reject_unknown_client,
    check_client_access hash:/etc/postfix/access_clientip,
    reject_rbl_client sbl-xbl.spamhaus.org,
    reject_rbl_client list.dsbl.org
Lorsqu'une variable contient une liste de règles comme dans l'exemple ci-dessus, il faut savoir que celles-ci sont évaluées dans l'ordre, de la première à la dernière. Chaque règle peut accepter le message, le refuser ou le laisser poursuivre son chemin à travers celles qui suivent. L'ordre a donc une importance et l'inversion de deux règles peut mettre en place un comportement très différent.
La directive permit_mynetworks, placée en tête de la liste des règles, accepte inconditionnellement toute machine du réseau local (tel que défini par la variable mynetworks dans la configuration).
La deuxième directive refuse normalement les machines dépourvues de configuration DNS totalement valide. Une configuration valide dispose d'une résolution inverse fonctionnelle et le nom DNS renvoyé pointe sur l'adresse IP employée. Cette restriction est généralement trop sévère, de nombreux serveurs de courrier électronique ne disposant pas de DNS inverse. C'est pourquoi les administrateurs de Falcot ont précédé la directive reject_unknown_client de warn_if_reject, qui transforme le refus en simple avertissement enregistré dans les logs. Ils peuvent ainsi surveiller le nombre de messages qui auraient été refusés et décider plus tard d'activer ou non cette règle en connaissant pleinement ses effets.
La troisième directive permet à l'administrateur de mettre en place une liste noire et une liste blanche de serveurs de courrier électronique, stockées dans le fichier /etc/postfix/access_clientip. Une liste blanche permet à l'administrateur de préciser les serveurs de confiance dispensés des règles suivantes.
Les deux dernières règles de l'exemple refusent tout message provenant d'un serveur présent dans l'une des différentes listes noires indiquées (RBL signifie Remote Black Lists, ou listes noires distantes). Celles-ci recensent les machines mal configurées employées par les spammeurs pour relayer leur courrier, ainsi que les relais inhabituels que constituent des machines infectées par des vers ou virus ayant cet effet.

11.1.3.2. Vérifier la validité de la commande EHLO ou HELO

Chaque échange SMTP doit débuter par l'envoi d'une commande HELO (ou EHLO) suivie du nom du serveur de courrier électronique, dont il est possible de vérifier la validité.

Exemple 11.7. Restrictions sur le nom annoncé lors du EHLO

smtpd_helo_restrictions = permit_mynetworks,
    reject_invalid_hostname,
    check_helo_access hash:/etc/postfix/access_helo,
    reject_non_fqdn_hostname,
    warn_if_reject reject_unknown_hostname
La première directive permit_mynetworks autorise toutes les machines du réseau local à s'annoncer librement. C'est important car certains logiciels de courrier électronique respectent mal cette partie du protocole SMTP et peuvent donc annoncer des noms fantaisistes.
La règle reject_invalid_hostname refuse tout courrier dont l'annonce EHLO indique un nom de machine syntaxiquement incorrect. La règle reject_non_fqdn_hostname refuse tout message dont le nom de machine annoncé n'est pas complètement qualifié (un nom qualifié inclut le nom de domaine). La règle reject_unknown_hostname refuse le courrier si la machine annoncée n'existe pas dans la base de données du DNS. Cette dernière règle refusant malheureusement trop de messages, elle est atténuée par le warn_if_reject pour évaluer son impact avant de décider de l'activer ou non.
L'emploi de permit_mynetworks au début a l'effet secondaire intéressant de n'appliquer les règles suivantes qu'à des machines extérieures au réseau local. Il est ainsi possible de mettre en liste noire tous ceux qui s'annoncent membres du réseau falcot.com... ce qui s'effectue en ajoutant la ligne falcot.com REJECT You're not in our network! au fichier /etc/postfix/access_helo.

11.1.3.3. Accepter ou refuser en fonction de l'émetteur (annoncé)

Chaque message envoyé est associé à un expéditeur annoncé par la commande MAIL FROM du protocole SMTP, information qu'il est possible de vérifier de plusieurs manières.

Exemple 11.8. Vérifications sur l'expéditeur

smtpd_sender_restrictions = 
    check_sender_access hash:/etc/postfix/access_sender,
    reject_unknown_sender_domain, reject_unlisted_sender,
    reject_non_fqdn_sender
La table /etc/postfix/access_sender associe des traitements particuliers à certains expéditeurs. En général, il s'agit simplement de les placer dans une liste blanche ou noire.
La règle reject_unknown_sender_domain requiert un domaine d'expéditeur valide, nécessaire à une adresse valide. La règle reject_unlisted_sender refuse les expéditeurs locaux si leur adresse n'existe pas. Personne ne peut ainsi envoyer de courrier issu d'une adresse invalide dans le domaine falcot.com. Tout message d'expéditeur tartempion@falcot.com ne serait donc accepté que si cette adresse existe vraiment.
Enfin, la règle reject_non_fqdn_sender refuse les messages en provenance d'adresses électroniques sans nom de domaine complètement qualifié. Concrètement, elle refusera un courrier provenant de utilisateur@machine : celui-ci doit s'annoncer comme utilisateur@machine.domaine.fr ou utilisateur@domaine.fr.

11.1.3.4. Accepter ou refuser en fonction du destinataire

Chaque courrier compte un ou plusieurs destinataires, communiqués par l'intermédiaire de la commande RCPT TO du protocole SMTP. On pourra également vérifier ces informations, même si c'est moins intéressant que pour l'expéditeur.

Exemple 11.9. Vérifications sur le destinataire

smtpd_recipient_restrictions = permit_mynetworks, 
    reject_unauth_destination, reject_unlisted_recipient, 
    reject_non_fqdn_recipient
reject_unauth_destination est la règle de base imposant à tout courrier provenant de l'extérieur de nous être destiné ; dans le cas contraire, il faut refuser de relayer le message. Sans cette règle, votre serveur est un relais ouvert qui permet aux spammeurs d'envoyer des courriers non sollicités par son intermédiaire. Elle est donc indispensable et on la placera de préférence en début de liste pour qu'aucune autre règle ne risque d'autoriser le passage du courrier avant d'avoir éliminé les messages ne concernant pas ce serveur.
La règle reject_unlisted_recipient refuse les messages à destination d'utilisateurs locaux inexistants (ce qui est logique). Enfin, la règle reject_non_fqdn_recipient refuse les adresses électroniques non qualifiées. Il est ainsi impossible d'écrire à jean ou à jean@machine ; il faut employer la forme complète de l'adresse : jean@machine.falcot.com ou jean@falcot.com.

11.1.3.5. Restrictions associées à la commande DATA

La commande DATA du protocole SMTP précède l'envoi des données contenues dans le message. Elle ne fournit aucune information en soi, mais prévient de ce qui va suivre. Il est pourtant possible de lui mettre en place des contrôles.

Exemple 11.10. Restriction sur la commande DATA

smtpd_data_restrictions = reject_unauth_pipelining
La règle reject_unauth_pipelining refuse le message si le correspondant envoie une commande sans avoir attendu la réponse à la commande précédente. Les robots des spammeurs font régulièrement cela : pour travailler plus vite, ils se moquent des réponses et visent seulement à envoyer un maximum de courriers, dans le laps de temps le plus court.

11.1.3.6. Application des restrictions

Bien que toutes les règles évoquées précédemment soient prévues pour vérifier les informations à différents moments d'un échange SMTP, le refus réel n'est signifié par Postfix que lors de la réponse à la commande RCPT TO (annonce du destinataire).
Ainsi, même si le message est refusé suite à une commande EHLO invalide, Postfix connaîtra l'émetteur et le destinataire lorsqu'il annoncera le refus. Il peut donc enregistrer un message de log plus explicite que s'il avait interrompu la connexion dès le début. De plus, beaucoup de clients SMTP ne s'attendent pas à subir un échec sur l'une des premières commandes du protocole SMTP et les clients mal programmés seront moins perturbés par ce refus tardif.
Dernier avantage de ce choix : les règles peuvent associer les informations obtenues à différents stades de l'échange SMTP. On pourra ainsi refuser une connexion non locale si elle s'annonce avec un émetteur local.

11.1.3.7. Filtrer en fonction du contenu du message

Le système de vérification et de restriction ne serait pas complet sans moyen de réagir au contenu du message. Postfix distingue deux types de vérifications : sur les en-têtes du courrier et sur le corps du message.

Exemple 11.11. Activation des filtres sur le contenu

header_checks = regexp:/etc/postfix/header_checks
body_checks = regexp:/etc/postfix/body_checks
Les deux fichiers contiennent une liste d'expressions rationnelles (regexp). Chacune est associée à une action à exécuter si elle est satisfaite par les en-têtes ou le corps du message.

Exemple 11.12. Exemple de fichier /etc/postfix/header_checks

/^X-Mailer: GOTO Sarbacane/ REJECT I fight spam (GOTO Sarbacane)
/^Subject: *Your email contains VIRUSES/ DISCARD virus notification
La première vérifie l'en-tête indiquant le logiciel de courrier électronique envoyé : si elle trouve GOTO Sarbacane (un logiciel d'envoi en masse de courriers), elle refuse le message. La seconde expression contrôle le sujet du message : s'il indique une notification de virus sans intérêt, elle accepte le message mais le supprime immédiatement.
L'emploi de ces filtres est à double tranchant, car il est facile de les faire trop génériques et de perdre des courriers légitimes. Dans ce cas, non seulement les messages seront perdus, mais leurs expéditeurs recevront des messages d'erreur inopportuns — souvent agaçants.

11.1.4. Mise en place du greylisting

Le greylisting est une technique de filtrage qui consiste à refuser un message avec une erreur temporaire pour finalement l'accepter à la deuxième tentative (à condition qu'un certain délai se soit écoulé entre les deux tentatives). Ce filtre est particulièrement efficace contre les spams envoyés par les vers et les virus qui infectent de nombreuses machines compromises. En effet, il est rare que ces logiciels prennent le soin de vérifier le code retour SMTP et stockent les messages pour les renvoyer plus tard, d'autant plus qu'un certain nombre des adresses qu'ils ont récoltées sont effectivement invalides et que réessayer ne peut que leur faire perdre du temps.
Postfix n'offre pas cette fonctionnalité de manière native, mais il permet d'externaliser la décision d'accepter ou rejeter un message donné. Le paquet postgrey propose justement un logiciel prévu pour s'interfacer avec ce service de délégation des politiques d'accès.
postgrey installé, il se présente comme un démon en attente de connexions sur le port 10 023. Il suffit alors d'employer le paramètre check_policy_service comme restriction supplémentaire :
smtpd_recipient_restrictions = permit_mynetworks,
    [...]
    check_policy_service inet:127.0.0.1:10023
À chaque fois que Postfix doit évaluer cette restriction, il va se connecter au démon postgrey et lui envoyer des informations concernant le message concerné. De son côté, Postgrey récupère le triplet (adresse IP, expéditeur, destinataire) et regarde dans sa base de données s'il l'a déjà rencontré récemment. Si oui, il répond en ordonnant d'accepter le message, sinon il répond de le refuser temporairement et enregistre dans sa base de données le triplet en question.
Évidemment, le grand désavantage du greylisting est qu'il va retarder la réception des courriels légitimes et parfois ces délais sont inacceptables. Il inflige également un coût important aux serveurs qui envoient de nombreux courriers légitimes.

11.1.5. Personnalisation des filtres en fonction du destinataire

La Section 11.1.3, « Restrictions à la réception et à l'envoi » et la Section 11.1.4, « Mise en place du greylisting » ont passé en revue un grand nombre de restrictions possibles. Ces dernières servent essentiellement à limiter le nombre de spams reçus, mais elles présentent toutes des petits inconvénients. C'est pourquoi il est de plus en plus fréquent de devoir personnaliser le filtrage effectué en fonction du destinataire. Chez Falcot, le greylisting s'avérera intéressant pour la plupart des utilisateurs sauf quelques personnes dont le travail dépend de la faible latence du courrier électronique (le service d'assistance technique, par exemple). De même, le service commercial rencontre parfois des difficultés pour recevoir les réponses de certains fournisseurs asiatiques car ils sont répertoriés dans des listes noires. Ils ont donc demandé une adresse e-mail non filtrée pour pouvoir correspondre malgré tout.
Postfix gère cela grâce à un concept de « classes de restrictions ». On référence les classes dans la variable smtpd_restriction_classes et on les définit par simple affectation tout comme on définirait smtpd_recipient_restrictions. Ensuite la directive check_recipient_access permet d'employer une table de correspondances pour définir les restrictions à employer pour un destinataire donné.

Exemple 11.13. Définir des classes de restriction dans main.cf

smtpd_restriction_classes = greylisting, aggressive, permissive

greylisting = check_policy_service inet:127.0.0.1:10023
aggressive = reject_rbl_client sbl-xbl.spamhaus.org,
        check_policy_service inet:127.0.0.1:10023
permissive = permit

smtpd_recipient_restrictions = permit_mynetworks,
        reject_unauth_destination,
        check_recipient_access hash:/etc/postfix/recipient_access

Exemple 11.14. Fichier /etc/postfix/recipient_access

# Adresses sans filtrage
postmaster@falcot.com  permissive
support@falcot.com     permissive
sales-asia@falcot.com  permissive

# Filtrage agressif pour quelques privilégiés
joe@falcot.com         aggressive

# Règle spéciale pour le robot de gestion de listes
sympa@falcot.com       reject_unverified_sender

# Par défaut, le greylisting
falcot.com             greylisting

11.1.6. Intégration d'un antivirus

Avec les nombreux virus circulant en pièce jointe des courriers électroniques, il est important de placer un antivirus à l'entrée du réseau de l'entreprise car, même après une campagne de sensibilisation sur ce sujet, certains utilisateurs cliqueront sur l'icône d'une pièce jointe liée à un message manifestement très suspect.
L'antivirus libre retenu par les administrateurs de Falcot est clamav. En plus du paquet clamav, ils ont installé les paquets arj, unzoo, unrar et lha, qui permettent aussi à l'antivirus d'analyser le contenu d'archives dans l'un de ces formats.
Pour interfacer cet antivirus au serveur de messagerie, on emploiera le logiciel clamav-milter. Un milter (terme dérivé de l'expression mail filter) est un logiciel de filtrage de courriers spécialement conçu pour s'interfacer avec les serveurs de courrier électronique. Les milters exploitent une interface de programmation (API) dédiée qui assure de bien meilleures performances comparé aux filtres gérés en dehors des serveurs de courrier. Sendmail a été le premier à introduire cette technologie mais Postfix lui a emboîté le pas.
Une fois le paquet clamav-milter installé, le milter devrait être reconfiguré pour utiliser un port TCP plutôt que la socket nommée proposée par défaut. Lors de l'exécution de dpkg-reconfigure clamav-milter, il s'agit de répondre inet:10002@127.0.0.1 à la question portant sur l'interface de communication avec Sendmail.
La configuration standard de clamav convient dans la majorité des situations mais dpkg-reconfigure clamav-base permet de personnaliser les paramètres les plus importants.
La dernière étape consiste à demander à Postfix d'utiliser le logiciel de filtrage que l'on vient de configurer. Cela se fait simplement en ajoutant une directive dans /etc/postfix/main.cf :
# Virus check with clamav-milter
smtpd_milters = inet:[127.0.0.1]:10002
En cas de problèmes avec l'antivirus, il suffira de commenter cette ligne et d'exécuter la commande service postfix reload pour faire prendre en compte cette modification.
Les messages traités par Postfix passent désormais systématiquement par un détecteur-filtre antivirus.

11.1.7. SMTP authentifié

Pour être capable d'envoyer des courriers électroniques, il faut pouvoir accéder à un serveur SMTP et il faut que ce dernier vous y autorise. Lorsqu'on est itinérant, cela nécessite de changer régulièrement de serveur SMTP puisque celui de Falcot ne va pas accepter de relayer des messages de la part d'une adresse IP apparemment extérieure à l'entreprise. Il y a deux solutions : soit l'itinérant installe son propre serveur de courrier sur son ordinateur, soit il continue d'utiliser le serveur SMTP de l'entreprise mais il s'authentifie au préalable comme étant un employé de la société. La première solution n'est pas conseillée car l'ordinateur n'est pas connecté en permanence et il ne peut donc pas essayer régulièrement de réémettre en cas de problème. Nous allons donc voir comment mettre en place la seconde.
L'authentification SMTP de Postfix s'appuie sur SASL (Simple Authentication and Security Layer). Il faut installer les paquets libsasl2-modules et sasl2-bin, puis il convient d'enregistrer un mot de passe dans la base SASL pour chaque utilisateur qui doit pouvoir s'authentifier sur le serveur SMTP. On utilise pour cela la commande saslpasswd2. L'option -u précise le domaine d'authentification, il doit correspondre au paramètre smtpd_sasl_local_domain de Postfix. L'option -c sert à créer un utilisateur et l'option -f permet de modifier une base SASL située ailleurs qu'à son emplacement standard (/etc/sasldb2).
# saslpasswd2 -h `postconf -h myhostname` -f /var/spool/postfix/etc/sasldb2 -c jean
[... saisir deux fois le mot de passe de jean ...]
Notons au passage que l'on a créé la base de données SASL dans le répertoire de Postfix. Par souci de cohérence, on va faire pointer /etc/sasldb2 vers la base employée par Postfix. Cela s'effectue avec la commande ln -sf /var/spool/postfix/etc/sasldb2 /etc/sasldb2.
Reste maintenant à configurer Postfix pour faire usage de SASL. En premier lieu, il faut ajouter l'utilisateur postfix dans le groupe sasl afin qu'il puisse accéder à la base de données des comptes SASL. Ensuite, il faut ajouter quelques paramètres pour activer SASL, puis modifier le paramètre smtpd_recipient_restrictions pour autoriser les clients authentifiés par SASL à envoyer des courriels à tous les destinataires.

Exemple 11.15. Modification de /etc/postfix/main.cf pour activer SASL

# Activer l'authentification par SASL
smtpd_sasl_auth_enable = yes
# Définir le domaine d'authentification SASL employé
smtpd_sasl_local_domain = $myhostname
[...]
# Ajout de permit_sasl_authenticated avant reject_unauth_destination
# pour relayer le courrier des usagers authentifiés par SASL
smtpd_recipient_restrictions = permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,
[...]