Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)

Blocage d'une adresse IP sur les serveurs HAProxy

De AJLSM
Version datée du 6 septembre 2026 à 12:58 par Jlarvers (discussion | contributions)
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Blocage d'une adresse IP sur les serveurs HAProxy

[modifier | modifier le wikicode]

Cette procédure permet de bloquer une adresse IP directement sur un serveur frontal HAProxy à l'aide de nftables.

Le blocage doit être effectué sur HAProxy lorsque les serveurs Web situés derrière celui-ci reçoivent les connexions depuis l'adresse interne du HAProxy et récupèrent l'adresse IP réelle du client via l'en-tête HTTP :

RemoteIPHeader X-Forwarded-For

Dans cette configuration, bloquer l'adresse IP avec nftables sur le serveur Apache est inefficace : au niveau réseau, Apache voit l'adresse IP du HAProxy et non celle du client.

Adresse IP à bloquer :

69.30.85.50

Serveur frontal :

haproxy-01

Adresse interne du HAProxy :

10.0.0.30

Vérifier la configuration nftables

[modifier | modifier le wikicode]

Se connecter sur le serveur HAProxy puis vérifier les tables existantes :

sudo nft list tables

Pour afficher la totalité de la configuration :

sudo nft list ruleset

Si aucune table n'est retournée, nftables ne possède actuellement aucune configuration.

Création d'une table et d'une chaîne de filtrage

[modifier | modifier le wikicode]

Si aucune table de filtrage n'existe, créer la table :

sudo nft add table inet filter

Créer ensuite une chaîne INPUT avec une politique par défaut accept :

sudo nft 'add chain inet filter input { type filter hook input priority 0; policy accept; }'

Attention : la politique reste volontairement à accept. Cette procédure n'installe pas un pare-feu restrictif sur HAProxy ; elle ajoute uniquement les blocages explicitement demandés.

Bloquer une adresse IP

[modifier | modifier le wikicode]

Pour bloquer l'adresse IP :

sudo nft add rule inet filter input ip saddr 69.30.85.50 counter drop

L'option counter permet de vérifier que des paquets provenant de cette adresse sont effectivement interceptés.

Vérification du blocage

[modifier | modifier le wikicode]

Afficher la chaîne :

sudo nft list chain inet filter input

Exemple de résultat :

table inet filter {
        chain input {
                type filter hook input priority filter; policy accept;
                ip saddr 69.30.85.50 counter packets 174 bytes 9972 drop
        }
}

Si les compteurs packets et bytes augmentent, cela confirme que l'adresse IP atteint bien HAProxy et que ses paquets sont rejetés.

Pour surveiller les compteurs en temps réel :

watch -n 1 'sudo nft list chain inet filter input'

Quitter avec Ctrl+C.

Vérifier préalablement qu'une IP arrive sur HAProxy

[modifier | modifier le wikicode]

En cas de doute, il est possible d'observer directement le trafic :

sudo tcpdump -ni any host 69.30.85.50

Si des paquets apparaissent, l'adresse IP atteint directement le serveur HAProxy.

Quitter avec Ctrl+C.

Pourquoi le blocage doit être effectué sur HAProxy

[modifier | modifier le wikicode]

Dans une architecture de type :

Client Internet
69.30.85.50
      |
      v
HAProxy
10.0.0.30
      |
      v
Serveur Apache
10.0.0.26

le serveur Apache reçoit au niveau TCP une connexion provenant de :

10.0.0.30

HAProxy transmet cependant l'adresse IP originale dans l'en-tête :

X-Forwarded-For: 69.30.85.50

Si Apache utilise :

RemoteIPHeader X-Forwarded-For

ses journaux peuvent afficher 69.30.85.50 comme adresse du client.

En revanche, nftables sur le serveur Apache ne voit pas cette adresse comme adresse IP source du paquet. Une règle :

sudo nft add rule inet filter input ip saddr 69.30.85.50 drop

placée sur Apache aura donc un compteur restant à zéro.

Le blocage réseau doit être effectué sur le HAProxy, qui reçoit réellement les connexions provenant de l'adresse Internet.

Afficher toutes les adresses actuellement bloquées

[modifier | modifier le wikicode]
sudo nft list chain inet filter input

Ou avec les identifiants (handles) des règles :

sudo nft -a list chain inet filter input

Supprimer un blocage

[modifier | modifier le wikicode]

Commencer par récupérer le handle de la règle :

sudo nft -a list chain inet filter input

Exemple :

ip saddr 69.30.85.50 counter packets 174 bytes 9972 drop # handle 3

Supprimer ensuite la règle :

sudo nft delete rule inet filter input handle 3

Vérifier :

sudo nft list chain inet filter input

Important : persistance après redémarrage

[modifier | modifier le wikicode]

Les règles ajoutées avec les commandes nft add ne sont pas nécessairement conservées après un redémarrage du serveur.

Il faut donc enregistrer la configuration nftables et s'assurer qu'elle est restaurée automatiquement au démarrage.

La méthode dépend de la configuration du serveur et de la distribution utilisée.

Avant tout redémarrage de HAProxy, vérifier que les règles de blocage nécessaires sont présentes dans la configuration nftables persistante.