vla quelques temps que j'y pense, j'en ai mare de subir des attaques DOS de petits malins en russie ou autre sur mon serveur perso (@home)
sur le principe tout est ouvert (RDP, FTP, WEB etc) sans filtrage (je veux pouvoir me connecter de n'importe ou)
donc j'ai utilisé une fonctionalité dispo dans windows serveur (2000+), le filtrage d'IP, un firewall quoi

restait plus qu'a automatiser tout ça !
0/ obiwan kenobi ????
ça s'adresse aux utilisateurs de RDP (terminal server), IIS (toutes version, il suffit de lui faire ecrire des logs au bon format)
sur le principe vous pouvez adapter pour aller piocher dans les logs de n'importe quelle appli pour recuperer les IP indesirables
1/ prerequis
un windows 2000 ou plus (testé sur 2k3 et 2k8, aucune raison que ça passe pas sur un 2000, ya les memes briques)
ne cherchez pas, ça ne fonctionnera pas sur XP/VISTA/W7
pstools (psloglist en particulier) http://technet.microsoft.com/fr-fr/sysi ... s/bb896649
unixutils (pour avoir certaines focntions que DOS n'a pas: sed, grep, cut, wc, xargs) http://unxutils.sourceforge.net/
2/ mise en place
creer un contener pour les règles de bloquage http://www.hosting.com/support/windows- ... ndows-2008
lancer une premiere fois psloglist a la main avec le user qui fera tourner le script ensuite (ya un pop up au premier lancement !!!)
activer l'audit de securité windows http://support.microsoft.com/kb/300549
activer l'audit sur la connexion RDP http://www.informit.com/articles/articl ... 3&seqNum=9 (tout en bas)
selectionner l'IP du client dans les logs du FTP http://support.microsoft.com/kb/313437
3/ le script
[cpp]@echo off
[#ff0000]q:
cd \[/#ff0000]
set PATH=[#ff0000]"D:\_ utils\utils serveur\unixutils\"[/#ff0000];%PATH%
echo recuperartion de l'eventlog avec ce qui nous interesse (event ID 529 securité pour RDP)
[#ff0000]"D:\_ utils\utils serveur\pstools\psloglist"[/#ff0000] -i 529 -s security > logonfailure.txt
echo on récupere la liste des IP ou ces evenements apparaissent (RDP toujours)
sed "s/ /,/g" logonfailure.txt | grep "Logon Type: 10" | cut -d"," -f23 | cut -d" " -f4 > listIP.txt
echo on recupere les IP provoquant des erreurs 530 dans les logs ftp
grep "PASS - 530" [#ff0000]"Q:\WEB - FTP\log\MSFTPSVC1\ex%DATE:~8,2%%DATE:~3,2%%DATE:~0,2%.log[/#ff0000]" | cut -d" " [#ff0000]-f2[/#ff0000] >> listIP.txt
del /Q listIP2.txt
echo On compte combien de fois on voit chaque IP
for /F %%i in ('sort -u listIP.txt ^| grep -v "0.0.0.0"') do (
grep %%i listIP.txt | wc -l | xargs echo %%i >> listIP2.txt
)
echo on teste si ça apparait plus de X fois si oui, on test si deja présent et on ajoute a la blacklist
set [#00ff00]Limit=10[/#00ff00]
for /F "tokens=1,2,3 delims=; " %%i in (listIP2.txt) do (
echo IP %%i Occurences %%j Limite %Limit%
if %%j GTR %Limit% (
echo %%i depasse la limite
netsh ipsec static show filterlist name="New IP Filter List" level=verbose | grep %%i | wc -l > tmp.txt
for /F %%n in (tmp.txt) do (
if %%n EQU 1 (
echo existe deja, on ne fait rien
) ELSE (
echo n'existe pas encore, on ajoute
netsh ipsec static add filter filterlist="New IP Filter List" srcaddr=me dstaddr=%%i protocol=ANY mirrored=YES srcmask=255.255.255.255 dstmask=255.255.255.255
)
)
) ELSE (echo %%i ne depasse pas la limite)
echo .
)
DEL /Q tmp.txt[/cpp]
4/ parametrage (en rouge / vert dans le script)
evidement, ya quelques trucs a adapter en focntion de votre config.
deja, les chemins sont en dur dans mon script, faut au moins adapter ça
attention en particulier au nom du fichier de log
le mien est "exYYMMDD.log"
la partie moins drole, c'est sur les champs et le format des logs du FTP
mes logs ressemblent a ça:
[cpp]#Software: Microsoft Internet Information Services 6.0
#Version: 1.0
#Date: 2012-05-12 05:49:39
#Fields: time c-ip cs-method cs-uri-stem sc-status sc-win32-status
05:49:39 221.7.141.106 [10]USER administrator 331 0
05:49:39 221.7.141.106 [10]PASS - 530 1326[/cpp]
l'IP est le second champ, d'ou le -f2 (2eme collonne).
ouvrez vos logs pour voir ou est l'IP dans votre cas.
la variable Limit corespond au nombre d'occurences que l'ont doit avoir au mini pour blacklister une IP.
par experience, 10 c'est bien, adaptez si un de vos user a des mouffles
5/ execution
je vous conseille de le lancer au moins 2 fois a la main (dans une fenetre DOS), deja vous verrez que ça envoie pas mal d'infos a l'ecran
la premiere va trier vos logs pour trouver les IP et remplir le contener, la seconde va verifier que tout a bien été enregistré
si vous etes un peu frileux, genre vous faites ça sur une machine a l'autre bout de la france et vous avez pas un accès physisue dessus pour corriger si pb, vous pouvez lancer le script en mode "echo", il suffit de commenter (REM en debut de ligne) la ligne qui ajoute les regles (netsh ipsec static add filter)
dans ce cas la, il va seulement vous dire ce qu'il va faire sans le faire.
vous pouvez ensuite creer une tache planifiée qui se lancera regulierement (j'ai mis toutes les 20mn dans mon cas, je verrais a l'usage)
6/ to do
on explore l'intégralité des logs (journal d'evenement + log FTP) a chaque execution, c'est pas très consommateur, ça va relativement vite mais sur le principe c'est pas super optimisé.
j'ai vu une option pour ne recuperer que les evenements qui datent de moins de X minutes/heures/jours, faut que je la teste
j'ai pas de soluce pour les logs FTP (un fichier par jour, ça limite deja un peu)
suppriemer les fichiers temporaires

7/ personalisation
comme je le disais au debut, vous pouvez personnaliser pour recuperer des logs de n'importe quoi d'autre, du moment que vous avez moyen d'avoir l'IP.
sur le meme principe que pour les logs du FTP, il faut ajouter dans le fichier listIP.txt toutes les occurences des IP qui font des erreurs. le script va ensuite parcourir ce fichier pour compter combien de fois les IP apparaissent et va determiner ou non si on la blackliste.
a ajouter juste après la partie FTP, avant comptage
enjoy !