Fail2ban et ssh

On y discute de tout, ou presque...
Répondre
Avatar de l’utilisateur
franb
Membre
Membre
Messages : 143
Inscription : 04 nov. 2017, 09:41
Status : Hors-ligne

Je l'ai dit sur debian-fr mais j'ai plus d'accroche avec ici même si c'est un peu endormi ces derniers temps.

Sur un de mes serveurs, j'avais des logs remplis de connexions SSH indues. En gros sans fail2ban ça allait jusqu'à 6000 et plus par jour de connexions invalides. Qvec fail2ban et les réglages initiaux c'est tombé à 2000-3000 connexions invalides par jour. J'ai constaté que beaucoup venaient d'un même réseau, j'ai donc fait une prison dédiée aux réseaux IP/24:

Code : Tout sélectionner


[sshd-subnet]
enabled = true
filter = sshd
backend = systemd
journalmatch = _SYSTEMD_UNIT=sshd.service + _COMM=sshd

maxretry = 10
findtime = 1h
bantime = 7d

action = nftables-subnet

logpath = %(sshd_log)s

Le résultat est assez spectaculaire:
au bout de 20 jours:

Code : Tout sélectionner

[...]
Status for the jail: sshd
|- Filter
|  |- Currently failed:	5
|  |- Total failed:	16086
|  `- Journal matches:	_SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned:	4
   |- Total banned:	673
   `- Banned IP list:	195.178.110.30 2.57.122.177 156.245.239.180 209.227.244.120
Status for the jail: sshd-subnet
|- Filter
|  |- Currently failed:	15
|  |- Total failed:	15032
|  `- Journal matches:	_SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned:	136
   |- Total banned:	373
   `- Banned IP list:	136.49.53.226 60.199.224.2 119.209.12.20 150.5.131.119 122.10.115.18 102.140.97.134 185.2.101.67 4.210.91.174 74.91.224.229 43.133.148.170 103.13.206.100 103.216.145.2 37.46.18.151 20.244.20.183 135.13.28.35 47.251.112.115 152.42.240.74 68.211.177.55 211.37.174.62 105.27.148.94 200.39.46.41 191.205.201.252 175.107.32.186 139.99.38.177 36.79.232.215 85.198.99.104 94.230.136.33 186.122.177.140 156.239.253.250 178.238.236.80 165.154.227.158 103.186.101.231 202.93.224.90 61.76.112.4 156.232.13.161 152.32.189.59 54.37.10.124 68.210.120.110 98.70.127.17 2.27.20.149 174.35.25.181 211.254.212.59 197.248.207.139 180.213.44.242 223.197.186.7 198.98.62.211 93.88.205.191 45.64.74.51 201.249.87.203 164.92.161.148 59.126.224.134 101.32.242.137 103.250.11.80 197.225.146.23 189.217.130.86 189.203.163.10 64.226.107.125 134.112.56.47 103.20.223.56 152.32.252.65 203.175.125.130 103.200.28.211 37.143.61.84 43.164.133.108 45.196.236.141 103.166.103.173 129.121.37.21 43.164.190.64 72.240.125.133 114.111.53.214 188.166.215.16 196.196.150.6 50.116.72.11 58.229.141.26 45.187.108.43 103.179.199.13 189.17.134.242 91.92.40.12 82.65.16.176 163.227.52.50 114.34.130.221 144.31.193.216 186.148.224.183 152.32.171.99 180.247.61.189 165.154.36.71 172.174.72.225 130.131.220.95 23.91.97.170 103.186.139.149 66.85.30.4 190.128.201.18 85.198.19.241 78.109.200.147 168.144.92.125 186.248.197.77 160.119.69.14 113.161.222.150 190.244.39.224 77.105.161.120 202.51.214.99 36.93.249.106 14.63.196.175 170.106.105.73 43.160.233.207 193.194.91.218 131.100.242.102 211.22.166.107 45.95.233.88 43.153.206.40 211.46.188.16 58.152.42.174 91.151.88.168 43.157.163.155 114.10.47.235 36.69.144.192 80.94.92.177 36.95.194.50 14.103.111.16 201.186.40.250 138.113.23.170 41.82.50.218 103.186.31.66 102.23.122.235 103.86.180.10 103.143.231.2 45.43.60.220 167.99.66.42 103.187.147.165 103.200.25.79 103.200.23.154 92.118.39.62 49.0.24.107 148.66.132.204 43.243.142.42 164.152.250.192
et surtout

Code : Tout sélectionner

$ for i in $(seq 1 30) ; do echo -n $i" "; journalctl --since -$(expr $i + 1)days --until -${i}days -u ssh | grep -c Invalid; done | tee installation_sshd_subnet
tee: installation_sshd_subnet: Permission denied
1 519
2 396
3 587
4 629
5 615
6 533
7 482
8 414
9 480
10 551
11 630
12 408
13 548
14 483
15 478
16 620
17 655
18 540
19 700
20 500
21 1243
22 1290
23 1677
24 2233
25 2224
26 1670
27 2001
28 1607
29 1230
30 1244
$
qui montre que les connexions invalides ont été divisées en gros par 3. Et mes logs aussi :-)
Avatar de l’utilisateur
diesel
Membre
Membre
Messages : 377
Inscription : 29 oct. 2022, 22:43
Status : Hors-ligne

Sur mes serveurs, il n'y a qu'une seule machine qui peut se connecter en ssh, la mienne (qui est sur le même réseau local).

Sur ce réseau, tout le trafic (sauf ce qui va sur internet et qui s'adresse à des serveurs en ipv4) est en ipv6.

Sur mes serveur, j'utilise netfilter programmé à l'aide de nftables et j'ai une règle qui jette purement et simplement toute tentative de connexion sur le port 22 venant d'ailleurs que mon réseau local (et aucun paquet d'erreur ; c'est comme si le serveur n'existait pas).

Pour le reste, pour filtrer l'accès ssh à partir de mon réseau local, j'ai installé sur le serveur la clé publique de ma machine et interdit la connexion par mot de passe.

Simple et efficace.

Amicalement.

Jean-Marie
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 6577
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors-ligne

Effectivement , pour décourager les scans pour les bots, il est préférable que le serveur ne réponde pas (pas de code d'erreur). Si le bot a une réponse, il s'accroche.
Répondre