Script bash lenteur

Visiteur
Visiteur
voila j'ai fais un script bash pour blacklister les ip qui s'acharne un peu trop en les repérant dans /var/log/messages, le script fonctionne a merveille seulement il est devenu extrêmement long plus de 5 minutes
Code BASH :
#!/bin/sh BLACKLIST=/home/blacklist/blacklist.log sed -i -e 's/#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE//g' /etc/shorewall/blacklist #Récupérer l'ip des mécréants a partir du log, et création de la blacklist cat /var/log/messages | grep "Shorewall:net2fw:DROP:IN" | awk -F "SRC=" '{ print $2 }' | awk '{ print $1 }' | sort -u >>/home/blacklist/blacklist.log #Sur chaque ip on compte combien il y a eu d'erreurs for i in `cat /home/blacklist/blacklist.log` ; do nberreurs1=`cat /var/log/messages | grep "Shorewall:net2fw:DROP:IN" | grep $i | wc -l` let nberreurs=$nberreurs1 #s'il y a eu plus de 5 erreurs et que l'ip n'est pas déjà blacklistée et bien on la blackliste ! if [ "$nberreurs" -ge "5" ] then if [ "`cat /etc/shorewall/blacklist | grep $i`" = "" ] then echo "$i" >>/etc/shorewall/blacklist fi fi done echo "#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE" >> /etc/shorewall/blacklist #Enlever les lignes vides sed -i -e '/./!d' /etc/shorewall/blacklist /sbin/shorewall refresh &>/dev/null
cela viendrait-il du fichier BLACKLIST=/home/blacklist/blacklist.log qui a force contient pres de 51000 ip's soit 51000 lignes, dois-je le purger mais dans ce cas ne va t'il pas y avoir des doublon dans /etc/shorewall/blacklist et dans ce cas comment les eviter ?
ou alors il y a une erreur dans le script qui m’échappe
si quelqu'un a des idées elles sont les bien venus

PS:
soucis avec le forum
quand je met mon script entre [code=bash][/code] il me fout des quot;5" , >> et des &> un peu partout ce qui le rend difficile a "lire", d'ou j'ai mis le code couleur mais la j'ai les

Edit Adrien.D : Corrigé
Édité par Visiteur Le 03/03/2014 à 21h23

Adrien.D Membre non connecté
-
- Voir le profil du membre Adrien.D
- Inscrit le : 30/05/2011
- Site internet
- Groupes :
Config : PC Fixe : X470 GAMING PRO- AMD Ryzen 5 2600X - 16Go RAM - Radeon RX 560 (Pilote libre) - Gentoo Linux - GNOME Desktop - Kernel 5.10 LTS
Ancien Webmaster de MageiaLinuxOnline. Les remplaçants assurent !
Ancien Webmaster de MageiaLinuxOnline. Les remplaçants assurent !


Visiteur
Visiteur
Adrien.D :
Merci et bonsoir Adrien

je l'ai utilisé il y a pas mal de temps fail2ban quand juste pour le fun je m'amusais avec apache, ircd, proftp etc, il est quand même assez accès sur le login, sur les accès ssh et a l’époque j'avais pas tout cerné les subtilités de sa config , puis la mes histoires de scripts c'est plus par fun, histoire d'apprendre des trucs avant que je ne sois complet alzheimer mdr

je viens de regarder dans mes sauvegardes j'ai des config fail2ban de 2008



Adrien.D Membre non connecté
-
- Voir le profil du membre Adrien.D
- Inscrit le : 30/05/2011
- Site internet
- Groupes :
Adrien.D :
je corrige le souci du code.
je corrige le souci du code.
N'attends pas une correction de ton script bash, mais une correction de la balise "code"

Je ne pense pas qu'on puisse "réduire" fail2ban à 50 lignes de bash.
Pour les doublons, peut être utiliser sort avec -u pour vérifier s'il n'y a pas de doublons dans ton fichier ?
Code BASH :
11 [22:17:16] adrien@superlinux: /tmp $ cat toto 10.21.27.150 10.21.27.25 10.21.27.36 10.21.27.25 10.21.27.148 12 [22:17:19] adrien@superlinux: /tmp $ cat toto | sort -u 10.21.27.148 10.21.27.150 10.21.27.25 10.21.27.36
Config : PC Fixe : X470 GAMING PRO- AMD Ryzen 5 2600X - 16Go RAM - Radeon RX 560 (Pilote libre) - Gentoo Linux - GNOME Desktop - Kernel 5.10 LTS
Ancien Webmaster de MageiaLinuxOnline. Les remplaçants assurent !
Ancien Webmaster de MageiaLinuxOnline. Les remplaçants assurent !


magnux77 Membre non connecté
-
- Voir le profil du membre magnux77
- Inscrit le : 21/09/2009
- Groupes :
-
Membre d'Honneur
Je ne comprends rien à ce que tu veux faire et ne cherche pas à comprendre d'ailleurs. J'ai pas mal scripté dans le temps et j'ai constaté que des optmisations tout à fait superfétatoires a priori deviennent rapidement indispensables quand les volumes traités deviennent importants.
Premier exemple :
if [ "$nberreurs" -ge "5" ]
L'opérateur ge concerne les formats numériques or tu présentes les arguments sous forme littérale, cela entraîne des conversions de format à chaque fois. Et doublement pour Nberreurs qui est calculée.
Il faut définir Nberreurs comme une variable binaire (selon le shell script que tu utilises), gérer l'absence de valeur éventuelle (selon le shell script que tu utilises) et écrire le test ainsi : if [ ${nberreurs} -ge- 5 ]
Deuxième exemple :
Pour chaque ligne de blacklist tu rescannes entièrement blacklist, pour des petits volumes pourquoi faire plus compliqué. Mais avec les volumes qui commencent à être les tiens, il faut faire mieux. Tu rescannes pour éviter d'introduire un double, c'est louable mais il faut faire autrement. Soit ajouter les doubles et les virer par une étape ultérieure de "sort -u". Soit, autre chose.
Bon , je ne sais pas si je t'ai vraiment aidé. Mais sur les gros volumes, les optimisations que l'on connaît bien dans les autres langages, s'appliquent aussi aux shell scripts et sont très efficaces.
Bon courage
Édité par magnux77 Le 05/03/2014 à 10h35
...depuis Mandrake 7
Membre de l'April - « promouvoir et défendre le Logiciel Libre»
Soutien Framasoft - « Changer le monde, un octet à la fois»
Config n°1 : cpu=AMD64x6 mem=16G SSD=64G HDD=1T OS=Mageia8-64 DE=Xfce, Config n°2 : Dell Latitude E6410 SSD=120G OS=Mageia8 DE=Xfce, Config n°3 : ThinkpadR40 SSD=32G OS=[Manjaro, Parabola, Mageia6] DE=Xfce, Config n°4 : EeePC901 SSD=20Gb, OS=[SliTaz5/Lxde, Mageia8/Xfce]
Membre de l'April - « promouvoir et défendre le Logiciel Libre»
Soutien Framasoft - « Changer le monde, un octet à la fois»
Config n°1 : cpu=AMD64x6 mem=16G SSD=64G HDD=1T OS=Mageia8-64 DE=Xfce, Config n°2 : Dell Latitude E6410 SSD=120G OS=Mageia8 DE=Xfce, Config n°3 : ThinkpadR40 SSD=32G OS=[Manjaro, Parabola, Mageia6] DE=Xfce, Config n°4 : EeePC901 SSD=20Gb, OS=[SliTaz5/Lxde, Mageia8/Xfce]

Visiteur
Visiteur
Merci pour vos réponses Adrien et epilip je vais tester vos suggestions

Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie