Installation d’un serveur mail brique par brique… (OpenLDAP, Postfix, Cyrus-imap, TLS, SASL, Spamassassin, Amavis, etc…)
Postfix, Cyrus, OpenLdap, Spamassassin, Amavis, etc… sont des logiciels qui ont largement fait leurs preuves et qui, assemblés, constituent un serveur de mails robuste et performant. Je me suis amusé, le week-end dernier, à assembler et configurer tous ces composants sur une distribution Debian Etch pour construire un tel serveur, en ajoutant en prime un poil de sécurité grâce à SASL et TLS. La tâche est loin d’être insurmontable, à condition de prendre les choses méthodiquement et calmement. Dans le bon ordre, les briques s’assemblent à merveille et c’est un vrai bonheur à construire.
Nous allons voir, dans cet article, la mise en place d’une telle solution. Comme pour les précédents articles dédiés à Zimbra et OBM, nous allons réutiliser ma machine “labo” fraichement réinstallée avec une Debian Etch, tout ce qu’il y a de plus classique.
1ère brique : Le serveur LDAP
Nous allons commencer par installer et configurer un petit annuaire LDAP de test. Il est bien entendu tout à fait possible de se baser sur un annuaire existant. Nous n’employerons par la suite que 3 champs de la classe InetOrgPerson pour authentifier les utilisateurs et orienter la distribution du courrier. A savoir : uid, userPassword et mail. Il également possible d’utiliser d’autres champs en adaptant la configuration.
Allez ! C’est parti !
# aptitude install slapd ldap-utils
Le fichier de configuration de openLDAP est /etc/ldap/slapd.conf. Après l’installation, il devrait avoir la tête suivante :
/etc/ldap/slapd.conf
# Allow LDAPv2 binds allow bind_v2 # Schema and objectClass definitions include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema # Where the pid file is put. The init.d script # will not stop the server if you change this. pidfile /var/run/slapd/slapd.pid # List of arguments that were passed to the server argsfile /var/run/slapd/slapd.args # Read slapd.conf(5) for possible values loglevel 0 # Where the dynamically loaded modules are stored modulepath /usr/lib/ldap moduleload back_bdb # The maximum number of entries that is returned for a search operation sizelimit 500 # The tool-threads parameter sets the actual amount of cpu's that is used # for indexing. tool-threads 1 ####################################################################### # Specific Backend Directives for bdb: # Backend specific directives apply to this backend until another # 'backend' directive occurs backend bdb checkpoint 512 30 ####################################################################### # Specific Directives for database #1, of type bdb: # Database specific directives apply to this databasse until another # 'database' directive occurs database bdb # The base of your directory in database #1 suffix "dc=linet,dc=jopa,dc=fr" # Where the database file are physically stored for database #1 directory "/var/lib/ldap" # For the Debian package we use 2MB as default but be sure to update this # value if you have plenty of RAM dbconfig set_cachesize 0 2097152 0 # Number of objects that can be locked at the same time. dbconfig set_lk_max_objects 1500 # Number of locks (both requested and granted) dbconfig set_lk_max_locks 1500 # Number of lockers dbconfig set_lk_max_lockers 1500 # Indexing options for database #1 index objectClass eq # Save the time that the entry gets modified, for database #1 lastmod on # The userPassword by default can be changed # by the entry owning it if they are authenticated. # Others should not be able to see it, except the # admin entry below # These access lines apply to database #1 only access to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=linet,dc=jopa,dc=fr" write by anonymous auth by self write by * none # Ensure read access to the base for things like # supportedSASLMechanisms. Without this you may # have problems with SASL not knowing what # mechanisms are available and the like. # Note that this is covered by the 'access to *' # ACL below too but if you change that as people # are wont to do you'll still need this if you # want SASL (and possible other things) to work # happily. access to dn.base="" by * read # The admin dn has full write access, everyone else # can read everything. access to * by dn="cn=admin,dc=linet,dc=jopa,dc=fr" write by * none # by * read |
Il est plus “sécure” de supprimer l’autorisation de lecture pour les utilisateurs non authentifiés en remplaçant “by * read” par “by * none” dans la dernière ACL.
Pour la partie cliente du serveur ldap (utile pour ldapsearch par exemple), c’est le fichier /etc/ldap/ldap.conf.
/etc/ldap/ldap.conf
# $OpenLDAP: pkg/ldap/libraries/libldap/ldap.conf,v 1.9 2000/09/04 19:57:01 kurt Exp $ # # LDAP Defaults # # See ldap.conf(5) for details # This file should be world readable but not world writable. BASE dc=linet, dc=jopa, dc=fr URI ldap://localhost #SIZELIMIT 12 #TIMELIMIT 15 #DEREF never |
Le serveur LDAP étant opérationnel, nous ajoutons quelques utilisateurs à l’annuaire. Créons un petit fichier LDIF contenant 4 utilisateurs. L’utilisateur Cyrus servira plus tard pour administrer les boites Imap.
Utilisateurs.ldif
dn: uid=cyrus,dc=linet,dc=jopa,dc=fr uid: cyrus cn: Administrateur Cyrus sn: Cyrus userPassword: MonMotDePasseSecret objectClass: inetOrgPerson dn: uid=joel,dc=linet,dc=jopa,dc=fr uid: joel cn: Joël PASTRE sn: PASTRE mail:joel@linet.jopa.fr userPassword: LeMotDePasseDeJoel objectClass: inetOrgPerson dn: uid=jean,dc=linet,dc=jopa,dc=fr uid: jean cn: Jean DUPONT sn: DUPONT mail:jean@linet.jopa.fr userPassword: LeMotDePasseDeJean objectClass: inetOrgPerson dn: uid=jojo,dc=linet,dc=jopa,dc=fr uid: jojo cn: jojo LAAAPIN sn: LAAAPIN mail:jojo@linet.jopa.fr userPassword: laaaaaaaapin objectClass: inetOrgPerson |
On ajoute tout ça à l’annuaire :
# ldapadd -x -f utilisateurs.ldif -D “cn=admin,dc=linet,dc=jopa,dc=fr” -w MotDePasseAdminLDAP
adding new entry “uid=cyrus,dc=linet,dc=jopa,dc=fr”
adding new entry “uid=joel,dc=linet,dc=jopa,dc=fr”
adding new entry “uid=jean,dc=linet,dc=jopa,dc=fr”
adding new entry “uid=jojo,dc=linet,dc=jopa,dc=fr”
Voilà pour l’annuaire… penchons nous maintenant sur l’authentification…
2ème brique : SASL
# aptitude install sasl2-bin
Le fichier : /etc/saslauthd.conf (à créer de toute pièce) va permettre à saslauthd d’utiliser l’annuaire ldap comme base d’utilisateurs et de mots de passe.
/etc/saslauthd.conf
# SERVEUR LDAP LDAP_SERVERS: ldap://localhost # DOMAINE LDAP_DEFAULT_DOMAIN: linet.jopa.fr LDAP_TIMEOUT: 10 LDAP_TIME_LIMIT: 10 LDAP_CACHE_TTL: 30 LDAP_CACHE_MEM: 32768 # VERSION LDAP LDAP_VERSION: 3 # SASL Pour l'accès au serveur LDAP_USE_SASL: no # Méthode d'authentification (bind / custom / fastbind) LDAP_AUTH_METHOD: bind # Utilisateur utilisé pour la connexion - Si vide = Anonyme LDAP_BIND_DN: cn=admin,dc=linet,dc=jopa,dc=fr # Et le mot de passe LDAP_BIND_PW: MotDePasseAdminLDAP # Base de départ de la recherche LDAP_SEARCH_BASE: dc=linet,dc=jopa,dc=fr # Et profondeur (sub / one / base ) LDAP_SCOPE: sub # Filtre de recherche : uid dans notre cas LDAP_FILTER: uid=%u # Et nom du champ contenant le mot de passe LDAP_PASSWORD_ATTR: userPassword |
Attention : Ce fichier est créé par défaut en lecture pour tout le monde sous Debian. Il est impératif de changer ses droit pour n’autoriser la lecture qu’à l’utilisateur root.
# chmod 600 /etc/saslauthd.conf
L’activation de l’authentification sasl et l’utilisation de se fichier se font par modification de /etc/default/saslauthd.
Il faut bien penser à activer le démon (START=yes) et spécifier la méthode d’authentification utilisée par saslauthd (ldap dans mon cas).
/etc/default/saslauthd
# # Settings for saslauthd daemon # # Should saslauthd run automatically on startup? (default: no) ## ICI : démarrage automatique du démon START=yes # Which authentication mechanisms should saslauthd use? (default: pam) # # Available options in this Debian package: # getpwent -- use the getpwent() library function # kerberos5 -- use Kerberos 5 # pam -- use PAM # rimap -- use a remote IMAP server # shadow -- use the local shadow password file # sasldb -- use the local sasldb database file # ldap -- use LDAP (configuration is in /etc/saslauthd.conf) # # Only one option may be used at a time. See the saslauthd man page # for more information. # # Example: MECHANISMS="pam" # ICI : Méthode d'authentification et Paramètre : Fichier saslauthd.conf MECHANISMS="ldap" PARAMS="-O /etc/saslauthd.conf" # Additional options for this mechanism. (default: none) # See the saslauthd man page for information about mech-specific options. MECH_OPTIONS="" # How many saslauthd processes should we run? (default: 5) # A value of 0 will fork a new process for each connection. THREADS=5 # Other options (default: -c) # See the saslauthd man page for information about these options. # # Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd" # Note: See /usr/share/doc/sasl2-bin/README.Debian OPTIONS="-c" |
Démarrage du démon saslauthd
: # /etc/init.d/saslauthd start
Et test :
# testsaslauthd -u jean -p LeMotDePasseDeJean
0: OK “Success.”
# testsaslauthd -u jojo -p laaaaaaaapin
0: OK “Success.”
Bon ! Une de plus !!!
3ème brique : Cyrus
Nous voilà capable d’authentifier nos utilisateurs, nous allons pouvoir leur créer des boites imap (et pop accessoirement). Installons donc cyrus-imap, ses outils d’administrations, sa doc et tous les paquets nécessaires à l’authentifications sasl.
# aptitude install cyrus-admin-2.2 cyrus-clients-2.2 cyrus-imapd-2.2 cyrus-pop3d-2.2 cyrus-sasl2-doc cyrus-doc-2.2
# aptitude install libauthen-sasl-cyrus-perl libcyrus-imap-perl22 libsasl2 libauthen-sasl-perl libsasl2-modules
Le fichier de configuration principal est /etc/imapd.conf . Il y a juste quelques bricoles à changer :
/etc/imapd.conf
- admins: cyrus ( à décommenter : Nom de l’administrateur du serveur imapd… Si si ! C’est bien l’utilisateur cyrus que nous avons inséré dans l’annuaire),
- sasl_pwcheck_method: saslauthd (à modifier pour préciser la méthode de gestion des mots de passe),
- sasl_mech_list : PLAIN (à décommenter).
# /etc/init.d/cyrus2.2 restart
Si tout est bon, la commande : cyradm –user cyrus localhost devrait permettre la connexion au shell d’administration imap et la création des boites. Afin de garantir un nommage unique et cohérent, nous utiliserons tout simplement comme nom, l’uid de leur propriétaire.
# cyradm –user cyrus localhost
Password:
localhost> cm user.joel
localhost> cm user.jean
localhost> cm user.jojo
localhost> lm
user.jean (HasNoChildren) user.jojo (HasNoChildren)
user.joel (HasNoChildren)
localhost> quit
Ca….C’est fait.. Il est dès à présent possible de se connecter au serveur Imap avec un client de messagerie. Bon d’accord, l’intérêt est très limité vu qu’aucun agent de distribution n’est configuré; si ce n’est pour valider le travail réalisé jusque là…
Il manque encore une brique à notre projet de maçonnerie afin de pouvoir envoyer et reçevoir des mails : C’est Postfix bien entendu…
4ème brique : Postfix
Postfix va identifier les destinataires de mails reçus en interrogeant directement l’annuaire LDAP.
Comme nous voulons que nos utilisateurs nomades puissent envoyer des mails via ce serveur, même s’ils sont à l’extérieur de mon réseau privé, nous les authentifierons sur le serveur smtp grâce à saslauthd … une fois de plus.
# aptitude install postfix postfix-tls postfix-ldap
Sur une install Debian toute neuve, aptitude détecte un conflit avec Exim4 et propose de le désinstaller. C’est bien ce qu’il faut faire !
L’installateur demande le type de serveur et le domaine de courrier. Choisissons une configuration de type “Site Internet” et dans ce cas précis, nous travaillons sur le domaine “linet.jopa.fr”. Les réponses à ces questions n’ont pas ici, une grande importance : Nous reprendrons manuellement la configuration plus loin.
Pour que la distribution locale du courrier soit assurée par Cyrus-Imap, nous devons déclarer Cyrus comme agent de distribution. Ceci se fait par l’intermédiaire du fichier /etc/postfix/master.cf en ajoutant une ligne en fin de fichier :
/etc/postfix/master.cf
cyrus unix - n n - - pipe flags=R user=cyrus argv=/usr/sbin/cyrdeliver -e -m ${extension} ${user}
Le suite se passe dans le fichier principal de configuration de postfix : /etc/postfix/main.cf
/etc/postfix/main.cf
# See /usr/share/postfix/main.cf.dist for a commented, more complete version # Debian specific: Specifying a file name will cause the first # line of that file to be used as the name. The Debian default # is /etc/mailname. myorigin = /etc/mailname smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no # appending .domain is the MUA's job. append_dot_mydomain = no # Uncomment the next line to generate "delayed mail" warnings #delay_warning_time = 4h # PARAMETRES TLS : Configuré automatiquement par postfix-tls smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for # information on enabling SSL in the smtp client. myhostname = labo.linet.jopa.fr # PARAMETRES LDAP mailbox_maps = ldap:/etc/postfix/ldap-accounts.cf alias_maps = ldap:/etc/postfix/ldap-aliases.cf mydestination = linet.jopa.fr, labo.linet.jopa.fr, localhost.linet.jopa.fr, localhost relayhost = # On notera que seul localhost est identifié. Les autres clients devront s'authentifier mynetworks = 127.0.0.0/8 # Agent de transport local : CYRUS local_transport = cyrus recipient_delimiter = + # Restrictions smtpd_recipient_restrictions = reject_unauth_pipelining, reject_non_fqdn_recipient, reject_unauth_destination, permit_mynetworks, permit_sasl_authenticated smtpd_sender_restrictions = reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit_sasl_authenticated, permit_mynetworks # AUTHENTIFICATION SASL smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = inet_interfaces = all |
Il faut particulièrement être attentif au points suivants de la configuration :
- mailbox_maps = ldap:/etc/postfix/ldap-accounts.cf et alias_maps = ldap:/etc/postfix/ldap-aliases.cf pour la validation des destinataires par recherche dans le ldap,
- mynetworks = 127.0.0.0/8 pour n’autoriser que Localhost à envoyer ou recevoir des mails (permit_mynetworks), les autres seront authentifiés via saslauthd,
- local_transport = cyrus pour déclarer Cyrus comme agent de transport local,
- et enfin, smtpd_sasl_auth_enable = yes pour activer l’authentification sasl.
Pour l’accès au LDAP, nous faisons référence à deux fichiers : /etc/postfix/ldap-accounts.cf et /etc/postfix/ldap-aliases.cf
/etc/postfix/ldap-accounts.cf
server_host = localhost server_port = 389 search_base = dc=linet, dc=jopa, dc=fr query_filter = (& (objectClass=InetOrgPerson)(mail=%s)) result_attribute = uid bind = yes bind_dn = cn=admin,dc=linet,dc=jopa,dc=fr bind_pw = MotDePasseAdminLDAP version = 3 |
/etc/postfix/ldap-aliases.cf
server_host = localhost server_port = 389 search_base = dc=linet, dc=jopa, dc=fr query_filter = (& (objectClass=InetOrgPerson)(mail=%s)) result_attribute = mail bind = yes bind_dn = cn=admin,dc=linet,dc=jopa,dc=fr bind_pw = MotDePasseAdminLDAP version = 3 |
L’attribut en retour ici est mail (result_attribute = mail) , mais il peut être très judicieux d’ajouter à l’annuaire LDAP un champ “maildrop” qui sera retourné ici. Ce champ donnera alors une vrai fonctionnalité d’alias, permettant de transférer tout mail à destination de l’utilisateur vers une ou plusieurs autres adresses email.
L’authentification SASL à quant à elle besoin d’un fichier : /etc/postfix/sasl/smtpd.conf . Attention, sous d’autres distributions, le fichier peut être cherché ailleur, généralement dans /usr/lib/sasl2/ ou /usr/local/lib/sasl2. Elle a également besoin que l’utilisateur “postfix” appartienne au groupe SASL.
# adduser postfix sasl
# id postfix
uid=106(postfix) gid=106(postfix) groupes=106(postfix),45(sasl)
# vi /etc/postfix/sasl/smtpd.conf
/etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd mech_list: plain |
Il subsiste un problème avec l’installation de postfix sous Debian qui fait tourner ce dernier dans un chroot et empêche donc l’accès aux sockets de saslauthd (fichiers extérieux au chroot).
La méthode la plus simple est de “de-chrooter” Postfix. Ceci se fait par une simple modification du fichier /etc/postfix/master.cf
/etc/postfix/master.cf
service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - n - - smtpd ... |
C’est rapide, efficasse, mais c’est quand même dommage. Une deuxième méthode consiste à déplacer les sockets saslauthd dans le chroot et à faire un lien symbolique de l’extérieur du chroot et ayant pour cible le nouvel emplacement. (Et pas l’inverse hein !!! ). Nous conservons ainsi le chroot.
/etc/postfix/master.cf
service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - - - - smtpd ... |
# /etc/init.d/postfix stop
# /etc/init.d/saslauthd stop
# mkdir /var/spool/postfix/var
# mkdir /var/spool/postfix/var/run
# cp -a /var/run/saslauthd /var/spool/postfix/var/run/
# rm -fr /var/run/saslauthd
# ln -s /var/spool/postfix/var/run/saslauthd /var/run/
# /etc/init.d/saslauthd start
# /etc/init.d/postfix start
Allez… Là, ça prend carrément forme. Testons sans plus attendre en configurant un serveur smtp sur notre client de messagerie préféré :
On peut remarquer que, après acceptation des certificats, la connexion sécurisée TLS fonctionne parfaitement. C’est biensûr dû à l’installation de postfix-tls qui a généré les certificats et préconfiguré Postfix. Cette fonctionnalité n’apporte malheureusement pas grand chose tant que la connexion Imap n’est pas elle aussi sécurisée, tout particulièrement dans notre cas où les noms d’utilisateurs et mots de passes sont identiques pour les deux services.
Petit retour arrière : Cyrus-Imap (TLS)
Afin d’activer le support TLS pour Cyrus-Imap, il suffit d’éditer le fichier /etc/imapd.conf et de décommenter les deux lignes suivantes (le certificat utilisé est le même que pour postfix). L’utilisateur cyrus doit appartenir au groupe ssl-cert pour pouvoir lire la clef privée.
# adduser cyrus ssl-cert
/etc/imapd.conf
tls_cert_file: /etc/ssl/certs/ssl-cert-snakeoil.pem
tls_key_file: /etc/ssl/private/ssl-cert-snakeoil.key
Il est temps maintenant de prémunir notre système contre les spams et les virus.
5ème brique : Anti-spams - GreyListing
Le greylisting (le mot anglais signifie : « inscription sur liste grise ») est une technique antipourriel très simple qui consiste à rejeter temporairement un message, par émission d’un code de refus temporaire au serveur émetteur (MTA). Dans la majorité des cas, les serveurs émetteurs réexpédient le courriel après quelques minutes. La plupart des serveurs émettant des pourriels ne prendraient pas cette peine.
L’installation est basique, et il n’y a pas grand chose à ajouter au paramétrage par défaut.
# aptitude install postgrey
La mise en service se fait par l’ajout de la règle “check_policy_service inet:[127.0.0.1]:60000“ à “smtpd_recipient_restrictions” dans le fichier /etc/postfix/main.cf
/etc/postfix/main.cf
smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_policy_service inet:[127.0.0.1]:60000 |
6ème brique : Anti-spams / Antivirus - Amavis / SpamAssassin / Clamav
C’est Amavis qui va être chargé du filtrage de contenus, en s’appuyant sur Spamassassin contre les spams et Clamav contre les virus. Clamav dispose d’un outil permettant la mise à jour des signatures virales : freshclam. Pour avoir des mises à jour plus régulière, il suffit d’ajouter un dépot debian-volatile à la liste des dépôts. Par exemple :
# echo “deb http://ftp2.de.debian.org/debian-volatile etch/volatile main contrib” > /etc/apt/sources.list.d/volatile.list
# aptitude update
Passons à l’installation :
# aptitude install amavis-new clamav clamav-freshclam spamassassin
L’activation du démon spamassassin se fait par l’intermédiaire du fichier “/etc/default/spamassassin” en plaçant l’option ENABLED à 1
/etc/default/spamassassin
# /etc/default/spamassassin # Duncan Findlay # WARNING: please read README.spamd before using. # There may be security risks. # Change to one to enable spamd ENABLED=1 # Options # See man spamd for possible options. The -d option is automatically added. # SpamAssassin uses a preforking model, so be careful! You need to # make sure --max-children is not set to anything higher than 5, # unless you know what you're doing. OPTIONS="--create-prefs --max-children 5 --helper-home-dir" # Pid file # Where should spamd write its PID to file? If you use the -u or # --username option above, this needs to be writable by that user. # Otherwise, the init script will not be able to shut spamd down. PIDFILE="/var/run/spamd.pid" # Set nice level of spamd #NICE="--nicelevel 15" |
Il faut ensuite demander à postfix d’utiliser Amavis pour le filtrage de contenus. Revenons une fois de plus dans notre fichier “/etc/postfix/main.cf” pour ajouter la directive :content_filter = smtp-amavis:[127.0.0.1]:10024
/etc/postfix/main.cf
content_filter = smtp-amavis:[127.0.0.1]:10024 smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_policy_service inet:[127.0.0.1]:60000 smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining |
Pour finir avec amavis, un brin de configuration est nécessaire pour activer le filtrage anti-spam et anti-virus.
/etc/amavis/conf.d/15-content_filter_mode
use strict; # You can modify this file to re-enable SPAM checking through spamassassin # and to re-enable antivirus checking. # # Default antivirus checking mode # Uncomment the two lines below to enable it back # @bypass_virus_checks_maps = ( %bypass_virus_checks, @bypass_virus_checks_acl, $bypass_virus_checks_re); # # Default SPAM checking mode # Uncomment the two lines below to enable it back # @bypass_spam_checks_maps = ( %bypass_spam_checks, @bypass_spam_checks_acl, $bypass_spam_checks_re); 1; # insure a defined return |
7ème brique : Anti-spams (encore) - Listes RBL
Enfin, nous pouvons utiliser des blacklistes externes pour parfaire notre filtrage anti-spam. Il en existe un paquet, mais leur utilisation est similaire. Dans l’exemple, utilisons deux “blacklist” publiques en fin de filtrage : dul.dnsbl.sorbs.net et zen.spamhaus.org. Il faut encore une fois ajouter deux règles “smtpd_recipient_restrictions” au fichier /etc/postfix/main.cf
/etc/postfix/main.cf
smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_policy_service inet:[127.0.0.1]:60000, reject_rbl_client dul.dnsbl.sorbs.net, reject_rbl_client zen.spamhaus.org |
Voilà pour cet article. Même s’il reste pas mal d’améliorations possibles, d’optimisations et fonctionnalités supplémentaires à ajouter, on va dire que c’est un bon début.