Trier les spams une fois qu'ils sont reçus, c'est pas mal. Mais embêter les spammeurs, c'est bon pour tout le monde . Spamd fait semblant d'être un serveur mail afin de filtrer les spams et embêter les spammeurs. Il a été écrit dans l'optique d'être très efficace et ne pas ralentir la machine. Bien sûr, il transmet les mails légitimes au serveur smtpd ensuite.
Ce qui est rigolo, c'est qu'il va faire en sorte de ralentir les spammeurs en communiquant tout doucement avec eux et leur faire consommer inutilement leur ressources :) .
Enfin, avantage non négligeable, il est présent par défaut dans OpenBSD.
N'hésitez pas à consulter l'exemple de configuration.
Deux méthodes sont possibles et compatibles. La première consiste à laisser traîner sur le web une fausse adresse mail. Tous les messages envoyés à cette adresse sont émis par des robots spammeurs : l'origine de ces derniers est alors mise sur liste noire.
L'autre méthode est le “greylisting”. Afin de reconnaître les pourriels, spamd va mettre en attente ceux qui contactent le serveur. Ils sont mis sur liste grise.
Normalement, un serveur expéditeur légitime réessaie automatiquement de délivrer le message après un certain temps. Lors du 2e essai, ce serveur est mis sur liste blanche et le message est correctement distribué.
Les spammeurs ne vont pas réessayer de délivrer le message. Dans ce cas, ils seront oubliés après un délai assez long, et vous n'aurez pas reçu le spam.
Attention : Cette méthode, bien que très efficace, suppose que l'expéditeur fait les choses comme il faut. Ce n'est malheureusement pas toujours le cas, notamment pour certains sites marchands. Pensez-y. C'est heureusement facile d'ajouter un serveur sur liste blanche. Vous devriez de toute manière utiliser une adresse poubelle comme guerrilamail dans ces cas de figure.
Afin d'enregistrer les vilains (et bons) expéditeurs, il faudra exécuter la commande
spamd-setup
régulièrement.
On commence par activer spamd au démarrage, en indiquant les options dont il aura besoin, puis on le lance :
# rcctl enable spamd # rcctl set spamd flags "-v -G 25:4:864" # rcctl start spamd
Le premier chiffre correspond au nombre de minutes qu'un expéditeur doit attendre avant de réessayer de nous renvoyer son mail (puisque les spammeurs envoient des salves de mails très rapidement). Le second correspond au temps qu'une entrée reste dans la liste grise, et le dernier le temps pendant lequel une entrée restera sur la liste blanche (en heures).
En complément, je vous invite à activer spamlogd
qui gardera en mémoire les
expéditeurs légitimes de mail dans le temps sans repasser par la case “liste
grise”, tant que ces derniers envoient des mails régulièrement. Il enregistre
aussi sur liste blanche les serveurs auxquels vous envoyez des messages.
Attention, il faut bien avoir précisé le mot clé “log” dans la configuration du
parefeu, comme précisé un peu plus loin.
# rcctl enable spamlogd # rcctl start spamlogd
spamd se place juste avant smtpd. On va éditer la configuration du parefeu en conséquence. Il va envoyer à spamd tout le flux destiné au serveur smtp, qui relaiera ensuite le mail normalement s'il est légitime.
Voici ce qu'il faut donc ajouter dans /etc/pf.conf
:
table <spamd-white> persist table <nospamd> persist file "/etc/mail/nospamd" pass in on egress proto tcp to any port smtp divert-to 127.0.0.1 port spamd pass in on egress proto tcp from <nospamd> to any port smtp pass in log on egress proto tcp from <spamd-white> to any port smtp
Dans l'ordre des lignes :
<spamd-white>
qui contient les IP d'expéditeurs connus comme légitimes/etc/mail/nospamd
qui contiendra les IP des expéditeurs légitimes définis par vos soins.<nospamd>
directement.Voilà pour le parefeu. N'oubliez pas de le recharger :
# pfctl -ef /etc/pf.conf
Il est nécessaire de régulièrement charger la liste noire des spammeurs dans
pf
afin que spamd fonctionne bien. Nous allons nous servir d'une tâche cron
pour ça. Saisissez # crontab -e
, puis décommentez la ligne suivante :
0 * * * * sleep $((RANDOM \% 2048)) && /usr/libexec/spamd-setup
Pour l'édition, référez-vous aux rappels sur l'utilisation de vi.
Nous lançons ici spamd-setup
à des intervalles de temps aléatoires, espacés
au maximum d'une heure.
Vous pouvez piéger les spammeurs en laissant traîner sur le web une fausse adresse mail. Si spamd voit un message arriver pour cette adresse, alors il sait déjà que c'est un spam : il peut donc le mettre sur liste noire. Vous voilà protégés pour l'avenir.
Afin de glisser cette “adresse-piège” sur le web sans que ça soit visible par les humains, vous pouvez l'insérer ainsi dans le code html de votre site :
<a href="mailto:piege@chezmoi.tld"></a>
Sinon, copiez-la sur des pastebins publics.
Pour indiquer à spamd cette adresse piège, il faut ajouter les options suivantes à spamdb (attention au “b” final, ce n'est pas spamd). :
# spamdb -T -a 'piege@chezmoi.tld'
Bien entendu, cette adresse piège ne doit pas être créée et ne risque pas de servir à quiconque.
Pour aller plus loin, vous pouvez consulter cette page qui propose une publication automatique de fausses adresses sur des sites publics.
Malgré ce que certains disent, les gens sympas, ça existe ! Ces derniers
ont rassemblé une liste de spammeurs qu'ils rendent publique.
Afin de les utiliser avec spamd, il faut éditer le fichier /etc/mail/spamd.conf
.
Voyons l'exemple par défaut livré de base : la liste nixspam.
Dans le fichier /etc/mail/spamd.conf
, nous mettrons les lignes suivantes :
all:\ :nixspam # Nixspam recent sources list. # Mirrored from http://www.heise.de/ix/nixspam nixspam:\ :black:\ :msg="Your address %A is in the nixspam list\n\ See http://www.heise.de/ix/nixspam/dnsbl_en/ for details":\ :method=http:\ :file=www.openbsd.org/spamd/nixspam.gz
Au début du fichier, vous lisez all
. Précisez ensuite le nom des listes qui
sont configurées en-dessous en les séparant par des “:
”. Nous allons en
ajouter dans les paragraphes suivants.
Les listes peuvent être récupérées directement en précisant leur URL, ou bien être des fichiers présents sur votre serveur.
Peter N.M.Hansteen publie une liste d'IP piégées avec ses propres SPAMTRAPS.
Il met sur liste noire les IP cherchant à télécharger trop souvent sa liste pour éviter les surcharges sur son serveur. On va donc les récupérer régulièrement en ajoutant à votre crontab, toutes les heures à 20 minutes passées :
20 * * * * /usr/local/sbin/bsdly-spamd
Le script bsdly-spamd
ne fait que récupérer la liste de Peter :
#!/bin/sh # update bsdly.net traplist into DST URL="https://www.bsdly.net/~peter/bsdly.net.traplist" # alternative URL #URL="https://home.nuug.no/~peter/bsdly.net.traplist" DST=/var/db/bsdly.traplist ftp -o "${DST}" "${URL}"
Ensuite, indiquez dans /etc/mail/spamd.conf
d'ajouter le contenu du
fichier /var/db/bsdly.traplist
à la liste noire :
all:\ :nixspam:bgp-spamd:bsdlyblack: nixspam:\ :black:\ :msg="Your address %A is in the nixspam list\n\ See http://www.heise.de/ix/nixspam/dnsbl_en/ for details":\ :method=https:\ :file=www.openbsd.org/spamd/nixspam.gz bsdlyblack:\ :black:\ :msg="SPAM. Your address %A has sent spam within the last 24 hours. See http://www.bsdly.net/~peter/traplist.shtml for details.":\ :method=file:\ :file=/var/db/bsdly.traplist
Le site uceprotect devrait vous plaire si vous n'aimez par les spams. Ils proposent des listes d'IP mises à jour toutes les heures. Il est possible de récupérer les listes en entier comme on l'a fait avec bsdly.net.traplist, mais cela consommera moins de bande passante de ne récupérer que les changements avec (open)rsync. C'est mieux pour vous et pour uceprotect.
Dans le crontab, on appelle le script qui mettra à jour toutes les heures (Ne mettez pas à jour les listes plus souvent, sinon vous serez bloqués par leur serveur) :
10 * * * * /usr/local/sbin/uceprotect-spamd
Le contenu du script uceprotect-spamd
est le suivant :
#!/bin/sh RSYNC="/usr/bin/openrsync -a" URLS="rsync-mirrors.uceprotect.net::RBLDNSD-ALL/dnsbl-1.uceprotect.net rsync-mirrors.uceprotect.net::RBLDNSD-ALL/dnsbl-2.uceprotect.net rsync-mirrors.uceprotect.net::RBLDNSD-ALL/ips.whitelisted.org" OUT="/var/db/RBLDNSD-ALL/" mkdir -p "${OUT}" for URL in ${URLS}; do ${RSYNC} "${URL}" "${OUT}" done
On charge ces listes dans /etc/mail/spamd.conf
. Il y a des listes
noires et des listes blanches :
all:\ :nixspam:bgp-spamd:bsdlyblack:\ rbldnsd-1:rbldnsd-2:rbldnsd-white: ... rbldnsd-1:\ :black:\ :msg="Your address %A is listed on UCEPROTECT-Level 1\n \ see http://www.uceprotect.net/en":\ :method=file:\ :file=/var/db/RBLDNSD-ALL/dnsbl-1.uceprotect.net rbldnsd-2:\ :black:\ :msg="Your address %A is listed on UCEPROTECT-Level 2\n \ see http://www.uceprotect.net/en":\ :method=file:\ :file=/var/db/RBLDNSD-ALL/dnsbl-2.uceprotect.net rbldnsd-white:\ :white:\ :method=file:\ :file=/var/db/RBLDNSD-ALL/ips.whitelisted.org
N'hésitez pas à faire un don à uceprotect.net, leur travail est impressionnant.
Vous avez normalement déjà configuré le parefeu pour qu'il laisse passer les IP contenues dans le fichier /etc/mail/nospamd
.
Cependant, cette précaution peut ne pas toujours suffire. Je vous propose alors de profiter de bgp-spamd. Ce service communautaire propose de récupérer des listes de spammeurs et d'expéditeurs légitimes. Pour l'instant, seuls des serveurs vérifiés et de confiance participent à ce service, mais chacun peut en profiter. Vous serez alors tranquilles pour la plupart des cas.
Il repose sur le service bgpd qui va se charger de récupérer une autre liste
d'IP légitimes. On le configure ainsi dans le fichier /etc/bgpd.conf
:
spamdAS="65066" AS 65001 fib-update no # Mandatory, to not update the local routing table nexthop qualify via default # Make sure the nexthop is valid group "spamd-bgp" { remote-as $spamdAS multihop 64 # us.bgp-spamd.net neighbor 64.142.121.62 # eu.bgp-spamd.net neighbor 217.31.80.170 # IPv6 eu.bgp-spamd.net neighbor 2a00:15a8:0:100:0:d91f:50aa:1 } deny to any deny from any allow from group "spamd-bgp" # 'match' is required, to remove entries when routes are withdrawn # This updates the <bgp-spamd-bypass> table in PF match from group spamd-bgp community $spamdAS:42 set pftable "bgp-spamd-bypass"
Il y aura dans le groupe spamd-bgp toutes les IP connues comme légitimes. Elles seront ajoutées dans une table pour pf nommée bgp-spamd-bypass.
Il faut donc ajouter ces quelques lignes dans le fichier /etc/pf.conf
afin
de laisser passer les expéditeurs légitimes :
set limit table-entries 400000 table <bgp-spamd-bypass> persist #[...] # Sous la section concernant spamd pass in log quick on egress proto tcp from <bgp-spamd-bypass> to any port smtp
Référez-vous à l'exemple de pf.conf à la fin du document en cas de doute.
Relancez le parefeu :
# pfctl -ef /etc/pf.conf
Activez et démarrez maintenant bgpd :
rcctl enable bgpd rcctl start bgpd
bgpd peut aussi récupérer des listes d'IP de spammeurs. On va donc créer un script qui permettra de les mettre dans un fichier. spamd se chargera de mettre sur liste noire ces IP :
Créez le script /usr/local/sbin/bgp-spamd.black.sh
pour y mettre :
#!/bin/sh AS=65066 bgpctl show rib community ${AS}:666 | \ awk 'NR>6 {print $3}' > /var/db/spamd.black /usr/libexec/spamd-setup
Ce script doit être appelé régulièrement.
Nous allons
utiliser la même technique qu'auparavant, à savoir une tâche cron. Tapez
# crontab -e
puis remplacez la ligne qui appelait spamd-setup
par :
*/10 * * * * /usr/local/sbin/bgp-spamd.black.sh
Assurez-vous que le script est bien éxécutable :
# chmod +x /usr/local/sbin/bgp-spamd.black.sh
Vous noterez que ce script appelle bien spamd-setup
.
Nous avons presque terminé, il faut maintenant modifier le fichier de
configuration de spamd situé à l'emplacement /etc/mail/spamd.conf
:
# Configuration file for spamd.conf all:\ :nixspam:bgp-spamd: # Nixspam recent sources list. # Mirrored from http://www.heise.de/ix/nixspam nixspam:\ :black:\ :msg="Your address %A is in the nixspam list\n\ See http://www.heise.de/ix/nixspam/dnsbl_en/ for details":\ :method=http:\ :file=www.openbsd.org/spamd/nixspam.gz bgp-spamd:\ :black:\ :msg="Your address %A has sent mail to a spamtrap\n\ within the last 24 hours":\ :method=file:\ :file=/var/db/spamd.black:
Trop de personnes utilisent encore un fournisseur de mail, comme Gmail. Ces derniers disposent de plusieurs serveurs et donc de plusieurs adresses IP. Malheureusement, le temps que l'adresse IP du premier serveur à tenter l'envoi d'un message soit mise sur liste blanche, c'est un autre de leurs serveurs avec une IP différente qui prend le relais. Au final, ils ne sont jamais mis sur liste blanche.
Ici, nous allons créer une liste des domaines pour lesquels on ne veut pas faire de greylisting.
Je vous propose de mettre sur liste blanche les adresses IPs des fournisseurs de
mail relativement connus. Depuis qu'OpenBSD est disponible en version 6.3, nous
pouvons utiliser la commande smtpctl spf walk
très pratique pour récupérer
ces informations.
Tout d'abord, on crée un fichier qui contient la liste des domaines à qui on
épargne le greylisting. Ce fichier sera /etc/mail/nospamd_domains_list.txt
:
gmail.com hotmail.com facebookmail.com apple.com microsoft.com lists.openbsd.org linkedin.com freebsd.org twitter.com amazon.com yahoo.com yahoo.fr live.fr mail-out.ovh.net mxb.ovh.net gandi.net laposte.net protonmail.com
Complétez ce fichier à votre guise si vous remarquez que des serveurs restent indéfiniment sur liste grise.
Maintenant, on crée le script /usr/local/sbin/generate-nospamd
qui va
enregistrer dans le fichier /etc/mail/nospamd
les IP des serveurs définis
ci-dessus.
#!/bin/sh # /usr/local/sbin/generate-nospamd # Auteur : prx <prx@ybad.name> # licence : MIT DOMAINS=$(cat /etc/mail/nospamd_domains_list.txt) WHITELIST=/etc/mail/nospamd echo "#$(date)" > "$WHITELIST" for d in $DOMAINS; do echo "#$d" >> "$WHITELIST" echo "$d" | smtpctl spf walk >> "$WHITELIST" done exit 0
Je vous invite à appeler ce script via /etc/daily.local
afin
de régulièrement mettre à jour la liste des IP. Ensuite, il faut penser à
recharger la table dans le parefeu :
# /etc/daily.local /usr/local/sbin/generate-nospamd pfctl -t nospamd -T replace -f /etc/mail/nospamd
Pour voir l'activité de spamd, lancez la commande spamdb
pour voir apparaître des choses comme ça :
WHITE|62.4.1.33|||1462699174|1462699174|1465809574|1|0 GREY|182.70.43.24|abts-mum-dynamic-024.43.70.182.airtelbroadband.in|<Estella32@thunderguy.co.uk>|<toto@chezmoi.tld>|1473409924|1473424324|1473424324|1|0 GREY|14.183.132.63|static.vnpt.vn|<Abby5@toddelliott.com>|<kiki@chezmoi.tld>|1473410586|1473424986|1473424986|1|0
On peut lire dans l'ordre :
Il n'y a pas à dire, les “temps” sont illisibles pour les humains. Utiliser la commande date
pour avoir un format lisible :
$ date -r 1462699174 Sun May 8 11:19:34 CEST 2016
Pour manuellement mettre sur liste blanche une IP que vous savez valide, utilisez :
# spamdb -a "62.4.1.37"
Puisque vous avez demandé à un(e) ami(e) d'être un backup au cas où votre serveur mail serait indisponible (n'est-ce pas ? :)), il est important que son serveur ait connaissance des spammeurs détectés par votre spamd. Sinon, les spammeurs pourraient passer par leur backup pour vous délivrer des messages gênants.
Heureusement, spamd peut partager ses listes. Vous devez le lancer avec les
options -Y
et -y
:
-Y
: suivi de l'adresse IP ou le nom de domaine qui recevra les données recueillies par votre spamd. Vous pouvez appeler cette option à plusieurs reprises.-y
: suivi de l'interface réseau qui recevra les données des autres instances spamd.
Éditez le fichier /etc/rc.conf.local
en fonction pour obtenir par exemple :
spamd_flags=-y em0 -Y 211.217.177.100 -Y domaine.tld
Avant de relancer spamd, créer un fichier /etc/mail/spamd.key
qui servira de
clé partagée :
# dd if=/dev/random of=/etc/mail/spamd.key bs=2048 count=1
Tous les serveurs qui communiqueront entre eux devront avoir le même fichier. Envoyez-le donc à vos amis :).
Ouvrez dans votre parefeu et routeur le port 8025/udp (spamd-sync) au cas où il serait fermé.
#/etc/pf.conf pass in quick on egress proto udp to any port spamd-sync
Enfin, relancez spamd :
# rcctl restart spamd
Ça serait bien de mettre ce script à jour…
Un script pour générer des une page web contenant des statistiques sur les performances de spamd est
disponible sur le site de calomel. Je
vous en copie une version légèrement modifiée ci-dessous, qui nécessite
l'installation des paquets p5-Geo-IP
et p5-Socket
. Je vous invite à
l'enregistrer sous le nom /usr/local/bin/spamd_stats.pl
:
#!/usr/bin/perl use Socket; use Geo::IP; # Changez la configuration ci-dessous # Spamd log file (daemon by default) $spamdfile = "/var/log/daemon"; # Path to output html file $spamdhtmlfile = "/var/www/htdocs/chezmoi.tld/spamdstats.html"; # Spamd delay is seconds (-s) $spamddelay = 1; ############################## # End Configuration Settings # ############################## #####Begin: define dates ##### @months=("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"); @days=("Sun","Mon","Tue","Wed","Thu","Fri","Sat"); ($sec,$min,$hour,$mday,$mon,$year,$wday)=(localtime(time))[0,1,2,3,4,5,6]; $year=$year+1900; #####End: define dates ##### #####Begin: read spamd file(s) and get totals ##### open(SOURCE, "gzcat -f $spamdfile | sort -u |") or die ("Can't open file! Permissions? UserID? gzcat?"); while( <SOURCE> ) { if ((/spamd/) && (/disconnected after/)) { ($dates,$hostname,$daemonandid,$ip,$seconds) = ($_ =~ /(\w+[ ]{1,2}\d+ \d+:.\d:.\d+) (.*) (.*)\: (\d+\.\d+\.\d+\.\d+)\: disconnected after (\d+) seconds/); $totalseconds +=$seconds; $totalspammers++; $line{$ip}{hits}++; $line{$ip}{time} += $seconds; ($date) = ($_ =~ /(\w+[ ]{1,2}\d+ \d+:.\d:.\d+)/); push(@date_array, "$date"); } } close(SOURCE) or die "File didn't close: $!"; if ($totalspammers==0){$totalspammers=1;} #####End: reading spamd file(s) and get totals ##### ##### Begin: calculate, consolidate and put into array ##### my %collectem = (); foreach my $ip (keys %line) { $totalips++; my $hits = $line{$ip}{hits}; my $time = $line{$ip}{time}; my $conn = int(($line{$ip}{time}/$line{$ip}{hits})+0.5); my $phits = int((($line{$ip}{hits}/$totalspammers)*100)+0.4); my $ptime = int((($line{$ip}{time}/$totalseconds)*100)+0.4); my $iaddr = inet_aton($ip); my $reverse = gethostbyaddr($iaddr, AF_INET); my $gi = Geo::IP->new(GEOIP_MEMORY_CACHE); my $country = $gi->country_code_by_addr($ip); push (@arrayem, [$hits,$ip,$time,$conn,$phits,$ptime,$reverse,$country]); } ##### End: calculate, consolidate and put into array ##### #####Begin: order data by hits, time then ip in decending order ##### sub orderem { $b->[0] <=> $a->[0] or $b->[2] <=> $a->[2] or $b->[1] cmp $a->[1]; } #####End: order data by hits, time then ip in decending order ##### #####Begin: output to HTML ##### open(SPAMDHTMLSTATS, ">$spamdhtmlfile") or die ("Can't create file"); print SPAMDHTMLSTATS "<!DOCTYPE html>\n"; print SPAMDHTMLSTATS "<html lang=\"fr\"><head><meta charset=\"utf-8\">\n"; print SPAMDHTMLSTATS "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n"; print SPAMDHTMLSTATS "<title>Statistiques Spamd sur $host Spamd</title>\n"; print SPAMDHTMLSTATS "<link rel=\"stylesheet\" type=\"text/css\" href=\"$style\"></head>\n"; print SPAMDHTMLSTATS "<body>\n"; print SPAMDHTMLSTATS "<header>"; print SPAMDHTMLSTATS "<h1>Spamd Stats sur $host</h1>\n"; print SPAMDHTMLSTATS "<ul>"; print SPAMDHTMLSTATS "<li>Script lancé le : <span>$days[$wday] $months[$mon] $mday $year à $hour:$min"; printf SPAMDHTMLSTATS (" en %4.0f seconde(s)</span></li>\n",time-$^T); print SPAMDHTMLSTATS "<li>Intervalle de temps : <span>$date_array[0] au $date_array[-1]</span></li></ul>"; print SPAMDHTMLSTATS "\n"; print SPAMDHTMLSTATS "<ul>\n"; printf SPAMDHTMLSTATS ("<li>Temps perdu pour les spammeurs: <span>%4.2f h</span></li>\n",$totalseconds/3600); printf SPAMDHTMLSTATS ("<li>Bande passante utilisée : <span>%4.2f MB</span></li>\n",($totalseconds/$spamddelay*80.606/1000000)); printf SPAMDHTMLSTATS ("<li>Temps moyen par piège : <span>%4.2f minutes</span></li>\n",($totalseconds/$totalspammers)/60); print SPAMDHTMLSTATS "<li>Nombre d'IP utiques piégées : <span>$totalips</span></li>\n"; print SPAMDHTMLSTATS "<li>Nombre total de connexions : <span>$totalspammers</span></li>"; print SPAMDHTMLSTATS "</ul>\n"; print SPAMDHTMLSTATS "</header>\n"; print SPAMDHTMLSTATS "<section>\n"; print SPAMDHTMLSTATS "<table><caption>Statistiques anti-spamd</caption>\n"; print SPAMDHTMLSTATS "<thead>\n"; print SPAMDHTMLSTATS "<tr>\n<th>Pièges</th>"; print SPAMDHTMLSTATS "<th>Source IP</th>"; print SPAMDHTMLSTATS "<th>Temps (s)</th>"; print SPAMDHTMLSTATS "<th>Moyenne Sec/piège</th>"; print SPAMDHTMLSTATS "<th>% des pièges</th>"; print SPAMDHTMLSTATS "<th>% de temps</th>"; print SPAMDHTMLSTATS "<th>Reverse DNS</th>"; print SPAMDHTMLSTATS "<th>Pays</th>\n</tr>\n"; print SPAMDHTMLSTATS "</thead>\n"; print SPAMDHTMLSTATS "<tbody>\n"; @sortem = sort orderem @arrayem; foreach $thingy (@sortem) { print SPAMDHTMLSTATS "<tr><td ><b>$thingy->[0]</b></td><td ><b>$thingy->[1]</b></td><td ><b>$thingy->[2]</b></td><td ><b>$thingy->[3]</b></td><td ><b>$thingy->[4]</b></td><td ><b>$thingy->[5]</b></td><td ><b>$thingy->[6]</b></td><td >$thingy->[7]</td></tr>\n"; } print SPAMDHTMLSTATS "</tbody>\n"; print SPAMDHTMLSTATS "</table>\n"; print SPAMDHTMLSTATS "</section>\n"; print SPAMDHTMLSTATS "<footer>Généré avec <a href=\"https://dev.ybad.name/OpenBSD-stuff/spamd_stats.pl\">spamd_stats.pl</a></footer>\n"; print SPAMDHTMLSTATS "</body>\n"; print SPAMDHTMLSTATS "</html>"; close(SPAMDHTMLSTATS); #####End: output to HTML #####
Modifiez les options suivantes au début du script selon votre situation :
$spamdfile = “/var/log/daemon”;
: Le fichier contenant les logs de spamd. Normalement, vous n'avez pas à le modifier, c'est le chemin par défaut.$spamdhtmlfile = “/var/www/htdocs/chezmoi.tld/spamdstats.html”;
: Le chemin de la page web qui contiendra les statistiques$spamddelay = 1;
: spamd parle lettre par lettres avec un spammeur. Ici, c'est le nombre de secondes entre chaque lettre. Là aussi, rien à changer sauf si vous avez ajouté l'option -s
au démarrage de spamd.Il s'utilise ainsi :
/usr/bin/perl /usr/local/bin/spamd_stats.pl
Vous obtiendrez alors quelque chose ressemblant à ceci :
Afin de générer les statistiques quotidiennement, ajoutez la commande ci-dessus
dans le script /etc/daily.local
;).