Surveillance de notre log d’accès à Lighttpd et bannissement
Alors voilà, n'étant pas trop fan de la console le matin j'ai trouvé un moyen ludique de garder un œil sur mes logs d'accès sans que ce ne soit trop prenant au café.
On va utiliser un utilitaire de colorisation de log : CCZE, qui permet au passage de générer une page html
Exemple ici (j'ai masqué toutes les ip pour la démo bien sur).
On a impérativement activé l'access.log de Lighttpd dans la partie Mail / Logwatch du tuto.
Dans le cas contraire :
lighttpd-enable-mod accesslog
Et on relance Lighttpd :
/etc/init.d/lighttpd force-reload
1er Partie
On crée le dossier qui va recevoir la page html :
mkdir /var/www/logserver
On change le proprio du dossier :
chown www-data:www-data /var/www/logserver
On installe maintenant CCZE :
apt-get install ccze
On crée un dossier pour recevoir notre script et on se déplace dedans :
mkdir /usr/share/mes-scripts/
cd /usr/share/mes-scripts/
On va créer un fichier logserver.sh :
nano /usr/share/mes-scripts/logserver.sh
Et on colle :
#!/bin/bash
#
#
# Récupération des logs
cp /var/log/lighttpd/access.log /tmp/access.log
cd /tmp
# Nettoyage
sed -i '/plugins/d' access.log
sed -i '/images/ d' access.log
# Création de la page html
ccze -h < /tmp/access.log > /var/www/logserver/access.html
On rend le script exécutable :
chmod +x logserver.sh
On teste le script :
/usr/share/mes-scripts/logserver.sh
La page html doit être créée à cette adresse :
[url]http://ip_server/logserver/access.html[/url]
Certainement un peu vide pour l'instant mais ça va vite se remplir... Le log est vidé automatiquement tout les 7 jours.
On ajoute un crontab pour que la page html soit rafraichie toutes les 6 heures histoire de garder à l’œil les tentatives récentes de nos amis russes et chinois :
crontab -e
Et on colle en bas :
0 */6 * * * sh /usr/share/mes-scripts/logserver.sh
On ferme et c'est fini, on aura un nouveau log à minuit, 6h, 12h et 18h, il n'y a plus qu'à bannir à tour de bras si le cœur vous en dit !
Note : La manip' permet bien sûr de créer des pages html sur le même modèle avec n'importe quel fichier log (ou autre) que vous voudriez surveiller.
Par exemple :
ccze -h < /etc/lighttpd/lighttpd.conf > /var/www/logserver/lighttpd.conf.html
Peut être pratique pour monter un fichier de conf rapidement ici avec un lien :
[url]http://ip_server/logserver/lighttpd.conf.html[/url] -
Exemple cliquable ici
2ème Partie
Donc maintenant qu'on a repéré un loulou ukrainien qui insiste un peu trop à la porte du serveur, et toujours dans le but de se simplifier la vie, je me suis bricolé un petit script couplé avec un alias pour bannir le fâcheux.
Une fois fini, il n'y aura plus qu'à taper
ban en console et rentrer l'ip pour le bloquer avec iptable.
On crée (si on ne l'a pas fait plus haut) le dossier pour le script :
mkdir /usr/share/mes-scripts/
On se place à l’intérieur du dossier :
cd /usr/share/mes-scripts/
On crée un fichier :
nano /usr/share/mes-scripts/ban.sh
Et on colle :
#!/bin/bash
#
echo -n "Entrer l'adresse IP à bannir : "
read IP
dig -x $IP +short
echo -n -e "Bannir l'adresse IP\033[1;33m $IP \033[00m? y/n: "
read ouinon
if [ "$ouinon" = "y" ] || [ "$ouinon" = "Y" ]; then
iptables -I INPUT -s $IP -j DROP &
fi
if [ "$ouinon" = "n" ] || [ "$ouinon" = "N" ]; then
exit 0;
fi
echo "L'adresse IP $IP a été bannie définitivement"
exit 0;
Tant qu'à être là, on va faire la même manip' pour unban ça peut être utile.
On crée le fichier :
nano /usr/share/mes-scripts/unban.sh
Et on colle :
#!/bin/bash
#
echo -n "Entrer l'adresse IP à débloquer : "
read IP
dig -x $IP +short
echo -n -e "Autoriser l'adresse IP\033[1;33m $IP \033[00m? y/n: "
read ouinon
if [ "$ouinon" = "y" ] || [ "$ouinon" = "Y" ]; then
iptables -D INPUT -s $IP -j DROP &
fi
if [ "$ouinon" = "n" ] || [ "$ouinon" = "N" ]; then
exit 0;
fi
echo "L'adresse IP $IP a été débloquée"
exit 0;
chmod +x unban.sh
Fin de la première étape, maintenant on va créer deux alias :
nano /root/.bashrc
On repère les alias dans le fichier pour faire ça propre et on colle :
alias ban='sh /usr/share/mes-scripts/ban.sh'
alias unban='sh /usr/share/mes-scripts/unban.sh'
On recharge son fichier .bashrc et c'est fini :
. ~/.bashrc
Pour bannir une ip :
ban
pour dé-bannir:
unban
Et on se laisse guider, pour ceux qui ont du mal à se souvenir de la commande iptable qui va bien, ça simplifie la vie .
Les scripts donnent au passage le reverse dns de l'ip pour savoir sur qui on tape quand l'info est dispo.
J'ai eu un peu mal à faire celui là, je débute en bash... Si vous avez un problème avec la couleur du script, vérifiez que Putty est bien en UTF-8.
Ex.