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:// | ||
| + | |||