Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[Script] Compter des occurences : help (résolu brillament)
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
razer
l33t
l33t


Joined: 08 Oct 2004
Posts: 893
Location: Paris - France

PostPosted: Tue Jun 20, 2006 8:48 am    Post subject: [Script] Compter des occurences : help (résolu brillament) Reply with quote

Bonjour à tous,
Suite à de nombreuses attaques par password force sur le port ssh de mon serveur (le seul d'ouvert), j'essaye de créer un script qui place une IP incriminée sur une liste noire en ajoutant la règle iptables quivabien.
Voici le principe que j'ai retenu (la machine est sous debian, mais çà ne change rien) : lancement régulier du script via un cron. Analyse du log auth.log en ayant effectué au préalable une copie de ce dernier pour ne retenir que les nouvelles lignes. De là je récupère les évenuelles IP.
Bref, j'en suis là :
Code:
#!/bin/bash
# Script de blocage automatique d'IP suite à un password force
# Cron lancé toutes les 1-5 min

# Si la copie n'existe pas on la crée et on sort
if [ ! -f /tmp/auth.log ]; then
   cp /var/log/auth.log /tmp/auth.log
   exit 0
fi

# Récupération des nouveaux logs et des IPs potentielles
auth=$(diff /var/log/auth.log /tmp/auth.log)
iplist=$(cat $auth |grep Invalid |awk '{print $11}')

# Comptage du nombre d'occurences pour chaque IP : blocage à 10 trouvées

# Insersion d'une règle Iptables bloquant les IP incriminées
# (faudra aussi vérifier que la règle n'existe pas déjà)
iptables -I INPUT -i ppp0 -s <ipsource> -j DROP

# Copie de auth.log
cp /var/log/auth.log /tmp/auth.log


Il y a sans doute déjà des erreurs dans ce code, pas vraiment pu l'exécuter pour tester et cela fait pas mal de temps que je ne fais plus de bash, avec des mauvais réflexes de PERListe que suis (genre $ et ; partout :lol:) .
Mais mon soucis principal concerne le comptage du nombre d'occurences de la même IP. Dans ma variable "iplist", j'ai une liste d'ip séparées par des retours chariots.
Alors, en perl que sais faire (une variable type table, la commande split quivabien, puis parcours et comptage dans la table), mais pour ce qui est du bash je cale

Merci de votre aide


Last edited by razer on Tue Jun 20, 2006 12:23 pm; edited 1 time in total
Back to top
View user's profile Send private message
yoyo
Bodhisattva
Bodhisattva


Joined: 04 Mar 2003
Posts: 4273
Location: Lyon - France

PostPosted: Tue Jun 20, 2006 8:53 am    Post subject: Reply with quote

Je ne peux pas t'aider pour ton script mais tu devrais regarder du côté du paquet fail2ban qui doit faire la même chose :
Quote:
fail2ban
Description: Bans IP that make too many password failures
En plus il a été réalisé et est maintenu par l'un des membres du forum : LostControl.

Enjoy !
_________________
La connaissance s'accroît quand on la partage.
JCB
Back to top
View user's profile Send private message
geekounet
Bodhisattva
Bodhisattva


Joined: 11 Oct 2004
Posts: 3772
Location: Wellington, Aotearoa

PostPosted: Tue Jun 20, 2006 9:10 am    Post subject: Reply with quote

yoyo wrote:
Je ne peux pas t'aider pour ton script mais tu devrais regarder du côté du paquet fail2ban qui doit faire la même chose :
Quote:
fail2ban
Description: Bans IP that make too many password failures
En plus il a été réalisé et est maintenu par l'un des membres du forum : LostControl.

Enjoy !

+1
j'allais le proposer :wink:. Et ça marche super chez moi, il m'a repoussé des dizaines d'attaques. :)

EDIT : et ça gère pas que SSH, mais aussi Apache, le serveur de mail, VSFTPD, ... et on peut l'étendre encore plus :)
Back to top
View user's profile Send private message
razer
l33t
l33t


Joined: 08 Oct 2004
Posts: 893
Location: Paris - France

PostPosted: Tue Jun 20, 2006 9:24 am    Post subject: Reply with quote

Oui, merci à vous 2, je me souviens maintenant avoir entendu parler de ce programme, je viens d'installer/configurer çà et en effet cela fonctionne parfaitement.
Je vais donc opter pour cette solution, je laisse ouvert ce thread car si un pro du bash peut apporter une réponse c'est toujours bon pour la culture 8)
Back to top
View user's profile Send private message
kernelsensei
Bodhisattva
Bodhisattva


Joined: 22 Feb 2004
Posts: 5619
Location: Woustviller/Moselle/FRANCE (49.07°N;7.02°E)

PostPosted: Tue Jun 20, 2006 10:00 am    Post subject: Reply with quote

bah tu peux toujours faire un truc du genre avec uniq et sort :
Code:
echo -e "$IPLIST" |sort|uniq -c


exemple:
$ echo -e "$IPLIST"
192.168.0.1
192.168.0.1
192.168.2.4
192.168.1.1
192.168.2.4
192.168.1.1
192.168.0.1

$ echo -e "$IPLIST" |sort|uniq -c
      3 192.168.0.1
      2 192.168.1.1
      2 192.168.2.4


EDIT:

Autre exemple :
Code:
#!/bin/bash

IPLIST="192.168.0.1
192.168.2.4
192.168.0.1
192.168.0.1
192.168.0.1
192.168.0.1
192.168.0.1
192.168.0.1
192.168.0.1
192.168.0.1
192.168.0.1
192.168.0.1
192.168.0.1
192.168.0.1
192.168.0.1
192.168.1.1
192.168.2.4
192.168.1.1
192.168.0.1"

for ip in $(echo -e "$IPLIST"|sort -u) ; do
        nombre=$(echo -e "$IPLIST" |sort|uniq -c|grep ${ip}|awk '{print $1}')

        if [ "${nombre}" -ge 10 ] ; then
                echo "Attention, il faut bloquer ${ip} qui apparait ${nombre} fois dans la liste"
        fi
done


ca donne :

Code:
$ ./test
Attention, il faut bloquer 192.168.0.1 qui apparait 15 fois dans la liste

_________________
$ ruby -e'puts " .:@BFegiklnorst".unpack("x4ax7aaX6ax5aX15ax4aax6aaX7ax2aX5aX8 \
axaX3ax8aX4ax6aX3aX6ax3ax3aX9ax4ax2aX9axaX6ax3aX2ax4ax3aX4aXaX12ax10aaX7a").join'
Back to top
View user's profile Send private message
razer
l33t
l33t


Joined: 08 Oct 2004
Posts: 893
Location: Paris - France

PostPosted: Tue Jun 20, 2006 12:22 pm    Post subject: Reply with quote

Merci beaucoup
kernel_sensei président ! Ah ben non il est déjà modérateur, pas de cumul de mandats :lol:
J'avais bien cherché du côté de sort, mais uniq je connaissais pas !
Back to top
View user's profile Send private message
Darkael
Veteran
Veteran


Joined: 10 Aug 2004
Posts: 1321
Location: France

PostPosted: Tue Jun 20, 2006 12:34 pm    Post subject: Reply with quote

Tiens, j'avais posté avant d'aller manger, mon post a disparu? Bon tant pis, je recommence... Moi j'aurais fais comme ça:
Code:

diff /var/log/auth.log /tmp/auth.log | awk '/Invalid/ {print $11}' | sort | uniq -c | awk '$1>10 {print $2}' | while read IP; do
    iptables -I INPUT -i ppp0 -s $IP -j DROP
done

(j'aime bien les grosses lignes :wink:)

Donc c'est un peu pareil que ce qu'a sorti kernel_sensei, sauf que j'utilise awk pour voir si ça dépasse 10.
Back to top
View user's profile Send private message
DidgeriDude
Guru
Guru


Joined: 30 Jan 2005
Posts: 349

PostPosted: Tue Jun 20, 2006 3:09 pm    Post subject: Reply with quote

Aaaah les scripts de KarnEvil sont toujours aussi terribles !! 8)
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum