Filtrage Postfix

De wikilivois
Aller à la navigationAller à la recherche

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 noter l'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>

  1. Le serveur distant doit respecter le protocole SMTP en commencant par un HELO
  2. Syntaxe valide pour le HELO
  3. MX valide pour le domaine emetteur

smtpd_helo_required = yes smtpd_helo_restrictions = reject_invalid_hostname

  1. 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>

  1. 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:
  • l’adresse destination appartient à $relay_domains ou à un sous domaine (et pas de double @)
  • postfix est la destination finale ($mydestination, $inet_interfaces, $virtual_alias_domains ou $virtual_mailbox_domains)
reject_unauth_destination (defaut)< Rejette le mail sauf si l’un des deux est vrai:
  • l’adresse destination appartient à $relay_domains ou à un sous domaine (et pas de double @)
  • postfix est la destination finale ($mydestination, $inet_interfaces, $virtual_alias_domains ou $virtual_mailbox_domains)

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 :
  • $local_recipient_maps pour $mydestination ou $inet_interfaces
  • $virtual_alias_maps pour $virtual_alias_domains
  • $virtual_mailbox_maps pour $virtual_mailbox_domains
  • $relay_recipient_maps pour $relay_domains

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

Tête de GNU 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.