Installation d’un serveur mail brique par brique… (OpenLDAP, Postfix, Cyrus-imap, TLS, SASL, Spamassassin, Amavis, etc…)

mysza1

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.

Note du 28 Juillet 2009 : Mise à jour de l’article pour Debian Lenny.

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
 
# Nécessaire pour le chroot de Postfix (par defaut sous Debian)
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

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-2  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à…

capture-parametres-des-comptes

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.

postfix

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

N’oublions pas de gérer les droits de ces 2 fichiers :

# chown root:sasl ldap*.cf
# chmod 640 ldap*.cf

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.

De plus, il faut noter que dans la configuration actuelle et sans cette notion d’alias, une boîte cyrus doit être assiciée à chaque adresse email locale. En effet, Cyrus recherche une boîte dont le nom correspond au préfixe de l’adresse email du destinataire (ce qui est avant le @en bref).

L’authentification SASL à 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

Note : Debian fait tourner Postfix dans un chroot. En cas de problème d’accès au socket SASL, il faut bien vérifier la ligne OPTIONS du fichier /etc/default/saslauthd.

/etc/default/saslauthd

#
# Settings for saslauthd daemon
..
# Nécessaire pour le chroot de Postfix (par defaut sous Debian)
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

/etc/postfix/master.cf

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


Allez… Là, ça prend carrément forme. Testons sans plus attendre en configurant un serveur smtp sur notre client de messagerie préféré :

smtp_tls

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

imap_tls_non_sec

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.

( http://fr.wikipedia.org/wiki/Greylisting )

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 lenny/volatile main contrib » > /etc/apt/sources.list.d/volatile.list
# aptitude update

Passons à l’installation :

# aptitude install amavis-new clamav clamav-freshclam clamav-daemon 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

Afin de pouvoir utiliser l’agent de transport smtp-amavis, nous devons le définir dans le fichier « master.cf » de postfix :

/etc/postfix/master.cf

...
#CLAMAV-AMAVIS
smtp-amavis unix - - n - 2 smtp
        -o smtp_data_done_timeout=1200
        -o smtp_send_xforward_command=yes
        -o disable_dns_lookups=yes
127.0.0.1:10025 inet n - n - - smtpd
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks=127.0.0.0/8
        -o strict_rfc821_envelopes=yes
        -o smtpd_error_sleep_time=0
        -o smtpd_soft_error_limit=1001
        -o smtpd_hard_error_limit=1000
...

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

Il nous faudra, si cela n’est pas fait à l’installation, ajouter l’utilisateur clamav au groupe amavis.

# adduser clamav amavis

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.

Sources :

Vus : 388
Publié par Jopa : 29