SIEM & autres intégrations

Connecter Q-Feeds à Linux (NFtables / IPtables)

Notre installateur open source détecte lui-même si votre serveur utilise nftables ou iptables avec ipset, charge la liste de blocage des IP malveillantes dans ses propres ensembles et planifie les mises à jour, afin que l'hôte rejette le trafic provenant d'adresses reconnues comme malveillantes.

Les scripts sont open source et publiés sur GitHub : Q-Feeds/NFtables-IPtables-integration-script. Récupérez-les toujours là, vous êtes ainsi certain d'avoir la version actuelle. Il vous faut un accès root, un HTTPS sortant vers api.qfeeds.com et un jeton API Q-Feeds. Voir Obtenir vos threat feeds. L'installateur vous demande d'abord d'accepter nos Conditions générales et l'EULA.

Prérequis

  • OS : Linux avec nftables, ou avec iptables et ipset
  • Distributions : Debian, Ubuntu, CentOS, RHEL, AlmaLinux, Rocky Linux, Fedora, openSUSE Leap, SLES, Arch Linux, Alpine
  • Privilèges : root pour l'installation, les mises à jour et les modifications du pare-feu
  • Flux : liste d'IP malveillantes (feed_type=malware_ip)
  • Paquets : le script les installe pour vous, vous n'avez rien à préparer. Pour nftables il s'agit de nftables, curl, jq et util-linux. Pour iptables, de iptables, ipset, curl, jq et util-linux.

Test facultatif avant l'installation :

curl -v -u api_token:YOUR_TOKEN "https://api.qfeeds.com/api?feed_type=malware_ip&limit=1000"

Récupérer les scripts

git clone https://github.com/Q-Feeds/NFtables-IPtables-integration-script.git
cd NFtables-IPtables-integration-script
chmod +x qfeeds-installer.sh qfeeds-uninstaller.sh

Pas de git sur le serveur ? Téléchargez plutôt l'archive ZIP depuis la page du dépôt et décompressez-la.

Installation

sudo ./qfeeds-installer.sh

L'installateur détecte votre pare-feu, pose quelques questions, met en place le script de mise à jour avec sa tâche cron, puis lance immédiatement une première synchronisation complète pour que la liste de blocage soit active tout de suite. Les questions, dans l'ordre :

  1. Conditions et EULA : tapez yes pour continuer.
  2. Jeton API : votre jeton Q-Feeds. Si vous le laissez vide, l'installateur s'arrête.
  3. Feed type : par défaut malware_ip. Ne le changez que si nous vous avons fourni un autre type de flux.
  4. Nombre d'IP : appuyez sur Entrée pour ne fixer aucune limite, c'est ce que nous recommandons.
  5. Bloquer l'entrant (oui par défaut) : le trafic venant des IP listées vers votre serveur est rejeté.
  6. Bloquer le sortant (non par défaut) : le trafic de votre serveur vers les IP listées est rejeté.
  7. Liste blanche (facultatif) : adresses IPv4 et IPv6 ou plages CIDR à ne jamais bloquer, séparées par des virgules. Indiquez ici vos propres IP d'administration, vous ne risquez ainsi pas de vous bloquer vous-même.
  8. Planification cron : par défaut */10 * * * *, soit toutes les dix minutes. Une exécution fréquente ne pose pas de problème, car le script n'appelle l'API que si votre licence autorise une nouvelle mise à jour.

Les avertissements sur la notation CIDR pendant la récupération du flux sont sans conséquence et peuvent être ignorés. Si vous relancez l'installateur sur un hôte où une ligne cron Q-Feeds existe déjà, il vous demande confirmation et laisse votre crontab inchangée par défaut. Pour une installation sans surveillance, définissez QFEEDS_SKIP_CRON=1 afin de sauter cette étape sans question.

Fonctionnement

  • Détection du pare-feu : si la commande nft est présente, l'installateur utilise nftables, sinon il se rabat sur iptables avec ipset. Le résultat est enregistré comme BACKEND dans le fichier de configuration ; le script de mise à jour et le script de désinstallation s'y conforment.
  • Règles séparées : nftables reçoit ses propres tables ip qfeeds et ip6 qfeeds. Avec iptables, les règles de blocage se trouvent dans des chaînes dédiées QFEEDS_INPUT et QFEEDS_OUTPUT, avec une seule règle de saut marquée dans INPUT et OUTPUT. Vos règles de pare-feu existantes ne sont jamais touchées.
  • Deux types d'ensembles : les adresses individuelles vont dans un ensemble de hachage et les rares plages CIDR dans un ensemble réseau distinct. C'est ce qui permet de charger 400 000 adresses ou plus en quelques secondes plutôt qu'en plusieurs minutes.
  • La liste blanche d'abord : les règles de liste blanche sont évaluées avant la liste de blocage, une adresse autorisée passe donc toujours.
  • Synchronisation complète et différentielle : la première exécution charge tout le flux, les suivantes ne récupèrent que les ajouts et les retraits depuis votre dernier appel. Une synchronisation complète n'est appliquée qu'une fois les données valides téléchargées, un échec de téléchargement ne vous laisse donc jamais sans protection.
  • Auto-réparation : si l'ensemble est vide ou nettement plus petit que prévu, par exemple après un redémarrage où les règles n'ont pas été conservées, le script le reconstruit entièrement au lieu de compléter un ensemble vide. Par défaut, une synchronisation complète a également lieu toutes les 24 heures.
  • Selon votre licence : avant chaque exécution, le script vérifie quand votre licence autorise la prochaine mise à jour. Si le moment n'est pas venu, il s'arrête sans appeler l'API.

Vérification

nftables

sudo nft list table ip qfeeds
sudo nft list set ip qfeeds qfeeds_blacklist_v4 | grep -oP '\d+\.\d+\.\d+\.\d+' | wc -l
sudo nft list set ip qfeeds qfeeds_blacklist_v4_nets | head -20
sudo nft list table ip6 qfeeds

iptables avec ipset

sudo ipset list -t | grep -A4 qfeeds
sudo ipset list qfeeds_blacklist_v4 | tail -n +9 | wc -l
sudo iptables -L INPUT -n --line-numbers | grep qfeeds
sudo iptables -L QFEEDS_INPUT -n
sudo ip6tables -L QFEEDS_INPUT -n

Pour les deux

sudo tail -20 /var/log/qfeeds_blocklist.log
sudo grep -i error /var/log/qfeeds_blocklist.log
sudo crontab -l | grep qfeeds
sudo /usr/local/bin/update_qfeeds_blocklist.sh
sudo QFEEDS_FORCE_UPDATE=1 /usr/local/bin/update_qfeeds_blocklist.sh

La dernière commande force une synchronisation complète et ignore la planification liée à la licence. C'est le moyen le plus rapide de vérifier que tout fonctionne de bout en bout.

Configuration

Tous les réglages se trouvent dans /etc/qfeeds/qfeeds_config.conf. Vous pouvez modifier ce fichier directement au lieu de relancer l'installateur ; le changement prend effet à l'exécution suivante.

RéglageDescriptionValeur par défaut
BACKENDPare-feu, nftables ou iptablesdétecté
API_TOKENVotre jeton API Q-Feedsobligatoire
FEED_TYPEFlux récupérémalware_ip
LIMITNombre maximal d'IP, vide signifie aucune limitevide
BLOCK_INCOMINGBloquer le trafic venant des IP listéesyes
BLOCK_OUTGOINGBloquer le trafic vers les IP listéesno
WHITELIST_V4Adresses IPv4 ou plages CIDR, séparées par des virgulesvide
WHITELIST_V6Adresses IPv6 ou plages CIDR, séparées par des virgulesvide
LOG_FILEChemin du fichier journal/var/log/qfeeds_blocklist.log
FULL_SYNC_MAX_AGESecondes avant qu'une synchronisation complète soit forcée86400

Emplacements des fichiers et répertoires

  • Configuration : /etc/qfeeds/qfeeds_config.conf
  • État de synchronisation : /etc/qfeeds/.last_sync et /etc/qfeeds/.last_count
  • Script de mise à jour : /usr/local/bin/update_qfeeds_blocklist.sh
  • Journal : /var/log/qfeeds_blocklist.log
  • Fichier de verrouillage : /var/lock/qfeeds_blocklist.lock
  • Cron : crontab root
  • Conservation des règles : netfilter-persistent s'il est présent, sinon /etc/nftables.conf pour nftables ou /etc/ipset.conf avec /etc/iptables.rules et /etc/ip6tables.rules pour iptables

Désinstallation

sudo ./qfeeds-uninstaller.sh

Le script de désinstallation lit quel pare-feu est configuré et nettoie en conséquence. Avec nftables, il supprime les tables ip qfeeds et ip6 qfeeds ainsi que toutes leurs chaînes, règles et ensembles. Avec iptables, il retire les règles de saut marquées, vide et supprime les chaînes QFEEDS_INPUT et QFEEDS_OUTPUT, puis détruit tous les ensembles qfeeds_. Dans les deux cas, le répertoire de configuration, le script de mise à jour, la tâche cron, le journal et le fichier de verrouillage disparaissent également. Si le fichier de configuration est absent, il nettoie les deux variantes par précaution.

Les paquets système restent en place. Supprimez-les vous-même si vous n'en avez plus besoin :

  • Ubuntu/Debian : sudo apt-get -y remove ipset netfilter-persistent
  • CentOS/RHEL/Alma/Rocky : sudo yum -y remove ipset
  • Fedora : sudo dnf -y remove ipset
  • openSUSE/SLES : sudo zypper remove ipset
  • Arch : sudo pacman -R ipset

Attention avec iptables, nftables, curl et jq : d'autres composants de votre système en ont presque certainement besoin.

Dépannage

  • Les ensembles sont vides après l'installation : consultez sudo tail -50 /var/log/qfeeds_blocklist.log, vérifiez votre jeton API, puis lancez sudo QFEEDS_FORCE_UPDATE=1 /usr/local/bin/update_qfeeds_blocklist.sh.
  • « Not time yet. Next update scheduled at ... » : c'est normal. La tâche cron s'est exécutée, mais votre licence n'autorise pas encore de nouvelle mise à jour. L'exécution suivante vérifiera de nouveau.
  • Règles disparues après un redémarrage : le script enregistre les règles automatiquement et constate à l'exécution suivante que l'ensemble est vide, puis le reconstruit. Vérifiez par sécurité que netfilter-persistent est installé ou que le service nftables est activé.
  • « Batch nft -f failed. Falling back to per-command execution » : sans conséquence. Cela arrive surtout dans les conteneurs LXC dont le tampon netlink est limité. Même dans ce cas, 400 000 adresses ou plus sont chargées en une dizaine de secondes. Idem pour « Message too long ».
  • « ipset restore failed » : vérifiez avec command -v ipset qu'ipset est présent et avec lsmod | grep ip_set que le module noyau est chargé.
  • Aucune règle visible dans INPUT : avec iptables, les règles de blocage se trouvent dans QFEEDS_INPUT. INPUT ne contient que la règle de saut, marquée par le commentaire qfeeds. Vérifiez les deux avec sudo iptables -L INPUT -n | grep qfeeds et sudo iptables -L QFEEDS_INPUT -n.
  • L'installation s'arrête sur « Unable to locate package » : votre distribution n'a pas été reconnue. Installez curl, jq et util-linux à la main, ainsi que nftables ou iptables avec ipset, puis relancez l'installateur.
  • Assistance : support@qfeeds.com ou la page d'assistance. Vous avez trouvé un bug dans les scripts ? Signalez-le comme issue dans le dépôt GitHub.

Télécharger le manuel PDF complet Voir les scripts sur GitHub

Évaluez notre intelligence dès aujourd'hui !

Simplifiez vos opérations de sécurité, lancez votre essai gratuit de Q-Feeds et constatez la différence.

Activer l'accès gratuit