Implantation



Ce tutoriel développe la mise en place de quatre serveurs Postfix utilisant les informations des annuaires OpenLDAP, pour authentifier les destinataires et transférer les mails vers un autre serveur Postfix, où ils seront filtrés puis stockés.

Deux serveurs frontaux Postfix (mx1.alex.fr et mx2.alex.fr) reçoivent les mails d'Internet.
Si le destinataire existe dans l'annuaire OpenLDAP, un serveur policyd-weight (cache pour les RBL) distant est interrogé. Si l'émetteur est un spammeur le mail et refusé, sinon un serveur Postgrey (liste grise) distant est interrogé.
Comme nous utilisons deux serveurs frontaux avec du greylisting, il faut centraliser la base des mails en liste grise. Sinon quand un serveur SMTP d'Internet renverrait pour la deuxième fois un mail "greylisté" et qu'il se connecterait sur un autre de nos serveurs frontaux, il serait encore greylisté. Même principe pour policyd-weight avec les adresses RBL, mais cette fois pour économiser des requêtes.

Ensuite, selon le domaine (alex.fr, alex.com, alex.org, alex.lan), les mails sont relayés vers un autre serveur Postfix (nas.alex.dmz, qui est un alias DNS de nas1 et nas2 puisque nous sommes dans l'optique d'une continuité de service) qui filtrera les spams (passés malgré la liste grise et les RBL) et virus.
Un serveur Postfix (smtp.alex.fr) sera dédié pour l'envoi des mails uniquement.




Installation des packages

Sur mx1.alex.fr et mx2.alex.fr :
postfix postfix-ldap

Répondre dans l'interface de configuration de Postfix :
         Type de configuration : Site Internet
         Nom de courrier : alex.fr

Sur nas1.alex.dmz et nas2.alex.dmz :
postfix postfix-ldap libnss-ldap nscd postgrey policyd-weight procmail spamassassin spamc gettext-base pax razor libmail-spf-query-perl re2c build-essential pyzor libpcre3 clamav clamav-daemon arj nomarch lha lzop cabextract unzoo unace unalz unzip unrar

Note : Pour disposer du package unrar vous devez ajouter dans votre fichier /etc/apt/sources.list le repository "non-free" (deb http://mirror.exemple.com/ftp/mirror/debian/ etch main non-free)

Vous pouvez ajouter le dépôt « debian-volatile » pour obtenir les dernières versions de certains logiciels de filtrage et de détection.

Ajoutez cet ligne au fichier /etc/apt/sources.list :

...
deb http://volatile.debian.org/debian-volatile etch/volatile main



(le serveur nas2.alex.dmz sera configuré dans un autre tutoriel)

Répondre dans l'interface de configuration de Postfix :
         Type de configuration : Système satellite
         Nom de courrier : nas1.alex.dmz (OU nas2.alex.dmz)
         Serveur relais SMTP : smtp.alex.dmz

Sur smtp.alex.fr :
postfix postfix-ldap

Répondre dans l'interface de configuration de Postfix :
         Type de configuration : Site Internet
         Nom de courrier : alex.fr
Note : Étant donné que les serveurs mail font beaucoup de requêtes DNS, il serait judicieux d'installer un serveur DNS cache sur chaque machines hébergeant Postfix.



Schéma mail pour OpenLDAP

Il n'y a pas beaucoup d'attributs "mail" disponible dans les schémas "standards" fournis dans les packages OpenLDAP. Si l'on veut utiliser un MTA (Postfix, Exim, ...) avec LDAP nous sommes obligés de créer nos propres attributs et classes d'objets.
C'est pour cette raison que je vous propose ce schéma "mail.schema".
J'ai utilisé le préfixe OID LDAP "enterprise" (1.3.6.1.4.1) avec un numéro libre non attribué, voir IANA (99999).
Mon schéma contient deux objectclass et les attributs suivants :

mailAlias (adresse mail alternative)

mailForwarding (redirection vers une autre adresse mail)

mailAccountActive (si le compte est actif ou pas)

mailDomainName (nom du domaine mail géré)

mailDomainNameAlias (nom de l'alias pour un domaine mail)

mailServer (nom du serveur mail qui gère un domaine)
.


Ajoutez par l'intermédiaire de phpLDAPadmin ou manuellement, vos noms de domaines dans la branche "ou=Domains" de chaque annuaires :

...

dn: ou=Domains,dc=alex,dc=fr
ou: Domains
objectClass: top
objectClass: organizationalUnit

dn: mailDomainName=alex.fr,ou=Domains,dc=alex,dc=fr
objectClass: top
objectClass: MailDomain
mailDomainName: alex.fr
mailServer: nas.alex.dmz
mailDomainNameAlias: alex.lan

...

dn: ou=Domains,dc=alex,dc=com
ou: Domains
objectClass: top
objectClass: organizationalUnit

dn: mailDomainName=alex.com,ou=Domains,dc=alex,dc=com
objectClass: top
objectClass: MailDomain
mailDomainName: alex.com
mailServer: nas.alex.dmz

...

dn: ou=Domains,dc=alex,dc=org
ou: Domains
objectClass: top
objectClass: organizationalUnit

dn: mailDomainName=alex.org,ou=Domains,dc=alex,dc=org
objectClass: top
objectClass: MailDomain
mailDomainName: alex.org
mailServer: nas.alex.dmz

...



Exemple d'un compte utilisateur dans l'annuaire :

dn: uid=login,ou=Users,dc=alex,dc=fr
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
objectClass: MailAccount
objectClass: ProxyAccount
objectClass: FTPAccount
sn: Nom
givenName: Prenom
cn: Nom Prenom
displayName: Nom Prenom
gecos: Nom Prenom
initials: NP
uid: login
userPassword:: U8zVTRxckdxZS9MQW8zUG1ydjQ=
loginShell: /bin/bash
homeDirectory: /home/login
gidNumber: 513
uidNumber: 10012
mailAccountActive: yes
mail: login@alex.fr
mailAlias: prenom.nom@alex.fr
#mailForwarding: autrelogin@unfai.com
ProxyAccountActive: yes
FTPAccountActive: no




Configuration de Postfix sur nas1.alex.dmz

Modifiez le fichier /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

# Ce serveur reçoit des mails uniquement, pas besoin de TLS.
# TLS parameters
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#smtpd_use_tls=yes
#smtpd_tls_session_cache_database = btree:${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.

# Je donne l'adresse DNS de mon alias IP.
myhostname = nas.alex.dmz

# Pour que les alias soient aussi recherchés dans l'annuaire.
# Utilisera les paramètres LDAP déclarés plus bas.
#alias_maps = hash:/etc/aliases
alias_maps = hash:/etc/aliases, ldap:forwarding

alias_database = hash:/etc/aliases
myorigin = /etc/mailname

# Pour quels domaines Postfix délivrera le courrier, c'est à dire
# qu'il stockera les mails en local pour ces domaines ou noms d'hôtes.
# Vous remarquez que je mets nas1.alex.dmz et nas2.alex.dmz dans la
# liste, c'est pour que les mails envoyés depuis cette machine par root
# soient stockés localement. Et comme nous allons traiter de "Redondance
# et continuité de service" dans un autre tutoriel, ce fichier sera
# utilisé par deux machines : nas1.alex.dmz et nas2.alex.dmz
mydestination = nas1.alex.dmz, nas2.alex.dmz, localhost.alex.dmz, localhost, ldap:domains

# Quel serveur utiliser pour envoyer des mails.
relayhost = smtp.alex.dmz

# Pour quels réseaux ce serveur acceptera de relayer les mails.
# Ce serveur ne fait que recevoir.
mynetworks = 127.0.0.0/8

# La taille maximum du répertoire Maildir d'un utilisateur 20Mo
# (20480000/1024)
mailbox_size_limit = 20480000

recipient_delimiter = +

# Limite la taille des messages à 5Mo (5120000/1024)
message_size_limit = 5120000

# Sur quelles interfaces Postfix écoutera.
inet_interfaces = localhost, $myhostname
inet_protocols = ipv4

# Vérifie l'existence du destinataire dans l'annuaire.
virtual_alias_maps = ldap:accounts

# Accepte uniquement le mail si le destinataire (login@domain) existe
# dans l'annuaire. Ne poursuit pas la recherche avec le service de noms (NSS)
local_recipient_maps = ldap:accounts, ldap:forwarding

# Refuse de relayer les mails d'autres serveurs.
relay_domains =

# L'analyse des mails (Spam et Virus) est lancée par Procmail.
# Les mails sont stockés au format Maildir dans le home directory de
# chaque utilisateurs. Le courrier est délivré avec les droits de
# l'utilisateur (uid/gid). Procmail ne peut pas créer le répertoire
# Maildir des utilisateurs, vous devez créer ce répertoire au préalable.
# Voir ce script.
#mailbox_command = procmail -a "$EXTENSION"
mailbox_command = /usr/bin/procmail -f- -a ${USER}

# Paramètres LDAP :
#
# Domains

# FQDN des serveurs LDAP.
domains_server_host = localhost ldap2.alex.dmz

# Je n'utilise pas ldaps car je n'arrive pas à faire accepter
# mon certificat ! (voir http://www.postfix.org/ldap_table.5.html)
domains_server_port = 389

# Connexion anonyme.
domains_bind = no

# Version du protocole LDAP.
domains_version = 3

# Timeout.
domains_timeout = 20

# Suffixe de recherche. C'est ici que le méta annuaire à son utilité,
# cela permet de parcourir plusieurs bases avec un point d'entrée.
domains_search_base = dc=meta

# Recherche récursive.
domains_scope = sub

# Filtres de recherche afin d'optimiser la requête. Recherche tous les
# objectClass=MailDomain avec les attributs mailDomainName et
# mailDomainNameAlias égaux à la partie droite du mail (le domaine)
domains_query_filter = (&(objectClass=MailDomain)(|(mailDomainName=%s)(mailDomainNameAlias=%s)))

# Retourne cet attribut.
domains_result_attribute = mailDomainName

# Forwarding
forwarding_server_host = localhost ldap2.alex.dmz
forwarding_server_port = 389
forwarding_bind = no
forwarding_version = 3
forwarding_timeout = 20
forwarding_search_base = dc=meta
forwarding_scope = sub

# Recherche tous les objectClass=MailAccount et mailAccountActive=yes
# (compte actif ou pas) avec l'attribut uid égal à l'adresse.
forwarding_query_filter = (&(objectClass=MailAccount)(uid=%s)(mailAccountActive=yes))
forwarding_result_attribute = mailForwarding

# Accounts
accounts_server_host = localhost ldap2.alex.dmz
accounts_server_port = 389
accounts_bind = no
accounts_version = 3
accounts_timeout = 20
accounts_search_base = dc=meta
accounts_scope = sub

# Recherche tous les objectClass=MailAccount et mailAccountActive=yes
# (compte actif ou pas) avec l'attribut mail ou mailAlias égal à
# l'adresse exacte pour optimiser la requête LDAP.
accounts_query_filter = (&(objectClass=MailAccount)(mailAccountActive=yes)(|(mail=%u@%d)(mailAlias=%u@%d)))
accounts_result_attribute = mail



Contenu du script /export/bin/mk_maildir_from_ldap.sh à lancer depuis cron toutes les heures :

#!/bin/bash

for home in $(ldapsearch -x -b dc=meta -LLL homeDirectory | grep ^'homeDirectory: /home/' | cut -d ' ' -f 2)
do
    if [[ ! -d $home/Maildir/.spam || ! -d $home/Maildir/.virus ]]
    then
        mkdir -p $home/Maildir/.spam $home/Maildir/.virus
        chmod -R 700 $home
        chown -R $(basename $home) $home
    fi
done



Modifiez le fichier /etc/aliases pour rediriger les mails envoyés au compte root vers un autre compte de votre choix (que vous avez créé dans un des annuaires par exemple) :

# See man 5 aliases for format
postmaster:    root
clamav:        root
root:          blackhole@alex.lan



Lancez cette commande pour reconstruire la base de données des alias mail :

nas1:~# newaliases



Pour respecter la RFC vous devez créer une adresse abuse@votre_domaine.
Configuration de Postgrey

Modifiez le fichier /etc/default/postgrey :

# postgrey startup options, created for Debian
# (c)2004 Adrian von Bidder <avbidder@fortytwo.ch>
# Distribute and/or modify at will.

# you may want to set
# --delay=N how long to greylist, seconds (default: 300)
# --max-age=N delete old entries after N days (default: 30)
# see also the postgrey(8) manpage

# Sur quelle interface et port le service écoutera.
#POSTGREY_OPTS="--inet=127.0.0.1:60000"
POSTGREY_OPTS="--inet=172.16.0.17:60000"

# Pour que le service écoute sur son alias IP quand nous traiterons du
# tutoriel "Redondance et continuité de service".
#POSTGREY_OPTS="--inet=172.16.0.19:60000"

# the --greylist-text commandline argument can not be easily passed through
# POSTGREY_OPTS when it contains spaces. So, insert your text here:
#POSTGREY_TEXT="Your customized rejection message here"



Les paramètres de Postgrey sont bons par défaut, mais vous pouvez toujours modifier les arguments.

Vous pouvez ajouter dans le fichier /etc/postgrey/whitelist_clients, les domaines de confiance (les domaines des FAI les plus courant par exemple ...)
Il y a aussi le fichier /etc/postgrey/whitelist_recipients qui contient les destinataires qui ne seront pas greylistés.

Redémarrez le service Postgrey :

nas1:~# /etc/init.d/postgrey restart
Restarting postfix greylisting daemon: postgrey.
nas1:~#



Configuration de policyd-weight

Créez le fichier /etc/policyd-weight.conf pour que policyd-weight écoute sur cette adresse :

# Pour que le service écoute sur son alias IP quand nous traiterons du
# tutoriel "Redondance et continuité de service".
#$BIND_ADDRESS = '172.16.0.19';
$BIND_ADDRESS = '172.16.0.17';


Redémarrez le service policyd-weight :

nas1:~# /etc/init.d/policyd-weight restart
Restarting policyd-weight: terminating .policyd-weight.
nas1:~#



Configuration de SpamAssassin

Modifiez le fichier /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=0
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.

# Comme nous utilisons SpamAssassin localement, nous communiquerons par un socket.
#OPTIONS="--create-prefs --max-children 5 --helper-home-dir"
OPTIONS="--create-prefs --max-children 5 --helper-home-dir --socketpath=/var/run/spamd.socket"

# 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"

# Cronjob
# Set to anything but 0 to enable the cron job to automatically update
# spamassassin's rules on a nightly basis

# Pour activer la mise à jour journalière des règles de SpamAssassin.
CRON=0



Modifiez le fichier /etc/spamassassin/local.cf :

# This is the right place to customize your installation of SpamAssassin.
#
# See 'perldoc Mail::SpamAssassin::Conf' for details of what can be
# tweaked.
#
# Only a small subset of options are listed below
#
########################################################################

# Voir man Mail::SpamAssassin::Conf

# Add *****SPAM***** to the Subject header of spam e-mails
#
#rewrite_header Subject *****SPAM*****

# Save spam messages as a message/rfc822 MIME attachment instead of
# modifying the original message (0: off, 2: use text/plain instead)
#
# report_safe 1
report_safe 0

# Set which networks or hosts are considered 'trusted' by your mail
# server (i.e. not spammers)
#
# trusted_networks 212.17.35.

# Set file-locking method (flock is not safe over NFS, but is faster)
#
lock_method flock

# Set the threshold at which a message is considered spam (default: 5.0)
#
# required_score 5.0

# Use Bayesian classifier (default: 1)
#
use_bayes 1

# Bayesian classifier auto-learning (default: 1)
#
bayes_auto_learn 1

# (Voir la doc)
bayes_auto_learn_threshold_spam 5.1

# Set headers which may provide inappropriate cues to the Bayesian
# classifier

# Ignore ces entêtes pour ne pas perturber l'analyse Bayésienne.
bayes_ignore_header X-Bogosity
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Status
bayes_ignore_header X-Spam-Level
bayes_ignore_header X-Spam-Checker-Version
bayes_ignore_header X-Spam-Report

# Expéditeurs considérés comme sûrs.
whitelist_from *@alex.lan *@alex.fr *@alex.com *@alex.org

# Pour personnaliser les entêtes ajoutées par SpamAssassin.
add_header all Status _YESNO_, score=_SCORE_
add_header all Checker-Version Secret From _HOSTNAME_

# Désactive les vérifications RBL puisque Policyd-weight s'en charge en amont.
skip_rbl_checks 1

# Options pour le module Mail::SpamAssassin::Plugin::TextCat
ok_locales all
ok_languages fr

# Option pour le module Mail::SpamAssassin::Plugin::SPF
do_not_use_mail_spf 1

# Option pour le module Mail::SpamAssassin::Plugin::Razor2
use_razor2 1

# Option pour le module Mail::SpamAssassin::Plugin::VBounce
# Listez les serveurs qui peuvent envoyer des bounces légitime.
whitelist_bounce_relays smtp.alex.dmz smtp.alex.fr



Modifiez le fichier /etc/spamassassin/v310.pre :

loadplugin Mail::SpamAssassin::Plugin::Pyzor
loadplugin Mail::SpamAssassin::Plugin::Razor2
loadplugin Mail::SpamAssassin::Plugin::SpamCop
loadplugin Mail::SpamAssassin::Plugin::AWL
loadplugin Mail::SpamAssassin::Plugin::AutoLearnThreshold
loadplugin Mail::SpamAssassin::Plugin::TextCat
loadplugin Mail::SpamAssassin::Plugin::WhiteListSubject
loadplugin Mail::SpamAssassin::Plugin::MIMEHeader
loadplugin Mail::SpamAssassin::Plugin::ReplaceTags



Modifiez le fichier /etc/spamassassin/v320.pre :

loadplugin Mail::SpamAssassin::Plugin::Check
loadplugin Mail::SpamAssassin::Plugin::HTTPSMismatch
loadplugin Mail::SpamAssassin::Plugin::URIDetail
loadplugin Mail::SpamAssassin::Plugin::Bayes
loadplugin Mail::SpamAssassin::Plugin::BodyEval
loadplugin Mail::SpamAssassin::Plugin::DNSEval
loadplugin Mail::SpamAssassin::Plugin::HTMLEval
loadplugin Mail::SpamAssassin::Plugin::HeaderEval
loadplugin Mail::SpamAssassin::Plugin::MIMEEval
loadplugin Mail::SpamAssassin::Plugin::RelayEval
loadplugin Mail::SpamAssassin::Plugin::URIEval
loadplugin Mail::SpamAssassin::Plugin::WLBLEval
loadplugin Mail::SpamAssassin::Plugin::VBounce
loadplugin Mail::SpamAssassin::Plugin::Rule2XSBody
loadplugin Mail::SpamAssassin::Plugin::ImageInfo



Redémarrez le service SpamAssassin :

nas1:~# /etc/init.d/spamassassin restart
Restarting SpamAssassin Mail Filter Daemon: spamd.
nas1:~#



Pour améliorer la détection des spams, vous devez apprendre à SpamAssassin à reconnaître les spams qu'il n'a pas détecté.
Si vos utilisateurs sont d'accord, vous pouvez leurs demander de transférer les spams passés à travers les mailles du filet vers un compte mail spécial (spam@votre_domaine).
Cette boite mail sera parcouru par l'utilitaire sa-learn pour renforcer la détection par SpamAssassin.

Créez dans votre annuaire un compte spam avec l'adresse mail "spam@alex.lan" par exemple.
Ensuite pour automatiser l'apprentissage avec sa-learn, lancez ce genre de script tous les soirs :

#!/bin/bash

# Login du compte :
spamaccount='spam'
# Homedirectory du compte :
spamdir='/home/spam'

newspamdir='Maildir/new'
alreadylearnedspamdir='already_learned'
learnedonceagainspamdir='learned_once_again'
filedspamdir='filed'

if [ ! -d "$spamdir/$alreadylearnedspamdir" ]
then
    mkdir -p $spamdir/$alreadylearnedspamdir $spamdir/$learnedonceagainspamdir $spamdir/$filedspamdir
    chmod -R 700 $spamdir
    chown -R $spamaccount $spamdir
else
    sa-learn --spam $spamdir/$learnedonceagainspamdir/*
    mv $spamdir/$learnedonceagainspamdir/* $spamdir/$filedspamdir/ 2> /dev/null
    mv $spamdir/$alreadylearnedspamdir/* $spamdir/$learnedonceagainspamdir/ 2> /dev/null
    sa-learn --spam $spamdir/$newspamdir/*
    mv $spamdir/$newspamdir/* $spamdir/$alreadylearnedspamdir/ 2> /dev/null
fi



Vous pouvez mettre à jour, chaque mois, les règles de détection de SpamAssassin :

nas1:~# sa-update


Et redémarrez le service SpamAssassin.



Configuration de Clamav

Modifiez les paramètres du service de mise à jour des définitions de virus avec cette commande :

nas1:~# dpkg-reconfigure clamav-freshclam



Répondez comme suit :
Méthode de mise à jour de la base de données des virus : démon
Miroir de la base de données : db.local.clamav.net
Mandataire HTTP (laisser vide pour aucun) : http://proxy.alex.dmz:3128/
Identifiant pour le mandataire (laisser vide pour aucun) :
Nombre de mises à jour de freshclam par jour : 12
Faut-il notifier clamd des mises à jour ? oui



Modifiez les paramètres de clamav avec cette commande :

nas1:~# dpkg-reconfigure clamav-base



Répondez comme suit :
Souhaitez-vous gérer le fichier de configuration automatiquement ? oui
Type de « socket » : UNIX
« Socket » locale (UNIX) où clamd sera à l'écoute : /var/run/clamav/clamd.ctl
Faut-il gérer correctement les fichiers « socket » Unix restés ouverts ? oui
Souhaitez-vous activer la vérification du courriel ? oui
Souhaitez-vous activer la vérification des archives ? oui
Souhaitez-vous activer la vérification des archives RAR ? oui
          Acceptez les réponses par défaut jusqu'à :
Souhaitez-vous utiliser la journalisation du système ? oui
          Acceptez les réponses par défaut


Redémarrez le service clamav-daemon :

nas1:~# /etc/init.d/clamav-daemon restart
Stopping ClamAV daemon: clamd Waiting . . . . .
Starting ClamAV daemon: clamd Running as user clamav (UID 102, GID 103)



Configuration de Procmail

Pour faciliter la réécriture des entêtes mail après le passage de clamav depuis Procmail nous allons installer clamassassin.
Ce package n'est pas disponible pour Etch, on le trouve en testing :
http://packages.debian.org/lenny/mail/clamassassin

téléchargez-le et installez-le.

nas1:~# dpkg -i clamassassin_1.2.4-1_all.deb



Modifiez le fichier /etc/default/clamassassin :

# Modify Subject line with a header ala spamassassin with rewrite_subject
# on You'll want to add a trailing space before the old subject

#SUBJECTHEAD=""

# Configure your full path to clamscan or clamdscan
# (If you use clamdscan, see the README for directions)
CLAMSCAN=clamdscan

# Configure options passed to clamscanner
#CLAMSCANOPT="--no-summary --stdout"

# Configure flag to add clamscanner to version header
#ADDSCANNERFLAG=1

# Configure whether or not the virus signature version is added
# Default: 0.80 and higher: off, others: on
#SIGVERSFLAG=0



Créez le fichier /etc/procmailrc :

# Pour conserver les droits (uid/gid) du destinataire lors du traitement
# du mail par spamc.
DROPPRIVS=yes

# Indique le chemin du répertoire Maildir en utilisant la variable
# HOME du l'utilisateur.
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/

# Oblige procmail à délivrer le mail dans le répertoire $MAILDIR
# Sinon le mail serait délivré au format mbox dans /var/mail/$LOGNAME
ORGMAIL=$DEFAULT

# Variables pour stocker les spams et virus.
SPAMDIR=${MAILDIR}/.spam
VIRUSDIR=${MAILDIR}/.virus

# Pour le debugage :
#LOGFILE=/tmp/$LOGNAME.log
# ou
#LOGFILE=${MAILDIR}/$LOGNAME.log

# Tous les mails envoyés à l'adresse spam@alex.lan seront placés
# directement dans la boite de réception pour l'apprentissage de
# SpamAssassin.
:0:
* ^Delivered-To: spam@alex.lan
$DEFAULT

### AntiSpam ###
#
# Le fichier de lock nous assure qu'un seul mail est traité à la fois
# par SpamAssassin.
# (Voir /usr/share/doc/spamassassin/examples/procmailrc.example)
#
# La ligne [ * !^Received: from smtp.alex.fr ] indique que tous les mails
# venant du serveur smtp.alex.fr ne sont pas analysés par SpamAssassin,
# puisqu'ils viennent de notre réseau. Pareil pour la ligne
# [ * !^From: root@nas1.alex.dmz|... ] mais cette fois pour le compte
# root des machines nas1 ou nas2.
#
# La ligne [ * < 256000 ] indique que seul les messages plus petits que
# 250 kB (250 * 1024 = 256000 bytes) seront traités par spamc.
# La plupart des spams ne dépassent pas quelques kilos pour le momment...
#
# spamc est la partie cliente de SpamAssassin, permet un traitement plus
# rapide. Indiquez le socket si SpamAssassin est sur la même machine
# ou l'IP du serveur Spamassassin avec son port.
:0fw: spamassassin.lock
* !^Received: from smtp.alex.fr
* !^From: root@nas1.alex.dmz|root@nas2.alex.dmz|monit@nas1|monit@nas2
* < 256000
| spamc -U /var/run/spamd.socket

# Si l'entête du mail contient le tag suivant, il est dirigé dans un
# autre répertoire de l'utilisateur. Utilisez le fichier
# /usr/share/doc/spamassassin/examples/sample-spam.txt pour tester votre
# configuration.
:0:
* ^X-Spam-Status: Yes
${SPAMDIR}/

# Si vous préférez supprimer les mails détectés comme spam, décommentez
# ces lignes et commentez les trois précédentes.
#:0:
#* ^X-Spam-Status: Yes
#/dev/null

### AntiVirus ###
#
# (Voir /usr/share/doc/clamassassin/README.gz)
:0fBHw
* !^Received: from smtp.alex.fr
* !^From: root@nas1.alex.dmz|root@nas2.alex.dmz|monit@nas1|monit@nas2
* ^Content\-(?:Disposition|Transfer-Encoding|Type)\: (?:attachment|base64|multipart)
| /usr/bin/clamassassin

:0fBHw
* !^Received: from smtp.alex.fr
* !^From: root@nas1.alex.dmz|root@nas2.alex.dmz|monit@nas1|monit@nas2
* ^begin [0-9]+
| /usr/bin/clamassassin

:0:
* ^X-Virus-Status: Yes
${VIRUSDIR}/

# Si vous préférez supprimer les mails contenant un virus, décommentez
# ces lignes et commentez les trois précédentes.
#:0:
#* ^X-Virus-Status: Yes
#/dev/null



Si vous avez suivi les tutoriels dans l'ordre, vous avez déjà configuré les DNS, les annuaires OpenLDAP ainsi que ces fichiers :
/etc/resolv.conf
/etc/network/interfaces
/etc/ldap/ldap.conf


Modifiez le fichier /etc/libnss-ldap.conf :

base dc=meta

uri ldap://127.0.0.1/ ldaps://ldap2.alex.dmz/

ldap_version 3

scope sub

timelimit 30

bind_timelimit 30

bind_policy soft

pam_filter objectclass=posixaccount

pam_login_attribute uid

# Nous n'avons pas besoin de l'option nss_base_shadow car nous utilisons
# libnss-ldap pour récupérer les uid/gid.
nss_base_passwd      dc=meta?sub
nss_base_group        dc=meta?sub



Modifiez le fichier /etc/nsswitch.conf :

passwd:    compat ldap
group:     compat ldap

# Pas de shadow ldap non plus.
shadow:    compat

hosts:     files dns
networks:  files

protocols: db files
services:  db files
ethers:    db files
rpc:       db files

netgroup:  nis



Modifiez le fichier /etc/nscd.conf :

#
# /etc/nscd.conf
#
# Currently supported cache names (services): passwd, group, hosts
#
# logfile             /var/log/nscd.log
# threads             6
# max-threads         128
server-user           nobody
# stat-user           somebody
debug-level           0
# reload-count        5
paranoia              no
# restart-interval    3600

enable-cache          passwd yes
positive-time-to-live passwd 600
negative-time-to-live passwd 20

# Il y aura environ 1000 utilisateurs dans le méta annuaire.
suggested-size        passwd 1100
check-files           passwd yes
persistent            passwd yes
shared                passwd yes

enable-cache          group yes
positive-time-to-live group 3600
negative-time-to-live group 60
suggested-size        group 211
check-files           group yes
persistent            group yes
shared                group yes

enable-cache          hosts yes
positive-time-to-live hosts 3600
negative-time-to-live hosts 20
suggested-size        hosts 211
check-files           hosts yes
persistent            hosts yes
shared                hosts yes



Redémarrez le service nscd :

nas1:~# /etc/init.d/nscd restart
Restarting Name Service Cache Daemon: nscd.



Redémarrez le service Postfix :

nas1:~# /etc/init.d/postfix restart
Stopping Postfix Mail Transport Agent: postfix.
Starting Postfix Mail Transport Agent: postfix.
nas1:~#




Configuration de Postfix sur mx1.alex.fr et mx2.alex.fr

Modifiez le fichier /etc/resolv.conf :

search alex.dmz alex.fr alex.com alex.org
nameserver 172.16.0.1
nameserver 172.17.0.1



Modifiez le fichier /etc/network/interfaces :

# The loopback network interface
auto lo eth0 eth1
iface lo inet loopback

# The primary network interface
allow-hotplug eth0 eth1
iface eth0 inet static
address 123.45.67.9
netmask 255.255.255.240
gateway 123.45.67.14

iface eth1 inet static
address 172.16.0.6
netmask 255.255.255.0
up route add -net 172.17.0.0/16 gw 172.16.0.254



Modifiez le fichier /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

# TLS parameters
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#smtpd_use_tls=yes
#smtpd_tls_session_cache_database = btree:${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.

# Mettez mx1.alex.fr ou mx2.alex.fr selon la machine ...
myhostname = mx1.alex.fr
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = mx1.alex.dmz, localhost.alex.dmz, localhost

relayhost = smtp.alex.dmz

mynetworks = 127.0.0.0/8

#mailbox_size_limit = 0

recipient_delimiter = +

inet_interfaces = localhost, $myhostname

message_size_limit = 5120000

# Pour quels domaines Postfix relayera le courrier.
# Utilisera les paramètres LDAP déclarés plus bas.
relay_domains = ldap:domains

# Vérifie l'existence du destinataire.
# Il faut ajouter :
# "smtpd_recipient_restrictions = reject_unlisted_recipient"
# sinon n'importe quel destinataire pour nos domaines sera accepté !
relay_recipient_maps = ldap:accounts, ldap:forwarding

# Permet de transférer les mails vers d'autres serveurs mail.
transport_maps = ldap:transport

# Si vous transférez les mails vers un seul serveur (ce qui est mon cas)
# vous pouvez réduire les requêtes LDAP en indiquant son adresse sous
# cette forme :
#transport_maps = smtp:[nas.alex.dmz]

# Paramètres LDAP :
#
# Domains
domains_server_host = ldap2.alex.dmz ldap1.alex.dmz
domains_server_port = 389
domains_bind = no
domains_version = 3
domains_timeout = 20
domains_search_base = dc=meta
domains_scope = sub
domains_query_filter = (&(objectClass=MailDomain)(|(mailDomainName=%s)(mailDomainNameAlias=%s)))

# Retourne l'attribut mailServer. Ce n'est pas l'attribut du domaine
# mais c'est pour que la réponse soit "vrai ou faux".
domains_result_attribute = mailServer

# Accounts
accounts_server_host = ldap2.alex.dmz ldap1.alex.dmz
accounts_server_port = 389
accounts_bind = no
accounts_version = 3
accounts_timeout = 20
accounts_search_base = dc=meta
accounts_scope = sub
accounts_query_filter = (&(objectClass=MailAccount)(mailAccountActive=yes)(|(mail=%u@%d)(mailAlias=%u@%d)))
accounts_result_attribute = mail

# Forwarding
forwarding_server_host = ldap2.alex.dmz ldap1.alex.dmz
forwarding_server_port = 389
forwarding_bind = no
forwarding_version = 3
forwarding_timeout = 20
forwarding_search_base = dc=meta
forwarding_scope = sub
forwarding_query_filter = (&(objectClass=MailAccount)(uid=%s)(mailAccountActive=yes))
forwarding_result_attribute = mailForwarding

# Transport
transport_server_host = ldap2.alex.dmz ldap1.alex.dmz
transport_server_port = 389
transport_bind = no
transport_version = 3
transport_timeout = 20
transport_search_base = dc=meta
transport_scope = sub
transport_query_filter = (&(objectClass=MailDomain)(|(mailDomainName=%s)(mailDomainNameAlias=%s)))
transport_result_attribute = mailServer

# Formate le résultat de la recherche.
transport_result_filter = smtp:[%s]

# Permet de refuser la connexion SMTP pour les IP ou domaines contenus
# dans ce fichier.
smtpd_client_restrictions =
check_client_access hash:/etc/postfix/blacklisted_sender

# Demande à l'émetteur d'envoyer la commande HELO ou EHLO avant d'envoyer
# la commande MAIL FROM: ou ETRN.
# Cette option peut poser des problèmes si les serveurs mail qui vous
# contact sont mal configurés. Mais calme certains virus ...
smtpd_helo_required = yes

# Restrictions appliquées après la commande "HELO ou EHLO"
# - Rejette la requête quand le nom d'hôte du serveur distant n'est pas
# un FQDN (demandé par la RFC).
# - Rejette la requête quand la syntaxe du nom d'hôte n'est pas correcte.
smtpd_helo_restrictions =
    reject_non_fqdn_helo_hostname,
    reject_invalid_helo_hostname,
    permit

# Restrictions appliquées après la commande "MAIL FROM"
# - Rejette la requête si l'adresse de l'émetteur n'est pas sous la forme
# pleinement qualifiée requise par la RFC.
# - Rejette la requête lorsque l'adresse d'expédition n'a pas
# d'enregistrement DNS A ou MX correspondant, ou lorsque cet
# enregistrement MX est malformé.
# - Interroge le serveur MX de l'émetteur pour savoir si le login
# existe :
# Certains sites risquent de vous mettre en liste noire lorsque vous
# l'aurez sondé trop souvent (un sondage est une session SMTP qui ne
# livre aucun message) ou lorsque vous l'aurez sondé trop souvent avec
# des adresses inexistantes. Voir la section Verification :
# http://www.postfix.org/ADDRESS_VERIFICATION_README.html#limitations

# Comme j'utilise un serveur dédié pour l'envoi des mails, il faut
# ajouter cette option : address_verify_relayhost = (vide)
# pour que le serveur MX interroge directement le serveur MX de
# l'émetteur sans passer par son relayhost.
smtpd_sender_restrictions =
    reject_non_fqdn_sender,
    reject_unknown_sender_domain,
    reject_unverified_sender,
    permit

address_verify_relayhost =

# Restrictions appliquées après la commande "RCPT TO"
# - Rejette les serveurs mail qui parlent trop tôt.
# - Rejette le mail quand l'adresse de destination est connue comme un
# bounce ou qu'elle n'existe pas.
# - Rejette le mail quand l'adresse de destination n'existe pas.
# - Rejette le mail quand le domaine de destination est mal formaté ou
# inexistant (demandé par la RFC).
# - Rejette le mail si nous ne sommes pas la destination finale pour
# cette adresse.
# - Contact le service policyd-weight sur la machine distante
# nas.alex.dmz afin d'interroger des serveurs RBL (Real-time Blackhole
# List) qui centralisent les adresses IP des spammeurs.
# Renforce la lutte anti-spam malgré le greylisting.
# Attention quand même car des FAI peuvent se retrouver dans ces listes !
# - Contact le service Postgrey (greylisting) sur la machine distante
# nas.alex.dmz
smtpd_recipient_restrictions =
    reject_unauth_pipelining,
    reject_unverified_recipient,
    reject_unlisted_recipient,
    reject_non_fqdn_recipient,
    reject_unknown_recipient_domain,
    reject_unauth_destination,
    check_policy_service inet:nas.alex.dmz:12525,
    check_policy_service inet:nas.alex.dmz:60000,
    permit

# Restrictions appliquées après la commande "DATA"
# Rejette les serveurs mail qui parlent trop tôt.
# Rejette la requête lorsque l'expéditeur dans l'enveloppe est l'adresse
# nulle et que le message contient plusieurs destinataires dans l'enveloppe.
smtpd_data_restrictions =
    reject_unauth_pipelining,
    reject_multi_recipient_bounce

# Rejette le mail quant l'adresse de l'émetteur est absente
# (Return-Path). Permet de limiter les mails envoyés par des worms ou
# malware. Cette option peut poser des problèmes si les serveurs mail qui
# vous contact ne donnent pas le champs : adresse de réponse.
smtpd_reject_unlisted_sender = yes

# Rejette tous les backscatter mails.
# Inutile pour Postfix 2.4 et supérieur.
# (Voir http://www.postfix.org/BACKSCATTER_README.html)
unknown_local_recipient_reject_code = 550

# Le temps maximum avant qu'un message en file d'attente soit considéré
# comme non-livrable (5 jours par défaut).
bounce_queue_lifetime = 4h

# Temps maximal de présence dans la file d'attente avant rejet (5 jours par défaut).
maximal_queue_lifetime = 1d

# Volume maximum du message original envoyé dans une notification de
# non-livraison (en octets).
bounce_size_limit = 1000

# Permet de filtrer les types de pièces jointes attachées aux mails.
# (Voir http://www.postfix.org/header_checks.5.html)
mime_header_checks = regexp:/etc/postfix/mime_header_checks.regexp

# Permet de filtrer les exploits IFRAME pour les corps de message HTML,
# certains mots ou groupes de mots considérés comme du spam.
body_checks = regexp:/etc/postfix/body_checks.regexp



Créez le fichier /etc/postfix/mime_header_checks.regexp :

/filename=\"?(.*)\.(bat|chm|cmd|com|cpl|do|exe|hta|jse|rm|scr|pif|vbe|
vbs|vxd|xl)\"?$/
    REJECT For security reasons attachments of this type are rejected.
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+\.(lnk|cpl|asd|hlp|ocx|
reg|bat|c[ho]m|cmd|exe|dll|vxd|pif|scr|hta|jse?|sh[mbs]|vb[esx]|ws[fh]|
wav|mov|wmf|xl))"?\s*$/
    REJECT Attachment type not allowed. File "$2" has the unacceptable extension "$3"



Créez le fichier /etc/postfix/body_checks.regexp :

/^<iframe src=(3D)?cid:.* height=(3D)?0 width=(3D)?0>$/
    REJECT IFRAME vulnerability exploit
#
# Les expressions suivantes permettent de détecter ces mots même s'ils
# sont maquillés (VtAGRvA, C1alis, repl1ca w4tches).
# Voir ce site pour générer vos propres mots interdits.
#
# cialis
#
/\b[Cc¢Çç]\W{0,3}[IiÌÍÎÏìíîï¡l1|!]
\W{0,3}[AaÀÁÂÃÄÅàáâãäå4@]\W{0,3}[Ll£¡1|!]\W{0,3}[IiÌÍÎÏìíîï¡l1|!]
\W{0,3}[Ss]\b/
    REJECT SPAM
#
# cialisofttab(s)
#
/\b[Cc¢Çç]\W{0,3}[IiÌÍÎÏìíîï¡l1|!]
\W{0,3}[AaÀÁÂÃÄÅàáâãäå4@]\W{0,3}[Ll£¡1|!]\W{0,3}[IiÌÍÎÏìíîï¡l1|!]
\W{0,3}[Ss]\W{0,3}[OoÒÓÔÕÖØòóôõöø0]\W{0,3}[Ff]\W{0,3}[Tt]\W{0,3}[Tt]\W{0,
3}[AaÀÁÂÃÄÅàáâãäå4@]\W{0,3}[Bbß]+\W{0,3}[Ss]?\b/
    REJECT SPAM
#
# viagragel
#
/\b[Vv]\W{0,3}[IiÌÍÎÏìíîï¡l1|!]
\W{0,3}[AaÀÁÂÃÄÅàáâãäå4@]\W{0,3}[Gg]\W{0,3}[Rr]\W{0,3}[AaÀÁÂÃÄÅàáâãäå4@]
\W{0,3}[Gg]\W{0,3}[EeÈÉÊËèéêë€3]\W{0,3}[Ll£¡1|!]\b/
    REJECT SPAM
#
# viagrasofttab(s)
#
/\b[Vv]\W{0,3}[IiÌÍÎÏìíîï¡l1|!]
\W{0,3}[AaÀÁÂÃÄÅàáâãäå4@]\W{0,3}[Gg]\W{0,3}[Rr]\W{0,3}[AaÀÁÂÃÄÅàáâãäå4@]\
W{0,3}[Ss]\W{0,3}[OoÒÓÔÕÖØòóôõöø0]\W{0,3}[Ff]\W{0,3}[Tt]\W{0,3}[Tt]\W{0,3
}[AaÀÁÂÃÄÅàáâãäå4@]\W{0,3}[Bbß]+\W{0,3}[Ss]?\b/
    REJECT SPAM
#
# pharmacy store
#
/\b[Pp]\W{0,3}[Hh]\W{0,3}[AaÀÁÂÃÄÅàáâãäå4@]\W{0,3}[Rr]\W{0,3}[Mm]\W{0,3}
[AaÀÁÂÃÄÅàáâãäå4@]\W{0,3}[Cc¢Çç]\W{0,3}[Yy¥Ýýÿ]\W{0,3}[ ]
\W{0,3}[Ss]\W{0,3}[Tt]\W{0,3}[OoÒÓÔÕÖØòóôõöø0]\W{0,3}[Rr]\W{0,3}[EeÈÉÊËèé
êë€3]\b/
    REJECT SPAM
#
# check us healthcare
#
/\b[Cc¢Çç]\W{0,3}[Hh]\W{0,3}[EeÈÉÊËèéêë€3]\W{0,3}[Cc¢Çç]\W{0,3}[Kk]\W
{0,3}[ ]\W{0,3}[UuÙÚÛÜùúûü]\W{0,3}[Ss]\W{0,3}[ ]
\W{0,3}[Hh]\W{0,3}[EeÈÉÊËèéêë€3]\W{0,3}[AaÀÁÂÃÄÅàáâãäå4@]\W{0,3}[Ll£¡1|!]
\W{0,3}[Tt]\W{0,3}[Hh]\W{0,3}[Cc¢Çç]\W{0,3}[AaÀÁÂÃÄÅàáâãäå4@]\W{0,3}[Rr]
\W{0,3}[EeÈÉÊËèéêë€3]\b/
    REJECT SPAM
#
# replica watche(s)
#
/\b[Rr]\W{0,3}[EeÈÉÊËèéêë€3]\W{0,3}[Pp]\W{0,3}[Ll£¡1|!]
\W{0,3}[IiÌÍÎÏìíîï¡l1|!]\W{0,3}[Cc¢Çç]\W{0,3}[AaÀÁÂÃÄÅàáâãäå4@]\W{0,3}[ ]
\W{0,3}[Ww]\W{0,3}[AaÀÁÂÃÄÅàáâãäå4@]\W{0,3}[Tt]\W{0,3}[Cc¢Çç]\W{0,3}[Hh]\
W{0,3}[EeÈÉÊËèéêë€3]+\W{0,3}[Ss]?\b/
    REJECT SPAM
#
# pills price
#
/\b[Pp]\W{0,3}[IiÌÍÎÏìíîï¡l1|!]\W{0,3}[Ll£¡1|!]\W{0,3}[Ll£¡1|!]
\W{0,3}[Ss]\W{0,3}[ ]\W{0,3}[Pp]\W{0,3}[Rr]\W{0,3}[IiÌÍÎÏìíîï¡l1|!]
\W{0,3}[Cc¢Çç]\W{0,3}[EeÈÉÊËèéêë€3]\b/
    REJECT SPAM
#
# penis enlargement
#
/\b[Pp]\W{0,3}[EeÈÉÊËèéêë€3]\W{0,3}[NnÑñ]\W{0,3}[IiÌÍÎÏìíîï¡l1|!]
\W{0,3}[Ss]\W{0,3}[ ]\W{0,3}[EeÈÉÊËèéêë€3]\W{0,3}[NnÑñ]\W{0,3}[Ll£¡1|!]
\W{0,3}[AaÀÁÂÃÄÅàáâãäå4@]\W{0,3}[Rr]\W{0,3}[Gg]\W{0,3}[EeÈÉÊËèéêë€3]
\W{0,3}[Mm]\W{0,3}[EeÈÉÊËèéêë€3]\W{0,3}[NnÑñ]\W{0,3}[Tt]\b/
    REJECT SPAM


Créez le fichier /etc/postfix/blacklisted_sender :

# Domaine ou IP.
rolexreplica.com REJECT You are blacklisted
90.123.456.78 REJECT You are blacklisted


Puis lancez cette commande pour construire la base :

mx1:~# postmap /etc/postfix/blacklisted_sender



Modifiez le fichier /etc/aliases pour rediriger les mails envoyés au compte root vers un autre compte de votre choix :

# See man 5 aliases for format
postmaster:    root
root:          blackhole@alex.lan


Lancez cette commande pour reconstruire la base de données des alias mail :

mx1:~# newaliases



Redémarrez le service Postfix :

mx1:~# /etc/init.d/postfix restart
Stopping Postfix Mail Transport Agent: postfix.
Starting Postfix Mail Transport Agent: postfix.
mx1:~#




Configuration de Postfix sur smtp.alex.fr

Modifiez le fichier /etc/resolv.conf :

search alex.dmz alex.fr alex.com alex.org
nameserver 172.16.0.1
nameserver 172.17.0.1



Modifiez le fichier /etc/network/interfaces :

# The loopback network interface
auto lo eth0 eth1
iface lo inet loopback

# The primary network interface
allow-hotplug eth0 eth1
iface eth0 inet static
address 123.45.67.10
netmask 255.255.255.240
gateway 123.45.67.14

iface eth1 inet static
address 172.16.0.7
netmask 255.255.255.0
up route add -net 172.17.0.0/16 gw 172.16.0.254
up route add -net 172.18.0.0/16 gw 172.16.0.254



Modifiez le fichier /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

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${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 = smtp.alex.fr
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = smtp.alex.dmz, localhost.alex.dmz, localhost
relayhost =

# Accepte d'envoyer des mails pour ces réseaux.
mynetworks = 127.0.0.0/8, 172.16.0.0/24, 172.17.0.0/16, 172.18.0.0/16

#mailbox_size_limit = 0
recipient_delimiter = +

# Le service Postfix n'écoutera pas sur son interface "Internet" puisque
# j'accepte d'envoyer des mails uniquement pour mes réseaux internes.
inet_interfaces = localhost, smtp.alex.dmz

# Permet de distribuer les mails de nos domaines
# (alex.fr, alex.com, alex.org) directement vers le serveur mail final
# sans passer pas nos MX.
transport_maps = ldap:transport

# Transport
transport_server_host = ldap2.alex.dmz ldap1.alex.dmz
transport_server_port = 389
transport_bind = no
transport_version = 3
transport_timeout = 20
transport_search_base = dc=meta
transport_scope = sub
transport_query_filter = (&(objectClass=MailDomain)(|(mailDomainName=%s)(mailDomainNameAlias=%s)))
transport_result_attribute = mailServer
transport_result_filter = smtp:[%s]

smtpd_reject_unlisted_sender = yes

unknown_local_recipient_reject_code = 550

mime_header_checks = regexp:/etc/postfix/mime_header_checks.regexp
body_checks = regexp:/etc/postfix/body_checks.regexp



Copiez les deux fichiers mime_header_checks.regexp et body_checks.regexp depuis mx1.alex.fr

Modifiez le fichier /etc/aliases pour rediriger les mails envoyés au compte root vers un autre compte de votre choix :

# See man 5 aliases for format
postmaster:    root
root:          blackhole@alex.lan



Lancez cette commande pour reconstruire la base de données des alias mail :

smtp:~# newaliases



Redémarrez le service Postfix :

smtp:~# /etc/init.d/postfix restart
Stopping Postfix Mail Transport Agent: postfix.
Starting Postfix Mail Transport Agent: postfix.
smtp:~#



Note : Il faut que tous les serveurs Postfix soient en service si vous testez vos configurations en envoyant des mails, sinon vous aurez des messages du style "User unknown ..." alors que votre configuration est bonne.






Sources :
http://www.postfix.org/documentation.html
http://postfix.traduc.org/
http://www.debian-administration.org/articles/168
http://www.mjhall.org/email.php
http://www.howtoforge.com/procmail_tips_recipes
http://www.freesoftwaremagazine.com/articles/focus_spam_postfix/




Dernière modification : 19/12/08

 

Copyright © 04/02/2004, Arnofear

Contrat Creative Commons Ce document est publié sous licence Creative Commons
Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique :
http://creativecommons.org/licenses/by-nc-sa/3.0/deed.fr