Où comment vérifier la présence d’un serveur SMTP dans les listes noires de Spam. Ce petit tuto est une traduction de d'un article de Sebastian Nohn.
Les RBLs ont pour objectif de fournir une liste de serveurs réputés comme grands envoyeurs de pourriels, et de lister les grands polluposteurs. Il s’agit en fait d’une grande liste noire généralisée. Le principe d’utilisation est fort simple : lorsqu’un filtre reçoit une courriel, il vérifie si le serveur d’envoi est contenu dans un RBL. Si oui, le courriel est catégorisé comme pourriel. Les RBLs qu’un filtre utilise comme sources de serveurs est habituellement déterminée par l’administrateur système. Cette méthode contient donc son lot de controverse, puisque certains RBLs sont réputés pour être plus efficaces que d’autres. Le choix des RBLs influence donc directement l’efficacité du système antipourriel. De plus, certains RBL ont des règles plus souples que d’autres quant à l’ajout d’un serveur dans leur liste, compliquant encore plus la situation. Parmi les RBLs connus, notons, entre autres, SpamHaus, DynaBlock, Sorbs, et DSBL. Il est également possible d’associer ROKSO aux RBLs. ROKSO (Register of Known Spam Operations) est une liste des polluposteurs les plus actifs. En fait, les membres de ROKSO sont responsables de près de 80% du pourriel sur le Net.
Il est donc du ressort d’un administrateur système de vérifier régulièrement si ses serveurs d’envoi SMTP ne sont pas fichés dans l’une de ces listes noires. C’est particulièrement fastidieux manuellement et on oublie souvent de le faire alors que Nagios associé à un peu de PHP et quelques modules PEAR peut tout à fait s’en charger de façon automatique.
Commençons par installer les packages PEAR nécessaires soit Net_DNSBL et Console_Getopt
pear install -a Net_DNSBL Console_Getopt
Il convient ensuite de créer le script de vérification
#!/usr/bin/php <?php define('SERVICE_STATUS', 'Service Status:'); require_once 'Console/Getopt.php'; require_once 'Net/DNSBL.php'; $dnsbl = new Net_DNSBL(); $shortoptions = 'H:V::r:'; $longoptions = array('hostname=', 'version==', 'rbls='); $con = new Console_Getopt; $args = $con->readPHPArgv(); array_shift($args); $options = $con->getopt2($args, $shortoptions, $longoptions); foreach($options[0] as $option) { if ($option[0] == 'H' || $option[0] == '--hostname') { $hostname = $option[1]; } if ($option[0] == 'r' || $option[0] == '--rbls') { $rbls_temp = $option[1]; } } if (!isset($hostname) || !isset($rbls_temp)) { echo SERVICE_STATUS.' Unknown'."\n"; exit(3); } else { $rbls = explode(',', $rbls_temp); $dnsbl->setBlacklists($rbls); if ($dnsbl->isListed($hostname)) { echo SERVICE_STATUS.' Critical - Listed in '.$dnsbl->getListingBl($hostname)."\n"; exit(2); } else { echo SERVICE_STATUS.' OK - Not Listed in supplied DNSBLs'."\n"; exit(0); } } ?>
Ce script est à déposer dans le répertoire des scripts Nagios, habituellement /usr/local/nagios/libexec.
Ensuite, il suffit de créer une commande comme à l’accoutumée
define command{ command_name check_dnsbl command_line $USER1$/check_dnsbl -H $HOSTADDRESS$ -r $ARG1$ }
et de créer le service correspondant
define service{ use generic-service host_name votre.server.mail service_description DNSBL is_volatile 0 check_period 24x7 max_check_attempts 3 normal_check_interval 3 retry_check_interval 1 contact_groups none notification_interval 120 notification_period 24x7 notification_options w,u,c,r check_command check_dnsbl!bl.spamcop.net,autre.liste.virgule.separe.rbls }
Nagios va désormais vérifier à l’intervalle fixé si le serveur smtp déclaré dans hostname est fiché dans les services de listes noires passés en paramètres