« LINUX:XTABLES-ADDONS » : différence entre les versions

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
 
(4 versions intermédiaires par le même utilisateur non affichées)
Ligne 14 : Ligne 14 :


Pour l'installer, exécutez la commande de ligne sous Linux:
Pour l'installer, exécutez la commande de ligne sous Linux:
  dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
  dnf install <nowiki>https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm</nowiki>
Par la occasion, on peut ajouter le dépôt "RpmFusion non Free":
Par la occasion, on peut ajouter le dépôt "RpmFusion non Free":
  dnf install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
  dnf install <nowiki>https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm</nowiki>


Suite à ces diverses manipulations, il est prudent d'effectuer un nettoyage:
Suite à ces diverses manipulations, il est prudent d'effectuer un nettoyage:
Ligne 29 : Ligne 29 :
Ces modules se trouvent dans un sous-répertoire de chaque kernel:
Ces modules se trouvent dans un sous-répertoire de chaque kernel:
  /usr/lib/modules/'''<kernel>'''/extra/xtables-addons
  /usr/lib/modules/'''<kernel>'''/extra/xtables-addons
Si le "kernel" se nomme "5.9.16-200.fc33.x86_64", le répertoire se nommera:
Si le "kernel" se nomme "5.17.6-300.fc36.x86_64", le répertoire se nommera:
  /usr/lib/modules/5.9.16-200.fc33.x86_64/extra/xtables-addons
  /usr/lib/modules/5.17.6-300.fc36.x86_64/extra/xtables-addons
On peut connaître le "kernel" courant avec la commande suivante:
On peut connaître le "kernel" courant avec la commande suivante:
  uname -a
  uname -a
qui donne:
qui donne:
  Linux serverdb.home.dom '''5.9.16-200.fc33.x86_64''' #1 SMP Mon Dec 21 14:08:22 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
  Linux serverdb.home.dom 5.17.6-300.fc36.x86_64 #1 SMP PREEMPT Mon May 9 15:47:11 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux




Ligne 43 : Ligne 43 :
Lorsque le correctif arrive, on peut forcer la compilation pour un "kernel" spécifique avec la commande suivante:
Lorsque le correctif arrive, on peut forcer la compilation pour un "kernel" spécifique avec la commande suivante:
  /usr/sbin/akmods --force --kernels '''<kernel>'''
  /usr/sbin/akmods --force --kernels '''<kernel>'''
Si le "kernel" se nomme "5.9.16-200.fc33.x86_64", la commande sera:
Si le "kernel" se nomme "5.17.6-300.fc36.x86_64", la commande sera:
  /usr/sbin/akmods --force --kernels 5.9.9-200.fc33.x86_64
  /usr/sbin/akmods --force --kernels 5.17.6-300.fc36.x86_64


Cette compilation crée un fichier d'installation RPM et dans la foulée, il est l'installe. Pour être sûr du bon fonctionnement de cette commande, il faut s'assurer que le module correspondant n'est pas installe.
Cette compilation crée un fichier d'installation RPM et dans la foulée, il est l'installe. Pour être sûr du bon fonctionnement de cette commande, il faut s'assurer que le module correspondant n'est pas installé.


La commande suivante permet de le vérifier:
La commande suivante permet de le vérifier:
  dnf list installed | grep kmod-xtables-addons
  dnf list installed | grep kmod-xtables-addons-
Elle vous donnera cette liste, un par kernel installé.
Elle vous donnera cette liste, un par kernel installé. Usuellement Fedora essaye de garder les trois kernels les plus récents. Dans notre cas, pour le kernel de l'exemple, nous avons l'entrée:
kmod-xtables-addons-5.17.6-300.fc36.x86_64.x86_64    3.20-1.fc36      @@commandline
Pour le désinstaller, entrez la commande:
dnf remove kmod-xtables-addons-5.17.6-300.fc36.x86_64.x86_64


''Remarque'': Lors du passage de versions de Fedora, il m'est arrivé que cette compilation, effectuée pendant la migration, soit incorrecte; dans ce cas, le lancement d'IPTABLES est en erreur, non effectif. Ceci m'est arrivé lors du passage de Fedora 34 à Fedora 35 et aussi pour le passage suivant, de Fedora 35 à Fedora 36. La solution est simple. Il faut désinstaller le module "kmod-xtables-addons" correspondant au nouveau kernel et ensuite relancer sa compilation comme décrit ci-dessus.
Selon l'exemple ci-dessus, nous avons les deux commandes suivantes à lancer successivement:
dnf remove kmod-xtables-addons-5.17.6-300.fc36.x86_64.x86_64
/usr/sbin/akmods --force --kernels 5.17.6-300.fc36.x86_64
Il nous reste à relancer notre firewall IPTABLES.




Ligne 121 : Ligne 131 :
  -A INPUT -m psd --psd-weight-threshold 5 --psd-hi-ports-weight 3 -j LOG --log-level debug --log-prefix "PORTSCAN(I):"
  -A INPUT -m psd --psd-weight-threshold 5 --psd-hi-ports-weight 3 -j LOG --log-level debug --log-prefix "PORTSCAN(I):"
  -A INPUT -m psd --psd-weight-threshold 5 --psd-hi-ports-weight 3 -j DROP
  -A INPUT -m psd --psd-weight-threshold 5 --psd-hi-ports-weight 3 -j DROP
* On peut combiner cette limitation géographique avec une limitation du trafic (module hashlimit) et à un regroupement de sub-net (option: hashlimit-srcmask) pour la comptabilisation de ce trafic en seconde étape plus restrictive. La première peut limiter une attaque DOS , la seconde une attaque DDOS provenant d'une sous-zone géographique. Au contraire du premier exemple au bloque tout accès à un pays, ces commandes permettent l'accès mais de façon contenue.
-A INPUT -m geoip --src-cc CN,RU -p tcp -m tcp -m hashlimit --hashlimit-above 600/sec --hashlimit-burst 200 --hashlimit-mode dstip,dstport --hashlimit-name limitecnru -j LOG --log-level debug --log-prefix "HASH(CN-RU): "
-A INPUT -m geoip --src-cc CN,RU -p tcp -m tcp -m hashlimit --hashlimit-above 600/sec --hashlimit-burst 200 --hashlimit-mode dstip,dstport --hashlimit-name limitecnru -j DROP
-A INPUT -m geoip --src-cc CN,RU -p tcp -m tcp --syn -m hashlimit --hashlimit-above 600/sec --hashlimit-burst 200 --hashlimit-mode srcip --hashlimit-namesyncnru --hashlimit-htable-size 2097152 --hashlimit-srcmask 24 -j LOG --log-level debug --log-prefix "HASH24(CN-RU): "
-A INPUT -m geoip --src-cc CN,RU -p tcp -m tcp --syn -m hashlimit --hashlimit-above 600/sec --hashlimit-burst 200 --hashlimit-mode srcip --hashlimit-namesyncnru --hashlimit-htable-size 2097152 --hashlimit-srcmask 24 -j DROP


Ces messages peuvent être interceptés par un HIDS par exemple [[LINUX:Wazuh: HIDS|Wazuh]] pour un traitement plus poussé.





Dernière version du 12 novembre 2024 à 19:23


retour au menu d'IPTABLES


But

Le paquet "xtables-addons" ajoute toute une série de fonctions à "IPTABLES". Nous utilisons deux de ces fonctionnalités: le filtrage via la géolocalisation IP et le filtrage lié au "scanning de ports".


Installation

Dépôt RpmFusion

Cette fonctionnalité est disponible dans le dépôt "RmpFussion Free".

Pour l'installer, exécutez la commande de ligne sous Linux:

dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm

Par la occasion, on peut ajouter le dépôt "RpmFusion non Free":

dnf install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

Suite à ces diverses manipulations, il est prudent d'effectuer un nettoyage:

dnf clean all


Installation

Dés lors on peut installer le module désiré:

dnf install xtables-addons perl-Text-CSV_XS perl-Net-CIDR-Lite

Par la même occasion, le compilateur C et les entêtes des sources du système doivent être installées car tous ces modules, lors de l'installation ou plus tard, doivent être compilés spécifiquement pour chaque "kernel" installés.

Ces modules se trouvent dans un sous-répertoire de chaque kernel:

/usr/lib/modules/<kernel>/extra/xtables-addons

Si le "kernel" se nomme "5.17.6-300.fc36.x86_64", le répertoire se nommera:

/usr/lib/modules/5.17.6-300.fc36.x86_64/extra/xtables-addons

On peut connaître le "kernel" courant avec la commande suivante:

uname -a

qui donne:

Linux serverdb.home.dom 5.17.6-300.fc36.x86_64 #1 SMP PREEMPT Mon May 9 15:47:11 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux


Compilation

Normalement, la compilation de ces modules s'effectue lors de l'installation de tout "kernel". Mais il est arrivé que lors de changement majeur dans l'appel de fonctions du "kernel" utilisées par "xtables", que la compilation ne s'effectue pas. Si on utilise ces fonctionnalités dans IPTABLES, il faut s'abstenir d'utiliser ce "kernel" pendant quelques jours; le temps que le développeur concerné corrige ses sources, ce qui ne tarde pas sinon "IPTABLES" ne démarrera pas. Ou autre solution, désactivez les lignes de configuration d'IPTABLES utilisant cette fonctionnalité dans le fichier "/etc/sysconfig/iptables".

Lorsque le correctif arrive, on peut forcer la compilation pour un "kernel" spécifique avec la commande suivante:

/usr/sbin/akmods --force --kernels <kernel>

Si le "kernel" se nomme "5.17.6-300.fc36.x86_64", la commande sera:

/usr/sbin/akmods --force --kernels 5.17.6-300.fc36.x86_64

Cette compilation crée un fichier d'installation RPM et dans la foulée, il est l'installe. Pour être sûr du bon fonctionnement de cette commande, il faut s'assurer que le module correspondant n'est pas installé.

La commande suivante permet de le vérifier:

dnf list installed | grep kmod-xtables-addons-

Elle vous donnera cette liste, un par kernel installé. Usuellement Fedora essaye de garder les trois kernels les plus récents. Dans notre cas, pour le kernel de l'exemple, nous avons l'entrée:

kmod-xtables-addons-5.17.6-300.fc36.x86_64.x86_64     3.20-1.fc36      @@commandline

Pour le désinstaller, entrez la commande:

dnf remove kmod-xtables-addons-5.17.6-300.fc36.x86_64.x86_64


Remarque: Lors du passage de versions de Fedora, il m'est arrivé que cette compilation, effectuée pendant la migration, soit incorrecte; dans ce cas, le lancement d'IPTABLES est en erreur, non effectif. Ceci m'est arrivé lors du passage de Fedora 34 à Fedora 35 et aussi pour le passage suivant, de Fedora 35 à Fedora 36. La solution est simple. Il faut désinstaller le module "kmod-xtables-addons" correspondant au nouveau kernel et ensuite relancer sa compilation comme décrit ci-dessus.

Selon l'exemple ci-dessus, nous avons les deux commandes suivantes à lancer successivement:

dnf remove kmod-xtables-addons-5.17.6-300.fc36.x86_64.x86_64
/usr/sbin/akmods --force --kernels 5.17.6-300.fc36.x86_64

Il nous reste à relancer notre firewall IPTABLES.


Il existe un service qui surveille si la compilation s'est effectuée sinon elle l'effectue. Elle concerne le "kernel" actif, lors du démarrage ou en cours d'exécution.

Pour l'activer:

systemctl enable akmods.service

Pour le lancer:

systemctl start akmods.service


Géolocalisation

Un des modules sert au filtrage IPTABLES sur base de la géolocalisation. Mais cette base de géolocalisation doit être initialisée et entretenue.

En premier, il faut créer un répertoire où se placera la base de géolocalisation:

mkdir /usr/share/xt_geoip

Dans l'article concernant la Géolocalisation IP, nous avons créé un compte sur le site de MaxMind et obtenu un n° de licence. Ce dernier va nous servir dans le script qui suit.

Ce script va créer et mettre à jour périodiquement la base de données de géolocalisation IP. Dans ce script, il faut adapter la variable LIC avec le n° de votre licence.

Créer le script nommé, par exemple, "xtables.bat" dans le répertoire "/manager/geoip":


#!/bin/bash
# *********************************************
# n° de licence à adapter
LIC=XXXXXXXXX
# *********************************************
MANAGER=/manager/geoip
cd $MANAGER
# récupération de l'entête du fichier à télécharger
/usr/bin/curl -I "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country-CSV&license_key=${LIC}&suffix=zip"  > head.log
# extraire de l'entête, le nom du répertoire après décompression.
/usr/bin/grep content-disposition head.log > head.tmp
/usr/bin/sed -i 's/content-disposition: attachment; filename=/ /g' head.tmp
/usr/bin/sed -i 's/.zip/ /g' head.tmp
FILE=`/usr/bin/cat head.tmp | /usr/bin/awk '{printf("%s",$1)}'`
#
echo $FILE
# télécharger le fichier
/usr/bin/curl "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country-CSV&license_key=${LIC}&suffix=zip" --output geoip.zip
/usr/bin/unzip geoip.zip
# renommer le nom du répertoire décompressé
/usr/bin/rm -fr GeoLite2
/usr/bin/mv $FILE GeoLite2
# nettoyage
/usr/bin/rm -f head.tmp
# création de la base
/usr/libexec/xtables-addons/xt_geoip_build_maxmind -D /usr/share/xt_geoip -S ${MANAGER}/GeoLite2

Le rendre exécutable:

chmod 700 xtables.bat

Ajouter une entrée dans le "cron" du système afin de mettre à jour cette base une fois par semaine:

# GEOIP
5 23 * * 0 root /manager/geoip/xtables.bat > /manager/geoip/xtables.log


Exemples de commandes IPTABLES

Trois exemples:

  • Cette partie bloque tout trafic provenant de la Chine et de la Russie. La première commande journalise cette action; la seconde bloque la source.
-A INPUT -m geoip --src-cc CN,RU -j LOG --log-level debug --log-prefix "DROP(CN-RU):"
-A INPUT -m geoip --src-cc CN,RU -j DROP
  • Cette partie bloque et journalise les connexions SSH (port 22) si elle ne sont pas originaires de la Belgique.
-A INPUT -m geoip ! --src-cc BE -p tcp -m tcp --dport 22 -j LOG --log-level debug --log-prefix "BE-SSH:"
-A INPUT -m geoip ! --src-cc BE -p tcp -m tcp --dport 22 -j DROP
  • Cette partie bloque le "scanning de port". La première commande journalise cette action; la seconde bloque la source.
-A INPUT -m psd --psd-weight-threshold 5 --psd-hi-ports-weight 3 -j LOG --log-level debug --log-prefix "PORTSCAN(I):"
-A INPUT -m psd --psd-weight-threshold 5 --psd-hi-ports-weight 3 -j DROP
  • On peut combiner cette limitation géographique avec une limitation du trafic (module hashlimit) et à un regroupement de sub-net (option: hashlimit-srcmask) pour la comptabilisation de ce trafic en seconde étape plus restrictive. La première peut limiter une attaque DOS , la seconde une attaque DDOS provenant d'une sous-zone géographique. Au contraire du premier exemple au bloque tout accès à un pays, ces commandes permettent l'accès mais de façon contenue.
-A INPUT -m geoip --src-cc CN,RU -p tcp -m tcp -m hashlimit --hashlimit-above 600/sec --hashlimit-burst 200 --hashlimit-mode dstip,dstport --hashlimit-name limitecnru -j LOG --log-level debug --log-prefix "HASH(CN-RU): "
-A INPUT -m geoip --src-cc CN,RU -p tcp -m tcp -m hashlimit --hashlimit-above 600/sec --hashlimit-burst 200 --hashlimit-mode dstip,dstport --hashlimit-name limitecnru -j DROP
-A INPUT -m geoip --src-cc CN,RU -p tcp -m tcp --syn -m hashlimit --hashlimit-above 600/sec --hashlimit-burst 200 --hashlimit-mode srcip --hashlimit-namesyncnru --hashlimit-htable-size 2097152 --hashlimit-srcmask 24 -j LOG --log-level debug --log-prefix "HASH24(CN-RU): "
-A INPUT -m geoip --src-cc CN,RU -p tcp -m tcp --syn -m hashlimit --hashlimit-above 600/sec --hashlimit-burst 200 --hashlimit-mode srcip --hashlimit-namesyncnru --hashlimit-htable-size 2097152 --hashlimit-srcmask 24 -j DROP


Ces messages peuvent être interceptés par un HIDS par exemple Wazuh pour un traitement plus poussé.




retour au menu d'IPTABLES