Postfix Jtsiars
Postfix Jtsiars
avec POSTFIX
[Link]@[Link]
Amavisd-new +
SpamAssassin
Greylisting (postgrey)
24/01/2005 ML - JT Siars 2
Postfix au Centre d'Océanologie de Marseille
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,
24/01/2005 ML - JT Siars 4
Introduction : Pourquoi Postfix?
24/01/2005 ML - JT Siars 5
Introduction : Pourquoi Postfix?
Ecrit avec la sécurité comme principale préoccupation :
24/01/2005 ML - JT Siars 6
Postfix :architecture du système
24/01/2005 ML - JT Siars 7
Postfix : architecture du système
24/01/2005 ML - JT Siars 8
Postfix : phase 1 Réception/Insertion locale
24/01/2005 ML - JT Siars 9
Postfix : phase 1 Réception/Insertion distante
24/01/2005 ML - JT Siars 10
Postfix : phase 1 Réception/Insertion
24/01/2005 ML - JT Siars 11
Postfix : Phase 2 formatage des entêtes
24/01/2005 ML - JT Siars 12
Postfix : Phase 3 stockage – livraison - envoi
24/01/2005 ML - JT Siars 13
Postfix : Les queues de mail
24/01/2005 ML - JT Siars 14
Postfix : les fichiers de configuration
24/01/2005 ML - JT Siars 15
Postfix : Les utilitaires d’administration
24/01/2005 ML - JT Siars 16
Postfix : configuration de base : « [Link] »
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]
24/01/2005 ML - JT Siars 21
Postfix : LES DNSBL
- [Link]
24/01/2005 ML - JT Siars 22
Postfix : premiers contrôles antispam
24/01/2005 ML - JT Siars 23
Postfix : premiers contrôles antispam
24/01/2005 ML - JT Siars 24
Postfix : contrôles sur mx_sender
$ 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
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)
24/01/2005 ML - JT Siars 27
Postfix : examen de contenus
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
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
24/01/2005 ML - JT Siars 30
Postfix : contrôle de ressources mémoire
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
réécriture en pré[Link]
sender_canonical_maps = /etc/postfix/revaliases
masquage d ’adresse
masquerade_domains = [Link]
24/01/2005 ML - JT Siars 32
Postfix Protection des listes de mail
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])
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 »
24/01/2005 ML - JT Siars 35
Conclusions : Pourquoi Postfix?
[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
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
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)
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…
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)
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]
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
24/01/2005 ML - JT Siars 50
Sophie : configuration
24/01/2005 ML - JT Siars 51
Sophie : Lancement
/usr/local/sbin/sophie –D
24/01/2005 ML - JT Siars 52
Le Greylisting
Caractéristiques:
Simple à mettre en place et maintenir
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 »
24/01/2005 ML - JT Siars 54
Le Greylisting : principe de base
24/01/2005 ML - JT Siars 55
Le Greylisting : les résultats
24/01/2005 ML - JT Siars 56
Le Greylisting : inconvénients
24/01/2005 ML - JT Siars 57
Le Greylisting : inconvénients
24/01/2005 ML - JT Siars 58
Le Greylisting : inconvénients
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]
24/01/2005 ML - JT Siars 60
Greylisting : détails
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
24/01/2005 ML - JT Siars 64
SpamAssassin : fichiers de conf
Installation:
perl -MCPAN -e shell
Cpan>install Mail::SpamAssassin
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
24/01/2005 ML - JT Siars 66
SpamAssassin : heuristiques
Règles portant sur des URLs citées dans les mails
24/01/2005 ML - JT Siars 67