# Script de surveillance de connections pour proftpd

**URL:** <https://www.debian-fr.org/t/script-de-surveillance-de-connections-pour-proftpd/6918>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 3:41 UTC](https://www.debian-fr.org/t/script-de-surveillance-de-connections-pour-proftpd/6918 "2016-02-20T15:41:53Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![yanlolot](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/f14d63/32.png) [@yanlolot](https://www.debian-fr.org/u/yanlolot)\
**Post date:** [Février 20, 2016, 3:41 UTC](https://www.debian-fr.org/t/script-de-surveillance-de-connections-pour-proftpd/6918/1 "2016-02-20T15:41:53Z")

</div>

Salut à tous

C’est mon premier post dans “programmation”… Je suis ému. Il sera assez long, j’éspère que certains auront le courage d’aller jusqu’au bout.

Voila, étant l’heureux possesseur d’un serveur FTP (proftpd) uniquement accessible aux personnes disposant du login et du mot de passe, j’ai remarqué que certaines IP essayaient des logins pour se connecter sur mon serveur (en moyenne une "attaque ttes les 24 heures). Bon, ils ne trouvent jamais ni le login ni le mot de passe, mais j’ai voulu bannir ces IP ( par pur geekisme ).

J’ai donc créé un script “veilleur” ( qui marche sans pb, mais sans doute mal écrit, d’où mon post) qui est lancé ttes les 10 mn grâce à cron, et qui effectue les tâches suivantes:  
➡ isole dans /var/log/proftpd.log les IP qui correspondent au critère suivant:  
se sont loguées avec un mauvais “user”, mais pas “anonymous” ( je suis forcé d’accepté les anonymous, même si elles sont déjà bannies dans /etc/ftpusers, car même qqu’un qui a le bon user et le bon mot de passe apparaît d’abord en anonymous dans le fichier /var/log/proftpd.log )  
➡ si une de ces IP a tenté plus de 50 fois de se connecter, elle est bannie ( iptables -A INPUT -s IP\_bannie -j DROP)

voilà mon script:

[quote=“veilleur”]#! /bin/sh

## dossier où sont mis les logs de veilleur  
veilleur\_log="/home/yann/scripts"

## création de cible\_tmp.txt: fichier texte contenant les IP de proftpd.log dont le user est inconnu et différent de anonymous  
# 1) extraction des lignes contenant “no such user '” du log de proftpd et création de log\_foireux.txt  
cat /var/log/proftpd.log |grep no\ such\ user\ “’” \> $veilleur\_log/log\_foireux.txt  
# 2) extraction des lignes contenant “no such user ‘anonymous’” du log de proftpd et création de log\_anonymous.txt  
cat /var/log/proftpd.log |grep no\ such\ user\ “’” |grep anonymous \> $veilleur\_log/log\_anonymous.txt  
# 3) on ne garde que les “no such user” excepté les anonymous, et tt ça dans veilleFTP\_tmp.txt  
diff $veilleur\_log/log\_foireux.txt $veilleur\_log/log\_anonymous.txt \> $veilleur\_log/veilleFTP\_tmp.txt  
# suppression de log\_foireux.txt et log\_anonymous.txt  
rm $veilleur\_log/log\_foireux.txt  
rm $veilleur\_log/log\_anonymous.txt  
# réorganisation de veilleFTP\_tmp.txt: seules les IP sont conservées et mises dans veilleFTP.txt  
cat $veilleur\_log/veilleFTP\_tmp.txt | cut -d[-f3 | cut -d] -f1 | cut -d: -f4 | grep “.” \> $veilleur\_log/veilleFTP.txt  
rm $veilleur\_log/veilleFTP\_tmp.txt  
# réorganistaion de veilleFTP.txt : suppression des répétitions d’IP et création de cible\_tmp.txt  
B="“  
for i in `cat $veilleur_log/veilleFTP.txt` ; do  
if [“$i” != “$B”] ; then  
B=”$i"  
echo $i \>\> $veilleur\_log/cible\_tmp.txt  
fi  
done

[color=red]## vérification du nb de tentatives de connexions des IP de cible\_tmp.txt : si tentatives de connections \> 50 l’IP est rajoutée

## à banni\_tmp.txt[/color]

for i in `cat $veilleur_log/cible_tmp.txt` ; do  
if [`grep -c $i $veilleur_log/veilleFTP.txt` -ge 50] ; then  
echo $i \>\> $veilleur\_log/banni\_tmp.txt  
fi  
done  
## si le fichier banni.txt (contenant ttes les IP précédemments bannies dans la journée) n’existe pas , on le créé  
if [! -e $veilleur\_log/banni.txt] ; then  
touch $veilleur\_log/banni.txt  
fi

## réactu de iptables  
# iptables\_début et iptables\_fin sont les règles “immuables” de mon parefeu  
# on créé iptables\_updated en y mettant le contenu de iptables\_début  
cat $veilleur\_log/iptables\_début \> $veilleur\_log/iptables\_updated  
# on rajoute les anciennes IP déjà bannies  
for i in `cat $veilleur_log/banni.txt` ; do  
echo “iptables -A INPUT -s $i -j DROP” \>\> $veilleur\_log/iptables\_updated  
done  
# si de nvlles IP sont apparues dans banni\_tmp.txt par rapport à banni.txt, on les rajoute  
compte="0"  
for i in `cat $veilleur_log/banni_tmp.txt` ; do  
if [`grep -c $i $veilleur_log/banni.txt` = 0] ; then  
echo “$i” \>\> $veilleur\_log/banni.txt  
echo “iptables -A INPUT -s $i -j DROP” \>\> $veilleur\_log/iptables\_updated  
compte="1"  
fi  
done  
# on rajoute la fin des règles perso   
cat $veilleur\_log/iptables\_fin \>\> $veilleur\_log/iptables\_updated  
# s’il y eu de nvlles IP de rajoutées, on met à jour iptables  
if [“$compte” = “1”] ; then  
echo "réactu netfilter"  
cp $veilleur\_log/iptables\_updated /etc/network/if-pre-up.d/iptables-start  
/etc/network/if-pre-up.d/iptables-start  
echo "### banni.txt ###"  
cat $veilleur\_log/banni.txt  
fi

rm $veilleur\_log/banni\_tmp.txt  
rm $veilleur\_log/cible\_tmp.txt[/quote]

Voilà, voilà…  
Que pensez-vous de tout ça ? Etait-ce utile de faire ça ? Vaut-il mieux que j’arrête de jouer à faire des scripts, et que je retourne jouer dans mon bac à sable ??

---

<div class="post-metadata">

**Author:** ![stonfi](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/54ee81/32.png) [@stonfi](https://www.debian-fr.org/u/stonfi)\
**Post date:** [Février 20, 2016, 3:41 UTC](https://www.debian-fr.org/t/script-de-surveillance-de-connections-pour-proftpd/6918/2 "2016-02-20T15:41:58Z")

</div>

hello,

Je le trouve nickel ton script, ceci dit inclus un temps pendant lequel les ip sont bannis, ensuite tu les ‘dé’-bannis, je vais te dire, dans ma boite, on nous communique d’abord les ip distantes et ensuite on les autorises a ce connecter, ça évite d’être attaquer par n’importe qui, tu me diras un coup de spoofing et hop…

---

<div class="post-metadata">

**Author:** ![yanlolot](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/f14d63/32.png) [@yanlolot](https://www.debian-fr.org/u/yanlolot)\
**Post date:** [Février 20, 2016, 3:42 UTC](https://www.debian-fr.org/t/script-de-surveillance-de-connections-pour-proftpd/6918/3 "2016-02-20T15:42:06Z")

</div>

> [@](#):
>
> Je le trouve nickel ton script, ceci dit inclus un temps pendant lequel les ip sont bannis, ensuite tu les ‘dé’-bannis

Merci pour ces encouragements 🙂 . Effectivement, je me posais la question de savoir s’il fallait bannir définitivement les IP ou pas. Je vais plutôt suivre ton conseil, et les dé-bannir au bout d’un certain temps.  
Mais ce sera pas pour tout de suite la modif …

> [@](#):
>
> tu me diras un coup de spoofing et hop…

Connais pas ça: “spoofing”. J’vais faire un tour sur wikipedia 😉 …  
…Ah ouais, effectivement, un coup de spoofing, et hop, mon veilleur n’y voit que du feu …
