Guide à l'installation d'une infrastructure de courriel basée sur des composantes de logiciel libre Version 1.0 Steve Johnson sjohnson@victrix.ca Victrix www.victrix.ca 28 février 2005
Table des Matières PRÉFACE... 4 LOGICIELS UTILISÉS... 6 AUTHENTIFICATION... 8 OpenLDAP...8 Configuration du serveur OpenLDAP...8 Configuration du client OpenLDAP...10 Population de l annuaire OpenLDAP...11 Création des comptes administratifs dans l annuaire...12 PAM...13 SASLAUTHD...14 SERVEUR DE RELAIS SMTP... 16 Postfix...16 Création du RPM...16 Configuration...16 FILTRAGE DE COURRIELS INDÉSIRABLES... 22 ClamAV...22 clamd...22 freshclam...23 SpamAssassin...23 Razor2...24 Entraînement de SpamAssassin...24 amavisd-new...25 Concept...25 Pré-requis...25 Configuration...26 Intégration...27 SERVEUR PRINCIPAL SMTP... 28 SERVEUR IMAP ET POP3... 30 Cyrus IMAPD...30 Création des RPM...30 Configuration des services de Cyrus...31 Configuration du service IMAP...31 Gestion des boîtes de courriels...32 2
INTERFACE IMAP WEB... 34 SquirrelMail...34 Sécurisation via SSL...35 ANNEXE 1 : FICHIERS DE CONFIGURATION DE SASLAUTHD... 36 ANNEXE 2 : FICHIERS DE CONFIGURATION DE OPENLDAP... 37 ANNEXE 3 : FICHIERS DE CONFIGURATION DU SERVEUR SMTP RELAIS... 39 ANNEXE 3 : FICHIERS DE CONFIGURATION DU SERVEUR SMTP INTERNE... 42 ANNEXE 4 : FICHIERS DE CONFIGURATION DE CYRUS IMAPD... 45 ANNEXE 5 : FICHIERS DE CONFIGURATION DE CLAMAV... 47 ANNEXE 6 : FICHIERS DE CONFIGURATION POUR SPAMASSASSIN... 52 ANNEXE 7 : FICHIERS DE CONFIGURATION POUR AMAVISD-NEW... 53 RÉFÉRENCES... 57 3
Préface Ce document a été rédigé afin de servir de guide à l'installation d'une infrastructure de courriel basée sur des composantes de logiciel libre. Il vise à aider dans l'établissement d'une infrastructure typique et sécuritaire, mais qui devrait être adaptée aux besoins de votre établissement. Comme les ressources disponibles, les environnements de travail, les systèmes d'authentification, les architectures réseau et autres facteurs peuvent varier énormément d'un établissement à l'autre, il est impossible de rédiger une référence absolue pouvant ou devant s'appliquer partout. Ce document est donc un aide à la mise en place et à la configuration d'une bonne infrastructure de courriel pouvant être déployée relativement facilement, et surtout à des coûts beaucoup plus modiques que des solutions offertes par les grands manufacturiers de logiciels. N'ayez cependant crainte, ce sont tous des logiciels sécuritaires et dont la stabilité a fait ses preuves dans de grands établissements depuis plusieurs années, particulièrement à l'intérieur des grandes universités. Une expérience de base d administration de Linux, avec RedHat ou autre distribution, est requise. Ce guide est basé sur une installation sur RedHat Enterprise 3 AS, ce pourquoi une expérience avec cette distribution est souhaitable. Cependant, tous les éléments peuvent très bien s adaptés aux autres distributions avec de légers changements, principalement au niveau de l installation des logiciels ainsi que de l emplacement des fichiers de configuration. Une connaissance de base des protocoles et applications des services DNS et SMTP est également requise à la mise en place de cette solution. Si vous ne possédez pas cette expérience, il est tout de même possible de mettre en place cette solution suite à la lecture de certains ouvrages, tels des livres sur l administration de systèmes Linux suggérés dans les ouvrages de référence à la fin de ce document. 4
Mise en situation Le schéma ci-dessous illustre la situation représentée dans ce document. Tous les serveurs ayant des accès publics sont dans la zone démilitarizée afin d accentuer le niveau de sécurité. Ceci est un exemple d une situation sécuritaire, mais peut être adaptée à votre environnement. Internet Coupe-Feu Zone Démilitarizée Zone Interne Serveur SMTP Relais - Relais SMTP pour le serveur SMTP principal - Filtrage de courriels entrant de l Internet - Dois avoir accès au serveur LDAP - Services: Postfix, Amavisdnew, Clamav, Cyrus SASL, SpamAssassin, client LDAP Serveur SMTP Principal - Serveur SMTP principal utilisé par les applications et les utilisateurs internes. Transmet les courriels pour les domaines hébergés aux serveur IMAP - Filtrage de courriels entrant des services et usagers internes - Dois avoir accès au serveurs LDAP et IMAP - Services: Postfix, Amavisd-new, Clamav, Cyrus SASL, SpamAssassin, client LDAP Serveur Web - Serveur Web public pour l accès IMAP via le Web - Dois avoir accès au serveur IMAP Interne - Services: Apache Serveur IMAP - Reçoit les courriels du serveur SMTP principal - Héberge les boîtes de courriels - Doit communiquer avec le serveur LDAP, le serveur SMTP principal ainsi que le serveur Web - Services: Cyrus IMAP, Cyrus SASL - Serveur principal contenant l arbre LDAP - Services: OpenLDAP Serveur LDAP Primaire Serveur LDAP Secondaire - Réplicat du serveur principal contenant l arbre LDAP - Services: OpenLDAP 5
Logiciels utilisés Comme la majorité de ces logiciels sont disponibles à même la majorité des distributions de Linux, nous vous conseillons de les installer via les méthodes propres à votre distribution. Ceci permet une gestion des serveurs plus efficace que de tout maintenir sois-même avec les sources de chacun des logiciels. Les tests ont été effectuer sur des systèmes installés avec RedHat Enterprise 3.0 AS, mais les guides de configuration peuvent s'appliquer à toutes les distributions. Il est évident qu'il pourrait toutefois y avoir certains changements applicables, surtout au niveau des chemins d'accès. Dans ces cas, référez-vous à la documentation de votre distribution pour y appliquer les changements nécessaires. Voici donc la liste des logiciels clés utilisés à l'intérieur de ce guide : OpenSSL Fonction : Libraries et utilitaires d'encryption Site Web : http://www.openssl.org Version testée : 0.9.7a Berkeley DB Fonction : Serveur de base de données Site Web : http://www.sleepycat.com/ Version testée : 4.1.25 Prérequis : OpenSSL OpenLDAP Fonction : Procurer des outils et librairies d'authentification pour Postfix et Cyrus-IMAPd Site Web : http://www.openldap.org/ Version testée : 2.1.29 Prérequis : OpenSSL, Berkeley DB Apache Fonction : Serveur Web Site Web : http://httpd.apache.org Version testée : 2.0.46 Prérequis : OpenSSL PHP Fonction : Language interprété Site Web : http://www.php.net Version testée : 4.3.2 Perl Fonction : Language interprété Site Web : http://www.perl.com Version testée : 5.8.0 PostgreSQL Fonction : Serveur de base de données Site Web : http://www.postgresql.org Version testée : 7.3.6 nss_ldap Fonction : Modules pour intégrer LDAP comme module de résolution de noms Site Web : http://www.padl.com Version testée : 2.1.15 pam_ldap (parfois inclus dans nss_ldap) Fonction : Modules PAM pour authentification via LDAP Site Web : http://www.padl.com 6
Cyrus SASL Fonction : Procurer des outils et librairies d'authentification pour Postfix et Cyrus-IMAPD Site Web : http://asg.web.cmu.edu/sasl/ Version testée : 2.1.15 Prérequis : nss_ldap, pam_ldap Cyrus IMAPD server Fonction : Serveur IMAP/POP Site Web : http://asg.web.cmu.edu/cyrus/ Version testée : 2.2.10 Prérequis : OpenSSL, Cyrus-SASL Postfix Fonction : Serveur SMTP Site Web : http://www.postfix.org Version testée : 2.1.5 Prérequis : OpenLDAP, OpenSSL, Cyrus-SASL ClamAV Fonction : Antivirus en logiciel libre Site Web : http://www.clamav.net Version testée : 0.80 SpamAssassin Fonction : Filtre de pourriels Site Web : http://www.spamassassin.org Version testée : 2.55 Prérequis : Perl amavisd-new Fonction : Engin de gestion de filtres de courriels Site Web : http://ftp.cfu.net/pub/amavisd-new Version testée : 2.2.0 Pré-Requis: Perl et les modules suivant: IO::Wrap, IO::Stringy, Unix::Syslog, Mail::Field, Mail::Address, Mail::Header, Mail::Internet, MIME::Words, MIME::Head, MIME::Body, MIME::Entity, MIME::Parser, Net::Server, Net::Server::PreForkSimple, MIME::Decoder::Base64, MIME::Decoder::Binary, MIME::Decoder::Gzip64, MIME::Decoder::NBit, MIME::Decoder::QuotedPrint, MIME::Decoder::UU, BerkeleyDB, Convert::TNEF, Convert::UUlib, Archive::Zip SquirrelMail Fonction : Client Web pour IMAP Site Web : http://www.squirrelmail.org Version testée : 1.4.3a Prérequis : Apache, PHP 7
Authentification OpenLDAP Afin de permettre une authentification centralisée, nous avons choisi de baser l authentification sur les services d annuaires LDAP, reposant sur le serveur OpenLDAP. Afin d utiliser tous les services sur RedHat, il vous faut les progiciels suivants : - openldap - openldap-servers - openldap-clients - openldap-devel - nss_ldap Puisque l administration du serveur OpenLDAP peut être une tâche assez complète lorsque vous n en êtes pas familier, je conseille fortement de consulter le livre de Gérald Carter, LDAP System Administration, publié par O Reilly. Configuration du serveur OpenLDAP Le démon qui fait office de serveur LDAP dans OpenLDAP est slapd et sa configuration s effectue dans le fichier slapd.conf, qui se trouve dans le répertoire /etc/openldap. Inclusion de schémas LDAP Le premier élément à configurer est la liste de schémas à inclure dans le serveur. Les schémas sont les listes de définitions d attributs que l on peut définir à chacun des objets de l annuaire. Pour pouvoir utiliser les schémas, il faut cependant les inclure dans la configuration de slapd. Il faut donc définir l inclusion des schémas désirés dans la configuration de slapd : include include include include include /etc/openldap/schema/core.schema /etc/openldap/schema/cosine.schema /etc/openldap/schema/inetorgperson.schema /etc/openldap/schema/nis.schema /etc/openldap/schema/misc.schema Définition l arbre de l annuaire Par la suite, il faut définir l arbre de notre annuaire LDAP. Ceci inclut le type de base de données utilisée (database), la définition de la racine de l arbre de notre annuaire (suffix), l utilisateur maître de l arbre (rootdn) ainsi que le répertoire où seront conservées les données (directory). Voici donc les entrées à définir dans la configuration de slapd pour cela : database suffix rootdn rootpw directory bdb "dc=example,dc=com" "cn=manager,dc=example,dc=com" {MD5}CY9rzUYh03PK3k6DJie09g== /var/lib/ldap Remplacez le suffix par vos propres informations de domaines. Cette configuration serait valide pour le domaine example.com. Le rootdn est l équivalent de l utilisateur root au niveau de la base LDAP. Le nom de Manager a été utilisé, mais il est possible de définir n importe quel nom à cet administrateur, mais il est important de ne l utiliser que pour la gestion de l annuaire, puisqu il y a tous les droits. 8
Le rootpw est le mot de passe de l utilisateur administrateur, défini dans rootdn. Bien que le mot de passe pourrait être noté en texte clair, il est très fortement recommandé qu il soit conservé de manière encryptée. Afin de générer un mot de passe encrypté, vous pouvez utiliser l utilitaire slappasswd(8), qui peut chiffrer les mots de passe à l aide des algorithmes CRYPT, MD5, SMD5, SSHA et SSHA. L algorithme par défaut est SSHA. # slappasswd h {MD5} New password: Re-enter new password: Pour ce qui est du répertoire contenant la base de données, le répertoire par défaut de RedHat, /var/lib/ldap, a été utilisé. Création des index Afin d accélérer les recherches dans l annuaire, il est fortement recommandé de créer des index sur les éléments les plus recherchés. Vous pouvez toujours ajuster les index selon vos critères, mais voici les index suggérés pour cet exemple : index objectclass index ou,mail,maillocaladdress eq,pres eq,pres,sub Si jamais vous décidez de modifier les index après la configuration initiale, il est important de recréer les index. Pour ce faire, utiliser la commande slapindex. Pour plus d informations, consultez sa page de manuel, slapindex(8c). Création de Liste d accès Afin de limiter l accès aux informations de l annuaire, vous pouvez utiliser des listes d accès dans la configuration du démon slapd. Les listes d accès fonctionnent sous un ordre de «première règle effective», ce qui veut dire que la première règle de la liste qui s applique une situation donnée sera celle qui sera effective. Il est donc important de bien bâtir vos règles en conséquence de cela. access to * by self write by anonymous auth by dn.base="uid=mail,dc=example,dc=com" write by * none Encore une fois, il est important de modifier vos règles selon votre schéma. Sécurisation des transactions via SSL Afin d éviter que les informations importantes circulent en texte clair sur le réseau, il est également recommandé d effectuer des connexions sécurisées via SSL sur le serveur LDAP. Pour cela, il faut permettre les connexions encryptées dans la configuration de slapd. Avant de pouvoir configurer les fonctions SSL dans slapd, il faut tout d abord créer les certificats SSL nécessaires en format PEM. Pour cela, la première étape est de créer des certificats SSL en format PEM. Si vous avez déjà des certificats SSL signés par des autorités de certification (CA) tels que VeriSign ou Thawte, vous pouvez les utiliser sans avoir à en générer de nouveaux. Bien entendu, les certificats existants doivent être reliés au nom de domaine sous lequel votre serveur LDAP va fonctionner. Si vous désirez créer des certificats qui seront signés par des autorités de certification, il faudra suivre les étapes suivantes : 1- Créer une clé privée qui sera utilisée pour la création de certificats. mkdir /etc/postfix/ssl chmod 700 /etc/openldap/ssl chown root:root /etc/openldap/ssl openssl genrsa out /etc/openldap/ssl/privkey.pem 2048 9
chmod 700 /etc/openldap/ssl/privkey.pem 2- Créer une demande de signature de certificat (CSR). Ce fichier sera envoyé à une authorité de certification afin de recevoir un certificat signé. openssl req -new -key /etc/openldap/ssl/privkey.pem \ -out /etc/openldap/ssl/mailreq.csr 3- Une fois que vous aurez reçu votre certificat de l autorité de certification, vous pouvez le placer dans un répertoire sécurisé, tel /etc/postfix/ssl/ Si vous ne désirez pas utiliser un certificat signé par une autorité de certification, il est possible de créer ses propres certificats SSL, en suivant les étapes suivantes : 1- Créer une clé privée qui sera utilisée pour la création de certificats. mkdir /etc/openldap/ssl chmod 700 /etc/openldap/ssl chown root:root /etc/openldap/ssl openssl genrsa out /etc/openldap/ssl/privkey.pem 2048 chmod 600 /etc/openldap/ssl/privkey.pem 2- Créer un certificat de format PEM, à l aide de la clé privée : openssl req -new -x509 -key /etc/openldap/ssl/privkey.pem \ -out /etc/openldap/ssl/cacert.pem -days 1095 Une fois les certificats créés, vous pouvez les ajouter à la configuration de slapd à l aide des paramètres suivants: TLSCACertificateFile /etc/openldap/ssl/cacert.pem TLSCertificateFile /etc/openldap/ssl/cacert.pem TLSCertificateKeyFile /etc/openldap/ssl/privkey.pem Configuration du client OpenLDAP Deux fichiers doivent être configurés pour que les applications utilisant OpenLDAP puissent communiquer avec le serveur OpenLDAP, soit /etc/ldap.conf et /etc/openldap/ldap.conf. Le premier, /etc/ldap.conf est utilisé par pam_ldap et nss_ldap. C est donc à l intérieur de celui-ci qu il faut inclure tous les éléments relatifs à la configuration de ces modules. Un utilisateur «mail», qui a des droits de lectures sur l annuaire, afin de ne pas permettre de requêtes anonymes, a également été créé. Voici donc les paramètres relatifs à la connexion au serveur LDAP : # Definition des requêtes de schéma host ldap.example.com base dc=example,dc=com ssl yes ldap_version 3 # Utilisateur pour la connexion au serveur LDAP binddn uid=mail,dc=testzone,dc=com bindpw query scope sub # Utilisateur pour les commandes effectuées par l'utilisateur root rootbinddn cn=manager,dc=testzone,dc=com Afin d augmenter le niveau de sécurité en limitant le nombre de compte d usagers sur nos serveurs, nous désirons utiliser des utilisateurs virtuels. Ceci facilite également l hébergement de plusieurs domaines sur le même systeme. 10
Cependant, pour se faire, les filtres de PAM de ces systèmes doivent être modifiés. La configuration par défaut effectue l authentification uniquement au niveau du nom de l utilisateur, alors que l utilisation d utilisateur virtuels est normalement effectuée sur l adresse de courriel complète afin de permettre d avoir des utilisateurs identiques sur des domaines différents. Par exemple : les noms d utilisateurs test@exemple.com et test@exemple2.com au lieu d avoir simplement le nom d utilisateur test. Voici donc les modifications à faire sur les filtres de PAM : # Définition des paramètres de PAM # Attribut contenant le nom de l utilisateur pam_login_attribute maillocaladdress # Attribut contenant le filtre de recherche supplémentaire pam_filter objectclass=inetorgperson # Définition du type d encryption des mots de passe pam_password md5 Il faut par la suite créer le fichier de configuration utilisé par les utilitaires d OpenLDAP, soit /etc/openldap/ldap.conf. Ce fichier doit simplement contenir les paramètres à la connection au serveur LDAP désiré : # Definition des requêtes de schéma URI ldaps://ldap.example.com BASE dc=example,dc=com # Configuration des certificats SSL TLS_CACERT /etc/openldap/ssl/cacert.pem TLS_CERT /etc/openldap/ssl/cacert.pem TLS_KEY /etc/openldap/ssl/privkey.pem Population de l annuaire OpenLDAP Afin de faire les modifications initiales à la base de données LDAP, nous pouvons utiliser l utilitaire slapadd, qui permet de faire l ajout d entrées LDAP à l aide de fichiers LDIF. Les fichiers LDIF sont simplement des fichiers textes contenant toutes les informations nécessaires à l entrée de données LDAP. Avant de commencer à entrer des ressources à l intérieur de l annuaire, il faut tout d abord créer son arborescence. Pour les besoins de l exemple, l arborescence sera très simpliste, mais évidemment, il est fortement recommandé de l organiser selon vos besoins. L arborescence utilisée sera pour le domaine example.com, et tous les utilisateurs seront créés dans l unité organisationnelle people. dc=example,dc=com ou=people Pour créer cette entrée, il est possible d utiliser le fichier basearbre.ldif suivant : # Creer la racine de l'arbre dn: dc=example,dc=com dc: example objectclass: dcobject objectclass: organizationalunit ou: Example # Creer le ou "People" dn: ou=people,dc=example,dc=com ou: people objectclass: organizationalunit 11
Il est ensuite possible de l ajouter à la base LDAP avec la commande suivante : slapadd -l basearbre.ldif Par la suite, il faudra ajouter les utilisateurs à l intérieur de la structure LDAP. Voici donc un exemple qui ajoute un utilisateur test, avec une adresse de courriel test@example.com, ainsi qu un alias, qui envoie les courriels de testalias@example.com à test@example.com : # Entree pour l'utilisateur test dn: uid=test,ou=people,dc=example,dc=com uid: test cn: Utilisateur Test objectclass: account objectclass: inetorgperson objectclass: inetlocalmailrecipient objectclass: top userpassword: {MD5}CY9rzUYh03PK3k6DJie09g== sn: Account mail: test@example.com maillocaladdress: test@example.com # Entree pour alias de courriel testalias vers test dn: uid=testalias,ou=people,dc=example,dc=com uid: testalias cn: Utilisateur Test objectclass: inetorgperson objectclass: inetlocalmailrecipient sn: Account mail: testalias@example.com maillocaladdress: test@example.com À regarder ce fichier, vous vous demandez probablement pourquoi l adresse de courriel est nécessaire à deux endroits dans le cas des usagers. Comme tous nos utilisateurs sont considérés comme des utilisateurs virtuels, toutes les adresses de réception seront évaluées par Postfix comme si elles étaient des alias. L attribut mail est donc l adresse pour laquelle le serveur Postfix reçoit un courriel, et maillocaladdress est l adresse à laquelle Postfix enverra le courriel au serveur IMAP. Donc, si l adresse de réception est la même que celle d envoi, simplement inscrire la même adresse pour les deux attributs. Pour les alias, simplement indiquer les bonnes adresses de source et de destination. De plus, comme les alias ne sont pas des vrais utilisateurs, il n est pas nécessaire de leur inclure les attributs relatifs à l authentification, comme userpassword. Il est donc possible d ajouter ces entrées à l aide de la commande suivante : slapadd -l test.ldif Par la suite, vous pourrez ajouter tous vos utilisateurs à l intérieur d un ou plusieurs fichiers ldif de cette manière. Cependant, si votre serveur LDAP est opérationnel, il faut ajouter vos utilisateurs à l aide de la commande ldapadd ou ldapmodify au lieu de la commande slapadd, puisque celle-ci est réservée pour les opérations où l annuaire LDAP n est pas ouvert. Création des comptes administratifs dans l annuaire Un minimum de deux comptes administratifs seront nécessaire dans l annuaire. Le premier compte est celui pour l utilisateur mail, qui fera les requêtes dans la base de données. Il peut être créé à partir du fichier ldif suivant : # Entree pour l'utilisateur administratif mail dn: uid=mail,ou=people,dc=example,dc=com uid: test cn: Utilisateur mail objectclass: account objectclass: inetorgperson objectclass: top userpassword: {MD5}CY9rzUYh03PK3k6DJie09g== 12
sn: Account Vous aurez également besoin d un utilisateur qui sera administrateur des boîtes de courriels à l intérieur de cyrus, et ce, pour chacun des domaines que vous désirez héberger. Chaque utilisateur Cyrus ayant un nom d utilisateur associé à un domaine (cyrus@domaine) ne peut être administrateur que de son propre domaine, ce pour quoi il est nécessaire d en avoir un par domaine hébergé. Voici donc l entrée ldif pour l utilisateur Cyrus du domaine example.com : # Entree pour l'utilisateur test dn: uid=test,ou=people,dc=example,dc=com uid: test cn: Utilisateur Test objectclass: account objectclass: inetorgperson objectclass: top userpassword: {MD5}CY9rzUYh03PK3k6DJie09g== sn: Account mail: test@example.com Comme il est important que l utilisateur administratif des boîtes de courriel ne reçoive pas de courriels afin d éviter les failles possibles de sécurité résultant de l utilisation d un utilisateur actif en tant qu administrateur, nous n allons pas lui spécifier de classe d objets inetlocalmailrecipient ni d attributs maillocaladdress. L attribut mail est cependant nécessaire, puisque ce sera son nom d authentification. PAM L'élément clé au niveau de l'authentification via les serveurs LDAP se situe au niveau de PAM, plus précisément à l'aide du module pam_ldap. Avec RedHat, pam_ldap fait partie du progiciel nss_ldap, donc vous devez être certain qu'il est installé. Pour les autres distributions, vérifiez la documentation de celle-ci. Une fois que les fichiers clients d OpenLDAP, soit /etc/ldap.conf et /etc/openldap/ldap.conf, sont bien configuré (voir section précédente pour plus d'informations), la partie la plus complexe de la configuration est déjà complétée. Il vous reste simplement à modifier la configuration des fichiers d'authentifications de PAM pour qu'ils quérissent les serveurs LDAP, et ce, pour chacun des services que vous désirez utiliser pam_ldap. Dans le cas des serveurs de courriels, les seuls services requis sont SMTP, IMAP et si désiré, POP3. Si vos services sont isolés sur différents serveurs, changez seulement la configuration pour les services actifs sur chaque système. Les fichiers de configurations se trouvent dans le répertoire /etc/pam.d/ et les fichiers à modifier sont smtp, imap et pop3. Vous devez donc modifier chacun des fichiers pour qu'ils contiennent les lignes suivantes: auth required /lib/security/pam_nologin.so auth sufficient /lib/security/pam_ldap.so auth required /lib/secudity/pam_unix.so shado nullok use_first_pass account sufficient account required /lib/security/pam_ldap.so /lib/security/pam_unix.so password required /lib/security/pam_cracklib.so password required /lib/security/pam_unix.so nullok use_authok shadow session required session optional /lib/security/pam_unix.so /lib/security/pam_console.so Ces changements vont s'assurer que PAM va authentifier uniquement au niveau du serveur LDAP. Si vous avez besoin d'utiliser des mécanismes d'authentification additionnels, vous n'avez qu'à ajouter les bonnes options de configuration à l'intérieur de ces fichiers. Puisque les services utilisés ne s'authentifient pas directement à travers PAM, mais plutôt à l'aide de SASLAUTHD, il faut donc configurer ce dernier avant de pouvoir tester l'authentification. 13
SASLAUTHD SASLAUTHD est un démon qui utilise les diverses librairies d'authentification de SASL. Il est notamment utilisé pour l'authentification sous Postfix et Cyrus-IMAPd. Il peut s'interfacer avec beaucoup de différents mécanismes, mais dans notre cas, nous voulons qu'il se rabatte sur PAM, qui s'occupera des vérifications auprès du serveur LDAP. Pour se faire, il faut donc légèrement modifier la configuration du démon SASLAUTHD, en lui passant certains paramètres au démarrage. Le premier élément est de lui spécifier que l'on veut une authentification via PAM, ce qui se fait à l'aide du paramètre -a pam. Ensuite, puisque nous voulons faire opérer le démon de Postfix sous un chroot, nous devons lui dire que son socket doit se retrouver à l'intérieur du chroot de Postfix. Ceci ce fait avec l'option -m /chemin/du/socket. Pour configurer ces options avec RedHat Enterprise, simplement qu'à modifier un seul fichier, soit /etc/sysconfig/saslauthd, et d'y ajouter les options suivantes: # ------------------- # Changer l'authentification de saslauthd a PAM # ------------------- MECH=PAM # ------------------- # Changer le répertoire du socket pour l'inclure dans le chroot de postfix # ------------------- SOCKETDIR=/var/spool/postfix/var/run/saslauthd Le script d'initialisation de SASLAUTHD, /etc/init.d/saslauthd va automatiquement aller lire le fichier /etc/sysconfig/saslauthd et remplacer les variables par les bonnes options. Pour les autres distributions, vérifier la documentation pour y appliquer ces changements. Une fois ces modifications terminées, vous pouvez démarrer le service saslauthd, à l'aide de la commande suivante: /etc/init.d/saslauthd start Vous pouvez vérifier qu'il est démarré avec les bonnes options à l'aide de la commande suivante: ps x grep saslauthd Vous devriez voir un résultat similaire à celui-ci: 14185? S 0:00 /usr/sbin/saslauthd -m /var/spool/postfix/var/run/saslauthd -a pam 14186? S 0:00 /usr/sbin/saslauthd -m /var/spool/postfix/var/run/saslauthd -a pam 14187? S 0:00 /usr/sbin/saslauthd -m /var/spool/postfix/var/run/saslauthd -a pam 14188? S 0:00 /usr/sbin/saslauthd -m /var/spool/postfix/var/run/saslauthd -a pam 14189? S 0:00 /usr/sbin/saslauthd -m /var/spool/postfix/var/run/saslauthd -a pam 21219 pts/1 S 0:00 grep saslauthd Vous êtes maintenant prêts à tester l'authentification via SASL, LDAP et PAM. SASL offre un utilitaire qui permet de tester l'authentification pour chacun des services, testsaslauthd, qui s'utilise de la façon suivante: testsaslauthd -s [service name] -u [username] -p [password] Par exemple, pour tester l'authentification SASL de l'usager test sur le service smtp, il faudrait utiliser cette commande: testsaslauthd -s smtp -u test -p testpassword # testsaslauthd -s smtp -u test -p testpassword 0: OK "Success." Cet outil est essentiel afin de vérifier la fonctionnalité de l'authentification au niveau de SASL. Il pourra arriver à plusieurs reprises lors de l'implémentation que vous devrez déboguer le processus d'authentification. À l'aide de cette commande, vous pourrez facilement déterminer si le problème se situe au niveau de PAM/SASL/LDAP ou encore si c'est un problème relié à l'interaction entre les démons SMTP et IMAP avec SASLAUTHD. Si les tests avec testsaslauthd échouent, il est inutile de vérifier par exemple la configuration de Postfix, tant et aussi longtemps que les résultats ne seront pas positifs. Quelques notes sur les messages d'erreur possibles: 14
connect() : No such file or directory Assurez-vous que le service SASLAUTHD est opérationnel. S'il est démarré, il est peut-être dans un état non fonctionnel. Essayez de le redémarrer. Une autre cause possible serait qu'il n'arrive pas à contacter le socket, donc vérifiez les chemins d'accès. Vous pouvez toujours forcer le bon chemin d'accès à l'aide de l'option -f /chemin/du/répertoire/du/mutex, ce qui, dans notre cas, serait -f /var/spool/postfix/var/run/saslauthd. 0: NO "authentication failed" Vérifiez les journaux relatifs à saslauthd. Il se pourrait que la configuration des fichiers clients LDAP soient incorrecte, que le service slapd ne soit pas fonctionnel ou encore que les fichiers de PAM modifiés précédemment soient incorrects. 15
Serveur de relais SMTP Postfix Création du RPM L'installation de Postfix a été faite à l'aide du SRPM de Simon J. Mudd (http://postfix.wl0.org/). Ceci est un progiciel spécial qui contient les sources du logiciel et les outils permettant d en faire un progiciel en format binaire une fois compilé. La première étape à la création du progiciel final consiste en installer le SRPM, ce qui se fait à l aide de la commande suivante : rpm -ivh postfix-2.1.5-4.src.rpm Tous les fichiers sources se trouveront alors sous l arborescence de /usr/src/redhat. Cependant, pour que le RPM final de Postfix puisse avoir les options désirées, il faut modifier le fichier SPEC du SRPM pour le compiler avec les bonnes options. Le fichier à modifier est /usr/src/redhat/specs/postfix.spec et les options à modifier sont les suivantes : %define with_cdb 0 %define with_ipv6 0 %define with_ldap 1 %define with_mysql 0 %define with_mysql_redhat 0 %define with_pcre 1 %define with_pgsql 0 %define with_sasl 2 %define with_spf 0 %define with_tls 1 %define with_tlsfix 2 %define with_vda 0 Après cela il sera possible de compiler le RPM avec toutes les options nécessaires à l aide de la commande suivante : rpmbuild -bb postfix.spec Par la suite, simplement à installer le RPM à l aide de la commande suivante : rpm ivh /usr/src/redhat/rpms/i386épostfix-2.1.5-4.rhel3.i386.rpm Configuration La majeure partie de la configuration de Postfix s'effectue dans le répertoire /etc/postfix. Dans ce répertoire, vous y trouverez tous les fichiers de configuration, y compris les deux principaux, soit master.cf et main.cf. Contrôle des démons et services: master.cf Barrer Postfix dans un chroot Le fichier master.cf est celui qui contrôle les différents démons et services de Postfix. Les lignes principales auxquelles il faut s'attarder sont les suivantes: # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - n - - smtpd Afin de sécuriser Postfix encore plus, il y a un changement qu'il faut appliquer à cette ligne, afin de barrer le service smtpd dans un chroot. Un chroot est une sorte de prison pour un utilisateur, qui nous bloque à une source précise 16
dans le système de fichiers du système. Par exemple, barrer postfix dans un chroot /var/spool/postfix fait en sorte que sa racine («/») devient /var/spool/postfix et il n aura pas accès à aucun fichier qui ne se trouve pas en dessous de cette arborescence. Ceci limite donc énormément les risques de sécurité advenant une brèche du service. Comme vous pouvez le voir dans l'extrait ci-haut, il faut modifier la cinquième colonne pour cela, en changeant le n pour un -, puisque comme les commentaires l'indiquent, par défaut, Postfix est configuré pour rouler en chroot. Toutefois, c'est une propriété que RedHat a décidé de changer, probablement aux fins de simplicité. Il faut donc la modifier comme suit pour récupérer cette addition de sécurité. # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - - - - smtpd Pour que Postfix puisse opérer dans le chroot, il faut cependant copier plusieurs fichiers dans son chroot, puisqu'il ne pourrait y accéder autrement. Il faut donc créer l'arborescence suivante, qu'il est possible de faire aisément à l'aide du script de création de chroot qui vient avec le RPM de Postfix de Simon J. Mudd (http://postfix.wl0.org/) # setup chroot directory structure /var/spool/postfix/etc /var/spool/postfix/lib /var/spool/postfix/usr/lib/zoneinfo /var/spool/postfix/usr/share/zoneinfo /var/spool/postfix/usr/lib/sasl2 copy system files into chroot /etc/localtime -> /var/spool/postfix/etc /etc/host.conf -> /var/spool/postfix/etc /etc/resolv.conf -> /var/spool/postfix/etc /etc/nsswitch.conf -> /var/spool/postfix/etc /etc/hosts -> /var/spool/postfix/etc /etc/services -> /var/spool/postfix/etc copy (cleaned) /etc/passwd into chroot copy LDAP libraries into chroot /usr/lib/libldap.so -> /var/spool/postfix/usr/lib/ /usr/lib/libldap.so.2 -> /var/spool/postfix/usr/lib/ /usr/lib/libldap.so.2.0.128 -> /var/spool/postfix/usr/lib/ /usr/lib/libldap_r.so -> /var/spool/postfix/usr/lib/ /usr/lib/libldap_r.so.2 -> /var/spool/postfix/usr/lib/ /usr/lib/libldap_r.so.2.0.128 -> /var/spool/postfix/usr/lib/ /usr/lib/libldap_r.so -> /var/spool/postfix/usr/lib/ /usr/lib/libldap_r.so.2 -> /var/spool/postfix/usr/lib/ /usr/lib/libldap_r.so.2.0.128 -> /var/spool/postfix/usr/lib/ /usr/lib/liblber.so -> /var/spool/postfix/usr/lib/ /usr/lib/liblber.so.2 -> /var/spool/postfix/usr/lib/ /usr/lib/liblber.so.2.0.128 -> /var/spool/postfix/usr/lib/ copy SASL libraries and files into chroot /usr/lib/sasl2/smtpd.conf -> /var/spool/postfix/usr/lib/sasl2/ /usr/lib/sasl2/libplain.* -> /var/spool/postfix/usr/lib/sasl2/ /usr/lib/sasl2/liblogin.* -> /var/spool/postfix/usr/lib/sasl2/ copy db library (libdb-4.1.so) into chroot /lib/libdb-4.1.so -> /var/spool/postfix/lib/ copy system files into chroot /lib/libnss_compat-2.3.2.so -> /var/spool/postfix/lib/ /lib/libnss_compat.so.2 -> /var/spool/postfix/lib/ /lib/libnss_dns-2.3.2.so -> /var/spool/postfix/lib/ /lib/libnss_dns.so.2 -> /var/spool/postfix/lib/ /lib/libnss_files-2.3.2.so -> /var/spool/postfix/lib/ /lib/libnss_files.so.2 -> /var/spool/postfix/lib/ /lib/libnss_ldap-2.3.2.so -> /var/spool/postfix/lib/ /lib/libnss_ldap.so.2 -> /var/spool/postfix/lib/ /lib/libnss_nis-2.3.2.so -> /var/spool/postfix/lib/ /lib/libnss_nis.so.2 -> /var/spool/postfix/lib/ /lib/libnss_nisplus-2.3.2.so -> /var/spool/postfix/lib/ /lib/libnss_nisplus.so.2 -> /var/spool/postfix/lib/ /lib/libnss_winbind.so -> /var/spool/postfix/lib/ /lib/libnss_winbind.so.2 -> /var/spool/postfix/lib/ 17
/lib/libnss_wins.so -> /var/spool/postfix/lib/ /lib/libnss_wins.so.2 -> /var/spool/postfix/lib/ /lib/libresolv-2.3.2.so -> /var/spool/postfix/lib/ backing up /etc/postfix/master.cf to /etc/postfix/master.cf-old.9750 Journalisation accrue pour déboggage La ligne du service smtp est également spécialement utile pour fin de débogages, puisqu'en ajoutant -v à la fin, il est possible d'avoir des journaux beaucoup plus verbaux, ce qui rend la résolution de problèmes beaucoup plus efficace. smtp inet n - - - - smtpd -v Configuration du service: main.cf Une fois que les divers démons de Postfix sont bien configurés, toute la configuration du fonctionnement des services se fait via le fichier main.cf. Certaine parties de configurations sont dans d autres fichiers, mais ils sont tous référencés par main.cf. Identification du système La première étape à la configuration de Postfix est de bien configurer l identité des services smtp et smtpd. Ceci ce fait à l aide des options suivantes : myhostname : Le nom de domaine respecter certains éléments : complet du système, ex : mail.example.com. Le nom spécifié ici doit s assurer de Son nom de domaine doit avoir un entrée DNS publique de type A pour le domaine spécifié Son adresse IP doit être reliée au nom de domaine à l aide d une entrée DNS publique de type PTR zone de reverse lookup Le nom de domaine doit être spécifié comme record MX pour chacun des domaines qu il dessert Ces éléments sont essentiels afin de respecter les standards établis pour le protocole SMTP. Même s il serait possible faire fonctionner votre serveur de courriels sans que ces conditions soient remplies, il se pourrait que beaucoup de courriels que vous enverriez seraient bloqués par d autres serveurs de courriels qui font des vérifications très strictes sur les courriels entrant. dans la Pourquoi faire des vérifications aussi strictes? À cause de l émergence grandissante de courriels indésirables, les pourriels. Puisque la grande majorité des serveurs qui envoient des pourriels ne respectent pas ces standards, il est donc possible d en bloquer une très grande partie en faisant ces vérifications plus accrues sur les configurations DNS des serveurs nous envoyant des courriels. Dans certains cas, il est même possible de bloquer jusqu à 90% des pourriels simplement avec ces vérifications. mydomain : Le nom du domaine principal desservi par le serveur de courriel, ex : example.com. Si vous hébergez plusieurs domaines, la liste des autres domaines se trouvera dans relay_domains si vous utilisez un serveur de relais ou dans virtual_domain_maps si votre serveur de front est également votre serveur principal. mynetworks : La liste des réseaux pour lesquels le serveur pourra être utilisé comme relais. Il est important de mettre la liste de tous les réseaux d où les utilisateurs de ce serveur SMTP pourrait y accéder, sans nécessiter d authentification myorigin : L origine de tout courriel non complet passant par se serveur. Ex. un mail envoyé à l utilisateur jean devient jean@myorigin. mydestination : La liste des domaines pour lesquels se serveur est la destination finale smtpd_banner : La banière affichée par le serveur lors de l initiation d une connection SMTP. Il est obligatoire d y incrire le nom de domaine complet du système, tel $myhostname. Il est également recommandé de ne pas afficher la version du logiciel, pour rendre l exploitation de failles plus complexe. L ajout de NO UCE va permetre de bloquer certains systèmes de pourriels «gentils» qui vont s abstenir d envoyer des pourriels aux systèmes ayant cela dans la banière. Cependant, soyez avisés que ces systèmes sont très rares. 18
------- # Identification du système ------- myhostname = mail.example.com mydomain = example.com mynetworks = 172.16.10.0/24, 127.0.0.0/8 myorigin = $mydomain mydestination = $myhostname, localhost.$mydomain, localhost smtpd_banner = $myhostname ESMTP NO UCE Relais de courriels Comme ce système de courriels est seulement utilisé aux fins de relais, il faut lui spécifier où envoyer les courriels pour les domaines desquels nous désirons recevoir du courriel. Ceci est établi à l aide des règles de transport de Postfix, qui est géré à l aide des paramètres suivants : relay_domains : Liste des domaines pour lesquels nous désirons relayer du courriel. Il est recommandé de le faire pointer à un fichier externe pour en simplifier l administration. relay_recipient_maps : Liste des personnes pouvant recevoir du courriel sur les domaines relayés. Ceci doit pointer sur la liste complète des usagers, puisque si le serveur ne reconnaît pas le destinataire du courriel entrant, il va le refuser. Comme la liste des usagers se trouve sur le serveur LDAP, il faut pointer cette requête à un des serveurs LDAP contenant cette information. transport_maps : Pointe à un fichier décrivant les directives d envois de courriels, par domaine. Lire la page de manuel transport(5) pour plus d informations. Voici un exemple de configuration de ces paramètres dans main.cf : ------- # Options de relais de courriels ------- relay_domains = hash:/etc/postfix/maps/relay_domains relay_recipient_maps = ldap:/etc/postfix/maps/relay_recipients transport_maps = hash:/etc/postfix/maps/transport Des exemples du format de ces fichiers sont disponibles dans les annexes. /etc/postfix/maps/relay_domains : Ce fichier fait simplement lister les différents domaines pour lesquels on veut relayer du courriel. Comme chaque fichier de type hash de postfix doit avoir 2 colonnes, simplement à mettre un commentaire dans la deuxième colonne pour son bon fonctionnement. Par exemple : example.com /etc/postfix/maps/relay_recipients : Ce fichier sert à configurer la requète LDAP pour la recherche d usagers et d alias. Soyez certain d ajuster ces paramètres en fonction des informations de votre annuaire LDAP. Consultez les annexes pour un exemple de configuration. /etc/postfix/maps/transport : Pour créer ce fichier, simplement à inscrire le domaine pour lequel vous désirez relayer les courriels, et le serveur de destination, précéder du mode de transport. Comme nous faisons du relais, le mode de transport est relais. Ex. : exemple.com #example.com relay:[mailint.example.com] Après avoir complété l édition des fichiers, il faut créer les tables fichiers de type hash. postmap /etc/postfix/maps/relay_domains postmap /etc/postfix/maps/transport de hash avec la fonction postmap pour chacun des 19
Filtrage de courriels ne respectant pas les normes Afin de limiter la quantité de pourriels, ainsi que d éviter la permission de courriels forgés, il est recommandé de bloquer les courriels ne respectant pas certains standards établis par le protocole SMTP. Pour cela, il est recommandé d utiliser les paramètres de configuration suivants dans Postfix : header_checks = regexp:/etc/postfix/header_checks mime_header_checks = regexp:/etc/postfix/mime_header_checks body_checks = regexp:/etc/postfix/body_checks strict_rfc821_envelopes = yes disable_vrfy_command = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_helo_access hash:/etc/postfix/maps/access_helo, reject_unknown_sender_domain, reject_unauth_pipelining, reject_unknown_recipient_domain, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_non_fqdn_hostname, check_relay_domains Puisque ce type de filtrage peut être encore plus strict afin de limiter davantage l entrée de pourriels, je recommande fortement de lire les informations relatives à ces paramètres dans la page de manuel postconf(5). De plus, pour un guide très bien détaillé sur le sujet, incluant d excellents exemples de configuration très stricte, incluant l utilisation de listes de trous noirs en temps réels (RBL), je suggère de lire l article de Jeffrey Posluns sur le filtrage de pourriels par l entremise de Postfix, disponible à l adresse suivante : http://www.securitysage.com/antispam/intro.html Il faut cependant prendre note qu il est fort possible que certains courriels légitimes, provenant de serveurs ou de domaines mal configurés soient bloqués à l aide de ces règles, alors il sera a vous de juger quelles règles sont suffisantes selon vos politiques. La meilleure solution est de les implémenter graduellement et d en vérifier les effets. Utilisation de TLS pour authentification encryptée Afin de seulement permettre aux gens de s authentifier au serveur SMTP via une session encryptée à l aide de TLS, il faut configurer Postfix pour lui permettre de gérer les sessions TLS, qui sont des sessions encryptées à l aide de SSL. Pour cela, la première étape est de créer des certificats SSL en format PEM. Vérifier la section relative à la création de certificats SSL dans l installation d OpenLDAP afin de créer les certificats de Postfix. Les procédures sont les mêmes, excepté que vous devrez les mettre à l endroit suivant : /etc/postfix/ssl/. Une fois que les certificats sont installés, il ne reste qu à configurer Postfix pour qu il les utilise. Ceci se fait à l aide des options suivantes dans le main.cf : smtpd_use_tls = yes smtp_tls_note_starttls_offer = yes smtpd_tls_key_file = /etc/postfix/ssl/privkey.pem smtpd_tls_cert_file = /etc/postfix/ssl/cacert.pem tls_random_source = dev:/dev/urandom Authentification SMTP via SASL Afin de permettre aux utilisateurs externes d utiliser votre serveur SMTP, il est possible d effectuer de l authentification SMTP via SASL. Ceci vous permet donc de limiter l utilisation externe de votre serveur aux personnes authentifiées et éviter de devenir un relais ouvert. Afin d éviter que les mots de passe des utilisateurs soient propagés sur Internet, nous désirons également permettre l authentification seulement si une connexion sécurisée via TLS est établie. De plus, l authenfication sera effectuée à l aide de SASLAUTHD pour permettre l authentification envers le serveur LDAP. 20
Pour permettre cela, simplement ajoutez les lignes suivantes dans le fichier main.cf : smtpd_tls_auth_only = yes smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = smtpd_sasl_application_name = smtpd smtpd_sasl_pwcheck_method = saslauthd smtpd_sasl_saslauthd_path = /var/run/saslauthd broken_sasl_auth_clients = yes 21
Filtrage de courriels indésirables Avant d'entrer Note : La section suivante décrit le processus d'installation des diverses composantes utilisées pour le filtrage de courriels. Une bonne partie de cette section est également inspirée des notes de Jeffrey Posluns, de Security Sage. Tel que mentionné dans la section précédente, vous pouvez trouver cet excellent guide à l'adresse suivante: http://www.securitysage.com/antispam/intro.html Le filtrage de courriels indésirables comprend deux aspects principaux, soit le filtrage de virus ainsi que le filtrage de pourriels. Quoique les outils pour faire ces taches sont distincts, il est possible de regrouper la tâche de filtrage en une seule étape majeure, à l'aide d'amavisd-new. Ce démon sert d'interface entre le serveur de courriel, Postfix, et les divers antivirus et filtres de pourriels. Amavisd-new s'interface avec la majorité des antivirus disponibles, mais dans notre cas, nous allons utiliser ClamAV, qui est un excellent antivirus en logiciel libre. Pour les inquiets, soyez assurés qu'il est mis à jour sur une base très régulière. Pour ce qui est du filtrage de pourriels, SpamAssassin est le principal filtre disponible en logiciel libre, et amavisdnew l'intègre par défaut. ClamAV L'antivirus ClamAV comporte deux modules principaux pour son utilisation via amavisd-new, soit clamd, le démon de l'antivirus, et freshclam, qui est l'utilitaire utilisé pour maintenir les définitions de virus à jour. clamd La configuration de clamd se fait dans le fichier clamd.conf, qui se situe habituellement dans le répertoire /etc. La première étape est de vous assurer que la ligne «Exemple» est commentée, puisque sinon il sera impossible de démarrer le démon clamd. Par la suite, vous pouvez configurer les options de journaux désirées. Jugez bon d'utiliser la méthode la mieux adaptée à votre environnement. La documentation sur ce sujet à l'intérieur du fichier de configuration devrait bien vous guider. Si vous êtes incertains, consultez le fichier /etc/clamd.conf en annexe afin d'en voir un exemple. Pour les autres options, la majorité de celles par défaut devraient suffire, mais vérifiez les tous afin de vous assurez qu'elles sont adaptées à votre environnement. Une autre option qu'il faudrait modifier, pour fins de sécurité, est de s'assurer que le démon clamd opère sous un autre usager et groupe que root. Pour cela, il faut tout d'abord avoir un usager unique sous lequel clamd va opérer. Vérifiez si votre installation en a créé un (celui qui serait défini dans le fichier de configuration), sinon, créez un usager du nom de clamav, sans login shell réel (ex. /bin/false), et modifiez les lignes suivantes du fichier clamav.conf: # Run as a selected user (clamd must be started by root). User clamav # Initialize supplementary group access (clamd must be started by root). AllowSupplementaryGroups 22
freshclam Pour la mise à jour des définitions d'antivirus, il faut rouler le démon freshclam, qui va vérifier pour des nouvelles définitions sur une base régulière. Par défaut, freshclam vérifie à tous les 12 heures, mais ceci peut-être modifié à votre guise en changeant le paramètre Checks, qui définit le nombre de fois que freshclam va vérifier pour une période de 24 heures. Donc, pour faire une vérification à toutes les heures, il faudrait utiliser le paramètre suivant: Checks 24 Tout comme pour clamd, il faut s' assurer que la ligne «Exemple» est commentée, mais les autres options par défaut devraient suffire. SpamAssassin Avant de pouvoir installer SpamAssassin, il faut vous assurer d'avoir plusieurs modules de Perl nécessaire à son utilisation. Ces modules peuvent être disponibles via votre distribution, mais si ce n'est pas le cas, vous pouvez toujours vous les procurer à l'aide de CPAN, qui est un engin de distribution de modules de Perl. IMPORTANT: Si vous utilisez RedHat ou Fedora, il est important de ne pas être en langage UTF8 avant d'utiliser CPAN, puisque sinon vous aurez de nombreux problèmes. Donc, avant d'entrer dans CPAN, utilisez la commande export=en_us. Afin d'accéder à CPAN, vous devez idéalement être logué en tant que root et entrer la commande qui suit: perl -MCPAN -e shell Vous tomberez donc dans l'interface de commande de CPAN. Pour installer un module, simplement à utiliser la commande suivante: install [module name] ex: install Mail::SpamAssassin Afin d'améliorer les détections de pourriels de SpamAssassin, nous allons également utiliser le réseau de distribution de filtres de pourriels Razor2, de Vipul (http://razor.sourceforge.net/). Donc, pour l'installation de tous les modules nécessaires pour SpamAssassin et Razor2, vous pouvez utiliser la commande suivante: install Net::Ping Net::DNS Time::HiRes Digest::SHA1 Getopt::Long File::Copy Digest::Nilsimsa URI URI::Escape ExtUtils::MakeMaker File::Spec Pod::Usage HTML::Parser Sys::Syslog DBI DB_File Mail::SpamAssassin Une fois que SpamAssassin est installé, vous pouvez le configurer à l'aide du fichier /etc/mail/spamassassin/local.cf. # Configurer le fichier de whitelist automatique auto_whitelist_path /var/amavis/.spamassassin/auto-whitelist.db auto_whitelist_file_mode 0700 # Configurer le fichier de la base de données bayes bayes_path /var/amavis/bayes.db. bayes_file_mode 0700 bayes_use_hapaxes 1 # Configurer l'utilisation de Razor2 use_razor2 1 razor_timeout 10 23
Razor2 Maintenant que nous avons dit à SpamAssassin d'utiliser Razor2, nous devons installer ce dernier. Pour ce faire, vous pouvez télécharger les sources de l'agent sur leur site Web : http://razor.sourceforge.net/ Pour l'installer, utilisez les commandes suivantes: tar -zxf razor-agents-2.67.tar.gz cd razor-agents-2.67 Perl Makefile.pl make make test sudo make install Ensuite, en tant que root, vous devez créer le répertoire pour razor dans le home directory de root: razor-client Créez ensuite le fichier de configuration par défaut : razor-admin -create Enfin, vous devez vous enregistrer afin de pouvoir utiliser le service à l'aide d'une des façons suivantes: - Spécifier votre propre nom d'utilisateur et mot de passe razor-admin -register -user=toto -pass=password - Vous enregistrer à l'aide de votre addresse de courriel (votre mot de passe vous sera attitré au hasard) razor-admin -register -user=toto@exemple.com - Ou encore recevoir un nom d'utilisateur et un mot de passe au hasard razor-admin -register La commande créera automatiquement un fichier contenant vos informations dans /etc/razor/identityusername. Une fois complétée, l'installation de SpamAssassin sera terminée. Entraînement de SpamAssassin Afin de permettre une meilleure détection de pourriels, il est important d entraîner SpamAssassin, en apprenant constamment à son filtre Bayes la différence entre des pourriels (spam) et des courriels légitimes (ham). Pour se faire, l idéal est de conserver des sous répertoires dans des boîtes de courriels contenant uniquement des pourriels, et de bien transférer tous les pourriels de nos boîtes dans ces sous-répertoire. De cette manière, il sera facile de dire à SpamAssassin où vérifier pour des courriels que l on considère des pourriels et où vérifier pour les courriels que nous jugeons être légitimes. Idéalement, il faudrait le faire pour toutes les boîtes de courriels, mais si ce n est pas possible, essayer de le faire pour le plus de boîtes que vous pouvez. Plus vous pouvez donner de contenu d entraînement à SpamAssassin, plus il sera en mesure de bien filtrer vos courriels! Par la suite, il sera possible de faire vérifier ces endroits sur une base régulière afin de constamment mettre à jour le filtre baisian de SpamAssassin en vue d un filtrage efficace. Pour entraîner SpamAssassin, il faut utiliser la commande sa-learn, suivi du type de courriels que vous désirez filtrer, soit --ham pour des courriels légitimes, ou --spam pour des pourriels. Ensuite, il faut spécifier les répertoires à travers lesquels nous désirons que SpamAssassin examine les courriels. À titre d exemple, voici comment il serait possible de faire vérifier tous le sous répertoire Spam de la boîte de courriel d un usager : sa-learn --spam /var/spool/imap/i/informations/spam/ Et maintenant comment examiner les courriels légitimes se trouvant dans le Inbox d un usager : sa-learn --ham /var/spool/imap/i/informations/[0-9]* Pour plus d informations sur l entraînement de SpamAssassin, consultez la page de manuel sa-learn(1) aisin que l information relative à se sujet dans la documentation de SpamAssassin, disponible à l adresse suivante : http://wiki.apache.org/spamassassin/usingspamassassin 24
amavisd-new Concept Pour avoir une meilleure conception du flot d'information à travers les différents filtres et démons, voici un diagramme qui démontre les étapes qu'un courriel entrant doit suivre, supposant une configuration où tous les services sont sur un même système. L'élément qui peut porter à confusion est l'étape 9, où amavisd retransmet le message à une autre instance de Postfix, qui écoute sur un port différent. Vous vous demandez peut-être pourquoi rouler une deuxième instance de Postfix, sur un port différent, lorsque vous avez déjà une instance de Postfix sur le port 25? La réponse est bien simple. Si amavisd retransmettait le courriel à l'instance de Postfix principal, celui-ci devrait repasser le message dans tous ces filtres, une deuxième fois, et en plus, le retransmettre à amavisd à nouveau, ce qui créerait une boucle infinie! C'est donc pour cette raison qu'il faut un deuxième démon de Postfix, sur un port différent, mais qui n'effectue pas de vérifications et qui ne passe pas le message dans un filtre, puisque la première instance l'a déjà fait. Amavis pourra donc envoyer les messages filtrer à cette instance, afin que les messages puissent être livrés. Pré-requis amavisd-new, qui est également basé en Perl, nécéssite lui aussi plusieurs modules Perl additionnels. Afin de vous assurer d'avoir tous les modules nécessaires, vous pouvez utiliser la commande suivante: 25
install Archive::Tar Archive::Zip Compress::Zlib Convert::TNEF Convert::UUlib MIME::Base64 MIME::Parser Mail::Internet Net::Server Net::SMTP Digest::MD5 IO::Stringy Test::Pod Convert::ASN1 Test::Simple Time::HiRes Unix::Syslog Net::LDAP BerkeleyDB En plus, afin de pouvoir vérifier tous les types de fichiers, amavisd-new a besoin que les utilitaires suivants soient installés : file compress gzip bzip2 nomarch arc lha unarj arj rar / unrar zoo cpio lzop freeze Configuration Une fois amavisd-new installé, il faut le configurer via /etc/amavisd.conf. Encore une fois, soyez certain de vérifier toutes les options afin de personnaliser amavisd-new selon vos besoins. Pour plus de détails sur chacune des options du fichier de configuration, consultez le fichier amavisd.conf-sample, qui en donne de bonnes explications. Cependant, pour une configuration minimale, vous devez vous assurer de faire quelques modifications à la configuration par défaut: Spécifier le nom du domaine principal hébergé: $mydomain = 'example.com'; Spécifiez le nom du système: $myhostname = 'amavis.example.com'; Spécifier le nom de l'utilisateur et le groupe sous qui le démon amavisd-new va opérer: $daemon_user = 'vscan'; # (no default; customary: vscan or amavis) $daemon_group = 'vscan'; # (no default; customary: vscan or amavis or sweep) Configurer les options pour SpamAssassin. Il est important de tester et d ajuster ces paramètres selon votre niveau de tolérance de spam versus la tolérance de faux positifs, qui sont des couriels légitimes qui ont toutefois été bloqués selon l évaluation, mais qui auraient dû êtres acceptés. $sa_tag_level_deflt = 2.0; $sa_tag2_level_deflt = 5; $sa_kill_level_deflt = 5; $sa_dsn_cutoff_level = 10; $sa_mail_body_size_limit = 200*1024; $sa_local_tests_only = 0; Spécifier le serveur de réinjections de courriels, soit l instance de Postfix qui écoute sur le port 10025 et qui ne fait aucune vérification de courriels : $notify_method = 'smtp:[127.0.0.1]:10025'; $forward_method = 'smtp:[127.0.0.1]:10025'; 26
Enfin, spécifier l engin d antivirus à être utilisé. Pour se faire, simplement à commenter toutes les lignes, sauf celles reliées à ClamAV, dans la section @av_scanners =, soit les lignes suivantes : ['ClamAV-clamd', \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"], qr/\bok$/, qr/\bfound$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ], Intégration Après qu amavisd-new ait été bien configuré, il ne reste qu à l intégrer dans Postfix. Pour se faire, 2 changements doivent être apportés au master.cf de Postfix, et un à l intérieur du main.cf. Changements au master.cf Afin de permettre à Postfix d utiliser amavisd-new comme filtre de contenu, il faut d abord inclure le démon d amavisd-new à la liste des transports de Postfix. Pour cela, simplement à ajouter les lignes suivantes à la fin du fichier master.cf : amavisd unix - - - - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes Ensuite, pour que les courriels filtrés par amavisd-new puissent être envoyés au démon de réinjections de Postfix, il faut dire à Postfix de créer une seconde instance du serveur SMTP afin de recevoir les courriels d amavisd-new et de les livrer aux destinataires. Le démon de réinjections sera créer en ajoutant les lignes suivantes au master.cf : 127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o smtpd_proxy_filter= -o myhostname=av.exemple.com -o smtpd_banner=av.exemple.com -o mynetworks=127.0.0.0/8 -o smtpd_recipient_restrictions=permit_mynetworks,reject -o local_recipient_maps= -o receive_override_options=no_unknown_recipient_checks Un des éléments importants est que ce démon doit écouter que sur l interface locale (localhost). Puisque tous les courriels ont déjà été filtrés, le démon ne doit pas les passer à aucun filtre de courriels. Enfin, ce démon doit accepter seulement les courriels qui proviennent de l interface locale. Changements au main.cf La dernière étape à l intégration de amavisd-new est de dire à Postfix qu il doit faire filtrer les courriels par amavisd-new. Pour se faire, simplement ajouter la ligne suivante au main.cf : content_filter = amavisd:[127.0.0.1]:10024 Une fois compléter, simplement à rafraîchir la configuration de Postfix aux démons avec la commande suivante : postfix reload 27
Serveur principal SMTP Puisque tout le filtrage de courriels entrant est effectué sur le ou les serveurs de relais, il n est pas nécessaire de faire un filtrage aussi exhaustif sur le serveur interne. La configuration de celui-ci est donc plus simple que celle du serveur de courriel. Cependant, dépendamment de la rigidité du contrôle de virus sur chacun des postes et des serveurs, il peut être fortement recommandé de tout de même effectuer un filtrage de virus sur les courriels passant dans le serveur interne, afin d éviter une propagation de virus provenant du réseau interne. L ajout de TLS n est également pas nécessaire, puisque les seules personnes ayant accès à ce serveur proviennent du réseau interne, ce qui fait que l authentification SMTP n est pas requise. Contrôle des démons et services: master.cf La majeure partie de la configuration de cette section est identique à celle mentionnée précédemment pour le serveur de relais. Consultez l information relative à ces éléments dans la section du serveur de relais pour plus d informations sur cette étape de la configuration. Cependant, puisque le serveur principal effectue également la livraison de courriels au serveur IMAP, il faut effectuer certains changements supplémentaires si votre serveur IMAP réside sur le même système que votre serveur de courrier principal. Comme mentionné précédemment, pour l'utilisation de Cyrus-IMAP comme serveur IMAP, vous pouvez utiliser deux moyens pour la livraison de messages par LMTP: la livraison à travers un socket unix, ou encore la livraison à travers un port TCP. Si votre serveur IMAP réside sur le même système, vous pouvez utiliser le transport via socket unix. Pour se faire, il faut cependant vous assurer que le chemin d'accès de l'utilitaire deliver, qui sert à la livraison des messages de Cyrus, soit correct. Vous pouvez donc le configurer sur cette ligne du fichier master.cf: cyrus unix - n n - - pipe user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user} Dans le cas de RedHat Enterprise 3, il faut modifier la valeur du chemin d'accès pour /usr/cyrus/bin/deliver et donc changer la ligne du master.cf comme ceci: cyrus unix - n n - - pipe user=cyrus argv=/usr/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user} Si votre serveur IMAP ne réside pas sur le même système, aucune modification au fichier master.cf est requise. Le mode de transport LMTP, qui est déjà bien configuré sera utilisé dans le fichier main.cf. Configuration du service: main.cf Identification du système La première étape de configuration du serveur SMTP principal est toutefois la même que celle du serveur de relais, soit l identification du serveur SMTP. Consultez l information relative à ces éléments dans la section du serveur de relais pour plus d informations sur les paramètres. ------- # Identification du système ------- myhostname = intmail.example.com mydomain = example.com mynetworks = 192.168.40.0/24, 127.0.0.0/8 myorigin = $mydomain mydestination = $myhostname, localhost.$mydomain, localhost smtpd_banner = $myhostname 28
Liste d alias et de destinataires Vous devez ensuite donner à postfix la liste d alias et de destinataires pour lesquels il doit accepter le courriel. Les alias des utilisateurs LDAP sont virtuels face au système, ce pourquoi il faut les inclure dans le paramètre virtual_alias_maps au lieu des alias locaux qui eux se trouvent dans alias_maps. alias_maps = hash:/etc/aliases local_recipient_maps = unix:passwd.byname $alias_maps unknown_local_recipient_reject_code = 550 virtual_alias_maps = ldap:/etc/postfix/maps/ldap-aliases Transport de courriels Deux types de transports doivent être spécifiés pour le serveur de courriels principal. Premièrement, comme le serveur IMAP utilisé est Cyrus IMAPD, il faut spécifier à Postfix d effectuer la livraison des courriels via un des modes de transport disponibles pour Cyrus IMAPD. Si votre serveur IMAP ne réside pas sur le même système que votre serveur de SMTP principal, il faut spécifier le mode de transport LMTP, suivi de l adresse IP du serveur IMAP, afin d acheminer les courriels à ce dernier. Ceci se configure à l aide des lignes suivantes : local_transport = lmtp:[172.16.20.5] virtual_transport = lmtp:[172.16.20.5] Toutefois, si votre serveur IMAP réside sur le même serveur que votre serveur SMTP principal, vous pouvez utiliser le mode de tranport cyrus, tel que préalablement configuré dans le fichier master.cf. local_transport = cyrus virtual_transport = cyrus Ensuite, puisque nous voulons que tous les courriels passent par le serveur de relais, il faut spécifier à quel serveur SMTP Postfix doit relayer tout courriel ne figurant pas dans sa liste de destination finale. Ceci se fait à l aide du paramètre relayhost. relayhost = [172.16.10.5]:25 Soyez certain de bien spécifier l adresse IP, ou le nom DNS du système de relais. Filtrage de courriels Le seul filtrage qui sera fait, mis à part l antivirus, sera la vérification de standard sur les enveloppes des courriels, ainsi que de seulement permettre aux systèmes figurant dans la liste des réseaux du serveur de l utiliser comme serveur SMTP. strict_rfc821_envelopes = yes disable_vrfy_command = yes smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination Si vous désirez appliquer un filtrage personnalisé sur les courriels, vérifiez les pages de manuels de header_checks(5), body_checks(5) et access(5). 29
Serveur IMAP et POP3 Cyrus IMAPD Le serveur IMAP de Cyrus est reconnu pour être un des serveurs IMAP les plus fiables, performants et sécuritaires. Cependant, pour en arriver à cette fin, il utilise beaucoup de fonctions propriétaires qui ne se retrouvent pas dans les autres serveurs IMAP, ce qui rend sa gestion légèrement plus complexe. Création des RPM Puisque Cyrus IMAP ne vient pas avec RedHat Enterprise, il faut l ajouter à l installation de RedHat. Afin de faciliter son installation et sa maintenance, il est possible d utiliser les SRPM disponibles avec Fedora Core, la distribution gratuite de RedHat, pour créer les RPM nécessaires. Les options suivantes du fichier SPEC du SRPM ont donc été modifiées : # use saslauth group %{!?SASLGROUP: %define SASLGROUP 0} # include deliver-wrapper %{!?DEL_WRAP: %define DEL_WRAP 1} # use preforking cyrus.conf %{!?PREFORK: %define PREFORK 1} # enable Netscape hack (recommended) %{!?NETSCAPEHACK: %define NETSCAPEHACK 1} # enable IMAP4 LIST extensions %{!?LISTEXT: %define LISTEXT 1} # enable IDLED support %{!?IDLED: %define IDLED 0} # force syncronous updates on ext3 %{!?FORCESYNCEXT3: %define FORCESYNCEXT3 0} # include autocreate feature %{!?AUTOCREATE: %define AUTOCREATE 1} # enable allnumeric patch %{!?ALLNUMERIC: %define ALLNUMERIC 0} # don't check for RFC compliant line termination (bare newlines) %{!?NO_BARE_NL: %define NO_BARE_NL 0} # used syslog facility for logging %{!?SYSLOGFACILITY: %define SYSLOGFACILITY MAIL} # use -fpie for linking %{!?USEPIE: %define USEPIE 0} # OutlookExpress seenstate patch %{!?OE_SEEN_ST: %define OE_SEEN_ST 1} # use authorization module METHOD [unix krb5] %{!?AUTH_METHOD: %define AUTH_METHOD unix} Ensuite, vous pouvez créer le RPM à l aide de la commande suivante : rpmbuild -bb cyrus-imapd.spec Les RPMs suivants seront donc créés et prêts à être installés: cyrus-imapd-2.2.10-3.fc3.i386.rpm cyrus-imapd-devel-2.2.10-3.fc3.i386.rpm cyrus-imapd-murder-2.2.10-3.fc3.i386.rpm cyrus-imapd-nntp-2.2.10-3.fc3.i386.rpm cyrus-imapd-utils-2.2.10-3.fc3.i386.rpm perl-cyrus-2.2.10-3.fc3.i386.rpm 30
Configuration des services de Cyrus Le démon principal du serveur IMAP de cyrus, master, permet de contrôler tous les services offerts par le serveur IMAP, dont les services imap, imaps, pop3, pop3s, nntp, nntps, ainsi que d autres services propres à Cyrus, dont le service Sieve, qui permet de faire du filtrage de courriel. La gestion de ces services se fait via le fichier de configuration principal de Cyrus, cyrus.conf. Il faut donc s'assurer de décommenter les lignes suivantes afin de permettre l'utilisation des services imap, imaps et sieve. # ----------------- # Activation du service imap, imaps (imap avec SSL) et sieve # ----------------- imaps cmd="imapd -s" listen="imaps" prefork=1 imap cmd="imapd" listen="imap" prefork=5 sieve cmd="timsieved" listen="sieve" prefork=0 Sieve est un langage de filtrage de courriel, et le service timsieved permet le filtrage de courriels à même leur livraison, à l'aide de script sieve. Consultez la documentation de Cyrus-IMAP si vous désirez utiliser cette fonctionnalité. Si vous désirez également utiliser les services pop3, nntp et/ou leurs versions sécurisées, simplement à décommenter les lignes relatives dans le fichier cyrus.conf. Finalement, il faut activer le service lmtp, qui sert à la livraison de courriels dans le serveur Cyrus. Comme ce dernier utilise un format propriétaire, il est nécessaire d'y livrer les courriels via son propre service lmtp. # ----------------- # Configuration de LMTP. Choisir par socket out par réseau, dépendamment de la # configuration désirée # ----------------- lmtp cmd="lmtpd -a" listen="lmtp" prefork=0 # lmtpunix cmd="lmtpd" listen="/var/lib/imap/socket/lmtp" prefork=1 Configuration du service IMAP Une fois que l'activation du service IMAP a été configurée, il faut maintenant configurer le service même, à l'aide du fichier imapd.conf. C'est à l'intérieur de celui-ci que toutes les options relatives au serveur IMAP sont configurées. Le premier élément d'importance du service IMAP est la notion d'administrateurs. Seulement les utilisateurs explicitement spécifiés ont le droit de faire la gestion des boîtes de courriels. Il faut donc s'assurer d'inclure chaque utilisateur qui aura à faire de la gestion de boîte de courriels soit inscrite, dans le paramètre admins. admins: cyrus@example.com root La liste des usagers doit être séparée par des espaces. 31
Par la suite, il faut configurer les paramètres pour l'authentification au niveau de SASL. Comme nous utilisons SASLAUTHD, il faut specificier ce mode d'authentification dans le fichier. # ----------------- # Parametres pour SASL # Note: sasl_mech_list doit avoir plain pour fonctionner! # ----------------- sasl_pwcheck_method: saslauthd sasl_mech_list: PLAIN Finalement, puisque nous voulons sécuriser les connexions à l'aide de TLS, il faut préciser l'emplacement des certificats SSL qui seront utilisés. # ----------------- # Parametres pour TLS # ----------------- tls_cert_file: /usr/share/ssl/certs/cyrus-imapd.pem tls_key_file: /usr/share/ssl/certs/cyrus-imapd.pem tls_ca_file: /usr/share/ssl/certs/ca-bundle.crt Vous pouvez ensuite redémarrer le serveur Cyrus pour y activer les nouveaux services. Gestion des boîtes de courriels Une des différences majeures avec les autres serveurs IMAP est que Cyrus utilise un système de boîtes de courriels qui doit être géré avec ses propres outils. Toutes les boîtes de courriels valides doivent être créées avant de pouvoir recevoir du courriel. La gestion des boîtes se fait donc à l aide de l outil cyradm. Pour l'utiliser, il faut également se connecter à l'aide d'un utilisateur IMAP valide, qui est également spécifié dans la liste admins du fichier imapd.conf. Même si cet utilisateur doit pouvoir s'authentifier au niveau du service IMAP, il est important que cet utilisateur ne reçoive pas de courriels. Aussi, afin d'utiliser le service cyradm, il est absolument nécessaire qu'il y ait un service IMAP d'activé sur le système. Si vous utilisez seulement le service imaps, assurer vous de spécifier le port sur lequel cyradm doit se connecter avec l'option --port [port number], comme par exemple: cyradm --user cyrus@example.com --port 993 localhost Une fois authentifié, vous serez dans l'interface de cyradm, qui permet de faire la gestion des boîtes de courriels. Pour avoir la liste des commandes, simplement à taper?. cyradm --user cyrus@example.com --port 993 localhost IMAP Password: localhost>? authenticate, login, auth authenticate to server chdir, cd change current directory createmailbox, create, cm create mailbox deleteaclmailbox, deleteacl, dam remove ACLs from mailbox deletemailbox, delete, dm delete mailbox disconnect, disc disconnect from current server exit, quit exit cyradm help,? show commands info display mailbox/server metadata listacl, lam, listaclmailbox list ACLs on mailbox listmailbox, lm list mailboxes listquota, lq list quotas on specified root listquotaroot, lqr, lqm show quota roots and quotas for mailbox mboxcfg, mboxconfig configure mailbox reconstruct reconstruct mailbox (if supported) renamemailbox, rename, renm rename (and optionally relocate) mailbox server, servername, connect show current server or connect to server setaclmailbox, sam, setacl set ACLs on mailbox setinfo set server metadata setquota, sq set quota on mailbox or resource version, ver display version info of current server xfermailbox, xfer transfer (relocate) a mailbox to a different server 32
Création de boîtes de courriels Pour créer les boîtes de courriels, simplement à utiliser la commande createmailbox, ou cm, puis le nom de la boîte à créer, précédée par user.. localhost>cm user.informations Gestion des permissions sur les boîtes de courriels Cyrus IMAP permet également une excellente gestion des droits sur les boîtes de courriels, ce qui lui permet d'être le serveur IMAP idéal pour les boîtes partagées. Il est donc possible de créer des boîtes pour lesquelles seront défini une liste d'usagers ayant des droits de d'écriture et d'autres usagers ayant seulement des droits de lecture. Pour ce faire, il faut gérer les listes d'accès des boîtes de courriels, à l'aide de la commande setaclmailbox, ou sam, qui permet l'ajout ou la suppression de droits sur les boîtes. Par exemple, pour ajouter des droits de lecture sur la boîte informations à l'usager test, il faudrait utiliser la commande suivante: localhost>sam user.informations test lrs Pour ajouter des droits d'écriture: localhost>sam user.informations test lrswip Pour plus d informations sur les listes d accès et leurs codes respectifs, consultez la page de manuel cyradm(1). Gestion des quotas sur les boîtes de courriels Il est également possible de permettre un quota sur une base individuelle pour chacune des boîtes de courriels à l aide de la commande setquota, ou sq. La valeur des quotas est en kilobytes. Il est possible de mettre des quotas sur les boîtes principales, ou encore sur les sous répertoires. Simplement à y indiquer le nom de la source du quota désiré. Par exemple, pour limiter la boîte informations à 5000 kilobytes : localhost>sq user.informations 5000 Pour limiter seulement le sous répertoire «général» de la boîte informations à 5000 kilobytes : localhost>sq user.informations.général 5000 Enfin, pour enlever toute limite sur une boîte, il faut utiliser la valeur none : localhost>sq user.informations none Gestion de boîtes de courriels Afin de supprimer des boîtes de courriels, il faut tout d abord donner les droits à l administrateur de supprimer les boîtes, puisque par défaut, personne n a les droits de supprimer des boîtes. Cependant, comme l administrateur a les pouvoirs de modifier les listes d accès sur toutes les boîtes, il faut simplement lui donner le droit de la supprimer. localhost>sam user.informations cyrus d Il sera donc possible de supprimer la boîte à l aide de la commande deletemailbox, ou dm : localhost>dm user.informations 33
Interface IMAP Web SquirrelMail Configuration Afin de pouvoir accéder aux courriels via le Web, il est possible d utiliser une interface Web IMAP. Plusieurs sont disponibles, mais nous avons choisi SquirrelMail pour sa simplicité ainsi que son grand nombre de plugiciels (plugins) disponibles qui peuvent lui ajouter beaucoup de fonctionnalités. L installation et la configuration de SquirrelMail sont très simples. Une fois le logiciel installé dans l un des répertoires d Apache, il faut seulement rouler le script conf.pl qui est dans le répertoire principal de SquirrelMail. Il sera alors possible de configurer SquirrelMail pour se connecter au serveur IMAP. Voici un exemple de configuration de SquirrelMail : /usr/share/squirrelmail/config/conf.pl SquirrelMail Configuration : Read: config.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books (LDAP) 7. Message of the Day (MOTD) 8. Plugins 9. Database D. Set pre-defined settings for specific IMAP servers C. Turn color on S Save data Q Quit Command >>2 SquirrelMail Configuration : Read: config.php (1.4.0) --------------------------------------------------------- Server Settings General ------- 1. Domain : www.exemple.com 2. Invert Time : false 3. Sendmail or SMTP : SMTP A. Update IMAP Settings : localhost:143 (other) B. Update SMTP Settings : localhost:25 R Return to Main Menu C. Turn color on S Save data Q Quit Command >>1 Une fois que ces configurations sont complétées selon votre environnement, vous pouvez peaufiner la configuration en personnalisant les options de chacun des menus. Ensuite, testez la configuration. Par défaut, sous RedHat, ceci se trouverait à l adresse suivante, supposant que vous avez installé SquirrelMail sur le serveur WWW : http://www.example.com/webmail 34
Sécurisation via SSL Afin de sécuriser les accès à SquirrelMail, il est cependant suggéré de forcer toute connexion à la section webmail via SSL, afin de ne pas transférer de noms d utilisateurs et de mots de passe en clair sur le réseau. Pour se faire, sur RedHat, modifier le fichier /etc/httpd/conf.d/squirrelmail.conf pour y ajouter les informations suivantes : <Directory "/usr/share/squirrelmail"> RewriteEngine On RewriteCond %{SERVER_PORT}!^443$ RewriteRule ^(.*)$ https://%{server_name}/webmail/$1 [L,R=303] </Directory> De cette manière, toute connexion au serveur HTTP va être automatiquement redirigée sur le port 443, ce qui forcera la connexion à être sécurisée. 35
Annexe 1 : Fichiers de configuration de SASLAUTHD /etc/sysconfig/saslauthd # ------------------- # Changer l'authentification de saslauthd a PAM # ------------------- MECH=PAM # ------------------- # Changer le répertoire du socket pour l'inclure dans le chroot de postfix # ------------------- SOCKETDIR=/var/spool/postfix/var/run/saslauthd /etc/pam.d/smtp auth required /lib/security/pam_nologin.so auth sufficient /lib/security/pam_ldap.so auth required /lib/secudity/pam_unix.so shado nullok use_first_pass account sufficient account required /lib/security/pam_ldap.so /lib/security/pam_unix.so password required /lib/security/pam_cracklib.so password required /lib/security/pam_unix.so nullok use_authok shadow session required session optional /lib/security/pam_unix.so /lib/security/pam_console.so /etc/pam.d/imap auth required /lib/security/pam_nologin.so auth sufficient /lib/security/pam_ldap.so auth required /lib/secudity/pam_unix.so shado nullok use_first_pass account sufficient account required /lib/security/pam_ldap.so /lib/security/pam_unix.so password required /lib/security/pam_cracklib.so password required /lib/security/pam_unix.so nullok use_authok shadow session required session optional /lib/security/pam_unix.so /lib/security/pam_console.so /etc/pam.d/pop3 auth required /lib/security/pam_nologin.so auth sufficient /lib/security/pam_ldap.so auth required /lib/secudity/pam_unix.so shado nullok use_first_pass account sufficient account required /lib/security/pam_ldap.so /lib/security/pam_unix.so password required /lib/security/pam_cracklib.so password required /lib/security/pam_unix.so nullok use_authok shadow session required session optional /lib/security/pam_unix.so /lib/security/pam_console.so /usr/lib/sasl2/smtpd.conf # Specifier a smtpd de s'authentifier avec saslauthd pwcheck_method:saslauthd # Donner la possibilite de seulement s'authentifier avec les mechanismes plain et login mech_list: plain login 36
Annexe 2 : Fichiers de configuration de OpenLDAP /etc/openldap/slapd.conf # -------------------- # Liste des schemas a inclure # -------------------- include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/misc.schema #-------------------- # Repertoires #-------------------- pidfile /var/run/slapd.pid argsfile /var/run/slapd.args # ------------------- # Definition de la base de donnees # ------------------- database bdb suffix "dc=example,dc=com" rootdn "cn=manager,dc=example,dc=com" rootpw {MD5}R6SDfy56p89BM5d0ZpMe/Q== directory /var/openldap-data # ------------------- # Liste des indexes a maintenir # ------------------- index objectclass index ou,mail,maillocaladdress eq,pres eq,pres,sub # ------------------- # Listes d'acces # ------------------- access to * by self write by anonymous auth by dn.base="uid=mail,dc=example,dc=com" write by * none # ------------------- # Configuration des certificats SSL # ------------------- TLSCACertificateFile /etc/openldap/ssl/cacert.pem TLSCertificateFile /etc/openldap/ssl/cacert.pem TLSCertificateKeyFile /etc/openldap/ssl/privkey.pem /etc/openldap/ldap.conf # Definition des requetes de schema URI ldaps://ldap.example.com BASE dc=example,dc=com # Configuration des certificats SSL TLS_CACERT /etc/openldap/ssl/cacert.pem TLS_CERT /etc/openldap/ssl/cacert.pem TLS_KEY /etc/openldap/ssl/privkey.pem /etc/ldap.conf # Definition des requetes de schema host ldap.example.com base dc=example,dc=com ssl yes ldap_version 3 37
# Utilisateur pour la connection au serveur LDAP binddn uid=mail,dc=testzone,dc=com bindpw query scope sub # Utilisateur pour les commandes effectuees par l'utilisateur root rootbinddn cn=manager,dc=testzone,dc=com # Définition des paramêtres de PAM # Attribut contenant le nom de l utilisateur pam_login_attribute maillocaladdress # Attribut contenant le filtre de recherche supplémentaire pam_filter objectclass=inetorgperson # Définition du type d encryption des mots de passe pam_password md5 /etc/ldap.secret # Mot de passe de l'utilisateur rootbinddn du fichier /etc/ldap.conf # IMPORTANT: Ce fichier ne doit etre lisible que par root # chmod 400 /etc/ldap.secret # chown root:root /etc/ldap.secret testering 38
Annexe 3 : Fichiers de configuration du serveur SMTP relais /etc/posfix/main.cf ------- # Répertoires ------- queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix sendmail_path = /usr/sbin/sendmail.postfix newaliases_path = /usr/bin/newaliases.postfix mailq_path = /usr/bin/mailq.postfix html_directory = /usr/share/doc/postfix-2.1.5-documentation/html manpage_directory = /usr/share/man sample_directory = /etc/postfix readme_directory = /usr/share/doc/postfix-2.1.5-documentation/readme ------- # Permissions ------- mail_owner = postfix default_privs = nobody setgid_group = postdrop ------- # Identification du système ------- myhostname = mail.exemple.com mydomain = example.com mynetworks = 10.1.0.5/24, 127.0.0.1/32 myorigin = $mydomain mydestination = $myhostname, localhost.$mydomain, localhost smtpd_banner = $myhostname ESMTP NO UCE ------- # Options de relais de courriels ------- relay_domains = hash:/etc/postfix/maps/relay_domains relay_recipient_maps = ldap:/etc/postfix/maps/relay_recipients transport_maps = hash:/etc/postfix/maps/transport ------- # Liste d'alias ------- alias_maps = hash:/etc/aliases local_recipient_maps = unix:passwd.byname $alias_maps unknown_local_recipient_reject_code = 550 #-------------------------- # Options pour Filtrage de courriels non réglementaires #-------------------------- header_checks = regexp:/etc/postfix/header_checks mime_header_checks = regexp:/etc/postfix/mime_header_checks body_checks = regexp:/etc/postfix/body_checks strict_rfc821_envelopes = yes disable_vrfy_command = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_helo_access hash:/etc/postfix/maps/access_helo, reject_unknown_sender_domain, reject_unauth_pipelining, reject_unknown_recipient_domain, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_non_fqdn_hostname, check_relay_domains - # Redirection des courriels vers amavisd-new - 39
content_filter = amavisd:[127.0.0.1]:10024 ------- # Options pour TLS ------- smtpd_use_tls = yes smtp_tls_note_starttls_offer = yes smtpd_tls_key_file = /etc/postfix/ssl/privkey.pem smtpd_tls_cert_file = /etc/postfix/ssl/cacert.pem tls_random_source = dev:/dev/urandom #-------------------------- # Options pour authentification SASL #-------------------------- smtpd_tls_auth_only = yes smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = smtpd_sasl_application_name = smtpd smtpd_sasl_pwcheck_method = saslauthd smtpd_sasl_saslauthd_path = /var/run/saslauthd broken_sasl_auth_clients = yes - # Options pour débogage - notify_classes = resource, software, bounce, delay, policy, protocol 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 /etc/postfix/master.cf # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== # -------------------- # NOTE: Changer smtpd pour smtpd -v pour avoir des journaux verbaux # -------------------- smtp inet n - n - - smtpd pickup fifo n - n 60 1 pickup cleanup unix n - n - 0 cleanup qmgr fifo n - n 300 1 qmgr rewrite unix - - n - - trivial-rewrite bounce unix - - n - 0 bounce defer unix - - n - 0 bounce trace unix - - n - 0 bounce verify unix - - n - 1 verify flush unix n - n 1000? 0 flush proxymap unix - - n - - proxymap smtp unix - - n - - smtp relay unix - - n - - smtp showq unix n - n - - showq error unix - - n - - error local unix - n n - - local virtual unix - n n - - virtual lmtp unix - - n - - lmtp anvil unix - - n - 1 anvil maildrop unix - n n - - pipe flags=drhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient} old-cyrus unix - n n - - pipe flags=r user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user} cyrus unix - n n - - pipe user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user} uucp unix - n n - - pipe flags=fqhu 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=fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient # Definition de transport pour amavisd-new amavisd unix - - - - 2 smtp -o smtp_data_done_timeout=1200 40
-o smtp_send_xforward_command=yes # Demon SMTP pour la reinjection de courriels par amavisd-new 127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o smtpd_proxy_filter= -o myhostname=av.domain.com -o smtpd_banner=av.interne.int -o mynetworks=127.0.0.0/8 -o smtpd_recipient_restrictions=permit_mynetworks,reject -o local_recipient_maps= -o receive_override_options=no_unknown_recipient_checks /etc/postfix/maps/relay_recipients version = 3 server_host = ldaps://ldap.example.com search_base = dc=example, dc=com server_port = 636 query_filter = (mail=%s) result_attribute = maillocaladdress bind = yes bind_dn = uid=mail,dc=example,dc=com bind_pw = query tls_ca_cert_file = /etc/postfix/ssl/cacert.pem tls_cert = /etc/postfix/ssl/cacert.pem tls_key = /etc/postfix/ssl/privkey.pem /etc/postfix/maps/access_helo --- # Ne pas accepter de courriels qui pretendent etre du domaine que nous hebergeons # # NOTE: Repeter pour chacun des domaines et sous-domaines heberges --- example.com REJECT Your mail server pretends to be from a domain it is not. /etc/postfix/maps/header_checks --- # Sur les serveurs de relais, ajouter une ligne comme celle-ci afin d'enlever # les adresses des serveurs d'origine de l'entete des courriels # NOTE: Repeter pour chacun des domaines et sous-domaines heberges --- /^received:.*192\.168\.1\.5/ IGNORE /etc/postfix/maps/access_helo example.com REJECT Your mail server pretends to be from a domain it is not. /etc/postfix/maps/relay_domains example.com #example.com /etc/postfix/maps/transport example.com relay:[mailint.example.com] 41
Annexe 3 : Fichiers de configuration du serveur SMTP interne /etc/posfix/main.cf ------- # Répertoires ------- queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix sendmail_path = /usr/sbin/sendmail.postfix newaliases_path = /usr/bin/newaliases.postfix mailq_path = /usr/bin/mailq.postfix html_directory = /usr/share/doc/postfix-2.1.5-documentation/html manpage_directory = /usr/share/man sample_directory = /etc/postfix readme_directory = /usr/share/doc/postfix-2.1.5-documentation/readme ------- # Permissions ------- mail_owner = postfix default_privs = nobody setgid_group = postdrop ------- # Identification du système ------- myhostname = intmail.example.com mydomain = example.com mynetworks = 127.0.0.0/8, 192.168.1.0/24, 172.16.10.0/24 myorigin = $mydomain mydestination = $myhostname, localhost.$mydomain, localhost smtpd_banner = $myhostname ESMTP NO UCE ------- # Liste d'alias ------- alias_maps = hash:/etc/aliases, ldap:/etc/postfix/maps/ldap-aliases local_recipient_maps = unix:passwd.byname $alias_maps unknown_local_recipient_reject_code = 550 ------- # Transport de couriels ------- relayhost = [172.16.10.5]:25 #-------------------------- # Options pour Filtrage de courriels non réglementaires #-------------------------- strict_rfc821_envelopes = yes disable_vrfy_command = yes smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination - # Redirection des courriels vers amavisd-new - content_filter = amavisd:[127.0.0.1]:10024 42
- # Options pour débogage - notify_classes = resource, software, bounce, delay, policy, protocol 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 /etc/posfix/master.cf # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== # -------------------- # NOTE: Changer smtpd pour smtpd -v pour avoir des journaux verbaux # -------------------- smtp inet n - n - - smtpd pickup fifo n - n 60 1 pickup cleanup unix n - n - 0 cleanup qmgr fifo n - n 300 1 qmgr rewrite unix - - n - - trivial-rewrite bounce unix - - n - 0 bounce defer unix - - n - 0 bounce trace unix - - n - 0 bounce verify unix - - n - 1 verify flush unix n - n 1000? 0 flush proxymap unix - - n - - proxymap smtp unix - - n - - smtp relay unix - - n - - smtp showq unix n - n - - showq error unix - - n - - error local unix - n n - - local virtual unix - n n - - virtual lmtp unix - - n - - lmtp anvil unix - - n - 1 anvil maildrop unix - n n - - pipe flags=drhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient} old-cyrus unix - n n - - pipe flags=r user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user} cyrus unix - n n - - pipe user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user} uucp unix - n n - - pipe flags=fqhu 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=fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient # Definition de transport pour amavisd-new amavisd unix - - - - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes # Demon SMTP pour la reinjection de courriels par amavisd-new 127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o smtpd_proxy_filter= -o myhostname=av.domain.com -o smtpd_banner=av.interne.int -o mynetworks=127.0.0.0/8 -o smtpd_recipient_restrictions=permit_mynetworks,reject -o local_recipient_maps= -o receive_override_options=no_unknown_recipient_checks 43
/etc/postfix/maps/ldap-aliases version = 3 server_host = ldaps://ldap.exemple.com search_base = dc=example, dc=com server_port = 636 query_filter = (mail=%s) result_attribute = maillocaladdress bind = yes bind_dn = uid=mail,dc=example,dc=com bind_pw = query tls_ca_cert_file = /etc/postfix/ssl/cacert.pem tls_cert = /etc/postfix/ssl/cacert.pem tls_key = /etc/postfix/ssl/privkey.pem 44
Annexe 4 : Fichiers de configuration de Cyrus IMAPD /etc/cyrus.conf # standard standalone server implementation START { # do not delete this entry! recover cmd="ctl_cyrusdb -r" # this is only necessary if using idled for IMAP IDLE # idled cmd="idled" } # UNIX sockets start with a slash and are put into /var/lib/imap/sockets SERVICES { # add or remove based on preferences # ----------------- # Activation du service imaps seulement (imap avec SSL) # ----------------- imaps cmd="imapd -s" listen="imaps" prefork=1 imap cmd="imapd" listen="imap" prefork=5 sieve cmd="timsieved" listen="sieve" prefork=0 # ----------------- # Desactivation des services pop3, nntp et notify # ----------------- # pop3 cmd="pop3d" listen="pop3" prefork=3 # pop3s cmd="pop3d -s" listen="pop3s" prefork=1 # nntp cmd="nntpd" listen="nntp" prefork=3 # nntps cmd="nntpd -s" listen="nntps" prefork=1 # notify cmd="notifyd" listen="/var/lib/imap/socket/notify" proto="udp" prefork=1 # ----------------- # Configuration de LMTP. Choisir par socket out par reseau, dependemment de la # configuration desiree # ----------------- lmtp cmd="lmtpd -a" listen="lmtp" prefork=0 # lmtpunix cmd="lmtpd" listen="/var/lib/imap/socket/lmtp" prefork=1 } EVENTS { # this is required checkpoint cmd="ctl_cyrusdb -c" period=30 } # this is only necessary if using duplicate delivery suppression, # Sieve or NNTP delprune cmd="cyr_expire -E 3" at=0400 # this is only necessary if caching TLS sessions tlsprune cmd="tls_prune" at=0400 /etc/imapd.conf # ---------------- # Configuration de base # ---------------- configdirectory: /var/lib/imap partition-default: /var/spool/imap admins: cyrus sievedir: /var/lib/imap/sieve sendmail: /usr/sbin/sendmail hashimapspool: true # ----------------- # Parametres pour SASL # Note: sasl_mech_list doit avoir plain pour fonctionner! # ----------------- sasl_pwcheck_method: saslauthd sasl_mech_list: PLAIN # ----------------- # Parametres pour TLS # ----------------- tls_cert_file: /usr/share/ssl/certs/cyrus-imapd.pem tls_key_file: /usr/share/ssl/certs/cyrus-imapd.pem 45
tls_ca_file: /usr/share/ssl/certs/ca-bundle.crt 46
Annexe 5 : Fichiers de configuration de ClamAV /etc/clamd.conf ## ## Example config file for the Clam AV daemon ## Please read the clamd.conf(5) manual before editing this file. ## # Comment or remove the line below. #Example # Uncomment this option to enable logging. # LogFile must be writable for the user running daemon. # A full path is required. #LogFile /var/log/clamd.log # By default the log file is locked for writing - the lock protects against # running clamd multiple times (if want to run another clamd, please # copy the configuration file, change the LogFile variable, and run # the daemon with --config-file option). # This option disables log file locking. #LogFileUnlock # Maximal size of the log file. # Value of 0 disables the limit. # You may use 'M' or 'm' for megabytes (1M = 1m = 1048576 bytes) # and 'K' or 'k' for kilobytes (1K = 1k = 1024 bytes). To specify the size # in bytes just don't use modifiers. # Default: 1M #LogFileMaxSize 2M # Log time with each message. LogTime # Also log clean files. Useful in debugging but drastically increases the # log size. #LogClean # Use system logger (can work together with LogFile). LogSyslog # Specify the type of syslog messages - please refer to 'man syslog' # for facility names. # Default: LOG_LOCAL6 LogFacility LOG_MAIL # Enable verbose logging. #LogVerbose # This option allows you to save a process identifier of the listening # daemon (main thread). PidFile /var/run/clamav/clamd.pid # Optional path to the global temporary directory. # Default: system specific (usually /tmp or /var/tmp). TemporaryDirectory /var/tmp # Path to the database directory. # Default: hardcoded (depends on installation options) DatabaseDirectory /var/lib/clamav # The daemon works in a local OR a network mode. Due to security reasons we # recommend the local mode. # Path to a local socket file the daemon will listen on. LocalSocket /var/run/clamav/clamd # Remove stale socket after unclean shutdown. 47
FixStaleSocket # TCP port address. #TCPSocket 3310 # TCP address. # By default we bind to INADDR_ANY, probably not wise. # Enable the following to provide some degree of protection # from the outside world. #TCPAddr 127.0.0.1 # Maximum length the queue of pending connections may grow to. # Default: 15 #MaxConnectionQueueLength 30 # Close the connection if this limit is exceeded. # Default: 10M #StreamMaxLength 20M # Maximal number of threads running at the same time. # Default: 10 #MaxThreads 20 # Waiting for data from a client socket will timeout after this time (seconds). # Value of 0 disables the timeout. # Default: 120 #ReadTimeout 300 # Waiting for a new job will timeout after this time (seconds). # Default: 30 #IdleTimeout 60 # Maximal depth directories are scanned at. # Default: 15 #MaxDirectoryRecursion 20 # Follow directory symlinks. #FollowDirectorySymlinks # Follow regular file symlinks. #FollowFileSymlinks # Perform internal sanity check (database integrity and freshness). # Default: 1800 (30 min) #SelfCheck 600 # Execute a command when virus is found. In the command string %v will # be replaced by a virus name. #VirusEvent /usr/local/bin/send_sms 123456789 "VIRUS ALERT: %v" # Run as a selected user (clamd must be started by root). User clamav # Initialize supplementary group access (clamd must be started by root). AllowSupplementaryGroups # Don't fork into background. #Foreground # Enable debug messages in libclamav. #Debug # Do not remove temporary files (for debug purposes). #LeaveTemporaryFiles # By default clamd uses scan options recommended by libclamav. This option # disables recommended options and allows you to enable selected ones below. # DO NOT TOUCH IT unless you know what you are doing. 48
#DisableDefaultScanOptions ## ## Executable files ## # PE stands for Portable Executable - it's an executable file format used # in all 32-bit versions of Windows operating systems. This option allows # ClamAV to perform a deeper analysis of executable files and it's also # required for decompression of popular executable packers such as UPX, FSG, # and Petite. # Default: enabled #ScanPE # With this option clamav will try to detect broken executables and mark # them as Broken.Executable #DetectBrokenExecutables ## ## Documents ## # This option enables scanning of Microsoft Office document macros. # Default: enabled #ScanOLE2 ## ## Mail files ## # Enable internal e-mail scanner. # Default: enabled #ScanMail # If an email contains URLs ClamAV can download and scan them. # WARNING: This option may open your system to a DoS attack. # Never use it on loaded servers. #MailFollowURLs ## ## HTML ## # Perform HTML normalisation and decryption of MS Script Encoder code. # Default: enabled #ScanHTML ## ## Archives ## # ClamAV can scan within archives and compressed files. # Default: enabled #ScanArchive # Due to license issues libclamav does not support RAR 3.0 archives (only the # old 2.0 format is supported). Because some users report stability problems # with unrarlib it's disabled by default and you must uncomment the directive # below to enable RAR 2.0 support. #ScanRAR # The options below protect your system against Denial of Service attacks # using archive bombs. # Files in archives larger than this limit won't be scanned. # Value of 0 disables the limit. # Default: 10M #ArchiveMaxFileSize 15M # Nested archives are scanned recursively, e.g. if a Zip archive contains a RAR # file, all files within it will also be scanned. This options specifies how # deep the process should be continued. # Value of 0 disables the limit. 49
# Default: 5 #ArchiveMaxRecursion 8 # Number of files to be scanned within an archive. # Value of 0 disables the limit. # Default: 1000 #ArchiveMaxFiles 1500 # If a file in an archive is compressed more than ArchiveMaxCompressionRatio # times it will be marked as a virus (Oversized.ArchiveType, e.g. Oversized.Zip) # Value of 0 disables the limit. # Default: 250 #ArchiveMaxCompressionRatio 300 # Use slower but memory efficient decompression algorithm. # only affects the bzip2 decompressor. #ArchiveLimitMemoryUsage # Mark encrypted archives as viruses (Encrypted.Zip, Encrypted.RAR). #ArchiveBlockEncrypted # Mark archives as viruses if ArchiveMaxFiles, ArchiveMaxFileSize, or # ArchiveMaxRecursion limit is reached. #ArchiveBlockMax ## ## Clamuko settings ## WARNING: This is experimental software. It is very likely it will hang ## up your system!!! ## # Enable Clamuko. Dazuko (/dev/dazuko) must be configured and running. #ClamukoScanOnAccess # Set access mask for Clamuko. #ClamukoScanOnOpen #ClamukoScanOnClose #ClamukoScanOnExec # Set the include paths (all files in them will be scanned). You can have # multiple ClamukoIncludePath directives but each directory must be added # in a seperate line. #ClamukoIncludePath /home #ClamukoIncludePath /students # Set the exclude paths. All subdirectories are also excluded. #ClamukoExcludePath /home/guru # Don't scan files larger than ClamukoMaxFileSize # Value of 0 disables the limit. # Default: 5M #ClamukoMaxFileSize 10M /etc/freshclam.conf ## ## Example config file for freshclam ## Please read the freshclam.conf(5) manual before editing this file. ## This file may be optionally merged with clamd.conf. ## # Comment or remove the line below. #Example # Path to the database directory. # WARNING: It must match clamd.conf's directive! # Default: hardcoded (depends on installation options) DatabaseDirectory /var/lib/clamav 50
# Path to the log file (make sure it has proper permissions) UpdateLogFile /var/log/freshclam.log # Enable verbose logging. #LogVerbose # Use system logger (can work together with UpdateLogFile). #LogSyslog # Specify the type of syslog messages - please refer to 'man syslog' # for facility names. # Default: LOG_LOCAL6 #LogFacility LOG_MAIL # This option allows you to save the process identifier of the daemon PidFile /var/run/clamav/freshclam.pid # By default when started freshclam drops privileges and switches to the # "clamav" user. This directive allows you to change the database owner. # Default: clamav (may depend on installation options) DatabaseOwner clamav # Use DNS to verify virus database version. Freshclam uses DNS TXT records # to verify database and software versions. We highly recommend enabling # this option. DNSDatabaseInfo current.cvd.clamav.net # Uncomment the following line and replace XY with your country # code. See http://www.iana.org/cctld/cctld-whois.htm for the full list. # Default: There is no default, which results in an error when running freshclam #DatabaseMirror db.xy.clamav.net # database.clamav.net is a round-robin record which points to our most # reliable mirrors. It's used as a fall back in case db.xy.clamav.net is # not working. DO NOT TOUCH the following line unless you know what you # are doing. DatabaseMirror database.clamav.net # How many attempts to make before giving up. # Default: 3 (per mirror) #MaxAttempts 5 # Number of database checks per day. # Default: 12 (every two hours) #Checks 24 # Proxy settings #HTTPProxyServer myproxy.com #HTTPProxyPort 1234 #HTTPProxyUsername myusername #HTTPProxyPassword mypass # Send the RELOAD command to clamd. #NotifyClamd # By default it uses the hardcoded configuration file but you can force an # another one. #NotifyClamd /config/file/path # Run command after successful database update. #OnUpdateExecute command # Run command when database update process fails. #OnErrorExecute command 51
Annexe 6 : Fichiers de configuration pour SpamAssassin /etc/mail/spamassassin/local.cf # Configurer le fichier de whitelist automatique auto_whitelist_path /var/amavis/.spamassassin/auto-whitelist.db auto_whitelist_file_mode 0700 # Configurer le fichier de la base de donnée bayes bayes_path /var/amavis/bayes.db. bayes_file_mode 0700 bayes_use_hapaxes 1 # Configurer l'utilisation de Razor2 use_razor2 1 razor_timeout 10 52
Annexe 7 : Fichiers de configuration pour amavisd-new /etc/amavisd.conf use strict; $max_servers = 2; $daemon_user = 'amavis'; $daemon_group = 'amavis'; # number of pre-forked children (2..15 is common) # (no default; customary: vscan or amavis) # (no default; customary: vscan or amavis) -- # Ajouter le domaine principal hébergé -- $mydomain = 'testzone.com'; # a convenient default for other settings $MYHOME = '/var/lib/amavis'; # a convenient default for other settings $TEMPBASE = "$MYHOME/tmp"; # working directory, needs to be created manually $ENV{TMPDIR} = $TEMPBASE; # environment variable TMPDIR $QUARANTINEDIR = '/var/virusmails'; -- # Option pour le CHROOT -- # $daemon_chroot_dir = $MYHOME; # chroot directory or undef # $db_home = "$MYHOME/db"; # $helpers_home = "$MYHOME/var"; # prefer $MYHOME clean and owned by root? # $pid_file = "$MYHOME/var/amavisd.pid"; # $lock_file = "$MYHOME/var/amavisd.lock"; #NOTE: create directories $MYHOME/tmp, $MYHOME/var, $MYHOME/db manually -- # Liste des domaines hébergés -- @local_domains_maps = ( [".$mydomain"] ); # @mynetworks = qw( 127.0.0.0/8 ::1 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 ); -- # Configuration des logs -- $log_level = 0; # verbosity 0..5 $log_recip_templ = undef; # disable by-recipient level-0 log entries $DO_SYSLOG = 1; # log via syslogd (preferred) $SYSLOG_LEVEL = 'mail.debug'; $enable_db = 1; $enable_global_cache = 1; # enable use of BerkeleyDB/libdb (SNMP and nanny) # enable use of libdb-based cache if $enable_db=1 $inet_socket_port = 10024; # listen on this local TCP port(s) (see $protocol) # $unix_socketname = "$MYHOME/amavisd.sock"; # when using sendmail milter -- # Options de configuration pour SpamAssassin -- $sa_tag_level_deflt = 2.0; # add spam info headers if at, or above that level $sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level $sa_kill_level_deflt = 6.31; # triggers spam evasive actions $sa_dsn_cutoff_level = 10; # spam level beyond which a DSN is not sent $sa_mail_body_size_limit = 200*1024; # don't waste time on SA if mail is larger $sa_local_tests_only = 0; $sa_auto_whitelist = 1; # only tests which do not require internet access? # turn on AWL in SA 2.63 or older (irrelevant # for SA 3.0, cf option is 'use_auto_whitelist') -- # Configuration des courriels d'avis d'amavisd-new -- $virus_admin = "postmaster\@$mydomain"; # notifications recip. $mailfrom_notify_admin = "postmaster\@$mydomain"; # notifications sender $mailfrom_notify_recip = "postmaster\@$mydomain"; # notifications sender $mailfrom_notify_spamadmin = "postmaster\@$mydomain"; # notifications sender $mailfrom_to_quarantine = ''; # null return path; uses original sender if undef @addr_extension_virus_maps = ('virus'); @addr_extension_spam_maps = ('spam'); @addr_extension_banned_maps = ('banned'); @addr_extension_bad_header_maps = ('badh'); # $recipient_delimiter = '+'; # undef disables address extensions altogether # when enabling addr extensions do also Postfix/main.cf: recipient_delimiter=+ 53
-- # Configuration des utilitaires extra nécéssaires au filtrage. # Commenter ceux qui ne sont pas disponibles -- $path = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/usr/bin:/bin'; $file = 'file'; # file(1) utility; use recent versions $gzip = 'gzip'; $bzip2 = 'bzip2'; $lzop = 'lzop'; $rpm2cpio = ['rpm2cpio.pl','rpm2cpio']; $cabextract = 'cabextract'; $uncompress = ['uncompress', 'gzip -d', 'zcat']; $unfreeze = ['unfreeze', 'freeze -d', 'melt', 'fcat']; $arc = ['nomarch', 'arc']; $unarj = ['arj', 'unarj']; $unrar = ['rar', 'unrar']; $zoo = 'zoo'; $lha = 'lha'; $cpio = ['gcpio','cpio']; $ar = 'ar'; $dspam = 'dspam'; $MAXLEVELS = 14; $MAXFILES = 1500; $MIN_EXPANSION_QUOTA = 100*1024; # bytes (default undef, not enforced) $MAX_EXPANSION_QUOTA = 300*1024*1024; # bytes (default undef, not enforced) $sa_spam_subject_tag = '***SPAM*** '; $defang_virus = 1; # MIME-wrap passed infected mail $defang_banned = 1; # MIME-wrap passed mail containing banned name -- # Configuration de l'identité du serveur -- $myhostname = 'popeye.testzone.com'; # must be a fully-qualified domain name! $notify_method = 'smtp:[127.0.0.1]:10025'; $forward_method = 'smtp:[127.0.0.1]:10025'; # set to undef with milter! # $final_virus_destiny = D_DISCARD; # $final_banned_destiny = D_BOUNCE; # $final_spam_destiny = D_BOUNCE; # $final_bad_header_destiny = D_PASS; # SOME OTHER VARIABLES WORTH CONSIDERING (see amavisd.conf-default for all) # $warnbadhsender, # $warnvirusrecip, $warnbannedrecip, $warnbadhrecip, (or @warn*recip_maps) # # @bypass_virus_checks_maps, @bypass_spam_checks_maps, # @bypass_banned_checks_maps, @bypass_header_checks_maps, # # @virus_lovers_maps, @spam_lovers_maps, # @banned_files_lovers_maps, @bad_header_lovers_maps, # # @blacklist_sender_maps, @score_sender_maps, # # $virus_quarantine_to, $banned_quarantine_to, # $bad_header_quarantine_to, $spam_quarantine_to, # # $defang_bad_header, $defang_undecipherable, $defang_spam # REMAINING IMPORTANT VARIABLES ARE LISTED HERE BECAUSE OF LONGER ASSIGNMENTS @viruses_that_fake_sender_maps = (new_re( [qr'\beicar\b'i => 0], # av test pattern name [qr'^(wm97 OF97 Joke\.)'i => 0], # adjust names to match your AV scanner [qr/.*/ => 1], # true for everything else )); @keep_decoded_original_maps = (new_re( # qr'^mail$', # retain full original message for virus checking (can be slow) qr'^mail-undecipherable$', # recheck full mail if it contains undecipherables qr'^(ascii(?! cpio) text uuencoded xxencoded binhex)'i, # qr'^zip archive data', # don't trust Archive::Zip )); 54
# for $banned_namepath_re, a new-style of banned table, see amavisd.conf-sample $banned_filename_re = new_re( # qr'^undecipherable$', # is or contains any undecipherable components # block certain double extensions anywhere in the base name qr'\.[^./]*\.(exe vbs pif scr bat cmd com cpl dll)\.?$'i, # qr'[{}]', # curly braces in names (serve as Class ID extensions - CLSID) qr'^application/x-msdownload$'i, qr'^application/x-msdos-program$'i, qr'^application/hta$'i, # block these MIME types # qr'^message/partial$'i, qr'^message/external-body$'i, # rfc2046 MIME types # [ qr'^\.(z gz bz2)$' => 0 ], # allow any type in Unix-compressed [ qr'^\.(rpm cpio tar)$' => 0 ], # allow any type in Unix archives # [ qr'^\.(zip rar arc arj zoo)$'=> 0 ], # allow any type within such archives qr'.\.(exe vbs pif scr bat cmd com cpl)$'i, # banned extension - basic # qr'.\.(ade adp app bas bat chm cmd com cpl crt exe fxp hlp hta inf ins isp # js jse lnk mda mdb mde mdw mdt mdz msc msi msp mst ops pcd pif prg # reg scr sct shb shs vb vbe vbs wsc wsf wsh)$'ix, # banned ext - long # qr'.\.(mim b64 bhx hqx xxe uu uue)$'i, # banned extension - WinZip vulnerab. qr'^\.(exe-ms)$', # banned file(1) types # qr'^\.(exe lha tnef cab dll)$', # banned file(1) types ); # See http://support.microsoft.com/default.aspx?scid=kb;en-us;q262631 # and http://www.cknow.com/vtutor/vtextensions.htm # ENVELOPE SENDER SOFT-WHITELISTING / SOFT-BLACKLISTING @score_sender_maps = ({ # a by-recipient hash lookup table, # results from all matching recipient tables are summed # ## per-recipient personal tables (NOTE: positive: black, negative: white) # 'user1@example.com' => [{'bla-mobile.press@example.com' => 10.0}], # 'user3@example.com' => [{'.ebay.com' => -3.0}], # 'user4@example.com' => [{'cleargreen@cleargreen.com' => -7.0, # '.cleargreen.com' => -5.0}], ## site-wide opinions about senders (the '.' matches any recipient) '.' => [ # the _first_ matching sender determines the score boost new_re( # regexp-type lookup table, just happens to be all soft-blacklist [qr'^(bulkmail offers cheapbenefits earnmoney foryou)@'i => 5.0], [qr'^(greatcasino investments lose_weight_today market\.alert)@'i=> 5.0], [qr'^(money2you MyGreenCard new\.tld\.registry opt-out opt-in)@'i=> 5.0], [qr'^(optin saveonlsmoking2002k specialoffer specialoffers)@'i => 5.0], [qr'^(stockalert stopsnoring wantsome workathome yesitsfree)@'i => 5.0], [qr'^(your_friend greatoffers)@'i => 5.0], [qr'^(inkjetplanet marketopt MakeMoney)\d*@'i => 5.0], ), # read_hash("/var/amavis/sender_scores_sitewide"), { # a hash-type lookup table (associative array) 'nobody@cert.org' => -3.0, 'cert-advisory@us-cert.gov' => -3.0, 'owner-alert@iss.net' => -3.0, 'slashdot@slashdot.org' => -3.0, 'bugtraq@securityfocus.com' => -3.0, 'ntbugtraq@listserv.ntbugtraq.com' => -3.0, 'security-alerts@linuxsecurity.com' => -3.0, 'mailman-announce-admin@python.org' => -3.0, 'amavis-user-admin@lists.sourceforge.net'=> -3.0, 'notification-return@lists.sophos.com' => -3.0, 'owner-postfix-users@postfix.org' => -3.0, 'owner-postfix-announce@postfix.org' => -3.0, 'owner-sendmail-announce@lists.sendmail.org' => -3.0, 'sendmail-announce-request@lists.sendmail.org' => -3.0, 'donotreply@sendmail.org' => -3.0, 'ca+envelope@sendmail.org' => -3.0, 'noreply@freshmeat.net' => -3.0, 'owner-technews@postel.acm.org' => -3.0, 55
'ietf-123-owner@loki.ietf.org' => -3.0, 'cvs-commits-list-admin@gnome.org' => -3.0, 'rt-users-admin@lists.fsck.com' => -3.0, 'clp-request@comp.nus.edu.sg' => -3.0, 'surveys-errors@lists.nua.ie' => -3.0, 'emailnews@genomeweb.com' => -5.0, 'yahoo-dev-null@yahoo-inc.com' => -3.0, 'returns.groups.yahoo.com' => -3.0, 'clusternews@linuxnetworx.com' => -3.0, lc('lvs-users-admin@linuxvirtualserver.org') => -3.0, lc('owner-textbreakingnews@cnnimail12.cnn.com') => -5.0, # soft-blacklisting (positive score) 'sender@example.net' => 3.0, '.example.net' => 1.0, }, ], # end of site-wide tables }); @av_scanners = ( ['ClamAV-clamd', \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"], qr/\bok$/, qr/\bfound$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ], # # NOTE: run clamd under the same user as amavisd; match the socket # # name (LocalSocket) in clamav.conf to the socket name in this entry # # When running chrooted one may prefer: ["CONTSCAN {}\n","$myhome/clamd"], # ### http://www.clamav.net/ and CPAN (memory-hungry! clamd is preferred) # ['Mail::ClamAV', \&ask_clamav, "*", [0], [1], qr/^infected: (.+)/], ); @av_scanners_backup = ( ); 1; # insure a defined return 56
Références Sites web: http://www.openssl.org Information sur la création de certificats, les algorithmes d'encryption http://www.openldap.org Site officiel d'openldap. guide d'administration de serveurs OpenLDAP http://www.apache.org Site officiel du serveur web Apache. Information de référence http://www.php.net Manuel et exemples de scripts et de fonction du language PHP. Documentation de référence http://www.postfix.org http://www.securitysage.com/guides/ Excellents guides sur Postfix avec SASL, TLS et aussi de filtrage de courriels http://www.seaglass.com/postfix/ Excellents FAQ et bonnes informations sur Postfix Livres: LDAP System Administration O'Reilly, ISBN: 1565924916 Postfix : The Definitive Guide O'Reilly, ISBN: 0596002122 Listes de discussions : postfix-users@postfix.org cyrus-sasl@lists.andrew.cmu.edu info-cyrus@lists.andrew.cmu.edu IRC : irc.freenode.com #postfix #ldap #cyrus 57