Pourquoi utiliser la ligne de commande pour interroger une DNSBL
Les interfaces web de vérification IP ont leurs limites : une seule adresse à la fois, aucune automatisation possible, dépendance à un service tiers. La ligne de commande offre une alternative directe et scriptable pour interroger n'importe quelle liste noire DNS anti-spam.
Les outils dig et nslookup sont disponibles nativement sur Linux, macOS et Windows. Ils interrogent les DNSBL en quelques millisecondes, sans interface graphique. Pour les administrateurs système et les équipes délivrabilité, c'est souvent la méthode la plus pratique.
Le mécanisme de requête DNSBL : comment ça fonctionne
Inverser l'adresse IP avant la requête
Le protocole DNSBL repose sur une convention simple : l'adresse IP est inversée, puis concaténée au domaine de la liste noire. Pour l'IP 192.168.1.10, la requête DNS cible 10.1.168.192.nom-de-la-dnsbl.com.
Cette inversion respecte le format de lookup DNS standard. Le serveur de la DNSBL répond avec un enregistrement A si l'IP est listée, ou une réponse NXDOMAIN (domaine inexistant) si elle est propre. Certaines listes retournent des codes comme 127.0.0.2 ou 127.0.0.10 pour préciser le type de listing.
Interpréter les codes de retour
127.0.0.2 est le code le plus courant : l'IP est listée comme source de spam. Des codes comme 127.0.0.4 ou 127.0.0.8 signalent des catégories différentes, proxies ouverts, plages dynamiques ou adresses associées à du phishing.
L'absence de réponse (NXDOMAIN) confirme que l'IP n'est pas dans la liste. Une réponse SERVFAIL indique un problème réseau ou un serveur DNSBL indisponible. Ne pas la confondre avec un listing.
Vérifier une IP avec dig
Syntaxe de base
dig est l'outil DNS le plus précis sous Linux et macOS. Pour vérifier l'IP 203.0.113.5 dans la DNSBL zen.spamhaus.org :
dig 5.113.0.203.zen.spamhaus.org A +short
L'option +short renvoie uniquement la réponse, sans les métadonnées DNS. Si la commande retourne une adresse comme 127.0.0.2, l'IP est blacklistée ; si elle ne retourne rien, l'IP est propre.
Pour obtenir aussi le texte explicatif associé au listing, utilisez l'enregistrement TXT :
dig 5.113.0.203.zen.spamhaus.org TXT +short
Interroger plusieurs DNSBL avec une boucle Bash
IP="203.0.113.5"
REVERSED=$(echo $IP | awk -F. '{print $4"."$3"."$2"."$1}')
LISTS=(
"zen.spamhaus.org"
"bl.spamcop.net"
"dnsbl.sorbs.net"
"b.barracudacentral.org"
"dnsbl-1.uceprotect.net"
)
for LIST in "${LISTS[@]}"; do
RESULT=$(dig +short ${REVERSED}.${LIST} A)
if [ -n "$RESULT" ]; then
echo "LISTED: $LIST -> $RESULT"
else
echo "CLEAN: $LIST"
fi
done
Ce script inverse automatiquement l'IP, interroge cinq DNSBL majeures et affiche le statut pour chacune. Sur une connexion correcte, l'exécution complète prend généralement moins de 3 secondes.
Vérifier une IP avec nslookup
Utilisation sur Windows et Linux
nslookup est disponible sur tous les systèmes d'exploitation. C'est une alternative utile dans les environnements Windows où dig n'est pas installé par défaut. La syntaxe reste similaire :
nslookup 5.113.0.203.zen.spamhaus.org
La réponse affiche Name: et Address: si l'IP est listée. Une réponse ** server can't find correspond au NXDOMAIN : l'IP est propre.
Limites de nslookup
nslookup est moins fiable que dig pour les scripts. Son format de sortie varie selon les systèmes et les versions ; il affiche parfois des informations sans rapport avec la requête (serveur DNS utilisé, numéro de version), ce qui complique le parsing automatique. Pour les scripts de production, dig reste préférable.
Scripts avancés pour la vérification en masse
Vérifier une liste d'IP depuis un fichier
#!/bin/bash
# check_dnsbl.sh - Vérifie une liste d'IPs contre plusieurs DNSBL
DNSBL="zen.spamhaus.org"
INPUT_FILE="$1"
if [ -z "$INPUT_FILE" ]; then
echo "Usage: $0 fichier_ips.txt"
exit 1
fi
while IFS= read -r IP; do
REVERSED=$(echo $IP | awk -F. '{print $4"."$3"."$2"."$1}')
RESULT=$(dig +short +time=3 +tries=1 ${REVERSED}.${DNSBL} A)
if [ -n "$RESULT" ]; then
echo "$IP -> LISTED ($RESULT)"
else
echo "$IP -> CLEAN"
fi
done < "$INPUT_FILE"
Ce script accepte un fichier texte avec une IP par ligne. L'option +time=3 +tries=1 limite le timeout à 3 secondes par requête pour éviter les blocages sur les DNSBL non répondantes. Pour 100 IPs, l'exécution prend environ 5 à 15 secondes.
Version Python pour plus de contrôle
import subprocess
import sys
def reverse_ip(ip):
parts = ip.strip().split('.')
return '.'.join(reversed(parts))
def check_dnsbl(ip, dnsbl):
query = f"{reverse_ip(ip)}.{dnsbl}"
try:
result = subprocess.run(
['dig', '+short', '+time=3', query, 'A'],
capture_output=True, text=True, timeout=5
)
output = result.stdout.strip()
return output if output else None
except subprocess.TimeoutExpired:
return "TIMEOUT"
ips = ["203.0.113.5", "198.51.100.12"]
lists = ["zen.spamhaus.org", "bl.spamcop.net"]
for ip in ips:
for dnsbl in lists:
status = check_dnsbl(ip, dnsbl)
if status:
print(f"[LISTED] {ip} dans {dnsbl} -> {status}")
else:
print(f"[CLEAN] {ip} dans {dnsbl}")
Le script Python gère mieux les erreurs et les timeouts. Il est facilement extensible : export CSV, alertes par email, intégration dans un pipeline CI/CD pour surveiller les IPs de serveurs d'envoi.
Bonnes pratiques pour éviter les blocages
Respecter les limites de débit des DNSBL
Plusieurs listes noires bloquent les adresses IP qui envoient trop de requêtes DNS en peu de temps. Spamhaus limite l'accès gratuit à environ 300 000 requêtes par jour depuis une même IP résidentielle ou commerciale ; au-delà, les réponses deviennent inexactes.
Pour des volumes importants, espacez les requêtes avec un délai (sleep 0.1 entre chaque IP) ou installez un serveur DNS local comme cache. Les usages professionnels à grande échelle nécessitent généralement une licence payante auprès des opérateurs de DNSBL.
Utiliser son propre résolveur DNS
Par défaut, dig utilise le résolveur configuré sur le système (/etc/resolv.conf). Certains fournisseurs DNS publics, Google 8.8.8.8 et Cloudflare 1.1.1.1 notamment, filtrent ou ne retournent pas correctement les enregistrements DNSBL. Mieux vaut interroger directement les serveurs autoritaires de la DNSBL, ou utiliser un résolveur récursif local comme Unbound. On précise un serveur DNS dans dig avec le symbole @ :
dig @8.8.8.8 5.113.0.203.zen.spamhaus.org A +short
Tester son propre serveur de messagerie
Avant de configurer des alertes automatiques, vérifiez les IPs de vos serveurs d'envoi dans les principales DNSBL. Un listing inattendu dans zen.spamhaus.org ou bl.spamcop.net peut faire chuter le taux de délivrabilité de 20 à 40 %, selon les données sectorielles sur le filtrage email.
Une vérification régulière, quotidienne pour les gros volumes et hebdomadaire pour les envois modérés, détecte un listing dans les heures qui suivent son application, bien avant que les bounces ne s'accumulent dans les logs.
Automatiser la surveillance avec cron
Un monitoring continu se met en place avec une tâche cron et une alerte par email :
# Ajouter dans crontab -e
0 */6 * * * /usr/local/bin/check_dnsbl.sh /etc/mail/monitored_ips.txt | grep "LISTED" | mail -s "DNSBL Alert" [email protected]
Cette ligne vérifie toutes les 6 heures la liste d'IPs surveillées et envoie un email uniquement si un listing est détecté. Pour les équipes qui gèrent plusieurs domaines d'envoi, c'est une infrastructure de monitoring légère, sans dépendance à un service tiers.