125 votes

Comment montrer toutes les IP interdites avec fail2ban ?

Quand je lance cette commande fail2ban-client status sshd J'ai eu ça :

Status for the jail: sshd
|- Filter
|  |- Currently failed: 1
|  |- Total failed:     81
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 2
   |- Total banned:     8
   `- Banned IP list:   218.65.30.61 116.31.116.7

Il ne montre que deux IP dans la liste des IP interdites au lieu de 8, comme le dit Total Banned.

Bien que je fasse tail -f /var/log/auth.log J'ai eu ça :

Mar 29 11:08:40 DBSERVER sshd[29163]: error: maximum authentication attempts exceeded for root from 218.65.30.61 port 50935 ssh2 [preauth]
Mar 29 11:08:40 DBSERVER sshd[29163]: Disconnecting: Too many authentication failures [preauth]
Mar 29 11:08:40 DBSERVER sshd[29163]: PAM 5 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.65.30.61  user=root
Mar 29 11:08:40 DBSERVER sshd[29163]: PAM service(sshd) ignoring max retries; 6 > 3
Mar 29 11:08:44 DBSERVER sshd[29165]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.65.30.61  user=root
Mar 29 11:08:46 DBSERVER sshd[29165]: Failed password for root from 218.65.30.61 port 11857 ssh2
Mar 29 11:09:01 DBSERVER CRON[29172]: pam_unix(cron:session): session opened for user root by (uid=0)
Mar 29 11:09:01 DBSERVER CRON[29172]: pam_unix(cron:session): session closed for user root
Mar 29 11:10:01 DBSERVER CRON[29226]: pam_unix(cron:session): session opened for user root by (uid=0)
Mar 29 11:10:02 DBSERVER CRON[29226]: pam_unix(cron:session): session closed for user root
Mar 29 11:10:18 DBSERVER sshd[29238]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=113.122.43.185  user=root
Mar 29 11:10:20 DBSERVER sshd[29238]: Failed password for root from 113.122.43.185 port 46017 ssh2
Mar 29 11:10:33 DBSERVER sshd[29238]: message repeated 5 times: [ Failed password for root from 113.122.43.185 port 46017 ssh2]
Mar 29 11:10:33 DBSERVER sshd[29238]: error: maximum authentication attempts exceeded for root from 113.122.43.185 port 46017 ssh2 [preauth]
Mar 29 11:10:33 DBSERVER sshd[29238]: Disconnecting: Too many authentication failures [preauth]
Mar 29 11:10:33 DBSERVER sshd[29238]: PAM 5 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=113.122.43.185  user=root
Mar 29 11:10:33 DBSERVER sshd[29238]: PAM service(sshd) ignoring max retries; 6 > 3
Mar 29 11:11:36 DBSERVER sshd[29245]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.31.116.7  user=root
Mar 29 11:11:38 DBSERVER sshd[29245]: Failed password for root from 116.31.116.7 port 24892 ssh2
Mar 29 11:11:43 DBSERVER sshd[29245]: message repeated 2 times: [ Failed password for root from 116.31.116.7 port 24892 ssh2]
Mar 29 11:11:43 DBSERVER sshd[29245]: Received disconnect from 116.31.116.7 port 24892:11:  [preauth]
Mar 29 11:11:43 DBSERVER sshd[29245]: Disconnected from 116.31.116.7 port 24892 [preauth]
Mar 29 11:11:43 DBSERVER sshd[29245]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.31.116.7  user=root
Mar 29 11:12:39 DBSERVER sshd[29247]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.31.116.7  user=root
Mar 29 11:12:41 DBSERVER sshd[29247]: Failed password for root from 116.31.116.7 port 26739 ssh2
Mar 29 11:12:45 DBSERVER sshd[29247]: message repeated 2 times: [ Failed password for root from 116.31.116.7 port 26739 ssh2]
Mar 29 11:12:45 DBSERVER sshd[29247]: Received disconnect from 116.31.116.7 port 26739:11:  [preauth]
Mar 29 11:12:45 DBSERVER sshd[29247]: Disconnected from 116.31.116.7 port 26739 [preauth]
Mar 29 11:12:45 DBSERVER sshd[29247]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.31.116.7  user=root
Mar 29 11:13:41 DBSERVER sshd[29249]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.31.116.7  user=root
Mar 29 11:13:43 DBSERVER sshd[29249]: Failed password for root from 116.31.116.7 port 27040 ssh2

Interdiction d'IP, mais on essaie toujours.

Cependant, lorsque je vérifie avec sudo iptables -L INPUT -v -n J'ai eu ça :

Chain INPUT (policy ACCEPT 228 packets, 18000 bytes)
 pkts bytes target     prot opt in     out     source               destination
 6050  435K f2b-sshd   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 22

Qu'est-ce que je fais de mal ici ?

Comment puis-je afficher la liste de toutes les IP interdites ?

3 votes

"Total" signifie le nombre total de personnes interdites, et non le nombre total de personnes actuellement interdites. Le seul endroit où vous trouverez des adresses précédemment bannies est dans les journaux (si vous les avez conservés).

1 votes

Dans jail.local ou jail.conf, il semble que vous ayez une petite bantime . Faites-le 200m ou même plus, puis faire sudo service fail2ban restart et ensuite fail2ban-client status sshd

78voto

NA AE Points 709

Veuillez garder à l'esprit que le bannissement d'IP par fail2ban est de nature temporaire.

Le meilleur moyen de consulter la liste complète des adresses IP bloquées est de vérifier le fichier journal :

sudo zgrep 'Ban' /var/log/fail2ban.log*

Editar : cette réponse a déjà été recherchée 'Ban:' mais même en 2013, la source ne comporte pas de deux-points ( réf. ).

La commande suivante peut également vous donner une liste propre de règles d'entrée :

sudo iptables -L INPUT -v -n | less

10 votes

Il n'y a pas de deux-points dans mes fichiers logs (il a donc fallu ajuster le grep). Je laisse un commentaire plutôt qu'une modification, car je ne sais pas si c'est très répandu ou si c'est un changement récent.

0 votes

Gardez à l'esprit que la liste des règles iptables ne fonctionne que si iptables est votre action de bannissement. Parfois, ce n'est pas le cas.

0 votes

@kwah même chose pour moi, pas de deux points dans le fichier journal. Il s'agit probablement d'un changement récent dans la sortie, ou d'une erreur de frappe.

38voto

Marc Compere Points 411

Similaire à NA AE ci-dessus avec kwaa incluant les commentaires, cela liste toutes les IPs :

sudo zgrep 'Ban' /var/log/fail2ban.log*

mais cette sortie a tellement de lignes. Ceci compte les lignes de toutes les IPs bannies (et probablement non bannies) enregistrées :

sudo zgrep 'Ban' /var/log/fail2ban.log* | wc -l

Le résultat de la commande ci-dessus (avec le nombre de lignes) doit correspondre au nombre de "Total Banned" dans la sortie d'état de fail2ban :

fail2ban-client status sshd

testé dans Ubuntu 18.04.1 LTS.

Ma sortie de la ligne 'wc -l' :

7244

Et d'après le statut de fail2ban, le même numéro 7244 est vérifié :

Status for the jail: sshd
|- Filter
|  |- Currently failed: 7
|  |- Total failed: 49457
|  `- File list:    /var/log/auth.log
`- Actions
   |- Currently banned: 9
   |- Total banned: 7244
   `- Banned IP list:   [...]

0 votes

Le décompte est intéressant. Pouvez-vous modifier cette commande pour compter le nombre de bannissements sur une IP particulière et les trier par ordre décroissant ? Elle affichera les récidivistes.

24voto

Faka Points 131

Vous pouvez utiliser sqlite3 pour faire des statistiques en interrogeant bips tableau des /var/lib/fail2ban/fail2ban.sqlite3 (si votre version de fail2ban < v0.11.1 le changement bips a bans ).

Montre toutes les adresses IP et leur prison :

sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "select ip,jail from bips"

Montre toutes les adresses IP uniques :

sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "select distinct ip from bips"

Afficher toutes les adresses IP uniques dans sshd la prison :

sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "select distinct ip from bips where jail='sshd'"

Afficher les 20 adresses IP les plus interdites dans toutes les prisons :

sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "select jail,ip,count(*) as count from bips group by ip order by count desc limit 20"

Si vous voulez voir la structure et toutes les données de ce fichier dans une application GUI, je recommande DB Browser For Sqlite .


A partir de la version v0.11.1 fail2ban a changé la structure de sa base de données. J'exécute cette commande dans ma machine Linux pour voir quelle est la différence (Fail2Ban v0.11.1 Ubuntu 20.04 )

sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 '.schema'

Une partie de la sortie est :

CREATE TABLE bans(jail TEXT NOT NULL, ip TEXT, timeofban INTEGER NOT NULL, bantime INTEGER NOT NULL, bancount INTEGER NOT NULL default 1, data JSON, FOREIGN KEY(jail) REFERENCES jails(name) );
CREATE TABLE bips(ip TEXT NOT NULL, jail TEXT NOT NULL, timeofban INTEGER NOT NULL, bantime INTEGER NOT NULL, bancount INTEGER NOT NULL default 1, data JSON, PRIMARY KEY(ip, jail), FOREIGN KEY(jail) REFERENCES jails(name) );

2 votes

C'est SELECT jail,ip,timeofban FROM bans maintenant (2020 oct), si vous voulez sauter data qui contient le journal complet correspondant.

17voto

Dmitry Naumov Points 21

Il y a le banned (v0.11.2) :

fail2ban-client banned

Exemple de sortie :

{{{sshd}} : []}, {'apache-badbots' : []}, {'apache-auth' : ['XXX.24.23.164', 'XXX.155.205.108', 'XXX.62.130.158']}]

4 votes

J'obtiens l'erreur suivante : [8760]: ERROR NOK: ('Invalid command',) Invalid command

1 votes

Vous utilisez peut-être une version plus ancienne. J'ai vérifié avec la v0.11.2.

2 votes

J'ai essayé avec la version 0.11.1 et j'ai également obtenu une commande invalide, il semble donc que cette commande ait été introduite dans la version 0.11.2.

15voto

morewry Points 1112

Pour voir la ligne complète d'iptables :

sudo iptables -L -n | awk '$1=="REJECT" && $4!="0.0.0.0/0"'

Pour afficher uniquement l'adresse IP :

sudo iptables -L -n | awk '$1=="REJECT" && $4!="0.0.0.0/0" {print $4}'

Vous pouvez remplacer "REJECT" par "DROP", selon votre cas.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X