0% ont trouvé ce document utile (0 vote)
33 vues67 pages

Postfix Jtsiars

Pour Réseau 2

Transféré par

maxipascal28
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
33 vues67 pages

Postfix Jtsiars

Pour Réseau 2

Transféré par

maxipascal28
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Mise en oeuvre d’une messagerie

avec POSTFIX

Cas d’un serveur de messagerie d’un


Laboratoire

Centre d’Océanologie de Marseille


UMS 2196 CNRS

[Link]@[Link]

JT SIARS – Janvier 2005


Introduction
 Aujourd’hui un seul serveur de messagerie ne peut assumer toutes
les fonctions nécessaires :
 Relayage maitrisé
 Anti-virus
 Anti-spam
 Il est donc nécessaire de combiner plusieurs briques
 Une solution à base de logiciels libres
 Postfix-2.1.4 couplé avec

 Amavisd-new +

 antivirus Sophos + sophie + ClamAV

 SpamAssassin

 Greylisting (postgrey)

24/01/2005 ML - JT Siars 2
Postfix au Centre d'Océanologie de Marseille

 Un laboratoire CNRS - environ 250 personnes sur 2 sites


 Un mailhost central (MX) qui redistribue sur un site
« feuille »
 Gestion des boites par POPs + IMAPs

 Postfix-2.1.4 couplé avec


 Amavisd-new +
 antivirus Sophos + sophie + ClamAV
 SpamAssassin
 Greylisting (postgrey)

 Environ 15000 mails /jour en moyenne (entrées + sorties)


 Pentium IV 1Ghz : 1 Go RAM, 2 disques RAID 30Go
 Charge CPU assez faible (90% idle)

24/01/2005 ML - JT Siars 3
Introduction
 Anatomie du système : les binaires, les queues
 Configuration, administration de Postfix
 Exemple de config : un serveur, un « null » client
 Sécurité :
 Limiter le Relayage,

 Divers contrôles anti spam : filtrage d’adresses

 mise en cage (chroot)

 limiter les dénis de service : contrôles de charge

 couplage avec un scanneur de Mail et un antivirus


et analyseur de contenu (SA)

24/01/2005 ML - JT Siars 4
Introduction : Pourquoi Postfix?

 écrit et maintenu par wietse Venema (tctp-wrapper, satan...)


“Postfix attempts to be fast, easy to administer, and hopefully secure, while at the same time being
sendmail compatible enough to not upset your users.”

 Se présente comme une alternative à sendmail (canal historique)


apportant nativement des fonctionnalités intéressantes
 Conçu pour
 apporter une bonne compatibilité avec sendmail : au niveau de la ligne de

commande, des fichiers de conf (alias, .forward)


 Apporter une simplicité d’administration par une configuration facile à

comprendre : un fichier de conf, des variables « parlantes »


 Être rapide et sûr, par une architecture modulaire : plusieurs process

résidents en mémoire, et différentes queues de gestion des mails

24/01/2005 ML - JT Siars 5
Introduction : Pourquoi Postfix?
 Ecrit avec la sécurité comme principale préoccupation :

 Architecture non monolithique, extrêmement modulaire,


programme petits ayant chacun une fonction précise

 Nombreuses files d’attentes pour différentes phases de la


gestion du mail
 Pas de programme SUID
 Peut s’exécuter en environnement “chrooté”
 Architecture difficile à casser

24/01/2005 ML - JT Siars 6
Postfix :architecture du système

 Pas d’architecture monolithique... Postfix est composé


d’une dizaine de process assurant chacun une tâche et
communiquant entre eux par socket ou queues
 Réception de mail

24/01/2005 ML - JT Siars 7
Postfix : architecture du système

 Délivrance et envoi de mail

24/01/2005 ML - JT Siars 8
Postfix : phase 1 Réception/Insertion locale

 Le daemon « master » contrôle le lancement de tous les autres


daemons

 Sendmail / postdrop : créé pour l’homonymie et compatibilité de


l’interface avec sendmail « CH » :
 recoit les messages des utilisateurs locaux
 Dépose le message dans la queue « maildrop » via
l’intermédiaire du daemon « postdrop »
 Quelques compatibilités avec sendmail:
 Sendmail –bp /usr/bin/mailq -> ../sbin/sendmail
 Sendmail –I /usr/bin/newaliases -> ../sbin/sendmail

 Postdrop : dépose un mail dans la queue « maildrop » pour ne pas


que /var/spool/postfix/maildrop soit « world-writeable »

24/01/2005 ML - JT Siars 9
Postfix : phase 1 Réception/Insertion distante

 Smtpd : réception de mail d’hôtes distants. « smtpd » recoit les


connexions réseau (port 25) et engage la transaction smtp. Chaque
message reçu est envoyé au daemon « cleanup » et le message entrant
est déposé dans la queue « incoming »

 Réalise les premiers contrôles (directives de « [Link] )


 Contrôle sur les phases HELO, Mail From:, RCPT to: en fonction
de fichiers indexés (liste noire par exemple)
 content_filter : possibilité de passer le message à un process qui
va analyser le contenu (amavis) et rejeter le message ou le
réinjecter dans la chaine postfix.
 message_size_limit : taille max des messages
 smtpd_recipient_limit : nombre max de destinataires dans un
message

24/01/2005 ML - JT Siars 10
Postfix : phase 1 Réception/Insertion

 pickup: simple dépilage de la queue « maildrop », réceptionne les


messages et les envoie au daemon « cleanup »

 Tourne sous root, mais sans aucune interaction avec l’extérieur.


Peut être « chrooté » dans [Link]

 Prend en charge également la directive content_filter de


« [Link] » qui permet de passer le mail à un programme extérieur
pour analyse (amavis, spamassin) avant de le réinjecter dans le
circuit, ou le jeter!

24/01/2005 ML - JT Siars 11
Postfix : Phase 2 formatage des entêtes

 Cleanup + trivial_rewrite : vérification des entêtes smtp avant


de le déposer localement. Examen de Conformité au RFC822.
Canonicalise les messages reçus avant de les déposer dans la
queue « incoming », puis avertit le gestionnaire de queue qmgr
si tout est correct.
 Insère headers manquants : (Resent-) From: Message-Id: Date:
 Extrait les adresses de destination de l’enveloppe To: Cc: Bcc:
 Accès aux tables des aliases et reverse aliases
 Élimine les doublons dans les adresses de destination
 Traite les directives de « [Link] » d’examen des headers et du body et
de masquerade d’adresses

 Trivial-rewrite : appelé optionnellement si les adresses ne sont


pas FQDN. destiné à réécrire les adresses au format FQDN
nom@[Link]

24/01/2005 ML - JT Siars 12
Postfix : Phase 3 stockage – livraison - envoi

 Qmgr : dépile les messages de « incoming » et les remet


« intelligemment » (round robin) à un agent de livraison en
fonction de l’adresse de destination
 « local » | « procmail » délivrance locale /var/spool/mail
 Gestion du .forward
 smtp : résolution DNS de la destination et envoi vers l’extérieur
par smtp
 Pipe : envoi des messages vers un autre programme externe
(amavis)
 Bounce : gestion des messages non délivrables : empilement
dans la queue bounce, et envoi de message à l’émetteur.

24/01/2005 ML - JT Siars 13
Postfix : Les queues de mail

 Répartition intelligente des mails selon leur état de progression dans /


var/spool/postfix/
 Reprise après crash sans aucun problème
 Maildrop : dépot des messages émis localement
 Incoming : dépot des messages entrants émis localement +
extérieur smtp
 Active : mail “propres”...en cours de délivrance locale par qmgr,
taux de dépot contrôlé et limité
 Deferred : mail ne pouvant pas être délivrés tempo-rairement
(mailq affiche le status inscrit dans la queue “defer”)
 [Link] deferred
 Bounce : messages d’erreur, livraison impossible

 Gestion intelligente des files pour préserver les ressources de la


machine: leaky bucket, fairness, exponential backoff, slow start ...

24/01/2005 ML - JT Siars 14
Postfix : les fichiers de configuration

 2 fichiers de configuration principaux:


/etc/postfix/[Link] et /etc/postfix/[Link]
 Des fichiers indexés (lookup table) pour rechercher des
correspondances (pas de langage de réécriture d’adresses)
 aliases ml: libes@[Link]
 sender_canonical_maps (=reverse aliases)
 access (=liste noire)
 protected : les listes internes à protéger (all@[Link])
 insiders : les copains extérieurs autorisés à utiliser nos listes
 [Link], [Link] : recherche de motifs dans les
header ou le body
 mime_headers_checks : recherche de motifs dans les entêtes
MiME
 relocated : liste d’utilisateurs ayant changé d’adresse

24/01/2005 ML - JT Siars 15
Postfix : Les utilitaires d’administration

 Postfix [start | stop | reload |check | flush]


 Postfix reload (après chaque modification de [Link])

 Postmap : création des fichiers indexés (.db .dbm)


 Postconf [-d || -n || -l || -m] : utilitaire d’affichage ou configuration de
[Link]
 Postalias : maintenance des tables d'alias (compatible sendmail)
 Postcat : affichage lisible des mails dans les queues “deferred”
 Postsuper : gestion et maintenance des queues de mail (purge après
crash)
 mailq | tail +2 | awk 'BEGIN {RS = ""} /[Link]/ {print $1}' | tr -d '*!' | postsuper -d
-
 Postlog : envoyer un message à syslog

24/01/2005 ML - JT Siars 16
Postfix : configuration de base : « [Link] »

 Indiquer d’où viennent les mails (masquerade From: )


myhostname = [Link] (nom FQDN)
mydomain = [Link]
myorigin = $myhostname | $mydomain (souvent plus
adapté)
masquerade_domains = $mydomain

 Indiquer les messages conservés localement


(prévoir le cas où le serveur a plusieurs CNAME ou A record)
Ne pas oublier “localhost” à cause de amavis

mydestination = $myhostname localhost.$mydomain


www.$mydomain ftp.$mydomain

24/01/2005 ML - JT Siars 17
Postfix : configuration de base : « [Link] »

 Le relayage :
 qui autorise t-on à relayer les mails?
 Liste spécifique dans “mynetworks”
mynetworks = [Link]/22, [Link]/8
 ou bien, on laisse postfix régler ca par
mynetwork_style = host | subnet | class (subnet par défaut)
 Vers où autorise-t’on à relayer?
 Par défaut postfix relaye les mails des sites « étrangers » (clients hors
des réseaux autorisés) uniquement vers des réseaux autorisés (les
nôtres). Les destinations autorisées de l’extérieur sont celles indiquées
dans « relay_domains ». Par défaut postfix autorise tous les domaines
listés dans « mydestination »
 relay_domains = $mydestination, [Link]/22,
[Link]/24, [Link]/8, localhost, [Link]

24/01/2005 ML - JT Siars 18
Postfix : configuration de base

 Un « NULL » client :
Postfix d’une machine qui ne conserve rien… se contente de tout
renvoyer vers le mailhost officiel MX du site.

 myhostname = [Link]
 mydomain = [Link]
 myorigin = $mydomain
 relayhost = [Link]
 mynetworks = [Link]/8 [Link]/24 (les réseaux de
confiance)
 mydestination = (rien)

24/01/2005 ML - JT Siars 19
Postfix : Sécurité

 Aucun binaire tournant avec le bit suid, Pas d'exécution sous l'uid
root
 Prémices du filtrage AntiSPAM : filtrage d’adresses au niveau
de chaque phase de la transaction SMTP
 Contrôle lors de la connexion du client sur le port 25
 Contrôle sur HELO
 Contrôle sur le sender « Mail From »
 Contrôles sur les différents Headers par regexp (Subject)
 Contrôles sur le destinataire (recipient)
 Possibilité de mise en cage (chroot) de Postfix
 limitation des dénis de service par contrôle de charge

24/01/2005 ML - JT Siars 20
Postfix : premiers contrôles antispam
1. Contrôle sur le client SMTP (IP qui initie la connexion)

smtpd_client_restrictions =
permit_mynetworks, [on autorise nos IP a émettre]
hash:/etc/postfix/access, [rejet si dans liste noire locale]
reject_maps_rbl, [rejet si dans $maps_rbl_domains (désuet en v2.1.x)]
reject_rbl_client [Link] [rejet si dans DNSBL [Link]]
(reject_unknown_client ) [rejet si client sans enregistrement PTR
dans le DNS i.e pas de reverse address]

 maps_rbl_domains = [Link], [Link], [Link],


[Link], [Link], [Link]
 [ne pas en mettre trop!!!]

24/01/2005 ML - JT Siars 21
Postfix : LES DNSBL

Une DNSBL est une Liste Noire sous forme de DNS


Les raisons de l’inclusion d’adresses IP recensées dans
ces DNSBL peut varier
- Sites qui ont envoyé des spams
- Adresses IP de serveurs de mail agissant en relai ouvert
- Listes de DNSBL [Link]

- [Link]

24/01/2005 ML - JT Siars 22
Postfix : premiers contrôles antispam

2. Contrôles sur la phase HELO

smtpd_helo_required = yes [no par défaut]


smtpd_helo_restriction =

reject_invalid_hostname, [adresse malformée]

reject_non_fqdn_hostname [adresse non FQDN]

reject_unknown_hostname, [adresse sans A ou MX] (sévère)

24/01/2005 ML - JT Siars 23
Postfix : premiers contrôles antispam

3. Contrôles sur le « sender » Mail from:


(tout permis par défaut)
smtpd_sender_restrictions =
hash:/etc/postfix/access,
reject_unknown_sender_domain, ## adresse sans MX ou A records
dans le DNS
reject_non_fqdn_sender, ##adresse non FQDN
check_sender_access, hash:/etc/postfix/access, ## rejet si présence
en liste noire locale
check_sender_mx_access hash:/et/postfix//mx_access, ## rejet si
MX bidons
reject_maps_rbl

24/01/2005 ML - JT Siars 24
Postfix : contrôles sur mx_sender

 grep « RFC 1918 » /var/log/mail/info


Jan 22 [Link] com1 postfix/smtpd[22894]: NOQUEUE: reject: RCPT from
unknown[[Link]]: 554 <QVPEXX@[Link]>: Sender
address rejected: mail server in RFC 1918 private network;
from=<QVPEXX@[Link]> to=<gilbert@[Link]>
proto=SMTP helo=<[Link]>

$ host -t mx [Link]
[Link] mail is handled by 0 [Link].

$ host [Link]
[Link] has address [Link]

24/01/2005 ML - JT Siars 25
Postfix : contrôles sur mx_sender

 more /opt/postfix/etc/mx_access
 [Link] reject mail server in verisign wild-card domain
 127 reject mail server in loopback network
 0 reject mail server in broadcast network
 10 reject mail server in RFC 1918 private network
 169.254 reject mail server in link local network
 172.16 reject mail server in RFC 1918 private network
 192.0.2 reject mail server in TEST-NET network
 192.168 reject mail server in RFC 1918 private network
 69.6.61 bad MX record -- spammer
 209.133.120 bad MX record -- spammer

24/01/2005 ML - JT Siars 26
Postfix : premiers contrôles antispam

4. Contrôles sur le destinataire rcpt to


relay_domains = $mydestination, [Link]/22, [Link]/24,
[Link]/8, localhost, [Link]

smtpd_recipient_restrictions =
permit_mynetworks, (accepte si le rcpt to est dans mynetworks)
hash:/etc/postfix/protected, (protection des listes internes)
reject_unauth_destination, (rejette le mail sauf si le destinataire est dans
relay_domains ou mydestination)
check_policy_service inet:[Link]:10023 (pour le GreyListing)

smtpd_restriction_classes = insiders_only [protection listes internes]


insiders_only = check_sender_access, hash:/etc/postfix/insiders, reject

24/01/2005 ML - JT Siars 27
Postfix : examen de contenus

5. Filtrage sur des motifs (regexp) des header SMTP

 header_checks = regexp:/etc/postfix/[Link]

/^Content-Type: multipart.*"----[A-F0-9]
+_Outlook_Express_boundary"/i REJECT

/^Subject:.*\$[0-9]+.*$/ REJECT
/^Subject:.*\DVD.*$/ REJECT
/^Subject:.*\Viagra.*$/ REJECT

24/01/2005 ML - JT Siars 28
Postfix : premiers examen de contenus

6. Filtrage sur des motifs (regexp) dans les entêtes MIME


Une directive spéciale pour ne verifier que les entêtes des
attachments MIME situés à l’intérieur du message.. Utile pour
les extensions des pièces jointes

 Mime_header_checks =
regexp:/etc/postfix/mime_header_checks.regexp

/^\s*Content-(Disposition|Type).*name\s* =\s*"?(.+\.(cpl|lnk|asd|hlp|ocx|
reg|bat|c[ho]m|cmd|dll|vxd|pif|wab|scr|hta|jse?|sh[mbs]|vb[esx]|ws
[fh]|wav|mov|xl))"?\s*$/
REJECT piece jointe non autorisee. Le fichier "$2" du type "$3" est
refuse.

24/01/2005 ML - JT Siars 29
Postfix : Directives de contrôle de charge
Des paramètres pour réguler la charge et lutter contre les DoS

 limitation du nombre des process lancés


 default_process_limit (défaut: 50) : contrôle le taux d’entrées sorties de mails via le
nombre de process concurrents de postfix (smtp, smtpd)
 régulation du nombre de connexions simultanées
 local_destination_concurrency_limit : max de délivrance simultanées locale identique
 default_destination_concurrency_limit : nombre max de mail simultanés vers un site
distant (protection des sites extérieurs)
 limitation du nombre de destinataires par mail
 smtpd_recipient_limit : nombre maximal de destinataires dans un mail
 gestion des tentatives de réémission vers sites inaccessibles
 maximal_queue_lifetime (5 jours) : temps de rétention avant que le message soit
déclaré non délivrable
 queue_run_delay (1000s) : fréquence des retentatives

24/01/2005 ML - JT Siars 30
Postfix : contrôle de ressources mémoire

Postfix possède des directives de limite d’utilisation de la mémoire afin


de limiter les dénis de services.
« The idea is to keep running under conditions of stress, without making the
problem worse. »

 message_size_limit = 7000000
 Header_size_limit = 2048
 line_length_limit = 102400
 bounce_size_limit = 50000

24/01/2005 ML - JT Siars 31
Postfix : Directives de réécriture d’adresses

Pas de langage complexe de réécriture. Tout se fait à travers


de simples fichiers indexés (lookup table) au format dbm ou
hash)

 réécriture en pré[Link]
 sender_canonical_maps = /etc/postfix/revaliases

 masquage d ’adresse
 masquerade_domains = [Link]

 redirection d ’adresses virtuelles


 virtual_alias_maps = hash:/etc/postfix/virtual

24/01/2005 ML - JT Siars 32
Postfix Protection des listes de mail

 Protection des listes de mail internes

smtpd_recipient_restrictions = hash:/etc/postfix/protected,
smtpd_restriction_classes = insiders_only
insiders_only = check_sender_access, hash:/etc/postfix/insiders,
reject
 Dans /etc/postfix/insiders
mlibes@[Link] OK
[Link]@[Link] OK

 Dans /etc/postfix/protected
info-soc@[Link] insiders_only
liste-ita@[Link] insiders_only

24/01/2005 ML - JT Siars 33
Postfix : environnement chrooté (dans [Link])

 mkdir /var/spool/postfix/etc /var/spool/postfix/lib


 mkdir -p /var/spool/postfix/usr/lib/zoneinfo
 cp /etc/localtime /etc/services /etc/[Link] /
etc/[Link] ~etc
 ln –s /etc/localtime ~usr/lib/zoneinfo
 cp /lib/libnss_* ~lib
# =====================================================
# service type private unpriv chroot wakeup maxproc(50) command arg
# =====================================================
smtp inet n - y - - smtpd
pickup fifo n - y 60 1 pickup
cleanup unix n - y - 0 cleanup
qmgr fifo n - y 300 1 nqmgr
rewrite unix - - y - - trivial-rewrite
smtp unix - - y - - smtp

24/01/2005 ML - JT Siars 34
Conclusions : Pourquoi Postfix?
 Simplicité d’administration (majorité d’options par défaut!)
 configuration facile à comprendre : un fichier de conf, des
variables « parlantes »

 fonctionnalités intéressantes (filtrages, contrôles de


charge, collaboration avec autres programmes externes)
 Excellente tenue en charge en cas de déni de service
 Architecture modulaire : plusieurs binaires , et queues de
gestion des mails

 Sécurité prise en compte nativement : relayage, mise en


cage, contrôle antispam basique, liste noire, pas de
binaires suid, ...

24/01/2005 ML - JT Siars 35
Conclusions : Pourquoi Postfix?

 bonne compatibilité avec les fichiers de conf de sendmail,


(alias, .forward)
 Excellente portabilité sur plusieurs plateformes
 Pas de mauvaises surprises en exploitation, ça fait ce que
ça dit...
 Exploitation sans problème au COM depuis 5ans : ça
marche tout seul
 Large communauté d'utilisateurs et de développeurs :
Beaucoup de logiciels complémentaires

[Link]

24/01/2005 ML - JT Siars 36
AMAVISD-NEW
[Link]
 Amavisd-new est un scanneur de mail pour détecter virus et/ou
spams
 C’est un daemon en Perl interfacé avec postfix par un socket.
Amavisd-new est une amélioration des versions précédentes, car il
est « daemonisé » (résident en mémoire et pré-forké i.e plusieurs
daemon en attente)
 Il permet d’appliquer un filtrage de contenu par un antivirus ou un
antispam
 Il reconnait l’installation d’un grand nombre d’antivirus (dont sophos et
clamav)
 Il lance le module perl Mail::SpamAssassin pour détecter les spams
 On l’utilise généralement au niveau de la réception de mails sur le
serveur de mails
 il ajoute un entête, peut mettre en quarantaine, rejetter, émettre un avis
de non délivrance

24/01/2005 ML - JT Siars 37
AMAVISD-NEW : installation
 Bien lire le fichier INSTALL
 Créer un compte et groupe “amavis”
 Adduser amavis –s /bin/false
 mkdir /var/amavis
 mkdir /var/amavis/tmp /var/amavis/var /var/amavis/db
 chown -R amavis:amavis /var/amavis
 chmod -R 750 /var/amavis
 cp [Link] /etc/ ; chown root /etc/[Link]
 chmod 644 /etc/[Link]
 mkdir /var/virusmails ; chown amavis:amavis /var/virusmails
 chmod 750 /var/virusmails

 Récupérer les modules Perl


 perl –MCPAN –e shell

24/01/2005 ML - JT Siars 38
AMAVISD-NEW : modules perl nécessaires
 Archive::Tar ([Link])
 Archive::Zip ([Link]) (1.14 or later should be used!)
 Compress::Zlib ([Link])
 Convert::TNEF ([Link])
 Convert::UUlib ([Link]) (stick to the new versions!)
 MIME::Base64 ([Link])
 MIME::Parser ([Link]) (latest version from CPAN )
 Mail::Internet (MailTools-1.58 or later have workarounds for Perl bugs)
 Net::Server ([Link])
 Net::SMTP ([Link]) (use libnet-1.16 or latter for performance)
 Digest::MD5 ([Link])
 IO::Stringy ([Link])
 Time::HiRes ([Link]) (must use 1.49 or later, )
 Unix::Syslog ([Link])
 BerkeleyDB with bdb library 3.2 or later (4.2 or later preferred)

24/01/2005 ML - JT Siars 39
AMAVISD-NEW : progs nécessaires
file: [Link]
compress: [Link]
gzip: [Link]
bzip2: [Link]
nomarch: [Link]
arc: [Link]
lha: [Link]
unarj: [Link]
arj: [Link] (arj is preferable to unarj)
rar, unrar: [Link] [Link]
zoo: [Link]
lzop: [Link]
freeze: [Link]
ripOLE: [Link]
pax: [Link]
cpio: [Link]
ClamAV: [Link] (open source virus scanner)
SAVI: [Link]
dspam:
24/01/2005 [Link]
ML - JT Siars 40
AMAVISD-NEW: interfaçage avec postfix
 Dans [Link]
 content_filter = smtp-amavis:[[Link]]:10024
 Dans [Link]
smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes

[Link]: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=[Link]/8

24/01/2005 ML - JT Siars 41
AMAVISD-NEW : configuration
 Editer /etc/[Link] (beurk)
 $max_servers = 3; # number of pre-forked children
 $daemon_user = 'vscan'; # (no default; customary: vscan or amavis)
 $daemon_group = 'vscan'; # (no default; customary: vscan or amavis)

 $mydomain = '[Link]'; # a convenient default for other settings

 $MYHOME = '/var/amavis'; # a convenient default for other settings


 $TEMPBASE = "$MYHOME/tmp"; # directory, needs to be created
 $QUARANTINEDIR = '/var/virusmails';

24/01/2005 ML - JT Siars 42
AMAVISD-NEW : configuration
 $inet_socket_port = 10024; # daemon écoute sur ce port TCP
 $sa_spam_subject_tag = '***SPAM*** '; #tag mis dans le Subject si…

 $sa_tag_level_deflt = 2.0; # ajoute entetes spam si >= niveau


 $sa_tag2_level_deflt = 5.0; # ajoute 'spam detected' headers
 $sa_kill_level_deflt = 15.0; # declenche destruction de spam (quarantaine)
 $sa_dsn_cutoff_level = 10; # niveau en dessous duquel DSN n’est pas
envoyé
 $sa_mail_body_size_limit = 200*1024; #taille en desssous de laquelle SA
examine le mail

 $final_virus_destiny = D_BOUNCE || D_DISCARD || D_PASS ||


D_REJECT;
 $final_banned_destiny = D_BOUNCE;
 $final_spam_destiny = D_PASS ;
 $final_bad_header_destiny = D_PASS;

24/01/2005 ML - JT Siars 43
AMAVISD-NEW : configuration
 D_REJECT : mail non délivré, un avis de non remise est renvoyé par postfix
si possible
 D_BOUNCE : idem, avis envoyé par amavisd-new, SAUF si un virus fait partie
de la liste $viruses_that_fake_sender_re
(reject et bounce sont quadi identiques, la différence provient de qui envoie l’avis)

 D_DISCARD: mail rejetté, aucun avis envoyé à l’extérieur.. Mail perdu, mais
mis en quarantaine
 D_PASS : le mail passe et est délivré même en dépit d’un mauvais contenu
(spam ou virus)

 Liste des virus qui usurpent les adresses:


 $viruses_that_fake_sender_re = new_RE(
qr'nimda|hybris|klez|bugbear|yaha|braid|sobig|fizzer|palyh|peido|holar'i,

24/01/2005 ML - JT Siars 44
AMAVISD-NEW : configuration
 Décommenter les lignes correspondant aux antivirus
présents

 @av_scanners = (
 ['ClamAV-clamd',
\&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"],
qr/\bOK$/, qr/\bFOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
['Sophie',
\&ask_daemon, ["{}/\n", '/var/run/sophie'],
qr/(?x)^ 0+ ( : | [\000\r\n]* $)/, qr/(?x)^ 1 ( : | [\000\r\n]* $)/,
qr/(?x)^ [-+]? \d+ : (.*?) [\000\r\n]* $/ ],

24/01/2005 ML - JT Siars 45
AMAVISD-NEW : lancement
 Avoir installé un antivirus et spamassassin au préalable (ils
sont reconnus au lancement)
 Il suffit de lancer le daemon
 /usr/local/bin/amavisd [debug]
 En écoute sur le port 10024, il récupère les mails que lui
envoie Postfix.. Les traite et les remet dans la chaîne de
traitement sur le port 10025
 Bien regarder les logs lors du lancement
 En période de tests, placer la variable de postfix
 soft_bounce=yes
 En cas de problème aucun message n’est rejeté ou mis en bounce

24/01/2005 ML - JT Siars 46
L’antivirus CLAMAV : [Link]

 Clamav est un Antivirus openSource très efficace (100% vs


Sophos), découverte et mise à jour parfois avant les AV
commerciaux.
 Il est bon d’avoir 2 antivirus qui se complètent mutuellement
 En cas de défaut de mise à jour de l’un
 En cas d’erreurs sur le fonctionnement d’un des 2
 Ex:Jan 23 [Link] com1 amavis[26466]: (26466-02) ClamAV-clamd:
Can't connect to UNIX socket /var/run/clamav/clamd: Permission
denied, retrying (2)

 Installation:
 ./configure –sysconfdir=/etc && make && make install

24/01/2005 ML - JT Siars 47
L’antivirus CLAMAV : Configuration

 Dans /etc/[Link]
 LogFile /var/log/[Link]
 LogTime
 LogSyslog
 PidFile /var/run/[Link]
 DatabaseDirectory /usr/local/share/clamav
 LocalSocket /tmp/clamd
 ## attention avec le socket déclaré dans /etc/[Link]
 ['ClamAV-clamd',
 # \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"],
 \&ask_daemon, ["CONTSCAN {}\n", "/tmp/clamd"],
 qr/\bOK$/, qr/\bFOUND$/,
 qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],

 User clamav

24/01/2005 ML - JT Siars 48
L’antivirus CLAMAV : Lancement
 Lancement du daemon de scan clamd:
 /bin/chown clamav /var/log/clam*
 chmod 600 /var/log/[Link] /var/log/[Link]
 /usr/local/sbin/clamd
 Lancement du daemon de mise à jour
 /usr/local/bin/freshclam -d -c 6 -l /var/log/[Link]
 Lister les signatures de virus
 sigtool --list-sigs
 Lancer clamav avant amavisd, Amavisd détecte
automatiquement la présence de clamav
 Jan 23 [Link] com1 amavis[26925]: Using internal av scanner code for (primary)
ClamAV-clamd
 Jan 23 [Link] com1 amavis[26925]: Using internal av scanner code for (primary)
Sophie
 Jan 23 [Link] com1 amavis[26925]: Found secondary av scanner ClamAV-clamscan
at /usr/local/bin/clamscan
24/01/2005 ML - JT Siars 49
Sophie : interface entre Amavisd et Sophos

 Sophie est un daemon qui utilise la librairie 'libsavi' de


l’antivirus Sophos (il est donc nécessaire d’avoir sophos AV + les
définitions de virus sur disque)
 Au lancement, Sophie :
 utilise l’interface de Sophos Anti-Virus (libsavi),
 charge les définitions de virus en mémoire,
 établit un socket et attend une connexion et un mail a scanner

 Sophie et les définitions de virus sont chargées en RAM,


le scan des mails est donc beaucoup plus rapide

24/01/2005 ML - JT Siars 50
Sophie : configuration

 Configure --with-savilib=[path] --enable-net && make

 /etc/[Link] : configuration du daemon sophie


 Majorité d’optiins par défaut
 pidfile: /var/run/[Link]
 socketfile: /var/run/sophie
 user: vscan

 /etc/[Link] : configuration de SAVI

24/01/2005 ML - JT Siars 51
Sophie : Lancement

 /usr/local/sbin/sophie –D

 Attention: si les définitions d’antivirus de Sophos


changent, il FAUT RELANCER sophie (commande à
intgréer dans le script de maj de sophos)
 Rechargement des signatures d’antivirus
 Killall sophie -HUP

24/01/2005 ML - JT Siars 52
Le Greylisting

 Méthode récente (mi-2003) pour limiter le taux de


spams reçus
 Implémenté uniquement au niveau du MTA
 Endroit le plus nocif pour les spammeurs

 Caractéristiques:
 Simple à mettre en place et maintenir

 Impact minime pour les utilisateurs

 Pas d’analyse de contenu de message

 Tiens la charge (testé sur serveurs 10^6 mails)

24/01/2005 ML - JT Siars 53
Le Greylisting : principe de base
 Part de l’observation selon laquelle les spams sont envoyés depuis
des applications spéciales pour spammer (envoi de milliers de
messages à la chaîne)
 Ces applications font du « fire and forget »

 Elles envoient leur spam vers des MX de domaines, maisont une


durée de vie temporaire.

 En cas de problème et de refus temporaire des MX, elles ne


réemettent pas leur message comme le veut SMTP
 Il suffit donc de refuser tous les mails entrants et d’attendre que le
serveur émetteur, ré-emette pour pouvoir penser que ce n’est pas
un spammeur

24/01/2005 ML - JT Siars 54
Le Greylisting : principe de base

 Le programme travaille sur 3 informations (triplet) :


 L’adresse IP de la machine cliente (client)
 L’adresse Email de l’émetteur (sender)
 L’adresse Email du destinataire (recipient)
 Ce triplet est logué dans une base locale (fichier .db) à
chaque apparition
 Quand le triplet se présente la 1ere fois (absent dans la base), il est
refusé pendant un certain « delay ». Le MX local renvoi un code
d’erreur 450 « temporary failure » indiquant que l’émetteur doit ré-
essayer plus tard
 Si le serveur distant ré-emet, le triplet se représente, il est déjà
connu, on accepte la connexion SMTP
 Sinon ? Le mail est perdu

24/01/2005 ML - JT Siars 55
Le Greylisting : les résultats

24/01/2005 ML - JT Siars 56
Le Greylisting : inconvénients

 Inconvénients liés délai de refus de notre site + durée de


rétention avant réémission (stocké dans le spool « deferred
» chez l’émetteur, avant réémission)

 Problème d’urgence dans les mails?


 10 mn avant un séminaire: « tiens je te passe les transparents que je
viens de finir »

24/01/2005 ML - JT Siars 57
Le Greylisting : inconvénients

 Inconvénients liés à la durée de réémission


./[Link] /var/mail/libes
==> traitement du fichier /var/mail/libes sur com1
X-Greylist: delayed 1274 seconds by postgrey-1.17 at com1; Wed, 05 Jan 2005 [Link] CET
ligne 1 : time= 1274
X-Greylist: delayed 1217 seconds by postgrey-1.17 at com1; Wed, 05 Jan 2005 [Link] CET
ligne 2 : time= 1217
X-Greylist: delayed 1544 seconds by postgrey-1.17 at com1; Thu, 06 Jan 2005 [Link] CET
ligne 3 : time= 1544
X-Greylist: delayed 1022 seconds by postgrey-1.17 at com1; Mon, 10 Jan 2005 [Link] CET
ligne 4 : time= 1022
X-Greylist: delayed 1700 seconds by postgrey-1.17 at com1; Mon, 17 Jan 2005 [Link] CET
ligne 5 : time= 1700
X-Greylist: delayed 89898 seconds by postgrey-1.17 at com1; Wed, 19 Jan 2005 [Link] CET
ligne 6 : time= 89898
temps total de retention = 96655 pour 6 messages
moyenne de retention = 16109.1666666667

24/01/2005 ML - JT Siars 58
Le Greylisting : inconvénients

 Inconvénients liés à la durée de réémission


./[Link] /var/mail/thyssen
==> traitement du fichier /var/mail/thyssen sur com1
X-Greylist: delayed 815 seconds by postgrey-1.17 at com1; Thu, 06 Jan 2005 [Link] CET
ligne 1 : time= 815
X-Greylist: delayed 1454 seconds by postgrey-1.17 at com1; Tue, 11 Jan 2005 [Link] CET
ligne 2 : time= 1454
X-Greylist: delayed 320 seconds by postgrey-1.17 at com1; Thu, 13 Jan 2005 [Link] CET
ligne 3 : time= 320
X-Greylist: delayed 3341 seconds by postgrey-1.17 at com1; Sun, 16 Jan 2005 [Link] CET
ligne 4 : time= 3341
X-Greylist: delayed 1607 seconds by postgrey-1.17 at com1; Mon, 17 Jan 2005 [Link] CET
ligne 5 : time= 1607
X-Greylist: delayed 2727 seconds by postgrey-1.17 at com1; Mon, 17 Jan 2005 [Link] CET
ligne 6 : time= 2727
X-Greylist: delayed 599 seconds by postgrey-1.17 at com1; Mon, 17 Jan
ligne 7 : time= 599
temps total de retention = 10863 pour 7 messages
moyenne de retention = 1551.85714285714

24/01/2005 ML - JT Siars 59
Le Greylisting : la solution=liste blanche
 Passer outre ce problème de refus des mails en 1ère
approximation. Eviter le refus et la rétention pour certains
sites amis
 Possibilité de Mise en liste blanche
 De certains sites émetteurs
 /opt/postfix/etc/postgrey_whitelist_clients
 [Link] ou /.*\.univ.*\.fr$/
 /.*\.cnrs.*\.fr$/
 [Link]
 [Link]
 [Link]

 De certains destinataires (recipient) locaux (les râleurs)


 /opt/postfix/etc/postgrey_whitelist_recipients
 postmaster@
 abuse@
 libes@

24/01/2005 ML - JT Siars 60
Greylisting : détails

 Refus immédiat dès la connexion smtp, pas de ressources


CPU consommées
 La base conserve:
 La date où le triplet se présente la 1ere fois
 La durée du blocage
 La date où l’enregistrement du triplet expire (nettoyage des vieux
enregistrements)
 Le nombre de tentatives bloquées du triplet
 Le nombre de mails du triplet qui sont passés

24/01/2005 ML - JT Siars 61
Le Greylisting : Postgrey
 Postgrey est 1 implémentation de Greylisting en perl couplée avec
Postfix
 rajouter une directive dans « [Link] »
smtpd_recipient_restrictions = hash:/opt/postfix/etc/protected,
permit_mynetworks,
reject_unauth_destination,
check_policy_service inet:[Link]:10023

 [Link]
 S’installe en 30’, nécessite quelques modules Perl
 - Perl >= 5.6.0
 - Net::Server (Perl Module)
 - IO::Multiplex (Perl Module)
 - BerkeleyDB (Perl Module)
 - Berkeley DB >= 4.1 (Library)

24/01/2005 ML - JT Siars 62
Le Greylisting : lancement
 mkdir /var/spool/postfix/postgrey
 adduser postgrey && chown postgrey /var/spool/postfix/postgrey
 Lancer le daemon
 /usr/local/bin/postgrey -d -v
 --inet=10023
 --dbdir=/var/spool/postfix/postgrey
 --whitelist-recipients=/opt/postfix/etc/postgrey/whitelist_recipients
 --whitelist-clients=/opt/postfix/etc/postgrey_whitelist_clients
 --delay=300 ## durée de refus temporaire 451 depuis la 1ere
apparition
 --max-age=N ## destruction des triplets plus anciens que N jours

Mail rejeté avec erreur temporaire 451 lors de la 1ere apparition du triplet, ou
bien s’il se représente dans les 5minutes (delay) qui suivent

24/01/2005 ML - JT Siars 63
SpamAssassin : Principe de base

 Amavisd-new travaille avec le module Perl de


SpamAssassin (SA)
 SA travaille sur des heuristiques : base de règles empiriques permettant
de reconnaître des occurrences de spam dans les mail
 Quand le motif d’une règle est reconnu dans un mail, un score est
affecté au mail
 body PAY_SITE /\bpay[ -]?sites?\b/i
 describe PAY_SITE Possible porn - Pay Site
 score PAY_SITE 2.699 2.599 0 2.230

 Chaque règle donne un score qui est additionné au score total


 Plus le score total est élevé, plus le mail a une probabilité forte d’être un
Spam…

24/01/2005 ML - JT Siars 64
SpamAssassin : fichiers de conf

 Installation:
 perl -MCPAN -e shell
 Cpan>install Mail::SpamAssassin

 La distribution fournit des fichiers de configuration à ne PAS


modifier
 /usr/share/spamassassin/*.cf
 Règles de base, scores de base

 Personnalisation des règles de reconnaissance dans


 /etc/mail/spamassassin/[Link]
(attention le fichier est écrasé en cas de mise a jour de SA)

24/01/2005 ML - JT Siars 65
SpamAssassin : heuristiques
 Reconnaissance de motifs dans les mails grâce à la
puissance des «expressions régulières»

 Les règles s’appliquent sur le corps du message (BODY) ou les entêtes (Subject)
body FR_REMISE /\bprofiter (?:d'une|de (la|notre)) (?:offre|remise|promo(tion)?)
s?\b/i
describe FR_REMISE Parle de promotion, en Français
score 2.5

header ML_hd_order Subject =~ /.*(order|g[eo]t).{1,10}meds*/i


describe ML_hd_order Subject contains order or get got medecines
score ML_hd_order 3.50 # 1689s/25h of 58857 corpus

 Balise “meta” pour combiner plusieurs règles de base


meta ML_offer_save ML_offer && ML_saveup
describe ML_offer_save Site offer and saveup
score ML_offer_save 6.0

24/01/2005 ML - JT Siars 66
SpamAssassin : heuristiques
 Règles portant sur des URLs citées dans les mails

uri URI_ML_10 /.*online.*.net/


score URI_ML_10 4.0

uri URI_ML_11 /[Link]\/rep\/sales/


score URI_ML_11 5.0

 Pour tester les règles sur un mail


 Spamassassin –D < ./[Link]

 HOWTO pour écrire des règles


 [Link]

24/01/2005 ML - JT Siars 67

Vous aimerez peut-être aussi