SecuMail » Historique » Version 4
Fabien Dupont, 14/08/2012 16:51
1 | 3 | Fabien Dupont | h1. Sécuriser un serveur de mail |
---|---|---|---|
2 | 1 | Fabien Dupont | |
3 | 2 | Fabien Dupont | {{>toc}} |
4 | 2 | Fabien Dupont | |
5 | 1 | Fabien Dupont | h2. Présentation des différents systèmes |
6 | 1 | Fabien Dupont | |
7 | 1 | Fabien Dupont | h3. Spamassassin |
8 | 1 | Fabien Dupont | |
9 | 1 | Fabien Dupont | Spamassassin est un programme en perl développé par la fondation Apache. Ce programme regroupe plusieurs méthodes de détection de spams telles que : |
10 | 1 | Fabien Dupont | |
11 | 1 | Fabien Dupont | * DNSBL (DNS BlackList) : blocage d'adresses IP (voir RBL plus loin) par interrogation de DNS. |
12 | 1 | Fabien Dupont | * SURBL (URL BlackList) : idem mais par interrogation d'URI. |
13 | 1 | Fabien Dupont | * Hashcash : Système en DoS se basant sur la consommation CPU utilisée par l'émetteur lors de l'envoi de mail. |
14 | 1 | Fabien Dupont | |
15 | 1 | Fabien Dupont | D'autres sont disponibles via l'installation et l'activation de plug'ins. |
16 | 1 | Fabien Dupont | |
17 | 1 | Fabien Dupont | De plus, SpamAssassin, propose la détection de spams via l'application de "filtres bayesiens":http://fr.wikipedia.org/wiki/Th%C3%A9or%C3%A8me_de_Bayes permettant de différencier les spams des hams (les « pas spams »). |
18 | 1 | Fabien Dupont | |
19 | 1 | Fabien Dupont | h3. Greylisting |
20 | 1 | Fabien Dupont | |
21 | 1 | Fabien Dupont | Le greylisting est un procédé permettant de refuser la réception de spams en provenance de spambots. Ce procédé se base sur le fait que certains spams ne sont pas émis depuis de « vrais » serveurs de mail. |
22 | 1 | Fabien Dupont | Un « vrai » serveur de mail dispose d'une file de messages dans laquelle il stocke les messages dont l'émission a été refusée par une erreur 4xx (généralement, 450) alors qu'un spambot émets des mails sans se soucier du succès de l'envoi ou pas. |
23 | 1 | Fabien Dupont | |
24 | 1 | Fabien Dupont | Ainsi, un daemon de greylisting refuse systématiquement les mails en provenance d'un serveur en retournant un code d'erreur 450. Dans le même temps, il mémorise les informations de ce serveur (IP, nom, etc.). Ãtant donné que le code d'erreur n'est pas un refus catégorique (5xx), le serveur émetteur retente un envoi régulièrement, généralement toutes les 5 ou 10 minutes, jusqu'à la fin d'un timeout défini, généralement plusieurs jours. Si le même message a été émis 3 fois d'affilé, le daemon de greylisting l'accepte et place le serveur émetteur dans une « whitelist » temporaire pendant un temps défini. |
25 | 1 | Fabien Dupont | |
26 | 1 | Fabien Dupont | Un des daemons de greylisting célèbre et fonctionnant bien avec postfix est postgrey. |
27 | 1 | Fabien Dupont | |
28 | 1 | Fabien Dupont | h3. Antivirus |
29 | 1 | Fabien Dupont | |
30 | 1 | Fabien Dupont | Bon...linux, pas de virus, tout ça tout ça...m'enfin, ça ne coûte pas grand chose de filtrer ses propres messages à l'envoi pour s'assurer qu'on ne forwarde pas un PPT plein de chatons qui jouent du piano et de virus. Et puis quitte à filtrer dans un sens, autant filtrer dans l'autre. |
31 | 1 | Fabien Dupont | |
32 | 1 | Fabien Dupont | Il n'y a pas 50000 antivirus sous linux, ClamAV est l'un des plus complet, mis à jour et performant. Appelé depuis "ClamSMTP":http://thewalter.net/stef/software/clamsmtp/, il s'intègre très bien à postfix. |
33 | 1 | Fabien Dupont | |
34 | 1 | Fabien Dupont | h3. RBL |
35 | 1 | Fabien Dupont | |
36 | 1 | Fabien Dupont | Les RBL ou « Realtime Black Lists » sont des listes mises à jour en temps réel d'adresses IP réputées pour être émettrices de spams. L'interrogation de ces listes se fait grâce au protocole DNS. |
37 | 1 | Fabien Dupont | |
38 | 1 | Fabien Dupont | Par exemple, pour savoir si l'adresse IP 91.224.149.142 est classée comme émettrice de spams, d'abord, retournons là : 142.149.224.91. Puis ajoutons le nom d'une RBL, par exemple sbl-xbl.spamhaus.org. Et regardons si une adresse IP correspond à ce « nom de domaine » : |
39 | 1 | Fabien Dupont | |
40 | 1 | Fabien Dupont | <pre> |
41 | 1 | Fabien Dupont | $ host 142.149.224.91.sbl-xbl.spamhaus.org |
42 | 1 | Fabien Dupont | Host 142.149.224.91.sbl-xbl.spamhaus.org not found: 3(NXDOMAIN) |
43 | 1 | Fabien Dupont | </pre> |
44 | 1 | Fabien Dupont | |
45 | 1 | Fabien Dupont | Pas d'adresse IP associée à ce nom de domaine, l'adresse IP 91.224.149.142 est clean ! |
46 | 1 | Fabien Dupont | |
47 | 1 | Fabien Dupont | Même exercice pour l'adresse IP 114.37.70.152 : |
48 | 1 | Fabien Dupont | |
49 | 1 | Fabien Dupont | <pre> |
50 | 1 | Fabien Dupont | # host 152.70.37.114.sbl-xbl.spamhaus.org |
51 | 1 | Fabien Dupont | 152.70.37.114.sbl-xbl.spamhaus.org has address 127.0.0.4 |
52 | 1 | Fabien Dupont | </pre> |
53 | 1 | Fabien Dupont | |
54 | 1 | Fabien Dupont | L'adresse IP 127.0.0.4 est retournée et selon la "documentation de spamhaus.org":http://www.spamhaus.org/zen/, 127.0.0.4 veut dire que cette IP est notée comme étant une machine infectée par un virus émetteur de spam. |
55 | 1 | Fabien Dupont | |
56 | 1 | Fabien Dupont | L'utilisation de RBL pour bloquer les mails est souvent soumise à controverse car le remplissage et la maintenance de ces listes sont généralement obscurs. Il en existe même qui demande une rémunération pour la suppression d'adresse IP. Bref, libre à chacun d'utiliser ces listes ou pas tant que c'est en tout connaissance de cause. |
57 | 1 | Fabien Dupont | |
58 | 1 | Fabien Dupont | h3. SPF |
59 | 1 | Fabien Dupont | |
60 | 1 | Fabien Dupont | SPF ou « Sender Policy Framework », est un système anti « spoofing ». C'est à dire qu'il permet de valider que le serveur émetteur du mail est bien le serveur qui gère ce mail. |
61 | 1 | Fabien Dupont | |
62 | 1 | Fabien Dupont | Ce système se base sur la mise en place d'un champ TXT (ou SPF) dans le nom de domaine émetteur. Ce champs ne peut être ajouté que par le gestionnaire du domaine et donc sûrement le gestionnaire du serveur de mail émetteur (en tout cas, lui seul peut valider que l'un est associé à l'autre). |
63 | 1 | Fabien Dupont | |
64 | 1 | Fabien Dupont | Ce champ TXT permet de valider que le nom de domaine de l'adresse mail émettrice, l'adresse IP du serveur émetteur et son reverse sont valides. |
65 | 1 | Fabien Dupont | |
66 | 1 | Fabien Dupont | Exemple de champs SPF pour le domaine kafe-in.net : |
67 | 1 | Fabien Dupont | |
68 | 1 | Fabien Dupont | <pre> |
69 | 1 | Fabien Dupont | $ dig +short spf kafe-in.net |
70 | 1 | Fabien Dupont | "v=spf1 mx ptr:muscat.kafe-in.net ptr:fdn.le.fai.avec.les.bulles.qui.vont.vers.le.bas.kafe-in.net mx:mail.kafe-in.net mx:mail2.kafe-in.net ip6:2a01:6600:8081:8e00::fab ip6:2001:910:109c:2::25 ip4:91.224.149.142 ip4:80.67.176.156 include:dupont.eu.org -all" |
71 | 1 | Fabien Dupont | </pre> |
72 | 1 | Fabien Dupont | |
73 | 1 | Fabien Dupont | h3. DKIM |
74 | 1 | Fabien Dupont | |
75 | 1 | Fabien Dupont | DKIM, ou « DomainKeys Identified Mail », est une autre méthode pour associer un nom de domaine à un mail. Cette validation se base sur l'ajout d'un header contenant une clé, cette clé permet de signer le mail. Cette signature est validée en interrogeant un champ TXT du nom de domaine émetteur du mail. |
76 | 1 | Fabien Dupont | |
77 | 1 | Fabien Dupont | Exemple de champs TXT pour le domaine kafe-in.net et de signature : |
78 | 1 | Fabien Dupont | |
79 | 1 | Fabien Dupont | <pre> |
80 | 1 | Fabien Dupont | dig +short txt default._domainkey.kafe-in.net |
81 | 1 | Fabien Dupont | "v=DKIM1\; k=rsa\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCh2cOuv5Tb+oFElVq3sf837oclBXoiHcMDjlWxpjCfjyYq1fSZNyMxXG/CKqLRx/bqyI/Bcl6n30pR8Okp8ItjBvUXQJwh6fczyKdto69Z2DrGf495ANghUtPxKFOe98PXuEa0OmvhOD45VOKeHU9TW32SgxHy6kxur/WMaJMbDwIDAQAB" |
82 | 1 | Fabien Dupont | </pre> |
83 | 1 | Fabien Dupont | |
84 | 1 | Fabien Dupont | <pre> |
85 | 1 | Fabien Dupont | DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=kafe-in.net; |
86 | 1 | Fabien Dupont | s=default; t=1344852664; |
87 | 1 | Fabien Dupont | bh=fdkeB/A0FkbVP2k4J4pNPoeWH6vqBm9+b0C3OY87Cw8=; |
88 | 1 | Fabien Dupont | h=From:Date:To:Subject; |
89 | 1 | Fabien Dupont | b=DqT32ZzqUgRPm9PGYwfB7nxJiyaTLxT6yoeIPLqPnxwgMJ933nYLxQpMimSsaKZdT |
90 | 1 | Fabien Dupont | iGo68RBhgFFXe+6zJCWPZbCye8ptW8awCHfwsogYAzvRs0wk9rF/r78CWZXAn6dCeH |
91 | 1 | Fabien Dupont | cCMomFWcBOzTdbqQ/ZKizBCOdgLsT/aPDVBV00Eo= |
92 | 1 | Fabien Dupont | </pre> |
93 | 1 | Fabien Dupont | |
94 | 3 | Fabien Dupont | h2. Enchaînement des différents systèmes |
95 | 3 | Fabien Dupont | |
96 | 3 | Fabien Dupont | Il existe plusieurs moyens pour postfix de vérifier la validité du mail, ou pas : |
97 | 3 | Fabien Dupont | |
98 | 3 | Fabien Dupont | * Les content filters : Ce sont des programmes recevant un mail selon le protocole SMTP et le renvoyant, ou pas, à postfix selon le même protocole après ajout de headers. Exemple : ClamSMTP et SpamAssassin. |
99 | 3 | Fabien Dupont | * Les milters : ce sont des programmes dialoguant avec postfix sur un port TCP donné en suivant un "protocole défini":https://www.milter.org/developers/api/index. Exemple : OpenDKIM. |
100 | 3 | Fabien Dupont | * Les policy services : Ce sont des programmes au fonctionnement proche des milters. Ils permettent de valider ou non le passage d'un mail selon ses paramètres. Exemple : PostGrey et postfix-policyd-spf-python. |
101 | 3 | Fabien Dupont | * Les RBL : Voir plus haut, la gestion des RBL est gérée directement par postfix. |
102 | 3 | Fabien Dupont | |
103 | 3 | Fabien Dupont | Voilà rapidement l'enchaînement des validations faites à l'arrivée d'un mail : |
104 | 3 | Fabien Dupont | |
105 | 3 | Fabien Dupont | * Ãmetteur : Ouverture d'une connexion sur le port 25 (SMTP). |
106 | 3 | Fabien Dupont | * Récepteur : Vérification de la validité de l'adresse IP source et consultation des RBL (smtpd_client_restrictions). |
107 | 3 | Fabien Dupont | * Ãmetteur : HELO sondomaine.tld |
108 | 3 | Fabien Dupont | * Récepteur : Vérification de la validité du domaine et du reverse (smtpd_helo_restrictions). |
109 | 3 | Fabien Dupont | * Ãmetteur : MAIL from : "Marvin the paranoid android" <marvin@sondomaine.tld> |
110 | 3 | Fabien Dupont | * Récepteur : Vérification de la validité de l'adresse émettrice (smtpd_sender_restrictions). |
111 | 3 | Fabien Dupont | * Ãmetteur : RCPT to : "Fabien Dupont" <fab@sondomaine.tld> |
112 | 3 | Fabien Dupont | * Récepteur : Vérification de la validité de l'adresse destinataire (smtpd_recipient_restrictions). |
113 | 3 | Fabien Dupont | * Interrogation du « policy service » postgrey sur le port 10023 |
114 | 3 | Fabien Dupont | * Interrogation du « policy service » python-spf via la socket unix private/policyd-spf |
115 | 3 | Fabien Dupont | * Récepteur : Envoi du code de retour au serveur émetteur ("RFC3463":http://www.rfc-editor.org/rfc/rfc3463.txt: |
116 | 3 | Fabien Dupont | * 3xx : OK pour la suite |
117 | 3 | Fabien Dupont | * 4xx : Erreur temporaire (exemple: postgrey) |
118 | 3 | Fabien Dupont | * 5xx : Erreur permanente (Adresse émettrice ou réceptrice non valide). |
119 | 3 | Fabien Dupont | * Ãmetteur : DATA puis le contenu du mail (headers compris). |
120 | 3 | Fabien Dupont | * Récepteur : Transfert du mail au « content filters » : |
121 | 3 | Fabien Dupont | * ClamSMTP reçoit le mail sur le port 10025 et si le mail est valide... |
122 | 3 | Fabien Dupont | * SpamAssassin reçoit le mail sur le port 10026 et si le mail est valide... |
123 | 3 | Fabien Dupont | * Postfix récupère le mail validé sur le port 10028 |
124 | 3 | Fabien Dupont | * Récepteur : Validation du mail via le milter OpenDKIM sur le port 10028 |
125 | 3 | Fabien Dupont | * Récepteur : Envoi du code de retour au serveur émetteur ("RFC3463":http://www.rfc-editor.org/rfc/rfc3463.txt: |
126 | 4 | Fabien Dupont | * 2xx : OK pour l'envoi |
127 | 4 | Fabien Dupont | * 4xx : Erreur temporaire (exemple: postgrey) |
128 | 4 | Fabien Dupont | * 5xx : Erreur permanente (exemple: spam détecté par SpamAssassin, virus par ClamAV, etc.). |
129 | 3 | Fabien Dupont | |
130 | 1 | Fabien Dupont | h2. Installation et configuration |
131 | 1 | Fabien Dupont | |
132 | 3 | Fabien Dupont | En cours de rédaction |