Guide d’intégration
Blocklist OPNsense d’IP malveillantes, en alias URL Table authentifié
Aucune carte bancaire requise · Clé API gratuite
Sur cette page08
Ce que vous obtenez
Les listes d’IP vont dans un alias URL Table (IPs), qu’OPNsense récupère avec votre clé. Les listes de domaines vont dans les blocklists DNS d’Unbound, qui ne prennent pas d’identifiants : elles viennent d’un relais.
| Liste | Entrées | Régénérée | Offres |
|---|---|---|---|
| blocklist-ips-critical.txtAlias par défaut. IP signalées par 6 sources de menaces ou plus, ou par 3 ou plus avec une catégorie critique. | environ 89 000 | toutes les 12 h | Basic, Pro et Enterprise |
| blocklist-ips-c2.txtIP de commande et contrôle (C2) signalées par des trackers de C2 : un alias plus petit. | environ 44 000 | toutes les 12 h | Basic, Pro et Enterprise |
| blocklist-domains-c2.txtBlocklist Unbound, via le relais : domaines de commande et contrôle (C2) signalés par des trackers de C2. | environ 22 000 | toutes les 12 h | Basic, Pro et Enterprise |
| blocklist-domains-ransomware.txtBlocklist Unbound, via le relais : domaines de la catégorie ransomware, quel que soit leur niveau. | environ 3 600 | toutes les 12 h | Basic, Pro et Enterprise |
| blocklist-domains-cryptomining.txtBlocklist Unbound, via le relais : domaines de la catégorie cryptomining, quel que soit leur niveau. | environ 6 100 | 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 - IPs (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
- OPNsense 25.1 ou ultérieur, la première version à autoriser l’authentification des alias URL ; menus vérifiés de 25.1 à 26.7.
- Pour les listes de domaines seulement : un hôte Linux avec systemd, curl et un serveur web HTTPS, qu’OPNsense joint sur votre réseau.
- Une clé API et son secret isMalicious, dans Compte › Accès API.
- Un accès HTTPS sortant (TCP 443) en IPv4 depuis OPNsense, et depuis l’hôte relais pour la blocklist DNS, 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, ou une offre interrompue, charge l’échantillon de 10 %.Activer la vérification des certificats des alias
Dans Firewall › Settings › Advanced (sur la branche de développement, Firewall › Advanced), cochez Check certificate of aliases URLs avant d’enregistrer l’alias. Le réglage est global, désactivé dans la configuration d’usine, et sans lui OPNsense envoie le secret API à n’importe quel serveur qui répond. Save.Ajouter l’alias URL Table
Firewall › Aliases, puis + : activez-le, nommez-leisMalicious_IPs, choisissez le type URL Table (IPs), réglez Refresh Frequency sur 0 jour et 1 heure (12 heures suffisent : les listes sont régénérées toutes les 12 heures), collez l’URL de la liste dans Content, et réglez Authorization sur Basic avec la clé API en Username et le secret API en Password. Save, puis Apply.Champs de l’aliasGUI - Type
URLTable (IPs) - Refresh Frequency
0days, 1 hour - Content
https:// api. ismalicious. com/ blocklist/ download/ blocklist-ips-critical. txt - Authorization
Basic- Username
<API_KEY>- Password
<API_SECRET>
Type: URL Table (IPs) Refresh Frequency: 0 days, 1 hour Content: https://api.ismalicious.com/blocklist/download/blocklist-ips-critical.txt Authorization: Basic Username: <API_KEY> Password: <API_SECRET>Bloquer l’alias dans les règles de pare-feu
- 25.1 à 26.1 : dans Firewall › Rules › WAN, ajoutez une règle Block avec
isMalicious_IPsen source ; dans Firewall › Rules › LAN, une règle Block avec l’alias en destination, au-dessus de la règle d’autorisation ; Apply. - 26.7 : Firewall › Rules, sélectionnez WAN, +, Action Block, Version any, Source
isMalicious_IPs, Save ; sélectionnez LAN, +, Action Block, Version any, DestinationisMalicious_IPs, Save, puis Move selected rule before this rule sur la règle d’autorisation par défaut ; Apply. - La version TCP/IP vaut IPv4 par défaut sur toutes les versions : réglez-la sur IPv4+IPv6, ou any.
- 25.1 à 26.1 : dans Firewall › Rules › WAN, ajoutez une règle Block avec
Mettre en place un relais pour les listes de domaines (facultatif)
- Les blocklists d’Unbound se téléchargent sans identifiants : un hôte que vous contrôlez récupère donc les listes de domaines avec votre clé et les sert en HTTPS.
- Créez
/etc/ismalicious/netrc, réservé à root, avec les commandes ci-dessous et écrivez-y les trois lignes avec un éditeur ; installez le script sous/, en mode 755, avec ses unités service et timer, et lancez le bloc d’activation, qui créeusr/ local/ sbin/ ismalicious-mirror /var/www/ismaliciouset lance aussitôt la première récupération. - Le service s’exécute en root pour lire le netrc et ne peut écrire que dans ce répertoire.
- Le script 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.
- Publiez
/var/www/ismalicioussoushttps:/avec un certificat qu’OPNsense reconnaît (une autorité privée va dans System › Trust › Authorities), refusez dans le serveur web les fichiers dont le nom commence par un point, comme dans l’exemple nginx, et gardez le relais interne : chaque fichier est licencié au compte qui le télécharge, et son en-tête interdit de redistribuer la compilation./ RELAY_HOST/ ismalicious/
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-mirrorsh #!/bin/sh # Fetch the lists with your key and publish them for the firewall. # A list that fails a check keeps its previous copy, and the run exits 1. set -eu NETRC=/etc/ismalicious/netrc DEST=/var/www/ismalicious LISTS="blocklist-domains-c2.txt blocklist-domains-ransomware.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 "$DEST" failed=0 for f in $LISTS; do tmp=$(mktemp "$DEST/.$f.XXXXXX") if fetch_list "$f" "$tmp"; then chmod 644 "$tmp" mv -f "$tmp" "$DEST/$f" else failed=1 fi done exit "$failed"/ etc/ systemd/ system/ ismalicious-mirror. servicesystemd [Unit] Description=Fetch isMalicious blocklists Wants=network-online.target After=network-online.target [Service] Type=oneshot ExecStart=/usr/local/sbin/ismalicious-mirror # Root, to read the root-only netrc; it may write only the published directory. NoNewPrivileges=yes ProtectSystem=strict ProtectHome=yes PrivateTmp=yes ReadWritePaths=/var/www/ismalicious/ etc/ systemd/ system/ ismalicious-mirror. timersystemd [Unit] Description=Fetch isMalicious blocklists every hour [Timer] OnCalendar=hourly RandomizedDelaySec=15min Persistent=true [Install] WantedBy=timers.targetActiver le timer et lancer la première récupérationsh install -d -m 755 /var/www/ismalicious systemctl daemon-reload systemctl enable --now ismalicious-mirror.timer systemctl start ismalicious-mirror.service # the first fetch, now ls -l /var/www/ismalicious/nginx, dans le bloc server du relaisnginx location /ismalicious/ { allow <FIREWALL_IP>; deny all; # Downloads in progress are dot files: never serve them. location ~ /\. { deny all; } }Ajouter l’URL du relais aux blocklists d’Unbound
- 25.7.8 et ultérieur : Services › Unbound DNS › Blocklists, onglet Blocklists, +.
- Activez le mode avancé, cochez Enable, ajoutez
https:/et/ RELAY_HOST/ ismalicious/ blocklist-domains-c2. txt https:/à URLs of Blocklists, réglez Cache TTL sur/ RELAY_HOST/ ismalicious/ blocklist-domains-ransomware. txt 43200(12 heures), cochez Return NXDOMAIN ou saisissez une Destination Address, tapez une Description, Save, puis Apply. - 25.1 à 25.7.7 : Services › Unbound DNS › Blocklist, mode avancé, Enable, les mêmes URL, Return NXDOMAIN ou une Destination Address, Apply ; ces versions n’ont pas de champ Cache TTL et retéléchargent une liste après 20 heures.
Planifier la mise à jour des blocklists
Les blocklists d’Unbound ne se rafraîchissent que par une tâche cron : System › Settings › Cron, puis +, avec la commande Update Unbound DNSBLs toutes les heures (minute15, heure*) et une Description, obligatoire. Save, puis Apply. Une liste est retéléchargée dès que sa copie en cache dépasse le Cache TTL.
Vérifier le résultat
- Firewall › Diagnostics › Aliases, avec
isMalicious_IPssélectionné, liste les entrées actuelles : environ lecountde la liste dans /blocklist/stats. - L’API d’OPNsense renvoie les mêmes entrées, avec une clé API OPNsense : à partir de 25.7, une requête renvoie au plus 9 999 lignes, lisez donc
total. - Firewall › Log Files › General affiche
fetch alias urlavec le nombre de lignes après chaque téléchargement, ouerror fetching alias urlavec le code HTTP. - Services › Unbound DNS › Log File affiche
blocklist downloadavec les lignes téléchargées pour chaque URL ; à partir de 25.7.8, le Blocklist Tester vérifie un domaine selon vos réglages.
# The alias entries, through the OPNsense API: an OPNsense API key with the
# "Diagnostics: PF Table IP addresses" privilege. curl asks for its secret;
# the GUI CA (System › Trust › Authorities) verifies the firewall.
curl -s --cacert opnsense-gui-ca.pem -u '<OPN_KEY>' \
"https://<FIREWALL>/api/firewall/alias_util/list/isMalicious_IPs" | grep -o '"total":[0-9]*'Dépannage
error fetching alias url … [http_code:401]
La clé ou le secret est faux ou incomplet, et l’alias garde son contenu précédent. Le corps de la réponse indique « Blocklist not found or empty » ; fiez-vous au code HTTP. Saisissez à nouveau les deux valeurs depuis Compte › Accès API : y régénérer la clé invalide l’ancienne paire.
Seules 10 % des entrées environ se chargent
Authorization n’est pas réglé, OPNsense est antérieur à 25.1, ou l’offre est Free ou interrompue (un abonnement impayé, en retard de paiement, annulé, incomplet ou suspendu compte comme Free). La ligne Total entries du fichier indique alors Lite Version. Pour une blocklist Unbound pointée directement vers api.ismalicious.com, c’est attendu : passez par le relais.
Le relais 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 relais garde la copie précédente et l’exécution suivante réessaie.
« Error loading alias [isMalicious_IPs] »
Firewall › Log Files › General signale que la table n’a pas pu prendre les entrées. Relevez Firewall Maximum Table Entries au-dessus du total de vos alias, ou prenez une liste plus petite.
Délais dépassés sur une grande liste
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.
La blocklist Unbound ne charge rien
Les deux analyseurs ignorent les lignes d’en-tête # : elles n’y sont pour rien, un fichier -adguard ou -dnsmasq si. Pointez Unbound vers le fichier de domaines simple.
Erreurs de certificat après avoir coché la vérification
api.ismalicious.com utilise un certificat Let’s Encrypt : le magasin de certificats du pare-feu doit faire confiance à ISRG Root X1 ou X2. Pour le relais, son certificat doit remonter à une autorité qu’OPNsense reconnaît.
403 depuis ismalicious.com
Le frontal d’ismalicious.com refuse certaines sources. Utilisez api.ismalicious.com.
Limites
- La vérification des certificats des alias est désactivée par défaut : sans elle, les identifiants Basic partent vers qui répond. Cochez-la avant d’enregistrer l’alias.
- OPNsense stocke la clé et le secret en clair dans
config.xml, ses sauvegardes,/et les exports d’alias : utilisez une clé dédiée à ce pare-feu, et chiffrez les sauvegardes.usr/ local/ etc/ filter_tables. conf - Les blocklists DNS d’Unbound n’ont pas de champ d’identifiants : les listes de domaines complètes passent par le relais.
- Un alias d’IP résout par DNS chaque ligne qui n’est pas une adresse : ne le pointez jamais vers une liste de domaines.
- Ni CIDR ni plages ne sont servis : l’alias les accepterait, mais les listes d’IP contiennent des adresses seules.
- L’échantillon de 10 % est le premier dixième d’un fichier non trié, pas le dixième le plus risqué.
Questions fréquentes
OPNsense peut-il envoyer une clé API pour un alias URL Table ?
Oui, depuis OPNsense 25.1. Réglez l’Authorization de l’alias sur Basic, avec la clé API en nom d’utilisateur et le secret API en mot de passe : OPNsense les envoie dès la première requête, et l’alias charge la liste complète.
Pourquoi cocher Check certificate of aliases URLs ?
L’option est désactivée dans la configuration d’usine, et sans elle OPNsense ne vérifie pas le serveur auquel il envoie les identifiants. Cochez-la avant d’enregistrer un alias qui porte le secret API.
La blocklist DNS Unbound peut-elle utiliser la clé API ?
Non. Les blocklists d’Unbound se téléchargent sans identifiants et reçoivent l’échantillon de 10 %. Servez-leur les listes de domaines complètes depuis un relais qui les récupère avec votre clé.
Quelle fréquence de rafraîchissement donner à l’alias ?
1 heure, ou 12 heures. Les listes sont régénérées toutes les 12 heures ; OPNsense vérifie chaque minute et récupère à nouveau un alias dès que sa fréquence est écoulée.
La liste tiendra-t-elle dans les tables d’OPNsense ?
La taille de table par défaut est d’au moins 1 million d’entrées en 25.1, et grandit avec la mémoire à partir de 25.7. OPNsense remplace la table d’un alias sur place : le total de vos alias doit rester sous Firewall Maximum Table Entries.
À voir aussi
Flux d’IP et de domaines en authentification Basic
External Dynamic Lists adaptées aux limites de PAN-OS
Alias URL Table ou flux pfBlockerNG via un relais
Domaines malveillants en adlist DNS RouterOS
IP malveillantes en sets nftables sur tout hôte Linux
Des blocklists de pare-feu à jour
Toutes les listes, niveaux et catégories
Collections TAXII 2.1 pour SIEM et TIP
Authentification, endpoints et limites
Vérifier une adresse avant de la bloquer
Commencer
Prêt à commencer ?
Aucune carte bancaire requise · Clé API gratuite