Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédente | |||
pratique:informatique:parefeu:start [30/05/2024 08:22] – supprimée - modification externe (Unknown date) 127.0.0.1 | pratique:informatique:parefeu:start [30/05/2024 08:22] (Version actuelle) – ↷ Page déplacée et renommée de pratique:informatique:parefeu à pratique:informatique:parefeu:start Zatalyz | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Pare-feu : Iptables/ | ||
+ | |||
+ | <WRAP center round important 100%> | ||
+ | N' | ||
+ | </ | ||
+ | |||
+ | À la base, mes notes concernaient Fail2ban et iptables, pour des raisons historiques. | ||
+ | |||
+ | Mais il est temps de passer à la suite. À présent c'est nftables qui est là par défaut. Quand à Reaction ben c'est juste sacrément plus clair et sympa que Fail2ban. | ||
+ | |||
+ | Le principal est de bien configurer le pare-feu (iptables/ | ||
+ | |||
+ | La liste des pages liées : | ||
+ | * [[pratique: | ||
+ | * [[pratique: | ||
+ | |||
+ | * [[pratique: | ||
+ | * [[pratique: | ||
+ | * [[pratique: | ||
+ | |||
+ | ===== Scripts et astuces de pare-feu ===== | ||
+ | <WRAP center round todo 60%> | ||
+ | Faudrait que je reprenne et mette à jour... | ||
+ | </ | ||
+ | |||
+ | ==== Lister les occurrences d'ip bannies ==== | ||
+ | < | ||
+ | </ | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * ''< | ||
+ | * '' | ||
+ | * '' | ||
+ | * un dernier sort (avec l’option reverse et l’option number) pour faire un tri inverse par nombre | ||
+ | *''< | ||
+ | |||
+ | Très beau, très simple, fonctionnel. | ||
+ | Mais on va aller plus loin avec un petit cron qui lance de temps en temps une vérification et bannit définitivement les ip qui ont un peu trop essayé. | ||
+ | |||
+ | ==== Script de bannissement définitif ==== | ||
+ | J'ai mis ça dans / | ||
+ | |||
+ | mkdir / | ||
+ | |||
+ | <code bash banip_auto.sh> | ||
+ | #!/bin/bash | ||
+ | # Bannir automatiquement une liste d'ip qui ont abusé. | ||
+ | #fichier de log | ||
+ | folderbanip="/ | ||
+ | badiphuman=" | ||
+ | todayiptable=" | ||
+ | logban=" | ||
+ | |||
+ | ## Liste les ip gênantes, d'une façon lisible pour un humain | ||
+ | # awk ' | ||
+ | cat / | ||
+ | # sauvegarde les règles iptables et ipset actuelles pour comparer | ||
+ | iptables -L -n -v > $todayiptable | ||
+ | ipset list >> $todayiptable | ||
+ | |||
+ | # On alimente le fichier de log | ||
+ | echo "#####" | ||
+ | date >> $logban | ||
+ | ## Si l'ip est revenu plus d'un certain nombre de fois, alors on la sélectionne pour un ban définitif | ||
+ | # lire fichier $badiphuman | ||
+ | cat $badiphuman | while IFS= read -r line; do | ||
+ | tableau=(${line// | ||
+ | number=$(echo $tableau | cut -d ',' | ||
+ | ip=$(echo $tableau | cut -d ',' | ||
+ | #Si l'ip apparait 2 fois ou plus, on la bannit, sinon elle a sa chance | ||
+ | if (($number >= 2)) | ||
+ | then | ||
+ | # on va tester si on a déjà la règle | ||
+ | if grep -q " | ||
+ | then | ||
+ | echo "IP address already blocked, skipping" | ||
+ | else | ||
+ | ipset add blocklist_ip $ip | ||
+ | echo " | ||
+ | fi | ||
+ | else | ||
+ | echo "$ip not blocking for the moment, only $number try" >> $logban | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | #Sauver les modifs | ||
+ | ipset save | ||
+ | netfilter-persistent save | ||
+ | # | ||
+ | |||
+ | </ | ||
+ | |||
+ | Et maintenant un cron, une fois par jour, pour s' | ||
+ | crontab -e | ||
+ | 30 0 * * * / | ||
+ | |||
+ | ==== Bannir des plages d'ip ==== | ||
+ | Parfois des comportements malveillants viennent d'une plage d'ip et pas seulement d'une ip seule. | ||
+ | |||
+ | Il faut des alertes pour les repérer (ou si y'a moyen d' | ||
+ | |||
+ | La notation d'une plage d'ip est de la forme x.x.x.0/24. Enfin, les chiffres au bout varient parfois... Comment être sûr de son coup ? | ||
+ | |||
+ | Installer '' | ||
+ | |||
+ | < | ||
+ | Address: | ||
+ | Netmask: | ||
+ | Wildcard: | ||
+ | => | ||
+ | Network: | ||
+ | HostMin: | ||
+ | HostMax: | ||
+ | Broadcast: 87.120.84.255 | ||
+ | Hosts/Net: 254 Class A | ||
+ | </ | ||
+ | |||
+ | '' | ||
+ | |||
+ | < | ||
+ | % ipcalc 87.120.84.0/ | ||
+ | Address: | ||
+ | Netmask: | ||
+ | Wildcard: | ||
+ | => | ||
+ | Network: | ||
+ | HostMin: | ||
+ | HostMax: | ||
+ | Broadcast: 87.120.84.255 | ||
+ | Hosts/Net: 254 Class A</ | ||
+ | |||
+ | Ici '' | ||
+ | |||
+ | ipset add blocklist_ip 87.120.84.0/ | ||
+ | |||
+ | et '' | ||
+ | |||
+ | ==== D'où viennent les attaques ? ==== | ||
+ | Là c'est de la curiosité car je ne pense pas que je puisse y faire grand chose. Mais, quand même, ça permet de voir la pertinence (ou pas) de bloquer un pays. | ||
+ | |||
+ | En premier, récupérer les logs montrant une " | ||
+ | grep " | ||
+ | |||
+ | Ensuite je me suis envoyée ce fichier via [[pratique: | ||
+ | |||
+ | Et après, j'ai mouliné ce fichier appelé " | ||
+ | < | ||
+ | # Savoir d'où vienne les méchantes ip | ||
+ | cat badip.txt | while IFS= read -r line; do | ||
+ | tableau=(${line// | ||
+ | geo=$(geoiplookup $tableau) | ||
+ | echo $geo >> country.txt | ||
+ | cat country.txt | sort|uniq -c | sort > finalbadip.txt | ||
+ | done | ||
+ | </ | ||
+ | |||
+ | Ce qui donne lors de ce test, 90 tentatives d' | ||
+ | |||
+ | Si je ne me vois pas bloquer ces pays (même la Chine), je me demande s'il y a moyen de filtrer quel pays a le droit de tester certaines actions, comme se connecter à un compte mail. | ||
+ | |||
+ | ==== Une alternative via systemd ==== | ||
+ | Pour les IPs qui ont le plus chercher à se connecter au serveur mail sans succès, pour une journée donnée : | ||
+ | journalctl --since=2023-10-06 --until=2023-10-07 --grep=' | ||
+ | |||
+ | Et juste pour le jour même : | ||
+ | journalctl --since=today --grep=' | ||
+ | |||
+ | {{tag> | ||
+ | |||
+ | [[https:// | ||
+ | |||