SSH : Multiple tentatives de connexion malgré fail2ban

Bonjour,

Mon serveur YunoHost

Matériel: Dédié distant
Version de YunoHost: 4.3.6.3
J’ai accès à mon serveur : En SSH | Par la webadmin
Êtes-vous dans un contexte particulier ou avez-vous effectué des modificiations particulières sur votre instance ? : oui
Si oui, expliquer: AllowUsers pour n’autoriser qu’un utilisateur à se co en SSH / authent uniquement par clef / Port modifié.

Depuis quelques temps, j’ai des IP qui tentent de se co en SSH plusieurs milliers voir dizaines de milliers de fois par jour.

Ci-dessous, un extrait de logwatch pour la journée d’avant hier (hier c’était plus calme, moins de 10K tentatives D:) :

--------------------- SSHD Begin ------------------------

Negotiation failed:
Protocol major versions differ: 2 Times

Illegal users from:
96.43.86.125: 36 Times
106.10.122.53: 628 Times
114.113.233.194: 827 Times
162.218.126.136: 533 Times
164.92.158.93: 21533 Times
172.104.159.48 (academyforinternetresearch.org): 1 Time
178.124.171.187 (mm-187-171-124-178.static.mgts.by): 4678 Times
204.12.196.66: 22106 Times

Ah oui. Certains tentent une fois toutes les 3 ou 4 secondes H24. :smiley: Certaines reviennent même à la charge plusieurs jours de suite.

Petit coup de GeoIP : Pas une IP française, notre top3 est constitué d’adresse US/NL/BY. Aucun des pays depuis lesquels je suis susceptible de me connecter :smiley:

Vérifions notre jail SSH :

~# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed:	11
|  |- Total failed:	128301
|  `- File list:	/var/log/auth.log
`- Actions
   |- Currently banned:	15
   |- Total banned:	15
   `- Banned IP list:	109.74.204.123 114.113.233.194 141.101.201.68 159.223.233.224 20.93.238.45 82.165.155.100 88.80.186.144 106.10.122.53 217.18.239.61 162.218.126.136 138.68.12.109 96.43.86.125 164.92.158.93 204.12.196.66 178.124.171.187

Mouais, nos adresses y sont bien, et le service est actif :


# service fail2ban status
● fail2ban.service - Fail2Ban Service
   Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2022-07-05 00:55:30 CEST; 1 weeks 2 days ago
     Docs: man:fail2ban(1)
 Main PID: 528 (fail2ban-server)
    Tasks: 27 (limit: 4605)
   Memory: 39.9M
   CGroup: /system.slice/fail2ban.service
           └─528 /usr/bin/python3 /usr/bin/fail2ban-server -xf start

Ce qui m’amène à cette question : pourquoi logwatch me renvoie-t-il autant de tentatives de connexion ? Les tentatives ne devraient-elles pas être immédiatement droppées par fail2ban ?

Si je check un peu les logs et que je regarde disons la dernière adresse en 204…, je vois que ça essaie un peu tout et n’importe quoi comme user (en plus des traditionnels root, postfix, etc…). Extrait :

~# grep '204.12.196.66' /var/log/auth* | grep Invalid | tail
/var/log/auth.log:Jul 12 23:48:40 monserveur sshd[4831]: Invalid user daeryuksocho from 204.12.196.66 port 33726
/var/log/auth.log:Jul 12 23:48:43 monserveur sshd[4838]: Invalid user brian from 204.12.196.66 port 34982
/var/log/auth.log:Jul 12 23:48:48 monserveur sshd[4851]: Invalid user yyhuang from 204.12.196.66 port 37466
/var/log/auth.log:Jul 12 23:48:51 monserveur sshd[4860]: Invalid user zdcui from 204.12.196.66 port 38712
/var/log/auth.log:Jul 12 23:48:54 monserveur sshd[4866]: Invalid user dyj from 204.12.196.66 port 39960
/var/log/auth.log:Jul 12 23:48:59 monserveur sshd[4876]: Invalid user ubstep from 204.12.196.66 port 42458
/var/log/auth.log:Jul 12 23:49:04 monserveur sshd[5017]: Invalid user student3 from 204.12.196.66 port 44950
/var/log/auth.log:Jul 12 23:49:07 monserveur sshd[5023]: Invalid user jzhuang from 204.12.196.66 port 46194
/var/log/auth.log:Jul 12 23:49:10 monserveur sshd[5031]: Invalid user lujiangjiao from 204.12.196.66 port 47440
/var/log/auth.log:Jul 12 23:49:15 monserveur sshd[5043]: Invalid user neil from 204.12.196.66 port 49932

F2B semble bien reconnaitre l’IP comme bannie :

~# grep '204.12.196.66' /var/log/fail2ban.log
2022-07-12 23:48:52,046 fail2ban.actions        [528]: WARNING [sshd] 204.12.196.66 already banned
2022-07-12 23:48:54,159 fail2ban.filter         [528]: INFO    [sshd] Found 204.12.196.66 - 2022-07-12 23:48:54
2022-07-12 23:48:56,948 fail2ban.filter         [528]: INFO    [sshd] Found 204.12.196.66 - 2022-07-12 23:48:56
2022-07-12 23:48:59,356 fail2ban.filter         [528]: INFO    [sshd] Found 204.12.196.66 - 2022-07-12 23:48:59
2022-07-12 23:49:02,327 fail2ban.filter         [528]: INFO    [sshd] Found 204.12.196.66 - 2022-07-12 23:49:02
2022-07-12 23:49:04,911 fail2ban.filter         [528]: INFO    [sshd] Found 204.12.196.66 - 2022-07-12 23:49:04
2022-07-12 23:49:07,597 fail2ban.filter         [528]: INFO    [sshd] Found 204.12.196.66 - 2022-07-12 23:49:07
2022-07-12 23:49:10,224 fail2ban.filter         [528]: INFO    [sshd] Found 204.12.196.66 - 2022-07-12 23:49:10
2022-07-12 23:49:12,879 fail2ban.filter         [528]: INFO    [sshd] Found 204.12.196.66 - 2022-07-12 23:49:12
2022-07-12 23:49:15,944 fail2ban.filter         [528]: INFO    [sshd] Found 204.12.196.66 - 2022-07-12 23:49:15

Ton firewall est actifs et les ips listées dedans ?

iptables-save
yunohost-firewall: 
  configuration: unknown
  description: Manages open and close connection ports to services
  last_state_change: 2022-07-05 00:55:47
  start_on_boot: enabled
  status: running

Un extrait rapide :

~# iptables-save | grep '204.12.196.66'
-A f2b-sshd -s 204.12.196.66/32 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -m multiport --dports 25,587,143,993,110,995 -j f2b-postfix-sasl
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -p tcp -m multiport --dports 25,587 -j f2b-postfix

Est-ce que tu as changé ton port SSH sans utiliser le paramètre yunohost dédiée?

Au départ oui, puis j’ai utilisé la ligne de commande quand vous l’avez mis en place.

D’ailleurs quand je tape yunohost settings get security.ssh.port, j’ai bien le bon port qui est renvoyé.

Je vais refaire un yunohost settings set security.ssh.port -v xxxxx

As-tu besoin du contenu de /etc/ssh/sshd_config ?

Bon, j’ai toujours la même chose dans iptables-save malgré avoir refait yunohost settings set security.ssh.port -v <new_ssh_port_number>

Je vais relancer les services F2B et Firewall, pour voir.

+1

Essaie aussi de regénérer la configuration de fail2ban:

yunohost tools regen-conf fail2ban --with-diff --dry-run --force

SI il y a des différences tu peux choisir de les appliquer en lançant:

yunohost tools regen-conf fail2ban --with-diff --force

Note: j’ai vérifié la conf fail2ban aurait dû être mise à jour:

Plop

La config F2B pour SSH était conforme à l’attendue. J’ai vérifié dans le dossier /etc/yunohost/hooks.d/conf_regen, je n’ai qu’un hook qui ne concerne ni F2B ni le service SSH.

J’ai laissé tourner quelques jours, j’ai toujours une IP qui spam les tentatives. Logwatch pour la journée d’hier :


 Illegal users from:
    162.218.126.136: 921 Times

 Login attempted when not in AllowUsers list:
    admin : 1 Time
    games : 1 Time
    postgres : 1 Time
    root : 237 Times

Cette IP a déjà fait plus de 900 tentatives la veille ainsi que les jours précédents.

Si je check la jail SSHD, je retrouve bien cette IP :

# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 9
|  |- Total failed:     134382
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 15
   |- Total banned:     15
   `- Banned IP list:   109.74.204.123 114.113.233.194 141.101.201.68 159.223.233.224 20.93.238.45 82.165.155.100 88.80.186.144 106.10.122.53 217.18.239.61 162.218.126.136 138.68.12.109 96.43.86.125 164.92.158.93 204.12.196.66 178.124.171.187

Petit tail du log de F2B :

# tail fail2ban.log
2022-07-19 12:10:14,721 fail2ban.filter         [528]: INFO    [sshd] Found 162.218.126.136 - 2022-07-19 12:10:14
2022-07-19 12:11:25,592 fail2ban.filter         [528]: INFO    [sshd] Found 162.218.126.136 - 2022-07-19 12:11:25
2022-07-19 12:11:25,883 fail2ban.actions        [528]: WARNING [sshd] 162.218.126.136 already banned
2022-07-19 12:12:35,587 fail2ban.filter         [528]: INFO    [sshd] Found 162.218.126.136 - 2022-07-19 12:12:35
2022-07-19 12:13:45,784 fail2ban.filter         [528]: INFO    [sshd] Found 162.218.126.136 - 2022-07-19 12:13:45
2022-07-19 12:14:55,063 fail2ban.filter         [528]: INFO    [sshd] Found 162.218.126.136 - 2022-07-19 12:14:55
2022-07-19 12:16:04,667 fail2ban.filter         [528]: INFO    [sshd] Found 162.218.126.136 - 2022-07-19 12:16:04
2022-07-19 12:17:13,786 fail2ban.filter         [528]: INFO    [sshd] Found 162.218.126.136 - 2022-07-19 12:17:13
2022-07-19 12:18:23,676 fail2ban.filter         [528]: INFO    [sshd] Found 162.218.126.136 - 2022-07-19 12:18:23
2022-07-19 12:19:33,522 fail2ban.filter         [528]: INFO    [sshd] Found 162.218.126.136 - 2022-07-19 12:19:33

L’IP est bien à la fois found à chaque tentatives, et already banned (ligne 3 du log), pourtant les tentatives continuent à tomber (j’ai fait mon tail à 12H20). Il semble y avoir ~1 minute et 10 secondes entre chaque tentatives, probablement pour berner un F2B qui serait réglé sur 1 minute.

Les tentatives sont faites avec un panel d’users bien plus large que les user du system (root, postfix, etc…) :


/var/log# grep 'invalid user' auth.log | tail
Jul 19 12:14:55 monserver sshd[14169]: Connection closed by invalid user db 162.218.126.136 port 46520 [preauth]
Jul 19 12:16:04 monserver sshd[14581]: Connection closed by invalid user user14 162.218.126.136 port 52282 [preauth]
Jul 19 12:17:14 monserver sshd[14860]: Connection closed by invalid user mxh 162.218.126.136 port 58460 [preauth]
Jul 19 12:18:23 monserver sshd[15774]: Connection closed by invalid user wangkun 162.218.126.136 port 36098 [preauth]
Jul 19 12:19:33 monserver sshd[15983]: Connection closed by invalid user rdp 162.218.126.136 port 42060 [preauth]
Jul 19 12:20:43 monserver sshd[16215]: Connection closed by invalid user miseq01 162.218.126.136 port 48038 [preauth]
Jul 19 12:21:52 monserver sshd[16424]: Connection closed by invalid user zhengww 162.218.126.136 port 53976 [preauth]
Jul 19 12:23:01 monserver sshd[16750]: Connection closed by invalid user yangbo 162.218.126.136 port 59868 [preauth]
Jul 19 12:24:11 monserver sshd[17057]: Connection closed by invalid user jkchen 162.218.126.136 port 37524 [preauth]
Jul 19 12:25:21 monserver sshd[17288]: Connection closed by invalid user root 162.218.126.136 port 43444 [preauth]

Je soupçonne l’attaquant d’effectuer ses tentatives avec une quelconque database qui aurait fuitée.

Voici ma config /etc/ssh/sshd_config : PrivateBin (j’ai caviardé le port SSH (différent de 22) et le AllowUsers)

Je veux bien que ta config f2b soient celles attendues, mais la règle iptables montre que c’est le port 22 qui est bloqué pas ton port personnalisé. Du coup je me demande ce qu’il se passe.

Vérifies que le port sshd est bien le bon dans:

cat /etc/fail2ban/jail.d/yunohost-jails.conf

Bon, histoire d’être certain que tous les services démarrent bien et aient la bonne config, tout ça, j’ai rebooté le serveur.

  • C’est bien mon port modifié qui ressort et non le 22 avec cat /etc/fail2ban/jail.d/yunohost-jails.conf
[sshd]
port = xxxxx
enabled = true
  • La ligne qui nous intéresse dans la sortie d’iptables-save renvoie toujours le port 22 :
# iptables-save | grep ssh
:f2b-sshd - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd

Note : Dans le dossier /etc/fail2ban/jail.d/, j’ai trouvé un fichier yunohost-jails.local qui n’a pas la ligne port=xxxxx sous [sshd]. J’ai tenté de le renommer en .bak et de relancer les services, mais ça ne change rien (logique, mais sait-on jamais :smiley: ).

Note² : Dans etc/fail2ban j’ai un fichier jail.local, dont la seule différence avec le .conf est le findtime et le bantime :

/etc/fail2ban# diff jail.conf jail.local
59c59
< bantime  = 600
---
> bantime  = 34560000
63c63
< findtime  = 600
---
> findtime  = 864000

Là je sèche un peu, je ne vois pas ce que j’aurai pu modifier qui empêche le nouveau port SSH de remplacer le 22 dans IPTables :confused:

Ce fichier .local n’est pas censé exister il me semble.
Tu l’aurais pas créé il y a longtemps pour être plus drastique sur le ban ?

Je pense que si tu l’enlèves et que tu recharges fail2ban ça fera le job.

J’en doute, seuls les bantime/findtime ont été modifiés. [Edit : Oui, c’est bien moi qui l’ai créé il y a longtemps pour bannir plus agressivement]

Je le dégage, je reload/restart tout ça et je laisse tourner un jour ou deux pour voir.

Oui sauf que tu dis toi même que le port ssh est différent par rapport au .conf.

Je crois qu’on s’est mal compris.

Le port SSH est différent dans /etc/fail2ban/jail.d/yunohost-jails.conf (mon port custom) et dans ce que renvoie la commande iptables-save (le port 22 ressort).

J’ai quand même viré tout ce qui était .local, rebooté et laissé tourner quelques jours.

A priori plus de tentatives de connexion, et ip-tables-save renvoie un truc différent (pas de ligne suffixée par f2b), j’ignore si c’est normal :

Côté /var/log/auth.log, le spam semble s’être arrêté.

Je vais remettre les .local un par un en commençant par /etc/fail2ban/jail.local pour remettre des findtime et durée de ban plus élevées.

Je serais quand même curieux de savoir ce qui a pu faire déconner F2B.

A priori ce n’est pas normal. F2b est peut être cassé ?

Non, le service est bien active/running. J’ai pu le restart sans que ça ne bronche. Idem pour le service yunohost-firewall.

Du coup je vais continuer à creuser et je laisse le thread ouvert.

J’ai trouvé ce thread : debian buster - Fail2Ban is not adding iptables Chain f2b-sshd - Stack Overflow


Since fail2ban 0.10 (IPv6 support) fail2ban executes actionstart IP-family related on demand by first ban per jail, see [#1742](https://github.com/fail2ban/fail2ban/pull/1742), so iptables-multiport would create the chain f2b-sshd only if first IP gets banned in sshd jail.

Conclusion, the chain f2b-sshd gets only output when the first IP has been banned, previously iptables always showed also empty chains before the first IP has been banned.

Il faut que je test.

  • J’ai passé une poignée de tests, apparemment y a un soucis dès qu’il y a présence d’un fichier /etc/fail2ban/jail.local, pourtant copié depuis jail.conf (j’ai contrôlé : mêmes droits, même owner).

  • Je confirme qu’après un redémarrage des service F2B et Firewall, il faut de nouveau trigger F2B pour que les lignes idoines apparaissent avec iptables-save.

  • J’ai bien récupéré le bon port SSH \o/

Donc imho mieux vaut ne pas utiliser les fichiers .local, mais plutôt utiliser des hooks pour modifier les fichiers .conf

Salut,

Non, il n’y a pas de soucis, c’est le comportement normal de fail2ban si tu lis le manuel. L’ordre de lecture est le suivant:

jail.conf 

jail.d/*.conf (dans l'ordre alphabétique) 

jail.local 

jail.d/*.local (dans l'ordre alphabétique).

Par exemple tous les fichiers .local sont analysés après les fichiers .conf, qu’ils soient dans l’arborescence /etc/fail2ban ou dans un dossier .d tel que /etc/fail2ban/jail.d.
Si un réglage est renseigné 2 fois, c’est le dernier fichier lu qui détermine le paramètre.

Donc ton jail.local est une copie de jail.conf avec le findtime et le bantime de changé. Pour le port ssh c’est donc bien port = ssh (soit le port 22 si ceci n’est pas changé) et ce fichier est lu après /etc/fail2ban/jail.d/yunohost-jails.conf et de ce fait écrase sa configuration quand un paramètre est indiqué dans les 2 fichiers, ce qui est le cas ici pour ssh.

Non pas besoin de hooks ici, un fichier /etc/fail2ban/jail.d/jails-perso.conf fera l’affaire. Voire un fichier /etc/fail2ban/jail.d/jails-perso.local si tu souhaites écraser des paramètres présents dans un des autres fichiers de ce dossier.
C’est là que je modifierais le bantime et le findtime. Perso j’ai modifié le bantime/findtime/maxretry ,ajouté des jails pour les applications qui n’ont pas de configuration fail2ban, j’ai également ajouté les ip local dans ignoreip ainsi que l’ip du diagnostic de yunohost ainsi que quelques jails supplémentaires.

3 Likes

Salut,

Une façon bien aimable de me dire RTFM :flushed:

J’ai effectivement commis une erreur de taille : toutes les .local passent après les .conf, quelque soit le répertoire (et donc jail.local est lue après les /jail.d/xxx.conf). Je pense que le soucis venait de là.

Ta remarque sur le fait de créer une jail perso.local dans jail.d pour y mettre toutes mes modifs est intéressante.

J’ai créé une petite jail perso dans le répertoire jail.d :

[DEFAULT]
bantime  = 34560000
findtime  = 86400
maxretry = 3

[postfix-sasl]
enabled=true

[sshd-ddos]
enabled=true

Je vais laisser tourner quelques jours, voir ce que ça donne.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.