[gull] [Resolu] fail2ban + ipset (ksoftirqd congestionne a ~500Ko/s (Ubuntu 22.04))

Frederic Dumas f.dumas at ellis.siteparc.fr
Sat Sep 28 18:31:10 CEST 2024


Complément, pour ceux que l'utilisation d'ipset par fail2ban intéressera. Marc, tu as posé le bon diagnostic, pour la suite, le web fut mon ami. L'installation du paquet ipset provoque l'écriture de trois fichiers supplémentaires dans /etc/fail2ban/action.d:

> iptables-ipset-proto4.conf
> iptables-ipset-proto6-allports.conf
> iptables-ipset-proto6.conf

Source: https://serverfault.com/questions/1082564/fail2ban-ipset-which-conf-to-use/1082704#1082704


L'ajout de ces lignes

> banaction = iptables-ipset-proto6
> banaction_allports = iptables-ipset-proto6-allports

dans la section [DEFAULT] du fichier de configuration jail.local (dans /etc/fail2ban/) devrait suffire. Les instructions de jail.local ont préséance sur les instructions par défaut encore présentes dans jail.conf:

> banaction = iptables-multiport
> banaction_allports = iptables-allports

Ces deux directives ne s'appliquent donc plus dès qu'on redémarre fail2ban.


Redémarrer fail2ban

> # systemctl restart fail2ban


Au passage, aucune action manuelle supplémentaire n'est requise pour conserver l'historique des IP bannies par fail2ban. À l'arrêt de fail2ban, les 70K+ règles reject ont été effacées d'iptables:

> # iptables -n --list --line-numbers | sed '/^num\|^$\|^Chain/d' | wc -l
> 0


Au redémarrage, c'est fail2ban qui recharge les ip bannies dans ipset, cette fois-ci. La migration d'iptables à ipset est donc vraiment simple. Les règles iptables créées par fail2ban se limitent à deux lignes:

> # iptables -n --list --line-numbers
> Chain INPUT (policy ACCEPT)
> num  target   prot   opt   source      destination
> 1    REJECT   tcp    --    0.0.0.0/0   0.0.0.0/0    multiport dports 80,443 match-set f2b-apache-auth src reject-with rcmp-port-unreachable
> 2    REJECT   tcp    --    0.0.0.0/0   0.0.0.0/0    multiport dports 22 match-set f2b-sshd src reject-with icmp-port-unreachable


La vitesse de transfert sur le (gros) téléchargement en cours vient de passer de ~500Ko/s à ~6Mo/s. ksoftirqd n'est plus déclenché. Marc, quand je suis dans le coin, il faut qu'on prenne une bière ensemble. Encore merci !


>>     ksoftirqd qui saturait (très visible avec top, peu
>>     avec htop sans config)

Merci aussi de faire remarquer cette différence entre top et htop; elle n'est pas seulement cosmétique. Dans mon cas, c'est le script pyhton glances qui avait attiré mon attention sur la charge énorme liée à ksoftirqd. J'aurai pu regarder top plus tôt, je m'étais habitué à htop.


--
Frédéric Dumas
f.dumas at ellis.siteparc.fr


> Le 28 sept. 2024 à 15:52, Frederic Dumas via gull <gull at forum.linux-gull.ch> a écrit :
> 
> 
> Tu as vu juste du premier coup Marc, avec iptables.
> Mille mercis.
> 
> 
>> # iptables -n --list --line-numbers | sed '/^num\|^$\|^Chain/d' | wc -l
>> 71045
> 
> 
> Avec un bantime à -1 sur fail2ban, le magasin se rempli vite.
> 
> 
>> # fail2ban-client status apache-auth | head -n8
>> Status for the jail: apache-auth
>> |- Filter
>> |  |- Currently failed: 4
>> |  |- Total failed: 436
>> |  `- File list: /var/log/apache2/transmission_error.log /var/log/apache2/error.log
>> `- Actions
>>   |- Currently banned: 576
>>   |- Total banned: 576
> 
> 
>> # fail2ban-client status sshd | head -n8
>> Status for the jail: sshd
>> |- Filter
>> |  |- Currently failed: 5
>> |  |- Total failed: 37918
>> |  `- File list: /var/log/auth.log
>> `- Actions
>>   |- Currently banned: 70468
>>   |- Total banned: 70468
> 
> 
> 576 + 70468 = 71044
> 
> CQFD.
> 
> 
> Il faut maintenant purger les 70K+ drops d'iptable, peut-être exporter les IP de fail2ban. Une fois le package ipset ajouté au système, où se fait la configuration manuelle pour dire à fail2ban de l'utiliser, plutôt que de continuer à écrire des règles iptable ?
> 
> 
> --
> Frédéric Dumas
> f.dumas at ellis.siteparc.fr
> 
> 
>> Le 28 sept. 2024 à 14:18, Marc SCHAEFER via gull <gull at forum.linux-gull.ch> a écrit :
>> 
>> Hello,
>> 
>> On Sat, Sep 28, 2024 at 01:06:43PM +0200, Frederic Dumas via gull wrote:
>>> un petit casse tête sur Ubuntu, puisque c'est le week-end. Ce tout petit serveur s'étrangle dès qu'on tire dessus en sftp à peine quelques Mb/s. ksoftirqd vient faire la police, et le débit moyen plafonne à ~500Ko/s (~5Mb/s), alors que de l'autre coté, le client sftp est sur un accès GPON.
>> 
>> J'ai plusieurs idées (*), mais que dit nestat -i ?
>> 
>>> Ça parait personnalisé par l'hébergeur dans l'image Ubuntu installée
>>> sur ses serveurs.
>> 
>> Peut-être lui demander pourquoi?
>> 
>> 
>> (*) - trop de règles iptables: en remplaçant par ipset j'ai
>>     obtenu de sacré gains de performance sur des systèmes
>>     peu performants (ok, ça commence à se voir dès 20'000
>>     entrées, j'en ai > 200'000) -- c'était exactement
>>     ksoftirqd qui saturait (très visible avec top, peu
>>     avec htop sans config)
>>   - TCP/TSO non activé: une interruption par paquet y.c
>>     confirmations
>>   - sshd monothread
>>   - pertes de paquets
> 
> 
> 
> 
> 
> 
> _______________________________________________
> gull mailing list
> gull at forum.linux-gull.ch
> https://forum.linux-gull.ch/mailman/listinfo/gull





More information about the gull mailing list