Outils pour utilisateurs

Outils du site


netadmin:blocage_adresses_ip

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
netadmin:blocage_adresses_ip [2021/09/02 20:09] yoannnetadmin:blocage_adresses_ip [2024/06/08 12:18] (Version actuelle) yoann
Ligne 1: Ligne 1:
 {{tag>sysadmin netadmin linux iptables netfilter ban ip todo}} {{tag>sysadmin netadmin linux iptables netfilter ban ip todo}}
  
-====== Netfilter: Bloquer des adresses IP indésirables ======+:DEPRECATED: 
 + 
 +<note> 
 +Sur les distributions récentes, **nftables** remplace **iptables**. Voir la note [[netadmin/nftables/bloquer_temporairement_ip_avec_nftables| bloquer temporairement des IP avec nftables]]. 
 +</note> 
 + 
 +====== iptables: Bloquer des adresses IP indésirables ======
  
 Il est parfois nécessaire de bloquer des adresses IP avec lesquelles le système Linux communique par défaut: on peut vouloir bannir certains hôtes ayant tenté des attaques contre le système par exemple. Il est parfois nécessaire de bloquer des adresses IP avec lesquelles le système Linux communique par défaut: on peut vouloir bannir certains hôtes ayant tenté des attaques contre le système par exemple.
Ligne 18: Ligne 24:
 ===== IP sets ===== ===== IP sets =====
  
-Les **IP sets** (ou ensembles IP) permettent de répondre précisément à cette problématique. ce sont des groupes d'éléments (des IP, des adresses MAC, ou ports indépendants) encodés et stockés dans des structures de données de type tables de hachage exploitables efficacement par netfilter.+Les **IP sets** (ou ensembles IP) permettent de répondre précisément à cette problématique. Ce sont des groupes d'éléments (des IP, des adresses MAC, ou ports indépendants) encodés et stockés dans des structures de données de type tables de hachage exploitables efficacement par netfilter.
  
-Une fois que l'ensemble créé, il peut être utilisé par les règles iptables.+Une fois l'ensemble créé, il peut être utilisé par les règles iptables.
  
-Installer via le gestionnaire de paquetage:+Installer le paquet **ipset** via le gestionnaire de paquetage:
 <code bash> <code bash>
 sudo apt-get install ipset sudo apt-get install ipset
 </code> </code>
  
-On commence par créer un nouvel ensemble, ici on le nomme "set_banished_ip":+===== Créer l'ensemble ===== 
 + 
 +On commence par créer un nouvel ensemble, ici on le nomme "set_banished_net":
 <code bash> <code bash>
-sudo ipset create set_banished_ip hash:net+sudo ipset create set_banished_net hash:net
 </code> </code>
  
-L'argument hash:net est obligatoire, il indique le type d'ensemble à créer.+L'argument ''hash:net'' est obligatoire, il indique le type d'ensemble à créer. Il existe de nombreux types d'ensembles. Le type ''hash:net'' utilise une table de hachage pour stocker de multiples blocs d'adresses CIDR. Pour stocker des adresses individuelles dans un ensemble, on pourra utiliser ''hash:ip''.
  
 +<code bash>
 +sudo ipset create set_banished_ip hash:ip
 +</code>
  
 +Par défaut un ensemble compte 65536 éléments. Cette valeur peut être modifiée via l'argument **maxelem**:
 +
 +<code bash>
 +sudo ipset create set_banished_ip hash:ip maxelem 1000000
 +</code>
 Pour lister les ensembles définis: Pour lister les ensembles définis:
  
Ligne 41: Ligne 57:
 </code> </code>
  
 +Pour ajouter un élément dans un ensemble:
 +
 +<code bash>
 +sudo ipset add set_basnished_net 1.1.1.1/32
 +sudo ipset add set_basnished_net 1.1.2.0/24
 +
 +sudo ipset add set_banished_ip 93.186.198.153
 +</code>
 +
 +Pour supprimer un élément de l'ensemble:
 +<code bash>
 +sudo ipset del set_banished_ip 93.186.198.153
 +</code>
 +
 +===== Créer le filtre netfilter =====
 +
 +Maintenant que l'ensemble est définit, on peut créer la règle de filtrage via iptables qui bloque les IP appartenant à cet ensemble, pour cela il faut utiliser les arguments **%% -m set --match-set <set_name> %%**:
 +
 +<code bash>
 +sudo iptables -I INPUT -m set --match-set set_banished_ip src -p tcp -j LOG --log-level info --log-prefix="ACTION=BANISHED "
 +sudo iptables -I INPUT 2 -m set --match-set set_banished_ip src -p tcp -j DROP
 +</code>
 +
 +==== Filtres avec Docker ====
 +
 +Si le serveur s'appuie sur Docker pour fournir certains services, il faut aussi ajouter les filtres dans la chaîne **DOCKER-USER**:
 +
 +<code bash>
 +sudo iptables -I DOCKER-USER -m set --match-set set_banished_ip src -p tcp -j LOG --log-level info --log-prefix="ACTION=BANISHED "
 +sudo iptables -I DOCKER-USER 2 -m set --match-set set_banished_ip src -p tcp -j DROP
 +</code>
 +
 +===== Sauvegarde et restauration d'un ensemble =====
 +
 +Il est possible d'exporter/sauvegarder un ensemble dans un fichier texte:
 +
 +<code bash>
 +sudo ipset save set_banished_ip -f banished_ip.txt
 +</code>
 +
 +
 +Pour supprimer un set existant:
 +<code bash>
 +sudo ipset destroy set_banished_ip
 +</code>
 +
 +<note>
 +Un ensemble ne pourra pas être supprimé s'il est en cours d'utilisation par une règle de filtrage.
 +</note>
 +
 +Pour recréer un ensemble via le fichier d'export:
 +<code bash>
 +sudo ipset restore -f banished_ip.txt
 +</code>
 +
 +===== Automatiser le bannissement =====
 +
 + 
 ===== Références ===== ===== Références =====
  
   * https://www.xmodulo.com/block-unwanted-ip-addresses-linux.html   * https://www.xmodulo.com/block-unwanted-ip-addresses-linux.html
netadmin/blocage_adresses_ip.1630613384.txt.gz · Dernière modification : 2021/09/02 20:09 de yoann