Marre des attaques Ssh & Co. : ban_ip.pl

Marre des attaques Ssh & Co. : ban_ip.pl - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 28-04-2005 à 20:08:31    

salut,
 
j'en ai eu marre des illegal user à la con sur mon ssh, et plutôt que de changer le port du service je me suis mis à dev ce petit script pour bannir au moyen d'iptables les petits rigolos :D
 
il fonctionne en perl et s'interface avec mysql pour avoir un historique des attaques :)
 
j'en suis qu'au début, mais pour l'instant le script fait ceci :
 
- parse le fichier de log pour repérer les "illegal user" (on peut même envisager de ne pas se limiter à cette chaîne) et récupère l'IP et le nb de tentative (j'utilise logtail pour ne pas parser 50 fois les mêmes lignes)
- ensuite, si l'ip existe déjà on regarde si le nb d'attaques dépasse un certain nb, si c'est le cas : BAN ! :D
- si l'ip n'est pas dans la base on l'ajoute
- une date de déban est aussi présente, et le script déban une ip au bout d'un temps définit
 
voila pour l'instant :)
 
notre ami black_lord est en train de faire une interface PHP pour voir très simplement qui est ban, qui ne l'est pas encore/plus
on pourra même bannir/débannir en direct une IP :)
 
toute contribution/critique/remarque sont les bien venues ;)
 
le tarball :
www.blablaosa.info/ban_ip.tgz
 
dans le fichier create_ban_ip_database.txt, il faudra changer le mot de passe pour la base
dans le fichier ban_ip.pl, pareil, changer le passe, mais aussi le nom du fichier de log ;)
 
les principales étapes de fonctionnement du script :
 

- on commence par récupérer dans le fichier "/etc/ban_ip_whitelist" la liste des IP à ne jamais bannir (et donc à ne jamais rentrer dans la base). Comme le dit black_lord, il serait intéressant de mettre dans dans la base (dans une nouvelle table)
   Ces IP sont mises dans une hashtab (pour avoir un acc_s simple et rapide)
 
- Ensuite, le fichier de logs est parsé pour récupérer dans une autre hashtab les IP suspectes. Pour l'instant une chaîne est matchée, je pense qu'il serait intéressant d'en mettre d'autres, dans une variable
 
- Ensuite on récupère les IP en base qui ne sont pas bannies (encore dans une hashtab)
 
- la fonction UnBanIP est appelée, et déban si le ban est intervenu il y a plus de $Delay (2 jours actuellement)
 
- Enfin, on boucle sur les IP trouvées dans les logs, on vérifie qu'elles ne sont pas dans la WhiteList, et suivant le nombre de fois vues, on les ajoute (ou modifie si l'IP est déjà en base) et ban le cas échéant


 
 
EDIT :
bon voici à mon avis la parade ultime pour laisser sshd sur le port 22 sans être emmerdé par des bots :)
 
vu sur http://www.debian-administration.org/
 
rajoutez simplement ces 2 lignes :  

/sbin/iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
/sbin/iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 -j DROP


 
et voila, si 3 tentatives échoues depuis la même IP en 300 secondes, iptables ban l'ip (pour 300 secondes apparement)
 
ultime ! :)


Message édité par Tomate le 27-11-2005 à 13:05:42

---------------
:: Light is Right ::
Reply

Marsh Posté le 28-04-2005 à 20:08:31   

Reply

Marsh Posté le 28-04-2005 à 20:10:34    

Interface de contrôle par PHP permettant de :
 

  • Visualiser les bannis :

http://membres.lycos.fr/angel2k/captures/ban_admin.png
 

  • Visualiser les débannis :

http://membres.lycos.fr/angel2k/captures/unban_admin.png
 

  • Voir les informations sur une IP :  

http://membres.lycos.fr/angel2k/captures/infos_admin.png
 

  • Bannir/débannir une IP
  • Supprimer une IP de la base


Archive dispo ici  
 
Cette interface est sous licence GPL, les icônes ont été réalisées par Jakub Steiner


Message édité par black_lord le 30-04-2005 à 22:24:24

---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 28-04-2005 à 20:24:36    

ca m'interesse aussi, car y en a marre de ces attaques, mes logs en sont pleins :/
Si je peu vous aider, n'hesitez pas à demander :)


---------------

Reply

Marsh Posté le 28-04-2005 à 20:31:59    

bah il y a peut-être d'autres trucs que les "illegal user" qu'on pourrait prendre en compte, mais quoi ? :D


---------------
:: Light is Right ::
Reply

Marsh Posté le 28-04-2005 à 20:33:23    

Très bien ca :)
 
Je pourrais vous faire un petit paquet debian (à l'arrache mais bon) si ca vous interresse :)


---------------
:wq
Reply

Marsh Posté le 28-04-2005 à 20:34:39    

pourquoi pas, mais quand on aura une version un peu plus avancée :)


---------------
:: Light is Right ::
Reply

Marsh Posté le 28-04-2005 à 20:46:30    

Par contre sql lite, ou plain text ca serait pas possible :??:
 
C'est pas un chouilla lourd mysql pour ca ?


---------------
:wq
Reply

Marsh Posté le 28-04-2005 à 20:51:43    

plain text bof :D
sqllite pourquoi pas, j'ai jamais utilisé :D


---------------
:: Light is Right ::
Reply

Marsh Posté le 28-04-2005 à 20:54:14    

J'ai la phobie de base de données c'est pour ca, fait pas attention à mes messages :d


---------------
:wq
Reply

Marsh Posté le 28-04-2005 à 21:06:37    

Ouais, ça peut être pas mal sqlite je pense ...
A voir (c'est peut-être pas le plus important pour l'instant)
 
 
 
Flagged au passage [:cupra]


Message édité par multani le 29-04-2005 à 14:32:15
Reply

Marsh Posté le 28-04-2005 à 21:06:37   

Reply

Marsh Posté le 28-04-2005 à 22:16:39    

Tu pourrais detailler l'installation pour les gens non-SQL compliant [:ddr555]


---------------
:wq
Reply

Marsh Posté le 28-04-2005 à 23:42:48    

Tres bonne idee, j'ai l'impression que ce genre d'attaque est en pleine  expansion, 2-3 attaques quotidiennes.
Par contre, quelqu'un a une explication pourquoi les adresses ip appartiennent souvent a des boites qui ont pignon sur rue et qu'un mail a abuse ne donne pas de suite et que les attaques ne cessent pas ?

Reply

Marsh Posté le 28-04-2005 à 23:59:12    

z'ont un pc vérolé sur leur rezo qui fait les attaques...

Reply

Marsh Posté le 29-04-2005 à 00:33:50    

Y a pas deja ce genre d'option dans tcplogd ,portsentry ou
 iplog ?
Je sais plus dans lequel mais j'avais vu un truc qui mettais automatiquement en blacklist dans le firewall.

Reply

Marsh Posté le 29-04-2005 à 01:03:17    

Perso, j'ai mis sshd sur un autre port à 4 chiffres, et aucun problèmes :)

Reply

Marsh Posté le 29-04-2005 à 08:33:18    

BiBi Max a écrit :

Tres bonne idee, j'ai l'impression que ce genre d'attaque est en pleine  expansion, 2-3 attaques quotidiennes.
Par contre, quelqu'un a une explication pourquoi les adresses ip appartiennent souvent a des boites qui ont pignon sur rue et qu'un mail a abuse ne donne pas de suite et que les attaques ne cessent pas ?


 
 
[:rofl]

Reply

Marsh Posté le 29-04-2005 à 09:17:09    

M300A a écrit :

Tu pourrais detailler l'installation pour les gens non-SQL compliant [:ddr555]


heu c'est à dire ? :p
 
mysql [-u user] [-p] < create_ban_ip_database.txt :p


---------------
:: Light is Right ::
Reply

Marsh Posté le 29-04-2005 à 09:46:33    

C'est vrai que pour ma part je suis incapable d'utiliser ce script (sa tombe bien j'en ai pas besoin :D) mais une petite explication sur la mise en place et l'utilisation sa serais simpas pour ceux qui en ont besoins.

Reply

Marsh Posté le 29-04-2005 à 09:48:15    


 
qui est souvent un PC zombie par ailleurs :)


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 29-04-2005 à 09:51:00    


oue et ?


---------------
:: Light is Right ::
Reply

Marsh Posté le 29-04-2005 à 10:02:36    

l'utilité que je vois à ce script c'est que l'IP est bannie un certain temps (24h c'est bien) et qu'elle ne pourrit plus tes logs.


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 29-04-2005 à 10:04:39    

j'ai mis 48h dans le script mais vous pouvez le modifier ;)
 
bon je vais faire une mini doc install/comment ça marche :D


---------------
:: Light is Right ::
Reply

Marsh Posté le 29-04-2005 à 10:28:12    

petite MAJ du script dans la focntion UnBanIP ;)


---------------
:: Light is Right ::
Reply

Marsh Posté le 29-04-2005 à 10:28:43    

vous pensez qu'on peut aussi prendre en compte les erreurs de ce type : "Did not receive identification string from"  
?


---------------
:: Light is Right ::
Reply

Marsh Posté le 29-04-2005 à 10:53:59    


dans 5000 chaînes ?? :heink:


---------------
:: Light is Right ::
Reply

Marsh Posté le 29-04-2005 à 11:05:20    

bien vu :gratgrat:


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 29-04-2005 à 11:06:34    

dites, vous parlez de ca ?
 

Citation :

Apr 27 22:17:58 routeur sshd[13917]: Illegal user richer from ::ffff:193.254.184.185
Apr 27 22:17:59 routeur sshd[13919]: Illegal user fluffy from ::ffff:193.254.184.185
Apr 27 22:18:01 routeur sshd[13921]: Illegal user gold from ::ffff:193.254.184.185
Apr 27 22:18:03 routeur sshd[13923]: Illegal user tomcat from ::ffff:193.254.184.185
Apr 27 22:18:04 routeur sshd[13925]: Illegal user cosinus from ::ffff:193.254.184.185
Apr 27 22:18:05 routeur sshd[13927]: Illegal user httpd from ::ffff:193.254.184.185


 
 
 

Reply

Marsh Posté le 29-04-2005 à 11:07:00    


certes, mais bon on en a pas tant que ça des ip différentes ;)
 
et sinon une idée pour optimiser ça avec iptables ?


---------------
:: Light is Right ::
Reply

Marsh Posté le 29-04-2005 à 11:07:50    

dam1330 a écrit :

dites, vous parlez de ca ?
 

Citation :

Apr 27 22:17:58 routeur sshd[13917]: Illegal user richer from ::ffff:193.254.184.185
Apr 27 22:17:59 routeur sshd[13919]: Illegal user fluffy from ::ffff:193.254.184.185
Apr 27 22:18:01 routeur sshd[13921]: Illegal user gold from ::ffff:193.254.184.185
Apr 27 22:18:03 routeur sshd[13923]: Illegal user tomcat from ::ffff:193.254.184.185
Apr 27 22:18:04 routeur sshd[13925]: Illegal user cosinus from ::ffff:193.254.184.185
Apr 27 22:18:05 routeur sshd[13927]: Illegal user httpd from ::ffff:193.254.184.185



 :jap:


---------------
:: Light is Right ::
Reply

Marsh Posté le 29-04-2005 à 11:10:21    


 
 
tain, j'en ai 30 pas jour, j'avais pas fait attention.
 
mais sans le bon nom de login ni mdp, ils ne peuvent rien faire ?
 
le niveau de dangerosité est élevé ?

Reply

Marsh Posté le 29-04-2005 à 11:12:37    


pourquoi pas ;)
 
mais bon, pour une connexion@home, je pense pas qu'on soit saturé :D


---------------
:: Light is Right ::
Reply

Marsh Posté le 29-04-2005 à 11:13:22    

dam1330 a écrit :

tain, j'en ai 30 pas jour, j'avais pas fait attention.
 
mais sans le bon nom de login ni mdp, ils ne peuvent rien faire ?
 
le niveau de dangerosité est élevé ?


certes, mais en bannissant l'IP, il y aura plus du tout de chance qu'il trouve le bon user :D


---------------
:: Light is Right ::
Reply

Marsh Posté le 29-04-2005 à 11:17:09    

quand je regarde les règles avec iptables -L FORWARD, ces règles sont à la fin justement


---------------
:: Light is Right ::
Reply

Marsh Posté le 29-04-2005 à 11:17:53    


mais alors comment font les admins qui ont des grosses connexions ?
car les mails à abuse ne donnent rien :/


---------------
:: Light is Right ::
Reply

Marsh Posté le 29-04-2005 à 11:21:27    

si je crois mais spa super pratique je crois


---------------
:: Light is Right ::
Reply

Marsh Posté le 29-04-2005 à 11:21:44    

Salut
 
Sur une becane au taf.
Distribution Debian Woody.
 
J’ai un blem au lancement de ton script Perl.
 
J’ai crée la base de donnée ban_ip.
J’ai remplacé le mot de passe dans le script ban_ip.pl, et changer le chemin pour le fichier log.
J’ai remplacé aussi l’interface réseau ppp0 par eth0.
 
my $INTERFACE="eth0";
my $tail = `logtail -f /home/bris/log/ssh.log`;
 
Petit problème l’or de l’exécution du script
 
bris@enux:~/ban_ip$ perl ban_ip.pl
Can't locate Date/Manip.pm in @INC (@INC contains: /usr/local/lib/perl/5.6.1 /usr/local/share/perl/5.6.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.6.1 /usr/share/perl/5.6.1 /usr/local/lib/site_perl .) at ban_ip.pl line 5.
BEGIN failed--compilation aborted at ban_ip.pl line 5.
 
Merci


Message édité par gwadboy le 29-04-2005 à 11:29:15
Reply

Marsh Posté le 29-04-2005 à 11:25:15    

gwadboy a écrit :

Salut
 
J’ai un blem au lancement de ton script Perl.
 
J’ai crée la base de donnée ban_ip.
J’ai remplacé le mot de passe dans le script ban_ip.pl, et changer le chemin pour le fichier log.
J’ai remplacé aussi l’interface réseau ppp0 par eth0.
 
my $INTERFACE="eth0";
my $tail = `logtail -f /home/bris/log/ssh.log`;
 
Petit problème l’or de l’exécution du script
 
bris@enux:~/ban_ip$ perl ban_ip.pl
Can't locate Date/Manip.pm in @INC (@INC contains: /usr/local/lib/perl/5.6.1 /usr/local/share/perl/5.6.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.6.1 /usr/share/perl/5.6.1 /usr/local/lib/site_perl .) at ban_ip.pl line 5.
BEGIN failed--compilation aborted at ban_ip.pl line 5.
 
Merci


il faut que tu installes le module perl Date-Manip ;)


---------------
:: Light is Right ::
Reply

Marsh Posté le 29-04-2005 à 11:26:30    


ok :D
 
mais bon j'ai surtout fait ça pour le fun, je me doute bien qu'il y a des mécanismes un peu plus efficaces qu'un bête script perl :D


---------------
:: Light is Right ::
Reply

Marsh Posté le 29-04-2005 à 11:32:37    

bris@enux:~/ban_ip$ apt-cache search date-ma
libdate-manip-perl - a perl library for manipulating dates
 
libdate-manip-perl ?

Reply

Marsh Posté le 29-04-2005 à 11:33:23    

vi ;)


---------------
:: Light is Right ::
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed