====== Recevoir du monde ====== Nous pouvons maintenant commencer à envisager de recevoir des messages depuis le monde vers nos comptes @nain-t.net. Nous devons déjà nous assurer que le DNS qui gère le domaine ''nain-t.net'' répond correctement à une requête de type MX : # host -t MX nain-t.net nain-t.net mail is handled by 1 cyrus.nain-t.net. C'est le cas. Il va falloir tout de même prévoir quelques mesures sanitaires en conséquence. == Remarque à propos de Bind == ''Bind9'', Le serveur de noms quasi universellement utilisé sur l'internet présente une petite restriction qu'il est important de souligner. En effet, il ne supporte pas que le nom d'hôte indiqué comme MX soit un alias, autrement dit un ''CNAME''. Evitez donc les ennuis et ne faites pas quelque chose comme :
truc.machin.net. IN A 192.168.0.5 cyrus.machin.net. IN CNAME truc.machin.net. machin.net. IN MX 1 cyrus.machin.net.Mais plutôt :
cyrus.machin.net. IN A 192.168.0.5 truc.machin.net. IN CNAME cyrus.machin.net. machin.net. IN MX 1 cyrus.machin.net.===== Le silence est d'or ===== ==== La bannière d'accueil ==== Est-il bien nécessaire que notre postfix s'annonce de manière si explicite ? Non. Seul le nom d'hôte est obligatoire. Notre Postfix se présente actuellement comme ceci :
$ telnet cyrus.nain-t.net 25
Trying 192.168.10.7...
Connected to cyrus.nain-t.net.
Escape character is '^]'.
220 cyrus.nain-t.net ESMTP Postfix (Debian/GNU)
Ce n'est pas nécessaire d'indiquer à tout le monde que nous utilisons Postfix sur une Debian. Modifions notre ''smtp_banner'' en fonction :
smtpd_banner = $myhostname ESMTP Experimental
Et vérifions :
$ telnet cyrus.nain-t.net 25
Trying 192.168.10.7...
Connected to cyrus.nain-t.net.
Escape character is '^]'.
220 cyrus.nain-t.net ESMTP Experimental
C'est mieux, c'est plus discret, c'est moins extraverti.
==== La commande « vrfy » ====
SMTP prévoit la commande ''vrfy vrfy lambda 252 2.0.0 lambda vrfy truc 550 5.1.1Cette commande est bien utile pour des besoins de mise au point, mais à quoi bon donner aux spammers un moyen simple de trouver ce genre d'informations ? disable_vrfy_command = yes va arranger ça :: Recipient address rejected: User unknown in local recipient table
vrfy lambda
502 5.5.1 VRFY command is disabled
===== La politesse, Bordel ! =====
==== On se présente... ====
SMTP prévoit que les MTA sont polis. Ils se présentent avec la commande EHLO (ou HELO). Il est possible d'éjecter simplement les malpolis en indiquant à Postfix que :
smtpd_helo_required = yes
Voyons :
$ telnet cyrus.nain-t.net 25
Trying 192.168.10.7...
Connected to cyrus.nain-t.net.
Escape character is '^]'.
220 cyrus.nain-t.net ESMTP Experimental
MAIL FROM: <machin@truc.com>
503 5.5.1 Error: send HELO/EHLO first
==== Un dialogue « bcbg » ====
Postfix permet de placer des restrictions plus ou moins serrées lors du dialogue SMTP, principalement sur les commandes ''MAIL FROM:'' et ''RCPT TO:'', ainsi que sur l'adresse IP du client.
=== smtpd client restrictions ===
Le paramètre ''smtpd_client_restrictions'' permet de contrôler qui se connecte à notre MTA. Par défaut, ce paramètre n'applique aucune restriction.
Nous pouvons vérifier que les clients ne sont pas référencés sur des « blacklists » réputées :
smtpd_client_restrictions = permit_mynetworks, # Nous faisons confiance aux clients de notre réseau reject_rbl_client blackholes.easynet.nl, # mais pas à ceux qui sont "blacklistés" reject_rbl_client cbl.abuseat.org, reject_rbl_client proxies.blackholes.wirehub.net, reject_rbl_client bl.spamcop.net, reject_rbl_client sbl.spamhaus.org, reject_rbl_client dnsbl.njabl.org, reject_rbl_client list.dsbl.org, permitLes règles sont lues de gauche à droite (de haut en bas dans notre façon de l'écrire) et la première règle vérifiée est la bonne. Les autres sont donc ignorées. Ici, les réseaux spécifiés dans ''$mynetworks'' sont permis et dans ce cas, le filtrage n'ira pas plus loin. En revanche, si le client qui se connecte n'est pas dans ''$mynetworks'', Postfix va vérifier qu'il n'est référencé dans aucune des « blacklists » indiquées avant de lui permettre (''permit'' en fin de liste) de se connecter. Le principe de ces listes est simple. Postfix va effectuer une requête dns inverse (rdns) à partir de l'adresse IP du client, inversée et apposée au domaine annoncé de la liste noire : $ host 95.57.127.82.sbl.spamhaus.org Si la réponse est : Host 95.57.127.82.sbl.spamhaus.org not found: 3(NXDOMAIN) C'est que l'adresse 82.127.57.95 n'est pas référencée. Si au contraire, la réponse est : 95.57.127.82.sbl.spamhaus.org has address 82.127.57.95 C'est que l'adresse 82.127.57.95 est référencée. Le client sera alors rejeté. Nous pouvons utiliser plusieurs blacklists, au détriment des ressources consommées sur le serveur, au risque de voir ces clients rejetés par erreur... Le postmaster doit donc rester attentif. === smtpd sender restrictions === La commande ''MAIL FROM:'' doit indiquer l'adresse (de messagerie) de l'émetteur du message. Nous pouvons vérifier certaines choses à ce niveau et nous allons le faire, par l'intermédiaire de la directive ''smtpd_sender_restrictions'' :
smtpd_sender_restrictions = permit_mynetworks, # Nous faisons confiance aux clients de notre réseau reject_non_fqdn_sender, # machin@chose ne passera pas reject_unknown_sender_domain, # machin@truc.tld ne passera pas permit=== smtpd recipient restrictions === Ces restrictions touchent à ce qu'il y a dans la commande ''RCPT TO:''. La valeur par défaut (permit_mynetworks, reject_unauth_destination) est acceptable, mais il est possible de restreindre d'avantage. Voyez [[http://www.postfix.org|la documentation de Postfix officielle]] ou [[http://postfix.traduc.org|sa traduction en français]] pour plus de détails. ==== Vérifions... ==== Nous avons désormais un ''main.cf'' qui ressemble à ceci :
smtpd_banner = $myhostname ESMTP Experimental
disable_vrfy_command = yes
smtpd_helo_required = yes
smtpd_sender_restrictions =
permit_mynetworks,
reject_non_fqdn_sender
reject_unknown_sender_domain,
permit
smtpd_client_restrictions =
permit_mynetworks,
reject_rbl_client blackholes.easynet.nl,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client proxies.blackholes.wirehub.net,
reject_rbl_client bl.spamcop.net,
reject_rbl_client sbl.spamhaus.org,
reject_rbl_client dnsbl.njabl.org,
permit
biff = no
append_dot_mydomain = no
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:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
myhostname = cyrus.nain-t.net
myorigin = $myhostname
mydestination = $mydomain, $myhostname, localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
relayhost =
mynetworks = 127.0.0.0/8 192.168.0.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
home_mailbox = Maildir/
Depuis un client de l'internet, nous allons, en passant par le SMTP du fournisseur de ce client, envoyer un message à ''%%lambda@nain-t.net%%''. Observons les logs sur ''cyrus.nain-t.net'' :
Jun 4 11:24:54 cyrus postfix/smtpd[21077]: connect from smtp21.orange.fr[80.12.242.49] Jun 4 11:24:55 cyrus postfix/smtpd[21077]: B230A67D9D: client=smtp21.orange.fr[80.12.242.49] Jun 4 11:24:55 cyrus postfix/cleanup[21082]: B230A67D9D: message-id=<48465F65.4020809@eme-enseignement.fr> Jun 4 11:24:55 cyrus postfix/smtpd[21077]: disconnect from smtp21.orange.fr[80.12.242.49] Jun 4 11:24:55 cyrus postfix/qmgr[21075]: B230A67D9D: from=C'est bon ça. Allons lire ce message avec notre oiseau du tonnerre, via Dovecot (code source du message) :, size=1243, nrcpt=1 (queue active) Jun 4 11:24:55 cyrus postfix/local[21083]: B230A67D9D: to= , relay=local, delay=0.98, delays=0.96/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to maildir) Jun 4 11:24:55 cyrus postfix/qmgr[21075]: B230A67D9D: removed
Return-Path: <christian.caleca@exe-enxeignexent.fr> X-Original-To: lambda@nain-t.net Delivered-To: lambda@nain-t.net Received: from smtp21.orange.fr (smtp21.orange.fr [80.12.242.49]) by cyrus.nain-t.net (Postfix) with ESMTP id B230A67D9D for <lambda@nain-t.net>; Wed, 4 Jun 2008 11:24:54 +0200 (CEST) Received: from me-wanadoo.net (localhost [127.0.0.1]) by mwinf2121.orange.fr (SMTP Server) with ESMTP id 46CF01C004ED for <lambda@nain-t.net>; Wed, 4 Jun 2008 11:24:54 +0200 (CEST) Received: from jupiter.eme.org (LSt-Amand-152-32-18-95.w82-127.abo.wanadoo.fr [82.127.57.95]) by mwinf2121.orange.fr (SMTP Server) with ESMTP id 2EDE51C0044A for <lambda@nain-t.net>; Wed, 4 Jun 2008 11:24:54 +0200 (CEST) X-ME-UUID: 20080604092454192.2EDE51C0044A@mwinf2121.orange.fr Received: from [172.16.129.250] (p-caleca.eme.org [172.16.129.250]) by jupiter.eme.org (Postfix) with ESMTP id C61C81E3 for <lambda@nain-t.net>; Wed, 4 Jun 2008 11:24:53 +0200 (CEST) Message-ID: <48465F65.4020809@eme-enseignement.fr> Date: Wed, 04 Jun 2008 11:24:53 +0200 From: Christian Caleca <christian.caleca@exe-enxeignexent.fr> User-Agent: Thunderbird 2.0.0.14 (Windows/20080421) MIME-Version: 1.0 To: lambda@nain-t.net Subject: Test lointain Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit Et ça passe :pNotre MTA est devenu aussi MX et nous pouvons désormais recevoir des messages depuis le monde.