Block Range – Anti-Flood IP / Ethernet (iptables + conntrack + sysctl) — v1.0
Objectif : fournir un panic-button propre et réversible pour couper un flood réseau provenant d’un range IP (ex : 5.181.17.0/24) : SYN flood, scan agressif, bots persistants, saturation de la pile TCP, surcharge conntrack.
- Ajoute des règles
iptablesen tête (priorité) pour le range. - Coupe SYN très tôt (réduction de charge kernel/conntrack).
- Optionnel : bloque aussi les réponses sortantes vers le range (pas d’amplification).
- Purge les états
conntrackexistants (sinon l’attaque “continue”). - Applique un hardening
sysctlanti-SYN (runtime + option persistance). - Génère un rollback automatique (state file) et une suppression best-effort.
- Ce n’est pas un IDS/IPS complet (CrowdSec/Fail2ban).
- Ce n’est pas une solution “L7” (WAF / reverse proxy).
- Ce n’est pas un remplacement de firewall cloud (AWS SG, etc.).
Voir du SYN_SENT après blocage est normal : le handshake ne se termine pas, donc l’attaque est cassée.
tcptrack ou ss -ant montrant le passage de ESTABLISHED à SYN_SENT.<img src="..." class="img-fluid"> ici quand tu veux.Étape 1 – Installation
1) Prérequis
- OK Linux avec
iptables(nft backend OK). - OK Exécution en
root(viasudo). - Recommandé Paquet
conntrackpour purger les sessions existantes. - Recommandé
iproute2etethtoolpour diagnostic Ethernet.
sudo apt update
sudo apt install -y iptables conntrack iproute2 ethtooliptables --version / update-alternatives --display iptables si besoin.2) Déploiement du script
Convention simple : déposer le script dans /usr/local/sbin (accessible root), puis le rendre exécutable.
# 1) copier le script
sudo cp block_range.sh /usr/local/sbin/block_range
# 2) droits d'exécution
sudo chmod +x /usr/local/sbin/block_range
# 3) test help
sudo /usr/local/sbin/block_range --help/var/tmp/. C’est volontaire : simple, robuste, pas de DB, pas de dépendance.3) Vérifier que conntrack est opérationnel
Utile pour purger les sessions existantes sur le range (sinon l’attaque “a l’air de continuer”).
sudo conntrack -L | head
sudo conntrack -SÉtape 2 – Utilisation
1) Mode standard (apply / status / rollback)
Commande de base : tu passes un CIDR et une action.
# Bloquer un /24
sudo block_range 5.181.17.0/24 apply
# Voir l'état (règles + SYN-SENT + conntrack aperçu)
sudo block_range 5.181.17.0/24 status
# Revenir en arrière (suppression règles + purge conntrack)
sudo block_range 5.181.17.0/24 rollback2) Options utiles
# Ne pas appliquer sysctl (si tu gères ça ailleurs)
sudo block_range 5.181.17.0/24 apply --no-sysctl
# Persister les sysctl dans /etc/sysctl.d/99-anti-syn.conf
sudo block_range 5.181.17.0/24 apply --persist-sysctl
# Ne pas bloquer OUTPUT vers le range (cas particuliers)
sudo block_range 5.181.17.0/24 apply --no-output-drop
# Simuler (affiche les actions, n'exécute rien)
sudo block_range 5.181.17.0/24 apply --dry-run3) Vérifier l'effet en live
# Les compteurs doivent monter sur les règles DROP
sudo iptables -L INPUT -n -v --line-numbers | grep 5.181.17.0/24 || true# SYN-SENT (normal si attaque cassée)
sudo ss -ant state syn-sent | wc -l
# Voir un échantillon
sudo ss -ant state syn-sent | head4) Variante PRO : ipset (si tu bloques souvent)
Pourquoi ipset ? si tu bloques plusieurs ranges, ipset est plus propre et scalable. (Le script actuel est iptables-only, mais tu peux l’étendre.)
# Installer ipset
sudo apt install -y ipset
# Créer le set
sudo ipset create blacklist_flood hash:net -exist
# Ajouter un range
sudo ipset add blacklist_flood 5.181.17.0/24 -exist
# Lier à iptables (drop)
sudo iptables -I INPUT 1 -m set --match-set blacklist_flood src -j DROPÉtape 3 – Sécurité & Dépannage
A) Comprendre “SYN_SENT” après blocage
SYN_SENT = l’attaquant envoie des SYN, mais ton serveur ne complète pas le handshake. Donc : attaque neutralisée. Tu peux encore voir le bruit réseau, mais le serveur ne “prend pas”.B) Si le flood “revient” après reboot
iptables n’est pas forcément persistant selon distro. Si tu redémarres et que le bruit revient, c’est probablement que les règles n’ont pas été restaurées.
C) Diagnostic Ethernet (niveau interface)
Si tu dis “ça envahit mes ports Ethernet”, il faut vérifier si la carte drope / overflow. Un flood L3/L4 se voit au kernel ; un souci plus bas niveau se voit via ethtool.
# Remplace eth0 par ton interface (ip link)
ip link
# Stats erreurs/drops
sudo ethtool -S eth0 | egrep -i "drop|err|miss|overflow|fifo|timeout" || true# Taille max & état actuel
cat /proc/sys/net/netfilter/nf_conntrack_max
cat /proc/sys/net/netfilter/nf_conntrack_count
# Stats rapides
sudo conntrack -SD) Checklist sécurité (avant blocage large)
- Check Tu n’as pas de clients légitimes dans ce range ? (très rare mais on vérifie).
- OK Tu as un accès SSH alternatif (ou console cloud) si tu te lock ?
- OK Tu sais rollback :
block_range <cidr> rollback. - Check Si c’est un serveur cloud : firewall provider en complément.
E) Problèmes fréquents
- “conntrack: command not found” → installer
conntrackou accepter la purge ignorée. - “iptables: No chain/target/match” → iptables incomplet, modules manquants, ou backend nft.
- “SYN_SENT ne descend pas” → l’attaquant continue ; tant que tu DROP, tu es OK.
- “Après reboot, tout revient” → mettre persistance (modal) ou basculer nftables.
