Guide d’intégration
Blocklist Pi-hole de domaines malveillants, en adlist authentifiée
Aucune carte bancaire requise · Clé API gratuite
Sur cette page08
Ce que vous obtenez
Pi-hole bloque des noms, pas des adresses : seules les listes de domaines s’appliquent. Chargez une liste de niveau critical, en syntaxe simple ou adblock, puis ajoutez les listes par catégorie si vous le souhaitez.
| Liste | Entrées | Régénérée | Offres |
|---|---|---|---|
| blocklist-domains-critical.txtPar défaut. Domaines signalés par 6 sources de menaces ou plus, ou par 3 ou plus avec une catégorie critique. Blocage du nom exact. | environ 2 millions | toutes les 12 h | Basic, Pro et Enterprise |
blocklist-domains-critical-adguard.txtLes mêmes domaines en règles ||domaine^, qui bloquent aussi les sous-domaines. Core v5.16.1 et FTL v5.22 ou ultérieurs. Chargez celle-ci ou la liste simple, pas les deux. | environ 2 millions | toutes les 12 h | Basic, Pro et Enterprise |
| blocklist-domains-c2.txtDomaines de commande et contrôle (C2) signalés par des trackers de C2, quel que soit leur niveau. | environ 22 000 | toutes les 12 h | Basic, Pro et Enterprise |
| blocklist-domains-ransomware.txtDomaines de la catégorie ransomware, quel que soit leur niveau. | environ 3 600 | toutes les 12 h | Basic, Pro et Enterprise |
Nombres arrondis d’après la génération du ; chaque liste est régénérée toutes les 12 heures. Les chiffres du jour sont publics et ne demandent aucune clé.
Ce que reçoit chaque offre
- FreeCompte Free, ou aucune clé : les premiers 10 % de chaque liste, signalés par
X-Blocklist-Version: lite. - Basic, Pro et EnterpriseBasic, Pro et Enterprise : toutes les listes, complètes.
- Pro et EnterpriseCollections TAXII 2.1, pour les plateformes qui lisent les indicateurs STIX : Pro et Enterprise.
GET https:/
Liste complète ou échantillon de 10 %
| Champ | Basic, Pro et Enterprise | Free |
|---|---|---|
X-Blocklist-Version: | full | lite |
X-Blocklist-Percentage: | 100 | 10 |
Total entries: | <COUNT> | <COUNT> |
Premières lignes du fichier
# IsMalicious.com Blocklist - Domains (Critical)
# Format: Plain
# Generated: <BUILD_TIME>
# Total entries: <COUNT>
# Update frequency: every 12 hours
# Category: All
# Threat level: Critical
# Website: https://ismalicious.com
# © <YEAR> IsMalicious (compilation). Licensed to the downloading account under https://ismalicious.com/terms; redistribution of the compilation prohibited. Third-party entries remain under their providers' licences — see https://ismalicious.com/sources.
#Les valeurs entre chevrons sont fixées à chaque génération.
Prérequis
- Pi-hole Core v5.2.3 ou ultérieur : les versions antérieures refusent un
@dans l’adresse d’une liste. Pi-hole v6 est la branche actuelle. - Un shell sur l’hôte Pi-hole, ou sur l’hôte Docker, pour planifier gravity.
- Une clé API et son secret isMalicious, dans Compte › Accès API.
- Un accès HTTPS sortant (TCP 443) en IPv4 depuis Pi-hole vers
api.ismalicious.com, qui n’a pas d’adresse IPv6.
Mise en place
Copier la clé API et le secret
Ouvrez Compte › Accès API et copiez la Clé API et le Secret API. La liste complète demande une offre Basic, Pro ou Enterprise ; une clé Free charge l’échantillon de 10 %.Construire l’adresse de la liste
Placez la clé, deux-points et le secret devant l’hôte, suivis de@. Clés et secrets sont des UUID : aucun encodage n’est nécessaire. Utilisezapi.ismalicious.com: le frontal d’ismalicious.com refuse certaines sources avec une erreur 403.Adresse de la listeURL https://<API_KEY>:<API_SECRET>@api.ismalicious.com/blocklist/download/blocklist-domains-critical.txtAdresse de la liste, sous-domaines comprisURL https://<API_KEY>:<API_SECRET>@api.ismalicious.com/blocklist/download/blocklist-domains-critical-adguard.txtAjouter la liste à Pi-hole
Pi-hole v6 : Group Management › Lists, collez l’adresse dans Address, saisissez un Comment commeisMalicious critical, gardez le groupe Default et cliquez sur Add blocklist. Pi-hole v5 : Group Management › Adlists, puis Address, Comment et Add. En v6, l’API fait la même chose : le bloc ci-dessous vérifie le certificat propre de FTL, lit le mot de passe au terminal et l’adresse dans un fichier, pour que ni l’un ni l’autre n’apparaisse dans la liste des processus ou l’historique du shell, et ferme la session à la fin.API de Pi-hole v6sh # FTL's own CA, copied from /etc/pihole/tls_ca.crt on the Pi-hole host. Add # --resolve pi.hole:443:<PIHOLE_IP> when pi.hole does not resolve. CA=./pihole-tls_ca.crt API=https://pi.hole/api # The password is read from the terminal: it stays out of ps and history. # jq escapes the quotes and backslashes it may hold. printf 'Pi-hole password: ' >&2; stty -echo; IFS= read -r PW; stty echo; echo >&2 SID=$(printf '%s' "$PW" | jq -Rs '{password: .}' | curl -sS --cacert "$CA" -X POST "$API/auth" --data @- | jq -r .session.sid) # list.json (mode 600), written with an editor, holds the address with the key: # {"address":"https://<API_KEY>:<API_SECRET>@api.ismalicious.com/blocklist/download/blocklist-domains-critical.txt","comment":"isMalicious critical","groups":[0]} curl -sS --cacert "$CA" -X POST "$API/lists?type=block" -H "X-FTL-SID: $SID" \ -H "Content-Type: application/json" --data @list.json curl -sS --cacert "$CA" -X POST "$API/action/gravity" -H "X-FTL-SID: $SID" curl -sS --cacert "$CA" -X DELETE "$API/auth" -H "X-FTL-SID: $SID"Lancer gravity
Tools › Update Gravity › Update, ousudo pihole -gsur l’hôte. Gravity télécharge la liste et l’écrit dansgravity.db.Lancer gravity toutes les 12 heures
Pi-hole met ses listes à jour une fois par semaine, à une minute tirée au hasard dans la nuit. Créez votre propre fichier cron avec la ligneupdateGravityde/etc/cron.d/piholeet une planification de 12 heures hors des heures 3 et 4, où tombe l’exécution hebdomadaire : gravity n’a pas de verrou. Ne modifiez pas/etc/cron.d/pihole: les mises à jour l’écrasent. La ligne s’exécute enpiholeen v6 et enrooten v5. Sous Docker, planifiezpihole -gviadocker execsur l’hôte./ etc/ cron. d/ ismalicious-gravitycron # Pi-hole v6 (user pihole; on v5, write root). The lists are rebuilt every 12 hours. 17 5,17 * * * pihole PATH="$PATH:/usr/sbin:/usr/local/bin/" pihole updateGravity >/var/log/pihole/pihole_updateGravity.log || cat /var/log/pihole/pihole_updateGravity.logGarder la clé hors de Pi-hole (facultatif)
- Pi-hole stocke l’adresse en clair dans
gravity.db, l’affiche sur la page Lists et l’écrit dans chaque journal de gravity. - Pour l’éviter, créez le fichier netrc ci-dessous, réservé à root, récupérez la liste avec le script, qui refuse une erreur, un contenu qui n’est pas une liste, l’échantillon de 10 % et un fichier dont le nombre d’entrées diffère de son en-tête, et ajoutez
file:/comme adresse./ / var/ lib/ ismalicious/ blocklist-domains-critical. txt - Le script rend la copie lisible par gravity.
- Sous Docker, montez
/var/lib/ismaliciousdans le conteneur en lecture seule et gardez la même adressefile://.
Créer le fichier, réservé à rootsh install -d -m 700 /etc/ismalicious [ -e /etc/ismalicious/netrc ] || install -m 600 /dev/null /etc/ismalicious/netrc chmod 600 /etc/ismalicious/netrc # Then write the three lines below into it with an editor, unless it holds them already./ etc/ ismalicious/ netrcnetrc machine api.ismalicious.com login <API_KEY> password <API_SECRET>/ usr/ local/ sbin/ ismalicious-fetch. shsh #!/bin/sh # Runs as root, before gravity. /etc/ismalicious/netrc (mode 600) holds the key. # The copy is made readable for gravity, which reads it as pihole (Core # v6.4.2+) or as root; on Docker there is no pihole user on the host. set -eu NETRC=/etc/ismalicious/netrc DIR=/var/lib/ismalicious FILE=blocklist-domains-critical.txt # fetch_list LIST OUT: download one list to OUT and check it. # On any failure OUT is removed and the function returns 1. fetch_list() { if ! code=$(curl --silent --show-error --fail --netrc-file "$NETRC" \ --proto '=https' --max-time 300 --retry 2 \ --output "$2" --write-out '%{http_code}' "https://api.ismalicious.com/blocklist/download/$1"); then rm -f "$2"; echo "$1: download failed" >&2; return 1 fi if [ "$code" != 200 ]; then rm -f "$2"; echo "$1: HTTP $code" >&2; return 1 fi if ! head -n 1 "$2" | grep -q '^[#!] IsMalicious.com Blocklist'; then rm -f "$2"; echo "$1: not an isMalicious list" >&2; return 1 fi if grep -q 'Lite Version' "$2"; then rm -f "$2"; echo "$1: lite list received, check the API key and the plan" >&2 return 1 fi # Every entry ends with a newline, and one header counts them: refuse a # cut, doubled or empty file. if [ -n "$(tail -c 1 "$2")" ]; then rm -f "$2"; echo "$1: cut short, no final newline" >&2; return 1 fi if [ "$(grep -c '^[#!] Total entries:' "$2")" != 1 ]; then rm -f "$2"; echo "$1: not one Total entries line" >&2; return 1 fi total=$(sed -n 's/^[#!] Total entries: \([0-9,]*\)$/\1/p' "$2" | tr -d ,) got=$(grep -c '^[^#!]' "$2" || true) if [ -z "$total" ] || [ "$total" = 0 ] || [ "$got" != "$total" ]; then rm -f "$2"; echo "$1: $got entries, the header says ${total:-none}" >&2 return 1 fi } mkdir -p "$DIR" tmp=$(mktemp "$DIR/.$FILE.XXXXXX") trap 'rm -f "$tmp"' EXIT fetch_list "$FILE" "$tmp" chmod 644 "$tmp" mv -f "$tmp" "$DIR/$FILE" # Schedule it before gravity, in /etc/cron.d/ismalicious-gravity: # 7 5,17 * * * root /usr/local/sbin/ismalicious-fetch.sh # List address in Pi-hole: file:///var/lib/ismalicious/blocklist-domains-critical.txt- Pi-hole stocke l’adresse en clair dans
Vérifier le résultat
- Gravity affiche
Status: Retrieval successfulpour la liste, puisParsed(à partir de Core v5.17 ; les versions antérieures affichentN exact domains and M ABP-style domains Imported N domains). - N pour une liste simple, ou M pour la liste adblock, correspond au
countde la liste dans /blocklist/stats, à une régénération près. Environ un dixième, c’est l’échantillon de 10 %. - Group Management › Lists indique la liste comme téléchargée ou inchangée, pas en échec.
- À partir de Core v6.1, les premières lignes de la copie en cache, dans
/etc/pihole/listsCache/(mode 0640 : lisez-la avec sudo), affichent# Total entries:sans mentionLite Version. Une listefile://est mise en cache souslist.N.local.domains. pihole -qsur un domaine de la liste nomme les listes qui le contiennent.
# Gravity's summary for the list (Core v5.17+ prints Parsed, older Imported):
sudo pihole -g | grep -E 'Retrieval|Parsed|Imported'
# Core v6.1+ keeps the raw file (mode 0640): a full list has no "Lite Version".
sudo head -12 /etc/pihole/listsCache/list.*.api.ismalicious.com.domains
# The same check without Pi-hole, with the netrc file of the local copy:
sudo curl -sS --netrc-file /etc/ismalicious/netrc -D - -o /dev/null \
"https://api.ismalicious.com/blocklist/download/blocklist-domains-critical.txt" | grep -i '^x-blocklist-version'Dépannage
Gravity signale une erreur 401
La clé ou le secret est faux ou incomplet. Core v6.4.2 et ultérieurs affichent The ; les versions antérieures affichent l’URL, identifiants compris. Gravity garde alors sa copie précédente, et l’ancienne liste reste active : vérifiez l’état de la liste après chaque renouvellement de clé. Le corps de la réponse indique « Blocklist not found or empty » ; fiez-vous au code HTTP. Recopiez les deux valeurs depuis Compte › Accès API.
Seuls 10 % environ des domaines se chargent
L’adresse ne contient pas d’identifiants, ou l’offre est Free ou interrompue : un abonnement impayé, en retard de paiement, annulé, incomplet ou suspendu compte comme Free. Vérifiez l’en-tête de la copie en cache et votre offre.
Le script de copie locale affiche « entries, the header says », « cut short, no final newline » ou « not one Total entries line »
Le fichier était vide, tronqué ou n’était pas une des listes, comme quand un proxy ou un portail captif répond. Le script garde la copie précédente et sort en erreur, et gravity continue de la lire.
Gravity indique « Invalid Target »
L’adresse contient un caractère que Pi-hole refuse en plus du @, souvent un chevron du modèle laissé en place ou une espace. Avant Core v5.2.3, tout @ est refusé : mettez à jour.
Erreur 502, 504 ou délai dépassé
Un téléchargement qui prend plus de 30 secondes de notre côté finit en délai dépassé ou en 502 : prenez une liste par niveau ou par catégorie du tableau.
503 Service Unavailable
La liste est en cours de première génération, et la réponse porte Retry-After: 600. Gravity ne réessaie pas : il garde sa copie en cache jusqu’à l’exécution suivante.
404 Not Found
Le nom de fichier est faux. Recopiez-le depuis le tableau ci-dessus.
Gravity ignore la plupart des entrées
Les lignes d’en-tête n’y sont pour rien : Pi-hole saute les lignes # et !. Quand le nombre d’entrées ignorées approche le nombre d’entrées, le mauvais fichier est chargé : une liste -dnsmasq.txt, une liste d’URL, ou une liste -adguard.txt sur un Pi-hole antérieur à Core v5.16.1 et FTL v5.22. Une liste d’IP est sautée sans bruit à partir de Core v6.1 (0 analysée, 0 ignorée), et importée avant comme des noms que rien ne demande.
Erreurs de certificat
Le curl de gravity vérifie le magasin de certificats du système. Core v6.4.2 et ultérieurs affichent le message de curl ; les versions antérieures indiquent « Connection Refused ». Mettez à jour ca-certificates, vérifiez l’horloge du système et exemptez api.ismalicious.com de l’inspection TLS.
Limites
- Pi-hole conserve l’adresse, identifiants compris, dans
gravity.db(laissé en mode 664) et jusqu’à 10 sauvegardes sous/etc/pihole/gravity_backups/, sur la page Lists, dans la sortie depihole -qet dans chaque journal de gravity. Le relaisfile://de la dernière étape l’évite : changez la clé après être passé par lui. - Une liste simple ne bloque que les noms listés. La variante adblock bloque aussi chaque sous-domaine, ce qui atteint plus de noms que la liste n’en contient.
- Pi-hole ne bloque pas d’adresses IP : à partir de Core v6.1, il saute les lignes d’IP sans bruit, et avant il les importait comme des noms que rien ne demande ; une liste d’IP ne bloque donc rien. Chargez les listes
blocklist-ips-*sur un pare-feu. - Ni RPZ, ni CIDR, ni entrées génériques comme
*.examplene sont servis ; Pi-hole n’en a pas besoin. - L’échantillon de 10 % est le premier dixième d’un fichier non trié, pas le dixième le plus risqué.
- Sans votre propre fichier cron, Pi-hole lance gravity une fois par semaine et peut avoir jusqu’à 7 jours de retard sur les listes.
Questions fréquentes
Pi-hole peut-il envoyer une clé API pour une blocklist ?
Oui. Placez la clé et le secret devant l’hôte dans l’adresse de la liste, séparés par deux-points et suivis de @. Pi-hole transmet l’adresse à curl, qui les envoie en HTTP Basic. Il faut Core v5.2.3 ou ultérieur. Pi-hole stocke et affiche cette adresse en clair ; récupérer la liste avec un script et la charger en adresse file:// garde la clé sur l’hôte.
La liste bloque-t-elle les sous-domaines ?
La liste simple ne bloque que les noms exacts. Chargez plutôt blocklist-domains-critical-adguard. : Pi-hole lit ses règles ||domaine^ comme le domaine et tous ses sous-domaines, à partir de Core v5.16.1 et FTL v5.22.
Pi-hole peut-il bloquer des adresses IP malveillantes ?
Non. Pi-hole répond aux requêtes DNS : il ne bloque que des noms, et à partir de Core v6.1 il saute sans bruit les lignes d’IP. Chargez les listes d’IP sur un pare-feu.
À quelle fréquence lancer gravity ?
Toutes les 12 heures. Les listes sont régénérées toutes les 12 heures, et la planification propre à Pi-hole est hebdomadaire. Lancer gravity plus souvent retélécharge le même fichier.
Que charge un compte gratuit dans Pi-hole ?
Les premiers 10 % de chaque liste. Gravity les charge sans erreur : comparez donc le nombre d’entrées au nombre publié. La liste complète demande une offre Basic, Pro ou Enterprise.
À voir aussi
Domaines malveillants en liste de blocage DNS authentifiée
Toutes les listes, niveaux et catégories
Collections TAXII 2.1 pour SIEM et TIP
Authentification, endpoints et limites
Vérifier un domaine avant de le bloquer
Commencer
Prêt à commencer ?
Aucune carte bancaire requise · Clé API gratuite