Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

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.

Ce que fait le script :
  • Ajoute des règles iptables en 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 conntrack existants (sinon l’attaque “continue”).
  • Applique un hardening sysctl anti-SYN (runtime + option persistance).
  • Génère un rollback automatique (state file) et une suppression best-effort.
Ce que ce n’est PAS :
  • 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.).
Statuts réseau

Voir du SYN_SENT après blocage est normal : le handshake ne se termine pas, donc l’attaque est cassée.

🖼️ Emplacement image (à insérer)
Exemple : capture tcptrack ou ss -ant montrant le passage de ESTABLISHED à SYN_SENT.
Place un <img src="..." class="img-fluid"> ici quand tu veux.
⚠️ Zone critique : ce guide parle d’actions kernel / firewall. Toujours travailler en SSH stable et garder un rollback sous la main.

Étape 1 – Installation

1) Prérequis

  • OK Linux avec iptables (nft backend OK).
  • OK Exécution en root (via sudo).
  • Recommandé Paquet conntrack pour purger les sessions existantes.
  • Recommandé iproute2 et ethtool pour diagnostic Ethernet.
Debian/Ubuntu - dépendances
sudo apt update
sudo apt install -y iptables conntrack iproute2 ethtool
🖼️ Emplacement image (à insérer)
Exemple : capture iptables --version / update-alternatives --display iptables si besoin.
Insère ici une capture “environnement serveur”.

2) Déploiement du script

Convention simple : déposer le script dans /usr/local/sbin (accessible root), puis le rendre exécutable.

Installation script
# 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
Astuce : le script génère un fichier d’état de rollback par range dans /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”).

Test conntrack
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.

Usage rapide
# 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 rollback

2) Options utiles

Options
# 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-run

3) Vérifier l'effet en live

iptables compteurs
# 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 / sockets
# SYN-SENT (normal si attaque cassée)
sudo ss -ant state syn-sent | wc -l

# Voir un échantillon
sudo ss -ant state syn-sent | head
🖼️ Emplacement image (à insérer)
Capture “avant/après” : nombre de SYN-SENT + débit interface (iftop/nload).
Tu peux insérer 2 images (avant/après) dans ce bloc.

4) 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.)

ipset (manuel)
# 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

Lecture simple :
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.

Solution : mettre en place la persistance (voir modal “persistance iptables”). Ou migrer vers nftables / firewall cloud / ipset.

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.

Stats interface (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
Charge conntrack
# Taille max & état actuel
cat /proc/sys/net/netfilter/nf_conntrack_max
cat /proc/sys/net/netfilter/nf_conntrack_count

# Stats rapides
sudo conntrack -S

D) 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.
Ne fais pas : des règles “au hasard” sur des /8 ou /0. On bloque un range précis (ex: /24) et on observe.

E) Problèmes fréquents

  • “conntrack: command not found” → installer conntrack ou 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.