Ceci est une ancienne révision du document !
Un ipset est un groupe nommé d'adresses IP (hôtes ou réseaux) ou d'adresses MAC. firewalld pourra utiliser ces ensembles comme sources sur les zones (avec le préfixe ipset:) ou dans les règles enrichies (rich rules)
La création d'un ipset exige la présence de l'argument --permanent. Pour qu'il puisse être disponible dans l'environnement d'exécution (runtime environment), il faut recharger le service après la commande de création.
# Par défaut l'ensemble contient des adresses IPv4 firewall-cmd --permanent --new-ipset=blacklisted-hosts --type=hash:ip # Creation d'un ipset avec des adresses ipv6 firewall-cmd --permanent --option=family=inet6 --new-ipset=blacklisted-hosts-v6 --type=hash:ip # MAJ de l'environnement d'exécution firewall-cmd --reload
--permanent. En revanche la mise à jour du contenu de l'ensemble pourra être faite dans l'environnement d'exécution.
Lors de la création il est possible de spécifier quelques options comme vu précédemment via l'argument --option. Les options disponibles sont :
family: la valeur peut être inet ou inet6 ;timeout: suivie d'une valeur entière, TTL en secondes d'un élément de la liste;hashsize: valeur entière ;maxelem: valeur entière, nombre d'éléments max de l'ensemble.# Création d'un ipset dont les éléments sont temporaires firewall-cmd --permanent --option=timeout=240 --option=maxelem=64 --new-ipset=temporary-blacklist --type=hash:ip firewall-cmd --permanent --ipset=temporary-blacklist --set-description="Rejette tout trafic des membres de la liste pendant 4 minutes." firewall-cmd --permanent --zone=block --add-source=ipset:temporary-blacklist
# Lister les ensembles existants firewall-cmd --get-ipsets # Détails de l'ensemble "blacklisted-hosts" firewall-cmd --info-ipset=blacklisted-hosts #Ajouter un élément à l'ensemble firewall-cmd --ipset=blacklisted-hosts --add-entry=192.168.123.10 # Affecter l'ensemble comme source de la zone block pour rejeter tout trafic firewall-cmd --zone=drop --add-source=ipset:blacklisted-hosts
On peut également utiliser un ensemble dans une règle élaborée (rich rule) :
# fonctionne comme attendu sous debian13 firewall-cmd --permanent --new-ipset=http-servers --type=hash:ip --family=inet --option=timeout=180 --option=maxelem=64 firewall-cmd --zone=public --add-rich-rule='rule source ipset="allowed-ssh" service name="ssh" accept' --permanent
# Lister les types d'ensembles gérés par firewalld firewall-cmd --get-ipset-types # Lister les ensembles existants firewall-cmd --permanent --get-ipsets # Obtenir les informations détaillées de l'ensemble "update-servers" firewall-cmd --permanent --info-ipset=update-servers # Obtenir seulement les éléments de l'ensemble "update-servers" firewall-cmd --permanent --ipset=update-servers --get-entries
firewall-cmd --permanent --delete-ipset=update-servers
Firewalld allows the creation of IPSet entries, which can be configured with a timeout. However, it is important to note that when an IPSet entry is created with a timeout, firewalld does not track or list these entries. This means that while you can set a timeout for an IPSet entry, you won't be able to retrieve or view the entry after it has been added.
Kernel Management: The timeout is managed directly in the kernel, which is why firewalld does not maintain a record of these entries. (nft ok)
# Ajoute une entrée dans l'ensemble "update-servers" firewall-cmd --ipset=update-servers --add-entry=$(dig +short debian.obspm.fr) # La liste des éléments affichée par firewalld est vide firewall-cmd --ipset=update-servers --get-entries # L'affichage des éléments via nft est correcte nft list set inet firewalld update-servers table inet firewalld { set update-servers { type ipv4_addr size 64 flags interval,timeout timeout 5m elements = { 145.238.186.56 expires 4m36s904ms } } }