Postfix, reverse DNS, reject_unknown_client

Salut,

J’ai activé dans Postfix l’option smtpd_client_restrictions = reject_unknown_client. Le but est de refuser les mails provenant d’adresses IP qui n’ont pas de reverse DNS afin d’éliminer une partie du spam.

Y’a un truc que j’ai dû faire de travers, car…

Or bien entendu, aucun problème du côté de la résolution inverse…

[code]# dig -x 209.85.214.49

; <<>> DiG 9.7.3 <<>> -x 209.85.214.49
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3134
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;49.214.85.209.in-addr.arpa. IN PTR

;; ANSWER SECTION:
49.214.85.209.in-addr.arpa. 33485 IN PTR mail-bk0-f49.google.com.

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Feb 16 13:04:35 2012
;; MSG SIZE rcvd: 81[/code]
NB: ça me fait ça avec n’importe quel émetteur.

Dès que je désactive l’option reject_unknown_client y’a plus aucun souci.
Mon serveur DNS local est dnsmasq (le domaine lui-même est “hébergé” sur les DNS du registrar), mais je ne pense pas que ça joue (le dig -x prouve que ça fonctionne).

Une piste ? Je sèche…

Edit : Rien de bien extraordinaire mais voici tout de même mon /etc/postfix/main.cf

[code]# See /usr/share/postfix/main.cf.dist for a commented, more complete version

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

appending .domain is the MUA’s job.

append_dot_mydomain = no

Uncomment the next line to generate “delayed mail” warnings

delay_warning_time = 1h

readme_directory = no

TLS parameters

smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for

information on enabling SSL in the smtp client.

myhostname = XXX.XXX.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = XXX.XXX.com, localhost.XXX.com, , localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4

virtual_uid_maps = static:3000
virtual_gid_maps = static:3000
virtual_mailbox_base = /home/mail-delivery

virtual_transport = dovecot

virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_mailbox_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
relay_domains = mysql:/etc/postfix/mysql_relay_domains.cf

smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unauth_destination,
reject_unauth_pipelining,
check_policy_service inet:127.0.0.1:10023,
reject_invalid_hostname

Le coupable est ici…

#smtpd_client_restrictions = reject_unknown_client

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous

dovecot_destination_recipient_limit = 1[/code]

D’après la doc, reject_unknown_client est pour les versions de postfix < 0.23. Pour les versions suivantes c’est reject_unknown_client_hostname. A vérifier.
Note que pour juste vérifier l’existence du reverse DNS, reject_unknown_reverse_client_hostname serait plus approprié.

Tu as raison, bien qu’il semble toujours accepter l’ancien nom. (Postfix 2.7.1, j’avais bien vu cette info mais je m’étais embrouillé les pédales, je me croyais en 1.2 – la version de dovecot :blush:)
En tous cas ça ne change rien (NB: je suis passé en warn_if_reject entre temps histoire d’être moins méchant avec les serveurs que j’utilise pour tester) :

postfix/smtpd[3260]: NOQUEUE: reject_warning: RCPT from unknown[209.85.215.49]: 450 4.7.1 Client host rejected: cannot find your hostname, [209.85.215.49]; from=<XXX@gmail.com> to=<XXX@XXX.com> proto=ESMTP helo=<mail-lpp01m010-f49.google.com>

Même résultat :

postfix/smtpd[3385]: NOQUEUE: reject_warning: RCPT from unknown[209.85.215.49]: 450 4.7.1 Client host rejected: cannot find your reverse hostname, [209.85.215.49]; from=<XXX@gmail.com> to=<XXX@XXX.com> proto=ESMTP helo=<mail-lpp01m010-f49.google.com>

Pourtant en l’occurrence même reject_unknown_client_hostname (le plus strict des deux) devrait passer sans souci, ça boucle bien :

[code]# host 209.85.215.49
49.215.85.209.in-addr.arpa domain name pointer mail-lpp01m010-f49.google.com.

host mail-lpp01m010-f49.google.com

mail-lpp01m010-f49.google.com has address 209.85.215.49[/code]
On dirait que Postfix n’arrive pas du tout à faire de requêtes DNS… :017

Edit : en fait Postfix arrive très bien à faire des requêtes DNS, je viens de mettre en place le DNSBL de spamhaus.org, je l’ai testé, tout fonctionne correctement.
Le mystère reste entier.

Salut,

je ne sais si tu connais cette doc … Format du fichier main.cf de Postfix je présume que, certainement … :083 mais …

Oui. Enfin, celle en anglais (qui est équivalente, sans les éventuelles erreurs de traduction de la version française :mrgreen:).
Malheureusement ça n’aide pas, y’a un truc qui coince quelque part.

Je remonte ce fil une dernière fois avant de le laisser sombrer dans l’oubli. :083

Déterrage :slight_smile:
Comme indiqué dans la doc que tu cites, reject_unknown_client pour les vieilles versions, alias reject_unknown_client_hostname fait plus d’une requete DNS: il vérifie IP -> nom, puis if vérifie que le nom renvoie bien vers l’IP originale…

comme l’indiquait PascalHambourg, tu devrais utiliser reject_unknown_reverse_client_hostname dans ce cas

Et j’ajoute que la réponse figure donc dans ce thread depuis le jour ou tu l’as posté, faut lire les réponses…