vous qui avez monté un serveur ssh (qu'il soit microsoftien ou linuxien), vous avez du vous rendre compte que les attaques par bruteforce sont tres frequente.
j'ai cherché un moyen de bannir une IP apres un certain nombre d'essai de login raté en ssh sur un serveur cygwin.
je pars du principe que vous avez deja installé sshd en service, sinon allez faire un saut ici : http://flr.free.fr/spip/article.php?id_article=24
par defaut, sshd ne log rien (le saligo).
on edite donc la conf (/etc/sshd_config ou C:\cygwin\etc\sshd_config)
et on decommente ces deux lignes :
Code :
- SyslogFacility AUTH
- LogLevel INFO
|
le probleme c'est que maintenant sshd log dans le journal des evenements windows et non pas dans /var/log/ comme on le souhaiterez...
on va donc installer un deuxieme service : syslogd
ouvrez un term cygwin et tapez syslogd-config
repondez "yes" a la creation du fichier de config (/etc/syslog.conf)
repondez "yes" pour installer le service.
pour le demarrer, il suffit de faire un net start syslogd
voila, maintenant sshd loggera tout dans /var/log/messages et non plus dans le journal des evenements windows.
pour empecher l'acces a un host il existe le fichier /etc/hosts.deny qui contient la liste des IP qui n'ont pas le droit de se connecter.
il ne reste plus qu'a faire un script qui lis le fichier /var/log/messages et qui recherche les tentative d'intrusion et qui ecrit dans le fichier /etc/hosts.deny les ip qui font du bruteforce.
voici le script que j'ai ecris (a l'arrache en 3 minutes) en perl :
Code :
- #!/bin/perl
- use strict;
- # limit before bann an IP.
- my $limitcount = 10;
- my $listname = "/etc/hosts.deny";
- open(LOG, "/var/log/messages" ) || die ("Impossible de lire le fichier Log.\n" );
- my %list;
- while (<LOG> )
- {
- /.*sshd:.*Failed.* (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*/gi;
- if ($1 ne "" )
- {
- if (exists $list{$1})
- {
- $list{$1}++;
- }
- else
- {
- $list{$1} = 1;
- }
- }
- }
- close (LOG);
- `echo -n "" > $listname`;
- foreach my $key (keys %list)
- {
- my $value = $list{$key};
- if ($value > $limitcount)
- {
- `echo "sshd: $key" >> $listname`;
- }
- }
|
il ne reste plus qu'a le scheduler
Message édité par azubal le 23-05-2006 à 01:56:56