« LINUX:XTABLES-ADDONS » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 55 : | Ligne 55 : | ||
Un des modules sert au filtrage IPTABLES sur base de la 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. | 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: | En premier, il faut créer un répertoire où se placera la base de géolocalisation: | ||
mkdir /usr/share/xt_geoip | mkdir /usr/share/xt_geoip | ||
Dans l'article concernant la [[LINUX:Géolocalisation IP|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 | #!/bin/bash | ||
# ********************************************* | |||
# ********************************************* | # n° de licence à adapter | ||
# n° de licence à adapter | LIC='''XXXXXXXXX''' | ||
LIC=XXXXXXXXX | # ********************************************* | ||
# ********************************************* | MANAGER=/manager/geoip | ||
cd $MANAGER | cd $MANAGER | ||
# récupération de l'entête du fichier à télécharger | # 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 | /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. | # 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/grep content-disposition head.log > head.tmp | ||
/usr/bin/sed -i 's/content-disposition: attachment; filename=/ /g' head.tmp | /usr/bin/sed -i 's/content-disposition: attachment; filename=/ /g' head.tmp | ||
/usr/bin/sed -i 's/.zip/ /g' head.tmp | /usr/bin/sed -i 's/.zip/ /g' head.tmp | ||
FILE=`/usr/bin/cat head.tmp | /usr/bin/awk '{printf("%s",$1)}'` | FILE=`/usr/bin/cat head.tmp | /usr/bin/awk '{printf("%s",$1)}'` | ||
# | # | ||
echo $FILE | echo $FILE | ||
# télécharger le fichier | # 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/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 | /usr/bin/unzip geoip.zip | ||
# renommer le nom du répertoire décompressé | # renommer le nom du répertoire décompressé | ||
/usr/bin/rm -fr GeoLite2 | /usr/bin/rm -fr GeoLite2 | ||
/usr/bin/mv $FILE GeoLite2 | /usr/bin/mv $FILE GeoLite2 | ||
# nettoyage | # nettoyage | ||
/usr/bin/rm -f head.tmp | /usr/bin/rm -f head.tmp | ||
# création de la base | # création de la base | ||
/usr/libexec/xtables-addons/xt_geoip_build_maxmind -D /usr/share/xt_geoip -S ${MANAGER}/GeoLite2 | /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= | |||
Deux 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 -j LOG --log-level debug --log-prefix "DROP(CN-RU):" | |||
-A INPUT -m geoip --src-cc CN,RU -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 | |||
Version du 4 janvier 2021 à 23:31
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.9.16-200.fc33.x86_64", le répertoire se nommera:
/usr/lib/modules/5.9.16-200.fc33.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.9.16-200.fc33.x86_64 #1 SMP Mon Dec 21 14:08:22 UTC 2020 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.
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.9.16-200.fc33.x86_64", la commande sera:
/usr/sbin/akmods --force --kernels 5.9.9-200.fc33.x86_64
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
Deux 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 -j LOG --log-level debug --log-prefix "DROP(CN-RU):" -A INPUT -m geoip --src-cc CN,RU -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