Projet

Général

Profil

SecuMail » Historique » Version 10

Fabien Dupont, 16/08/2012 20:32

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 10 Fabien Dupont
h3. Antivirus
8 10 Fabien Dupont
9 10 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.
10 10 Fabien Dupont
11 10 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.
12 10 Fabien Dupont
13 1 Fabien Dupont
h3. Spamassassin
14 1 Fabien Dupont
15 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 :
16 1 Fabien Dupont
17 1 Fabien Dupont
* DNSBL (DNS BlackList) : blocage d'adresses IP (voir RBL plus loin) par interrogation de DNS.
18 1 Fabien Dupont
* SURBL (URL BlackList) : idem mais par interrogation d'URI.
19 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.
20 1 Fabien Dupont
21 1 Fabien Dupont
D'autres sont disponibles via l'installation et l'activation de plug'ins.
22 1 Fabien Dupont
23 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 »).
24 1 Fabien Dupont
25 1 Fabien Dupont
h3. Greylisting
26 1 Fabien Dupont
27 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.
28 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.
29 1 Fabien Dupont
30 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.
31 1 Fabien Dupont
32 1 Fabien Dupont
Un des daemons de greylisting célèbre et fonctionnant bien avec postfix est postgrey.
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 7 Fabien Dupont
* Émetteur : RCPT to : "Fabien Dupont" <fab@mondomaine.tld>
112 3 Fabien Dupont
* Récepteur : Vérification de la validité de l'adresse destinataire (smtpd_recipient_restrictions).
113 6 Fabien Dupont
** Interrogation du « policy service » postgrey sur le port 10023
114 6 Fabien Dupont
** Interrogation du « policy service » python-spf via la socket unix private/policyd-spf
115 7 Fabien Dupont
* Récepteur : Envoi du code de retour au serveur émetteur ("RFC3463":http://www.rfc-editor.org/rfc/rfc3463.txt) :
116 6 Fabien Dupont
** 3xx : OK pour la suite
117 7 Fabien Dupont
** 4xx : Erreur temporaire (exemple: postgrey).
118 6 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 6 Fabien Dupont
** ClamSMTP reçoit le mail sur le port 10025 et si le mail est valide...
122 6 Fabien Dupont
** SpamAssassin reçoit le mail sur le port 10026 et si le mail est valide...
123 6 Fabien Dupont
** Postfix récupère le mail validé sur le port 10028
124 1 Fabien Dupont
* Récepteur : Validation du mail via le milter OpenDKIM sur le port 10028
125 7 Fabien Dupont
* Récepteur : Envoi du code de retour au serveur émetteur ("RFC3463":http://www.rfc-editor.org/rfc/rfc3463.txt) :
126 3 Fabien Dupont
** 2xx : OK pour l'envoi
127 7 Fabien Dupont
** 4xx : Erreur temporaire (exemple: postgrey).
128 1 Fabien Dupont
** 5xx : Erreur permanente (exemple: spam détecté par SpamAssassin, virus par ClamAV, etc.).
129 7 Fabien Dupont
* Émetteur : Fermeture de la connexion sur le port 25.
130 1 Fabien Dupont
131 1 Fabien Dupont
h2. Installation et configuration
132 1 Fabien Dupont
133 7 Fabien Dupont
h3. Postfix
134 7 Fabien Dupont
135 7 Fabien Dupont
h4. Configuration de base
136 7 Fabien Dupont
137 7 Fabien Dupont
Ce tutoriel part du principe que postfix est déjà correctement installé et configuré pour l'émission et la réception de mails.
138 7 Fabien Dupont
139 7 Fabien Dupont
La configuration de postfix sera modifiée au fur et à mesure de l'installation des différents services.
140 7 Fabien Dupont
141 7 Fabien Dupont
Postfix, s'il est configuré en tant que serveur de mail visible depuis internet, doit être configuré pour autoriser la réception de messages depuis n'importe où et l'émission uniquement depuis le réseau local. Si ce n'est pas le cas, le serveur de mail sera configuré en mode "open relay":http://en.wikipedia.org/wiki/Open_relay. Bien évidemment un tel serveur serait une plateforme d'envoi de spams ou autre saletés. Il serait très vite blacklisté auprès des différentes RBL.
142 7 Fabien Dupont
143 7 Fabien Dupont
Pour ce tutoriel, le serveur de mail nommé ve-mail hébergera des adresses du domaine kafe-in.net et le réseau local sera composé de 192.168.2.0/24 en IPv4 et 2001:910:109c::/48 en IPv6.
144 7 Fabien Dupont
145 7 Fabien Dupont
+main.cf :+
146 7 Fabien Dupont
<pre>
147 7 Fabien Dupont
mydomain = kafe-in.net
148 7 Fabien Dupont
mydestination = ve-mail, ve-mail.kafe-in.net, localhost.localdomain, localhost, kafe-in.net
149 7 Fabien Dupont
mynetworks = 127.0.0.0/8, [::1]/128, 192.168.2.125/32, [2001:910:109c::]/48
150 7 Fabien Dupont
</pre>
151 7 Fabien Dupont
152 7 Fabien Dupont
h4. Restrictions de base
153 7 Fabien Dupont
154 8 Fabien Dupont
Dans un premier temps, il faut indiquer à postfix qu'il faut délayer le rejet d'un mail à la fin du dialogue avec dialogue avec le serveur SMTP distant. C'est le paramètre "smtpd_delay_reject":http://www.postfix.org/postconf.5.html#smtpd_delay_reject. Ceci permet "3 choses":http://www.postfix.org/SMTPD_ACCESS_README.html#timing :
155 7 Fabien Dupont
156 7 Fabien Dupont
* certains serveurs SMTP ne prennent pas en compte les rejets pendant l'émission d'un mail et essaient donc de finir de l'envoyer même s'il a été refusé,
157 7 Fabien Dupont
* postfix peut ainsi logger plusieurs informations intéressantes relatives à l'émetteur et au destinataire du mail,
158 7 Fabien Dupont
* une adresse émettrice peut être rejetée selon le destinataire du mail (ex: greylisting), il faut donc avoir tous les paramètres du mail avant de prendre une décision.
159 7 Fabien Dupont
160 7 Fabien Dupont
Le paramètre "smtpd_helo_required":http://www.postfix.org/postconf.5.html#smtpd_helo_required permet de n'autoriser la réception de mail que si le serveur distant s'est présenté (HELO). Cela permet d'introduire des restrictions par rapport à cette commande SMTP (voir plus bas).
161 7 Fabien Dupont
162 7 Fabien Dupont
Le paramètre "strict_rfc821_envelopes":http://www.postfix.org/postconf.5.html#strict_rfc821_envelopes permet de refuser la réception de mail si le serveur distant ne respecte pas strictement la "rfc821":http://www.faqs.org/rfcs/rfc821.html, celle qui décrit le protocole SMTP.
163 7 Fabien Dupont
164 7 Fabien Dupont
+main.cf, restrictions de base :+
165 7 Fabien Dupont
<pre>
166 7 Fabien Dupont
# Basics Restrictions 
167 7 Fabien Dupont
smtpd_delay_reject = yes
168 7 Fabien Dupont
smtpd_helo_required = yes
169 7 Fabien Dupont
strict_rfc821_envelopes = yes
170 7 Fabien Dupont
</pre>
171 7 Fabien Dupont
172 7 Fabien Dupont
Postfix applique ensuite des restrictions selon les paramètres du mail, dans l'ordre suivant :
173 7 Fabien Dupont
174 7 Fabien Dupont
* restrictions sur le client, c'est à dire sur l'adresse IP du serveur émetteur,
175 7 Fabien Dupont
* restrictions sur le mot clé *HELO* lors du dialogue avec ce serveur,
176 7 Fabien Dupont
* restrictions sur le mot clé *MAIL from*, c'est à dire sur l'adresse mail de l'émetteur,
177 7 Fabien Dupont
* restrictions sur le mot clé *RCPT to*, c'est à dire sur l'adresse mail du destinataire,
178 7 Fabien Dupont
179 1 Fabien Dupont
Une liste de restrictions, dans postfix, est définie avec la syntaxe suivante :
180 1 Fabien Dupont
181 8 Fabien Dupont
smtpd_*nom*_restrictions = restriction 1, restriction 2, ..., restriction n
182 7 Fabien Dupont
183 8 Fabien Dupont
Elles sont parcourues dans l'ordre, jusqu'à ce que l'une d'entre elle accepte ou rejette le mail. La dernière restriction est *permit*, ainsi le mail est accepté si rien n'a indiqué explicitement son rejet ou sa validation.
184 7 Fabien Dupont
185 7 Fabien Dupont
h4. Restrictions sur le client
186 1 Fabien Dupont
187 7 Fabien Dupont
Ici, notre serveur est public, il doit donc accepter les connexions entrantes depuis n'importe quelle adresse IP.
188 7 Fabien Dupont
 
189 7 Fabien Dupont
+main.cf, restrictions sur le client :+
190 8 Fabien Dupont
<pre>
191 7 Fabien Dupont
# Requirements for the connecting server 
192 7 Fabien Dupont
smtpd_client_restrictions =
193 7 Fabien Dupont
        permit
194 7 Fabien Dupont
</pre>
195 7 Fabien Dupont
196 1 Fabien Dupont
h4. Restrictions sur HELO
197 7 Fabien Dupont
198 7 Fabien Dupont
Comme on n'est pas des sauvages, on ne positionne aucunes restrictions si l'émetteur se situe sur notre réseau local (paramètre *mynetwork*, voir plus haut). Par contre, pour toutes les autres adresses IP source, on vérifie que le paramètre *HELO* correspond à un "FQDN":http://en.wikipedia.org/wiki/FQDN et que celui-ci correspond à un nom d'hôte valide.
199 7 Fabien Dupont
200 7 Fabien Dupont
+main.cf, restrictions sur le mot clé HELO :+
201 8 Fabien Dupont
<pre>
202 7 Fabien Dupont
# Requirements for the HELO statement 
203 7 Fabien Dupont
smtpd_helo_restrictions =
204 1 Fabien Dupont
        permit_mynetworks,
205 7 Fabien Dupont
        reject_non_fqdn_hostname,
206 7 Fabien Dupont
        reject_invalid_hostname,
207 7 Fabien Dupont
        permit
208 7 Fabien Dupont
</pre>
209 7 Fabien Dupont
210 9 Fabien Dupont
h4. Restrictions sur l'adresse de l'émetteur
211 9 Fabien Dupont
212 9 Fabien Dupont
De la même façon, il est préférable de refuser des mails ayant un domaine inexistant ou mal formé, sauf pour notre réseau local.
213 9 Fabien Dupont
214 9 Fabien Dupont
+main.cf, restriction sur l'émetteur (sender) :+
215 8 Fabien Dupont
<pre>
216 1 Fabien Dupont
# Requirements for the sender address 
217 7 Fabien Dupont
smtpd_sender_restrictions =
218 1 Fabien Dupont
        permit_mynetworks,
219 7 Fabien Dupont
        reject_non_fqdn_sender,
220 7 Fabien Dupont
        reject_unknown_sender_domain,
221 7 Fabien Dupont
        permit
222 8 Fabien Dupont
</pre>
223 9 Fabien Dupont
224 9 Fabien Dupont
h4. Restrictions sur l'adresse du destinataire
225 9 Fabien Dupont
226 9 Fabien Dupont
On autorise notre LAN à envoyer des mails à destination de n'importe quelle adresse. Par contre, pour les autres on refuse les mails à destination d'une adresse mal formée (*reject_non_fqdn_recipient* et *reject_unknown_recipient_domain*) ou bien inconnue du serveur (*reject_unauth_destination*). C'est à dire dont la partie domaine de l'adresse n'est pas listée dans les variables *mydestination* ou *relay_domains*. Le refuser si la boite n'existe pas sera le travail du LDA (Local Delivery Agent), c'est à dire le programme qui délivre le mail dans la boite IMAP ou POP du destinataire.
227 7 Fabien Dupont
228 8 Fabien Dupont
<pre>
229 7 Fabien Dupont
# Requirement for the recipient address 
230 1 Fabien Dupont
smtpd_recipient_restrictions =
231 1 Fabien Dupont
        permit_mynetworks,
232 1 Fabien Dupont
        reject_non_fqdn_recipient,
233 1 Fabien Dupont
        reject_unknown_recipient_domain,
234 1 Fabien Dupont
        reject_unauth_destination,
235 1 Fabien Dupont
        permit
236 10 Fabien Dupont
</pre>
237 10 Fabien Dupont
238 10 Fabien Dupont
h4. Content filters
239 10 Fabien Dupont
240 10 Fabien Dupont
Les content filters sont des mini-serveurs SMTP analysant les mails entrants et les renvoyants ou pas sur un autre serveur SMTP. Postfix est donc le serveur source pour les content filters ainsi que le serveur de destination. Si un mail revient des content filters sans encombres, il est valide.
241 10 Fabien Dupont
242 10 Fabien Dupont
Les content filters peuvent être chaînés. Le premier écoute sur un port (ex: 10025) puis le passe au second sur un autre port (ex: 10026) qui le retransmet au serveur postfix de départ sur un port défini (ex: 10025). En cas de problème sur le second content filter, il retourne une erreur 5xx au premier content filter qui retourne donc cette erreur au serveur postfix de départ. Les refus sont ainsi transmis en cascade et pris en compte par postfix au final.
243 10 Fabien Dupont
244 10 Fabien Dupont
+main.cf, content filters :+
245 10 Fabien Dupont
<pre>
246 10 Fabien Dupont
# Content filtering
247 10 Fabien Dupont
content_filter = scan:127.0.0.1:10025
248 10 Fabien Dupont
receive_override_options = no_address_mappings
249 10 Fabien Dupont
</pre>
250 10 Fabien Dupont
251 10 Fabien Dupont
Le port de destination des contents filters est écouté par un simple smtpd mais avec aucune restrictions ni autre content filters définis. Si ce n'était pas le cas, les mails entrant partirait en boucle dans le serveur de mail et serait refusés au final. Ce port est ouvert uniquement pour localhost (127.0.0.1) pour éviter qu'un serveur distant n'envoie un mail directement par ce biais.
252 10 Fabien Dupont
253 10 Fabien Dupont
+master.cf, définition du service de réception des content filters :+
254 10 Fabien Dupont
</pre>
255 10 Fabien Dupont
# For injecting mail back into postfix from the filter
256 10 Fabien Dupont
127.0.0.1:10027 inet  n -       n       -       16      smtpd
257 10 Fabien Dupont
        -o content_filter=
258 10 Fabien Dupont
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
259 10 Fabien Dupont
        -o smtpd_helo_restrictions=
260 10 Fabien Dupont
        -o smtpd_client_restrictions=
261 10 Fabien Dupont
        -o smtpd_sender_restrictions=
262 10 Fabien Dupont
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
263 10 Fabien Dupont
        -o mynetworks_style=host
264 10 Fabien Dupont
        -o smtpd_authorized_xforward_hosts=127.0.0.0/8
265 10 Fabien Dupont
</pre>
266 10 Fabien Dupont
267 10 Fabien Dupont
h3. Antivirus
268 10 Fabien Dupont
269 10 Fabien Dupont
L'interface entre postfix est ClamAV peut être faite de différentes manières. La plus simple à mettre en place est d'utiliser le daemon ClamSMTP.
270 10 Fabien Dupont
271 10 Fabien Dupont
C'est un simple content filter pour lequel on définit le port d'entrée selon le paramètre *content_filter* de postfix et le port de sortie comme le port du prochain content filter mis en place ou bien celui de postfix si on ne désire pas en mettre en place d'autres.
272 10 Fabien Dupont
273 10 Fabien Dupont
+Installation de ClamSMTP+
274 10 Fabien Dupont
<pre>
275 10 Fabien Dupont
# apt-get install clamsmtp clamav-daemon
276 10 Fabien Dupont
</pre>
277 10 Fabien Dupont
278 10 Fabien Dupont
+/etc/clamsmtpd.conf, fichier de configuration du daemon+
279 10 Fabien Dupont
<pre>
280 10 Fabien Dupont
# Port et adresse IP sur lesquels le daemon écoute
281 10 Fabien Dupont
Listen: 127.0.0.1:10025
282 10 Fabien Dupont
283 10 Fabien Dupont
# Port et adresse IP sur lesquels le mail sera forwardé
284 10 Fabien Dupont
OutAddress: 127.0.0.1:10026
285 10 Fabien Dupont
286 10 Fabien Dupont
# Chemin vers la socket unix ouverte par le daemon ClamAV
287 10 Fabien Dupont
ClamAddress: /var/run/clamav/clamd.ctl
288 10 Fabien Dupont
289 10 Fabien Dupont
# Header ajouté au mail pour indiquer qu'il a bien été scanné
290 10 Fabien Dupont
Header: X-AV-Checked: ClamAV using ClamSMTP
291 10 Fabien Dupont
292 10 Fabien Dupont
# Répertoire temporaire
293 10 Fabien Dupont
TempDirectory: /var/spool/clamsmtp
294 10 Fabien Dupont
295 10 Fabien Dupont
# Chemin vers le fichier PID
296 10 Fabien Dupont
PidFile: /var/run/clamsmtp/clamsmtpd.pid
297 10 Fabien Dupont
298 10 Fabien Dupont
# Action effectuée en cas de détection de virus :
299 10 Fabien Dupont
# * bounce : retour à l'envoyeur (pas génial car l'adresse émettrice est souvent spoofée)
300 10 Fabien Dupont
# * drop : le mail est supprimé silencieusement
301 10 Fabien Dupont
# * pass : le mail est accepté mais le header X-Virus-Infected est ajouté
302 10 Fabien Dupont
Action: drop
303 10 Fabien Dupont
304 10 Fabien Dupont
# Si 'on', les mails infectés sont stockés dans le répertoire temporaire
305 10 Fabien Dupont
Quarantine: on
306 10 Fabien Dupont
307 10 Fabien Dupont
# Nom d'utilisateur sous lequel le programme tourne (ne pas utiliser root !)
308 10 Fabien Dupont
User: clamsmtp
309 7 Fabien Dupont
</pre>