Script bash logguer ip si bande passante > à un nombre

Bonjour tout le monde!

Je sais que ce qui va suivre n’est pas très correct, et je m’en excuse.
Je vais commencer par me présenter un peu, je suis un novice de debian, et nous sommes une petite communauté à avoir des serveurs de jeux (CSS/L4D2/TF2).

Après avoir passé pas mal de nuit sur google, je n’ai pas trouvé ce que je cherchais, et je suis vraiment naze en script shell!

Nous nous prenons souvent des attaques DDoS par la concurrence (par pure jalousie…)

Il m’est déjà arrivé d’avoir eu le temps de faire un tcpdump (pour pouvoir déposer plainte), et ce fut chose faite.
Le fait est que, je ne peux pas être toujours présent pour avoir ce genre de preuve

Et surprise à mon réveil, il s’avère que hier nos joueurs ont encore été embêtés…

Alors nous y voila, (excusez moi pour ce long pavé, mais je me voyais mal débarquer et faire ma demande, comme je l’ai dis plus haut je trouve pas ça correct), j’aimerais savoir si il existe un script, qui à partir d’un certain nombre de BP utilisée, il effectue un tcpdump automatiquement (puis le logguer), pour avoir des traces?

Exemple : Je démarre le script avec un crontab chaque minute
Si en entré, ça dépasse 30mb/s, un tcpdump est effectué, avec le fichier /var/log/ddos/attaque_date_heure.log
Si possible, bannir cette même ip automatiquement avec iptables, et logué dans un fichier à part, exemple :

DATE/HEURE : XXX - IP : 127.0.0.1 - BP UP : XX MO - BP DOWN : XX - DEST : XXXX:XX (en option^^)

Dans le cas ou ce script n’existe pas, si un codeur est motivé pour le faire, je suis prêt à verser une petite donation.
Je n’ai pas 15 ans, et j’ai toujours été réglo dans mes paroles.

Je vous remercie très chère communauté de Debian, et je vous prie de m’excuser si ma demande vous semble exagérée

Comment sont lancé les DDOS ? Les tentatives de connexion se font avec quels services (je veux dire, l’attaquant se connecte à quel service (ou programme si tu préfère) pour générer sont débit de 30Mb/s ?

Désolé de te le dire comme ça mais pour nous (en tout cas pour moi) “voir” une vrai attaque en DDOS ça a quelque chose d’intéressant. Je connais pas tcpdump, mais je suis à peut près sûr que tout ce dont tu as besoin peux se faire avec iptables (et un truc style fail2ban pour le bannissement).

Je pense par exemple que plus que d’obtenir des preuves de qui vous attaque, il est important de fiabiliser le service cela s’appelle de la QoS (qualité de service). En cherchant sur internet à partir de ça tu devrais pouvoir définir les débits maximums comme tu le souhaite.

Je ne peux pas t’en dire beaucoup plus.

Salut, et merci de ta réponse.

Aucune idée…

Je viens quand même à ma question initiale qui porte sur le scripting, pensez vous qu’il existe une méthode pour calculer le total de packet entrant dans la machine (en taille)?

Misterfreez a probablement raison (je ne m’y connais pas plus).

Mais pour répondre à ta question, voici un début de réponse :

#!/bin/bash
last= 
while true
do 
   { read; read; read; read -a infos; } < /proc/net/netstat
   new=${infos[7]}
   last=${last:-${new}}
   printf "\r\e[0KTotal in=%so\tDernière sec=%so" "${new}" $((new-last))
   last=${new}
   sleep 1
done

Les données sont exprimées en octets.

[quote=“Totor”]Misterfreez a probablement raison (je ne m’y connais pas plus).

Mais pour répondre à ta question, voici un début de réponse :

#!/bin/bash
last= 
while true
do 
   { read; read; read; read -a infos; } < /proc/net/netstat
   new=${infos[7]}
   last=${last:-${new}}
   printf "\r\e[0KTotal in=%so\tDernière sec=%so" "${new}" $((new-last))
   last=${new}
   sleep 1
done

Les données sont exprimées en octets.[/quote]

Ca fonctionne!!!

Merci beaucoup :smiley:

edit :
root@ks312236:~# ./lol.sp
Total in=124826154752o Dernière sec=184074o

ca me parait un peu beaucoup

Sachant que ovh m’affiche :
Entrée : 1850.5 kb/s
Sortie : 4142.0 kb/s

edit : ok je viens de piger (mal reveillé)

Sujet résolut, merci beaucoup!!!

edit:

Je sais que ça risque de vous paraitre ridicule, mais si ça peut aider des gens, je laisse tourner le script dans un screen



#!/bin/bash
last=
while true
do
   { read; read; read; read -a infos; } < /proc/net/netstat
   new=${infos[7]}
   last=${last:-${new}}
   printf "\r\e[0KTotal in=%so\tDernière sec=%so" "${new}" $((new-last))

            if [ "$((new-last))" -gt "31457280" ]; then
               echo -e "\nAttack detecte\nLog actives"
                tcpdump -ni eth0 -w /root/logs_ddos/attack_`echo $(date +%d_%m_%Y_%H\:%M\:%S)`.cap -s 0 -c 10000
               last=
               sleep 60
            else
               last=${new}
               sleep 1
            fi
done

Voila voila, sans connaissance de bash j’ai pas réussi à faire mieux