
Dans mon association libriste, nous utilisons un forum phpBB pour l’assistance, le dépannage et les échanges entre membres. Il fait plutôt bien le taf. Mais un problème revient régulièrement côté administration : celui des bots malicieux qui tentent de s’inscrire automatiquement dessus pour spammer. Avant de détailler la solution que j’ai mise en place pour contrer ces vilains bots, je souhaite revenir sur la procédure d’inscription de notre forum.
Comment ça se passe lorsqu’un utilisateur veut s’inscrire sur notre forum ?
Pour valider une inscription, un captcha est demandé, suivi d’une validation manuelle par un administrateur. Ainsi les bots restent inactifs tant qu’on ne les valide pas à la mano. Ce qui a le mérite de les rendre inoffensifs dans un premier temps.
Mais le vrai souci, c’est que ces tentatives d’inscription massives finissent par noyer les vraies demandes d’inscriptions d’utilisateurs légitimes dans une liste de comptes à vérifier. On risque alors de passer à côté d’un vrai user, ou du moins de prendre beaucoup plus de temps pour activer son compte, ce qui parfois peut décourager les nouveaux venus.
Pour illustrer , voici un extrait des inscriptions du forum à valider sur 3 jours :

Comme tu peux voir les adresses mails utilisées pour s’inscrire varient et ont des domaines plutôt suspects voir chelous 🙂
Solutions ?
Sur phpbb, en admin se rendre dans:
membres et groupes – sécurité utilisateur – bannissements d’adresses courriels

Bannir les ip ou les domaines ?
Bien évidement il est plus efficace et moins bourrin de bannir les domaines des adresses mails.
Donc comme on peut le constater dans le menu de phpbb, il est possible de bannir des adresses e-mail. Parfait, c’est exactement ce que je cherche ! Mais voilà, le hic, c’est que les noms de domaines changent sans cesse, et mettre à jour cette liste à la main, ça va être galère. Du coup y aurait-il un moyen d’automatiser tout ça et d’avoir une liste noire qui se met à jour toute seule ?
En fouillant sur les zinternets, je découvre qu’il existe des listes communautaires régulièrement mises à jour centralisant les domaines d’adresses e-mail utilisés par les spammeurs. Exactement ce qu’il me fallait !
- 👉 https://raw.githubusercontent.com/disposable-email-domains/disposable-email-domains/main/disposable_email_blocklist.conf
- 👉 https://www.stopforumspam.com/downloads/toxic_domains_whole.txt
Automatisation
Ça ma donné l’idée d’un script 🙂
Passons à l’action: je chausse mon clavier et j’écris ce bout de code pour mettre à jour une liste noire et l’importer automatiquement dans la base de données phpbb.
Les étapes du script:
- Télécharger plusieurs listes de domaines bannis depuis GitHub et StopForumSpam.
- Fusionner et filtrer les listes pour supprimer les commentaires et lignes vides.
- Retirer les domaines présents dans une whitelist (gmail.com, yahoo.com, etc.).
- Supprimer les doublons.
- Générer un fichier de données pour l’insertion dans phpbb
- Importer les données dans MySQL.
Pour l’import dans la base de données, j’ai préféré générer un fichier CSV et utiliser LOAD DATA LOCAL INFILE, car c’est bien plus rapide (environ 100×) que d’exécuter des INSERT multiples.
#!/bin/bash
# === CONFIGURATION ===
BLOCKLIST_URL="https://raw.githubusercontent.com/disposable-email-domains/disposable-email-domains/main/disposable_email_blocklist.conf"
BLOCKLIST2_URL="https://www.stopforumspam.com/downloads/toxic_domains_whole.txt"
MYSQL_USER="babar"
MYSQL_PASS="LeRoiDesElephants"
MYSQL_DB="monSuperForum"
WHITELIST_DOMAINS="gmail.com|wanadoo.fr|yahoo.com|hotmail.com|protonmail.com|mailo.com|free.fr|orange.fr|laposte.net|tuta.com"
TMPDIR="/tmp/phpbb_banlist_update"
mkdir -p "$TMPDIR"
BLOCKLIST="$TMPDIR/blocklist.txt"
CSVFILE="$TMPDIR/banlist.csv"
# === TÉLÉCHARGEMENT ===
echo "[INFO] Téléchargement des listes..."
curl -fsSL "$BLOCKLIST_URL" -o "$TMPDIR/blocklist1.txt"
curl -fsSL "$BLOCKLIST2_URL" -o "$TMPDIR/blocklist2.txt"
if [ ! -s "$TMPDIR/blocklist1.txt" ] || [ ! -s "$TMPDIR/blocklist2.txt" ]; then
echo "[ERREUR] Impossible de télécharger une ou plusieurs blocklists."
exit 1
fi
# === FUSION & FILTRAGE ===
echo "[INFO] Fusion et filtrage des listes..."
cat "$TMPDIR/blocklist1.txt" "$TMPDIR/blocklist2.txt" | \
grep -Ev "^#|^$" | \
grep -Ev "$WHITELIST_DOMAINS" | sort -u > "$BLOCKLIST"
total=$(wc -l < "$BLOCKLIST")
echo "[INFO] $total domaines à bannir après filtrage."
timestamp=$(date +%s)
# === GÉNÉRATION CSV POUR LOAD DATA ===
echo "[INFO] Génération du fichier CSV..."
awk -v ts="$timestamp" '{
printf("0\t\t*@%s\t%s\t0\t0\t0\tauto block (disposable/spam)\tEmail non autorise\n", $1, ts)
}' "$BLOCKLIST" > "$CSVFILE"
# === IMPORT DIRECT SQL AVEC LOAD DATA ===
echo "[INFO] Import rapide avec LOAD DATA..."
mysql -u "$MYSQL_USER" -p"$MYSQL_PASS" "$MYSQL_DB" <<EOF
TRUNCATE TABLE phpbb_banlist;
LOAD DATA LOCAL INFILE '$CSVFILE'
INTO TABLE phpbb_banlist
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
(ban_userid, ban_ip, ban_email, ban_start, ban_end, ban_exclude, ban_reason, ban_give_reason);
EOF
if [ $? -eq 0 ]; then
echo "[OK] Import terminé en mode ultra-rapide."
else
echo "[ERREUR] Échec de l'import SQL."
fi
Pour récupérer le script en entier c’est ici
Résultats :
Plus de 63 000 domaines blacklistés ont été ajoutés automatiquement dans phpbb :

Depuis la mise en place du script, le spam est quasi nul et les quelques domaines qui passent au travers et qui ont récurrents je les rajoute manuellement.
Voilà si ça peut servir à certains admins phpbb , cest tant mieux!
Leave a Reply