Filtrage Postfix
Affiner les paramètres de filtrage de postfix permet :
- d'éviter l'utilisation abusive du serveur
- de limiter le risque d'attaques de spam
- d'optimiser les performances du serveur.
Règles communes
smtpd_delay_reject
Les restrictions client, helo et sendersont appliquées après la commande « RCPT TO » si l’option smtpd_delay_reject est à yes. Sinon le filtrage va être plus rapide mais peut poser problème avec certains clients. L'autre avantage du paramètre par défaut est de noterl'adresse destinataire du mail rejeté.
Restrictions génériques
Restrictions | Explications |
---|---|
permit | Autorise la requête |
defer | Demande au client de recommencer plus tard |
reject | Rejette la requête. Le reject_code est 554 par défaut. |
warn_if_reject | Change le sens de la restriction reject qui va suivre pour qu’il loggue uniquement. Permet de tester des restrictions dans un environnement de production. |
reject_unauth_pipelining | Rejette la requête quand le client utilise du pipeling pour accélérer l’envoi de mail. |
Les bases d’accès (access database)
Explications | |
---|---|
REJECT [code] | |
OK | header]. |
IGNORE | supprime les lignes contenant le texte. |
WARN [text] | averti dans les logs. |
HOLD [text] | Place le message dans la queue hold où il peut être traité manuellement. |
DISCARD [text] | Affirme avoir envoyé le message mais le supprime. |
FILTER transport:nexthop | Envoi le message à travers un filtre de contenu. |
<licode file=/etc/postfix/[body|header]_checks (exemple)> /^to: *friend@public\.com$/ REJECT </licode>
<licode file=/etc/postfix/access> bad_isp.com REJECT user@domain.nom OK </licode>
Après mise à jour, lancer la commande #postmap /etc/postfix/access
Filtrage sur le client (adresse ou nom d’hôte)
smtpd_client_restrictions=
Le filtrage se fait dans l’ordre d’apparition des restrictions.
Restrictions | Explications |
---|---|
reject_unknown_client (postfix < 2.3) |
Rejette le mail quand l’IP du client n’a pas de “PTR record” dans le DNS ou quand le « PTR record » n’a pas de A record qui convienne.
Le unknown_client_reject_code est 450 par défaut. |
permit_mynetworks | Autorise le mail quand le client se trouve dans mynetworks. |
reject_rbl_client domain.tld | Rejette les mails quand l’adresse réseau du client est contenue dans la « Realtime Black List ».
Le maps_rbl_reject_code est 554 par défaut. Voir aussi default_rbl_reply et rbl_reply_maps. |
reject_rhsbl_client domain.tld | Rejette le mail quand le nom d’hôte du client se trouve dans la base rhsbl listée. |
check_client_access maptype:mapname maptype:mapname. | Rejette une règle dans une base de donnée. |
Restrictions génériques | Permit, defer, reject, warn_if_reject, reject_unauth_pipeling |
http://www.postfix.org/uce.html#smtpd_client_restrictions
<licode file=/etc/postfix/main.cf> smtpd_client_restrictions = reject_rbl_client zen.spamhaus.org, reject_rbl_client list.dsbl.org </licode>
Nous utilisons les listes RBL :
- zen de http://www.spamhaus.org/zen/index.lasso.
- Les conditions d'utilisation de la liste sont définies sur le site: « Use of the SBL is free for users with normal mail server erving less than 100 users. »
- Le filtre peut être testé en envoyant un mail à nelson-expn@crynwr.com, à partir d'une adresse gérée par le serveur mail.
- list.dsbl.org de Distributed Sender Blackhole List http://dsbl.org/. Cette liste contient :
- les relay SMTP de 1er niveau
- les proxy ouverys autorisant la commande CONNECT
- les serveurs web utilisant un "formmail" non sécurisé
- seuls des testeurs de confiance peuvent ajouter des adresses dans cette liste
- elle est ouverte à l'utilisation publique
Il existe de nombreuses autres listes, comme le précise la page http://en.wikipedia.org/wiki/DNSBL
Filtrage des impolis (HELO)
smtpd_helo_required = yes smtpd_helo_restrictions =
Restrictions | Explications |
---|---|
reject_invalid_hostname (postfix < 2.3) | Rejette le mail quand le hostname a une mauvaise syntaxe.Le invalid_hostname_reject_code est 501 par défaut. |
reject_unknown_hostname | Rejette le mail quand le hostname n’a pas de record A ou MX.
Le unknown_hostname_reject_code est 450 par défaut. Attention certains ISP (noos, voilà) ont mal configuré leurs passerelles de messagerie. |
reject_non_fqdn_hostname | Rejette le mail quand le hostname n’est pas fqdn.
Le non_fqdn_reject_code est 504 par défaut. |
check_helo_access maptype:mapname maptype:mapname | Recherche dans la base pour des restrictions |
Restrictions génériques | Permit, defer, reject, warn_if_reject, reject_unauth_pipeling |
<licode file=/etc/postfix/main.cf>
- Le serveur distant doit respecter le protocole SMTP en commencant par un HELO
- Syntaxe valide pour le HELO
- MX valide pour le domaine emetteur
smtpd_helo_required = yes smtpd_helo_restrictions = reject_invalid_hostname
- reject_unknown_hostname désactivé car bloque noos
</licode>
Filtrage sur l’expéditeur (MAIL FROM)
smtpd_sender_restrictions=
Restrictions | Explications |
---|---|
reject_unknown_sender_domain | Rejette le mail quand le domaine de l’expéditeur n’a pas de A/MX record.
Le unknown_address_reject_code est à 450 par défaut. |
reject_rhbsl_sender domain.tld | Rejette le mail quand le domaine est listé dans le A record de la base listée.
Le maps_rbl_reject_code est 554 par défaut. Voir aussi default_rbl_reply et rbl_reply_maps. |
check_sender_access maptype:mapname | Recherche une règle dans une base de données |
reject_non_fqdn_sender | Rejette le mail quand le domaine n’est pas fqdn.
Le non fqdn_reject_code est 504 par défaut. |
reject_sender_login_mismatch | Rejette le mail quand le client se connecte par SASL et que l’adresse utilisée ne lui appartient pas (définit dans $smtpd_sender_owner_maps) |
Restrictions génériques | Permit, defer, reject, warn_if_reject, reject_unauth_pipeling |
<licode file=/etc/postfix/main.cf> smtpd_sender_restrictions = reject_non_fqdn_sender, reject_unknown_sender_domain </licode>
Le paramètre strict_rfc821_envelopes précise la tolérance de postfix vis à vis des adresses données dans les champs MAIL FROM et RCPT TO.
Attention: Si ce paramètre est mis à yes, il peut bloquer du mail légitime envoyé par des applications mal développées.
<licode file=/etc/postfix/main.cf>
- Les commandes FROM et RCPT TO doivent etre renseignées apres le HELO
strict_rfc821_envelopes = yes </licode>
Filtrage sur le destinataire (RCPT TO)
smtpd_recipient_restrictions=
Restrictions | Explications |
---|---|
permit_mynetworks (defaut) | Autorise les mails du réseau interne. |
permit_sasl_authenticated | les utilisateurs sont autorisés à envoyer du courrier depuis n'importe quel point du réseau pourvu qu'ils soient authentifiés. |
permit_auth_destination | Autorise le mail si:
|
reject_unauth_destination (defaut)< | Rejette le mail sauf si l’un des deux est vrai:
Le relay_domains_reject_code est 554 par défaut. |
permit_mx_backup | Autorise le mail quand le système est un MX pour la destination.
Le serveur SMTP ne transférera pas des mails avec double @. Voir aussi permit_mx_backup_networks |
check_recipient_access maptype:mapname | Regarde les règles de la base de donnée par rapport à l’adresse de destination. |
check_recipient_maps | Rejette le mail quand l’adresse ne fait pas partie d’une table :
Si les bases local et relay sont vides, cela veut dire qu’aucune vérification n’est faite. Postfix ajoute un check_recipient_maps implicite à la fin de chaque restriction pour « recipient ». |
reject_unknown_recipient_domain | Rejette le mail quand l’adresse de destination n’est n’a pas de record DNS A ou MX.
Le unknown_address_reject_code est 450 par défaut. |
reject_rhsbl_recipient domain.tld | Rejette le mail quand l’adresse de destination est listée dans la base.
Le maps_rbl_reject_code est à 554 par défaut. Voir default_rbl_reply et rbl_reply_maps. |
reject_non_fqdn_recipient | Rejette le mail l’adresse du RCPT TO n’est pas FQDN.
Le non_fqdn_reject_code est 504 par défaut. |
Restrictions génériques | Permit, defer, reject, warn_if_reject, reject_unauth_pipeling |
<licode file=/etc/postfix/main.cf> smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination </licode>
Filtrage sur le contenu
En-tête ou corps du message
<licode file=/etc/master.cf> header_checks=pcre:/etc/postfix/header_checks body_checks=pcre:/etc/postfix/body_checks </licode>
You can find many useful anti-spam regexps at http://taz.net.au/Mail/
Copyright
© 2006 Christophe de Livois
Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la GNU Free Documentation License, Version 1.2 ou n'importe quelle version ultérieure publiée par la Free Software Foundation; sans section invariante, sans page de garde, sans entête et sans page finale. Pour plus d'informations consulter le site de l'APRIL. |