Config iptables smtp

Bonjour,

Mon serveur smtp ne nécessitant pas d’authentification, des spammeurs l’utilise continuellement.

A l’heure où j’écris ces lignes j’ai 17800 mail en queue.

Je voudrais tout simplement bloquer l’accès à mon serveur smtp depuis l’extérieur.

Voici la règle iptables que j’ai installé :

Alors ça fonctionne très bien, après avoir vider ma queue, elle reste bien vide.

Mais le problème c’est que je ne reçoit plus aucun mail.

Je voulais juste empêcher les spammeurs d’utiliser mon serveur smtp,
sans avoir à y greffer un système d’authentification.

Merci pour votre aide.

Donald.

Quel est le contenu des mails et surtout à qui est ces mails sont adressés?
Une file d’attente de cette taille suppose que les mails passent du temps dans la file (antivirus, spamassassin?)

Bonjour,

Ils passent du temps dans la file parce qu’ils contiennent des messages bidons envoyés à des adresses bidons.
Ces adresses n’existant pas, les messages restent en queue jusqu’à ce que les diverses tentatives de remise aient échouées.

Je voudrai empêcher quiconque de se connecter à mon serveur smtp,
via iptables et non pas en mettant en place une authentification.

J’y suis parvenu mais en bloquant également la délivrance des mails reçus.

A vrai dire il faudrait que je comprenne mieux le chemin que parcours un email pour arriver jusqu’à son destinataire.
Visiblement, le port 25 y ait pour quelque chose.

Merci

Le service SMTP sur le port 25 sert à recevoir les mails pour tes comptes comme à relayer ceux pour d’autres comptes.
Donc une règle iptables sur le port 25 va affecter tout le mondre.
Tu as plusieurs possibilités pour ne pas être en relais ouvert.
Déjà utiliser la directive smtpd_client_restrictions = permit_mynetworks et mettre dans mynetworks les machines qui t’intéressent. D’autres options sont disponibles et beaucoup de doc est dispo sur le ouebe, rien que ça par exemple postfix.org/postconf.5.html# … strictions.
Puis mettre en place une liste grise (paquet postgrey).
Mais l’authentification est quand même bien pratique.

Tu peux également l’article sur postfix disponible sur le wiki hébergé par lol (isalo.org/… adresse facile à retrouver sur le forum).

@ Antalgeek :
Ce serait bien de s’assurer avant que le serveur mail en question est postfix, sinon ça ne sert pas à grand chose.

@dpmix :
Oui, il ne serait vraiment pas inutile de comprendre comment fonctionne ton serveur de mail. Et d’abord :

  • quel est-il : postfix, exim4, sendmail… ?
  • qu’est-il censé faire : recevoir du courrier pour des domaines et comptes locaux (dans ce cas tu ne peux pas bloquer le port SMTP), relayer du courrier vers des domaines distants émis par des utilisateurs locaux ou distants… ?
  • les spams en file d’attente sont-ils à destination de domaines locaux (dans ce cas il faudrait vérifier l’existence du destinataire avant d’accepter un courrier) ou distants (dans ce cas il faudrait restreindre les sources pour lesquelles il accepte d’être relais, ou mettre en place une authentification) ?

+1 pour PascalHambourg

Ce n’est pas au firewall de faire ce travail, c’est ton serveur SMTP qui dois être correctement configuré pour filtrer les envois de mail. Si u as un serveur pop/imap d’installé sur ta machine regarde aussi du coté de popBeforeSMTP pour “simuler” une authentification SMTP.

[quote=“PascalHambourg”]@ Antalgeek :
Ce serait bien de s’assurer avant que le serveur mail en question est postfix, sinon ça ne sert pas à grand chose.[/quote]
Dans la mesure où ce n’est pas précisé je suis parti là-dessus.
Ce qui est vrai pour postfix peut être valable pour d’autres serveurs.
Et maintenant on va avoir la réponse…ou pas.

Le principe est valable pour tous les MTA, mais les options de configuration de postfix sont spécifiques à postfix. Et le MTA par défaut dans Debian est exim4, non ?

En parlant d’exim4, le système de configuration par défaut de Debian ne m’a pas permis de faire ce que je voulais, j’ai dû charcuter les fichiers de configuration pour y arriver à peu près. Et pourtant je ne demandais pas la lune, juste une vérification un peu plus sérieuse des domaines d’expédition et des destinataires locaux…

Nous sommes bien d’accord.
Exim est en effet le MTA par défaut de debian mais nous sommes quelques-uns ici à nous être pris la tête sur sur ce serveur sans réussir à faire ce qu’on voulait. Ou alors à grand renfort de sueur et de larmes. C’est pour cela que je tourne sous postfix (et que je donne des exemples de conf de ce serveur).
fran.b tourne avec exim sans problème mais je crois qu’il a une version personnelle basée sur la 3. Il a donné des exemples de conf dans je ne sais plus quel fil.
D’ailleurs si tu as une configuration fonctionnelle d’exim j’en connais plusieurs qui seront ravis d’avoir un petit T&A là-dessus.

Je n’arrive pas à savoir quel est mon serveur smtp :083

C’est qmail qui gère mes mails mais je ne pense pas que ce soit lui le serveur smtp.

J’ai tapé cette commande pour savoir qui écoute le port 25 :

netstat -ntpl

Et j’obtiens “tcpserver” ce qui correspond à sendmail non ?

J’ai aussi comme indice que /usr/sbin/sendmail est bien installé,
ce n’est pas un lien symbolique et il appartient au groupe “qmail”.

Quant à l’utilisation que je fais de mon serveur :

  • il héberge une cinquantaine de sites avec webmail et accès pop
  • il y a environ 150 comptes mail (3 par site en moyenne)

Notez que je viens de prendre en main l’administration de ce serveur,
il a près de 4 ans, tourne sur un noyau 2.6.8-3-686-smp,
et avec 50 sites en production, je ne peux pas faire n’importe quoi.

Vous me direz, c’est déjà fait… :038

Merci pour votre aide !

Après recherche rapide, je pense que c’est bien qmail.
La description du paquet qmail-src mentionne ucspi-tcp qui contient /usr/bin/tcpserver.

Tu peux chercher les processus qui tournent sur ta machine avec ps -A ou ps -aux.
Et voir si les paquets cités par PascalHambourg sont installés avec apt-cache policy le_paquet.
Mais en ayant cherché un peu aussi je plussoie sur PascalHambourg.

Si c’est qmail, tu as les commande qmail-send et qmail-clean qui permette d’envoyer les mails dans la file et de vider la file. Cependant la durrée de vie d’un message dans la file d’attente est de une semaine après quoi il est viré (ça se paramètre). Que donne le résultat de qmail-qstat? N’es tu pas sûr que cet afflux de mails vient d’un gars qui a utilisé ton domaine pour origine de spams, ça m’est arrivé 2-3 fois et tu te retrouves avec 100000 à 200000 mails par jours pendant 3 4 jours puis ça baisse pendant une dizaine de jours. Mais après c’est fini.

C’est bien qmail.

Et en fait sont bloqués dans la queue les messages de réponses aux spameurs, je m’explique :

  1. nimportequoi@mondomaine.com
  2. spameur@spameur.ru un mail pour lui notifier
  3. spameur@spameur.ru n’existant pas, le mail se retrouve en queue et y reste un bon moment

D’où ma question : comment ne plus envoyer ces mail de notifications ?

Merci.

Donald

Tu ne peux pas et même ne dois pas ou bien tu ne respectes plus les normes RFC. C’est un problème que je connais bien, j’ai réglé le problème en mettant en tache «cron» une commande virant les messages gelés trop vieux d’origine le système et je fais régulièrement le vide moi même par ailleurs.

D’accord :017

Pas moyen de limiter à 1 seul email de notification non plus ?

Sinon je vais faire comme toi, un bon vieux cron qui bousculera tout même la RFC :083

Merci

En refusant les mails d’origine (les spams) directement au moment de la transaction SMTP, en vérifiant à ce moment si le destinataire local et/ou le domaine d’expéditeur existent. Je me suis bien fait suer avec exim4 pour faire les deux. Aucune idée de comment faire avec qmail.

Tu peux dire ta technique sous exim4? C’est quelque chose que je sais bien faire sous exim3 mais pas 4.

Je m’étais aussi fait suer pour y parvenir avec exim3 et je n’étais pas chaud pour tout refaire avec exim4 sachant que la configuration avait pas mal changé, c’est pourquoi j’ai retardé le plus longtemps possible la migration vers exim4…

Ma difficulté est que j’utilise le type “envoi par smarthost, réception par SMTP”, qui a la particularité de rendre inefficace la vérification des domaines non locaux puisque tout ce qui n’est pas local est routé vers le smarthost au lieu de faire une requête DNS de type MX pour le domaine. En mode “site internet” avec envoi direct par SMTP on n’a pas ce souci.

J’ai donc ajouté un transport spécifique pour la vérification avant le transport principal.

### router/170_exim4-config_verify
#################################
# This file contains the router for verifying sender/recipient only

.ifdef DCconfig_internet DCconfig_smarthost DCconfig_satellite
# configtype=internet or configtype=smarthost or configtype=satellite

# router for verifying non-local sender/recipient only
dnslookup_verify:
  verify_only
  address_data = verify_remote_domain
  debug_print = "R: dnslookup_verify for $local_part@$domain"
  driver = dnslookup
  domains = ! +local_domains
  transport = remote_smtp
  same_domain_copy_routing = yes
  # ignore private rfc1918 and APIPA addresses
  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 : 192.168.0.0/16 :\
                        172.16.0.0/12 : 10.0.0.0/8 : 169.254.0.0/16 :\
			            255.255.255.255
  no_more

.endif

Ensuite j’ai dû modifier l’ACL acl_check_rcpt qui fait les vérifications après la réception d’une commande SMTP RCPT. Pour ne pas toucher au fichier originel et que mon fichier ne soit pas écrasé lors d’une mise à jour d’exim4, j’ai créé un fichier .rul qui est pris en compte à sa place lors de la création de la configuration.

Voici le diff entre les deux fichiers.

--- acl/30_exim4-config_check_rcpt      2008-03-01 10:01:34.000000000 +0100
+++ acl/30_exim4-config_check_rcpt.rul  2010-09-13 10:38:45.000000000 +0200
@@ -1,5 +1,5 @@

-### acl/30_exim4-config_check_rcpt
+### acl/30_exim4-config_check_rcpt.rul
 #################################

 # This access control list is used for every RCPT command in an incoming
@@ -12,6 +12,9 @@
   # testing for an empty sending host field.
   accept
     hosts = :
+       # debut ajout
+       verify = recipient/defer_ok
+       # fin ajout


   # The following section of the ACL is concerned with local parts that contain
@@ -83,6 +86,17 @@
   .endif


+  # debut ajout
+  require
+    verify = recipient
+
+  deny
+    message = Sender verification failed for remote domain
+    condition = ${if eq {$address_data} {verify_remote_domain}}
+    ! verify = sender
+  # fin ajout
+
+
   # Accept mail to postmaster in any local domain, regardless of the source,
   # and without verifying the sender.
   #

exim c’est mieux que qmail ?