...
deb
http://volatile.debian.org/debian-volatile etch/volatile main
MailAccount
(pour un compte utilisateur)
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)
.
...
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
...
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
#
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
#!/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
#
See man 5 aliases for format
postmaster: root
clamav: root
root: blackhole@alex.lan
nas1:~# newaliases
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"
nas1:~#
/etc/init.d/postgrey restart
Restarting
postfix greylisting daemon: postgrey.
nas1:~#
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';
nas1:~#
/etc/init.d/policyd-weight restart
Restarting
policyd-weight: terminating .policyd-weight.
nas1:~#
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
#
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
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
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
nas1:~#
/etc/init.d/spamassassin restart
Restarting
SpamAssassin Mail Filter Daemon: spamd.
nas1:~#
#!/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
nas1:~# sa-update
Modifiez les
paramètres du service de mise à jour des définitions de virus avec
cette commande :
nas1:~# dpkg-reconfigure clamav-freshclam
nas1:~# dpkg-reconfigure clamav-base
nas1:~#
/etc/init.d/clamav-daemon restart
Stopping
ClamAV daemon: clamd Waiting . . . . .
Starting
ClamAV daemon: clamd Running as user clamav (UID 102, GID 103)
téléchargez-le
et installez-le.
nas1:~# dpkg -i clamassassin_1.2.4-1_all.deb
#
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
#
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
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
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
#
#
/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
nas1:~#
/etc/init.d/nscd restart
Restarting
Name Service Cache Daemon: nscd.
nas1:~#
/etc/init.d/postfix restart
Stopping
Postfix Mail Transport Agent: postfix.
Starting
Postfix Mail Transport Agent: postfix.
nas1:~#
search
alex.dmz alex.fr alex.com alex.org
nameserver
172.16.0.1
nameserver
172.17.0.1
#
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
#
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
/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"
/^<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
#
Domaine ou IP.
rolexreplica.com
REJECT You are blacklisted
90.123.456.78
REJECT You are blacklisted
mx1:~# postmap /etc/postfix/blacklisted_sender
#
See man 5 aliases for format
postmaster: root
root: blackhole@alex.lan
mx1:~# newaliases
mx1:~#
/etc/init.d/postfix restart
Stopping
Postfix Mail Transport Agent: postfix.
Starting
Postfix Mail Transport Agent: postfix.
mx1:~#
search
alex.dmz alex.fr alex.com alex.org
nameserver
172.16.0.1
nameserver
172.17.0.1
#
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
#
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
#
See man 5 aliases for format
postmaster: root
root: blackhole@alex.lan
smtp:~# newaliases
smtp:~#
/etc/init.d/postfix restart
Stopping
Postfix Mail Transport Agent: postfix.
Starting
Postfix Mail Transport Agent: postfix.
smtp:~#
Copyright © 04/02/2004, Arnofear
![]() |
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 |