Auteur Sujet: Abus sur serveur iperf3 public  (Lu 15667 fois)

0 Membres et 1 Invité sur ce sujet

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 078
  • Paris (75)
Abus sur serveur iperf3 public
« Réponse #12 le: 06 juin 2016 à 20:23:23 »
oui on peut se contenter de modifier le script pour qu'il produise juste un log. C'est plus simple (et quasi fini) à  faire que d'essayer de manipuler iptables.

dis moi ce que tu veux dans le log (donc en sortie de iperf3tocvs.py )

pour chaque test, ca sortira une ligne du style:

date et heure, ip distante, cookie du client, duree du test, protocol, nombre de streams, volume sortant du a ce test, volume entrant du a ce test, volume total sortant pour cette IP, volume entrant total pour cette IP

bien sur, les totaux sont depuis que le script est lancé. si le script s’arrête et redémarre les totaux repartent de zero.
si on veut une mémorisation plus permanente il faut que le script relise son ancien log pour recharger les totaux, c'est possible à  faire mais plus compliqué.


kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 078
  • Paris (75)
Abus sur serveur iperf3 public
« Réponse #13 le: 06 juin 2016 à 20:45:53 »
j'ai mis a jour le script iperf3tocvs.py sur github: https://github.com/kgersen/iperf3protect

ca affiche :

date,ip,duration,protocol,streams,cookie,sent,receive,totalsent,totalreceived


ps: nouvelle version "python2 compliant" (c’était python3 avant)
« Modifié: 06 juin 2016 à 21:08:39 par kgersen »

vivien

  • Administrateur
  • *
  • Messages: 47 076
    • Twitter LaFibre.info
Abus sur serveur iperf3 public
« Réponse #14 le: 16 juin 2016 à 09:05:46 »
J'ai toujours des pb pour le script de lancement d'iperf3 : sudo n’apprécie pas que je mette de guillemets pour indiquer de prendre toute la commande en compte.

#!/bin/dash
/bin/sleep 1
/usr/bin/killall iperf3
/bin/sleep 0.1
if [ `ps -C iperf3 | wc -l` != "1" ]
then
  /usr/bin/killall -9 iperf3
  /bin/sleep 0.1
fi
if [ `ps -C iperf3 | wc -l` = "1" ]
then
  echo "lancement de iperf3"
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5200 -J | python /home/vgu/scripts/iperf3tocsv.py & >/home/log/iperf3/access5200 2>&1
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5201 -J | python /home/vgu/scripts/iperf3tocsv.py >/home/log/iperf3/access5201 2>&1 &
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5202 -J | python /home/vgu/scripts/iperf3tocsv.py >/home/log/iperf3/access5202 2>&1 &
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5203 -J | python /home/vgu/scripts/iperf3tocsv.py >/home/log/iperf3/access5203 2>&1 &
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5204 -J | python /home/vgu/scripts/iperf3tocsv.py >/home/log/iperf3/access5204 2>&1 &
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5205 -J | python /home/vgu/scripts/iperf3tocsv.py >/home/log/iperf3/access5205 2>&1 &
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5206 -J | python /home/vgu/scripts/iperf3tocsv.py >/home/log/iperf3/access5206 2>&1 &
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5207 -J | python /home/vgu/scripts/iperf3tocsv.py >/home/log/iperf3/access5207 2>&1 &
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5208 -J | python /home/vgu/scripts/iperf3tocsv.py >/home/log/iperf3/access5208 2>&1 &
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5209 -J | python /home/vgu/scripts/iperf3tocsv.py >/home/log/iperf3/access5209 2>&1 &
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5210 -J | python /home/vgu/scripts/iperf3tocsv.py >/home/log/iperf3/access5210 2>&1 &
  echo "iperf3 ok"
fi

Avec ce script, j'ai ce type d'erreur lors des "kill" d'iperf que je fais régulièrement via le script ci-dessus :
# ./restart_iperf.sh
Traceback (most recent call last):
  File "/home/vgu/scripts/iperf3tocsv.py", line 75, in <module>
    main()
  File "/home/vgu/scripts/iperf3tocsv.py", line 37, in main
    ip = (obj["start"]["connected"][0]["remote_host"]).encode('ascii', 'ignore')
IndexError: list index out of range
lancement de iperf3
iperf3 ok

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 078
  • Paris (75)
Abus sur serveur iperf3 public
« Réponse #15 le: 16 juin 2016 à 11:57:49 »
ca marche pas entre simple quotes ?

/usr/bin/sudo -u nobody '/usr/bin/iperf3 -s -p 5200 -J | python /home/vgu/scripts/iperf3tocsv.py & >/home/log/iperf3/access5200 2>&1'
au besoin faire un script qui inclus la commande et lance que le script

script "iperf3job.sh"
#!/bin/sh
/usr/bin/iperf3 -s -p $1 -J | python /home/vgu/scripts/iperf3tocsv.py & >/home/log/iperf3/access$1 2>&1

puis
Citer
...
  /usr/bin/sudo -u nobody /bin/sh /chemin/to/iperf3job.sh 5200 &
  /usr/bin/sudo -u nobody /bin/sh /chemin/to/iperf3job.sh 5201 &
  /usr/bin/sudo -u nobody /bin/sh /chemin/to/iperf3job.sh 5202 &
...

ca te permet de modifier le script sans toucher aux lignes de lancement.


Pour l'erreur lors du kill c'est normal, le script ne fait aucun controle d'erreur pour le moment.
C'est gênant en pratique ou pas? (je vois que tu fusionnes stderr et stdout, éventuellement met les dans 2 log distincts).

vivien

  • Administrateur
  • *
  • Messages: 47 076
    • Twitter LaFibre.info
Abus sur serveur iperf3 public
« Réponse #16 le: 16 juin 2016 à 14:55:09 »
Les simples quotes comme les doubles ne fonctionnent pas :

# /usr/bin/sudo -u nobody '/usr/bin/iperf3 -s'
sudo: /usr/bin/iperf3 -s: command not found

Par contre, si je ne mets pas d'argument /usr/bin/sudo -u nobody '/usr/bin/iperf3' fonctionne.

Impossible de lancer un script avec un argument non plus...

clean31

  • Abonné SFR fibre FttH
  • *
  • Messages: 294
  • Red FTTH - 1000/200 Mb/s - Option Débit+ (31)
Abus sur serveur iperf3 public
« Réponse #17 le: 16 juin 2016 à 15:07:39 »
A tester, mais dans le man sudo on trouve un exemple via un sous-shell.

Ca donnerai ça :

# /usr/bin/sudo -u nobody sh -c "/usr/bin/iperf3 -s"

vivien

  • Administrateur
  • *
  • Messages: 47 076
    • Twitter LaFibre.info
Abus sur serveur iperf3 public
« Réponse #18 le: 16 juin 2016 à 19:45:20 »
Effectivement, cela fonctionne comme ça :

#!/bin/dash
/bin/sleep 1
/usr/bin/killall iperf3
/bin/sleep 0.1
if [ `ps -C iperf3 | wc -l` != "1" ]
then
  /usr/bin/killall -9 iperf3
  /bin/sleep 0.1
fi
if [ `ps -C iperf3 | wc -l` = "1" ]
then
  echo "lancement de iperf3"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5200 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5201 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5202 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5203 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5204 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5205 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5206 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5207 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5208 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5209 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5210 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  echo "iperf3 ok"
fi

Par contre, les log ne se remplissent qu’après le kill de iperf3 !

J'ai essayé en déplaçant le "&" juste après iperf3tocsv.py et là la redirection n'est pas prise en compte : les log s'affichent en temps réel, mais dans le Shell parent.

J'ai mis en ligne ce premier script sur le site iperf : https://iperf.fr/iperf-download.php#log

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 078
  • Paris (75)
Abus sur serveur iperf3 public
« Réponse #19 le: 16 juin 2016 à 21:51:14 »
Sans doute la taille des bufffers. Il faudrait que je flush dans le script.

Essais avec "python -u /home/vgu/scripts/iperf3tocsv.py" , l'option -u est censée résoudre cela (voir http://linux.die.net/man/1/python ). Sinon tu peux utiliser la commande 'unbuffer' (voir http://linux.die.net/man/1/unbuffer ).

vivien

  • Administrateur
  • *
  • Messages: 47 076
    • Twitter LaFibre.info
Abus sur serveur iperf3 public
« Réponse #20 le: 16 juin 2016 à 22:27:43 »
python -u résout bien le problème.

Voici des suggestions pour la todo liste :
- Afficher dans les logs, le port utilisé coté serveur et coté client
- Afficher le débit moyen en in et en out en Mb/s.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 078
  • Paris (75)
Abus sur serveur iperf3 public
« Réponse #21 le: 17 juin 2016 à 21:25:14 »
je regarde ca à  partir de mardi.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 078
  • Paris (75)
Abus sur serveur iperf3 public
« Réponse #22 le: 25 juin 2016 à 11:50:28 »
j'ai rajouté

"localport" "remoteport" "sent_mbps" et "rcvd_mbps"

maj sur le github ( https://github.com/kgersen/iperf3protect )

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 078
  • Paris (75)
Abus sur serveur iperf3 public
« Réponse #23 le: 12 septembre 2016 à 21:10:06 »
version 1.1 dispo ( https://github.com/kgersen/iperf3protect )

- les noms des colonnes ne sont plus affichés. l'option '-h' permet de les afficher puis arrete le programme.
- ignore la plupart des erreurs et continu. un message est envoyé sur stderr en cas d'erreur
- dépendance a slipstream supprimée

@vivien:

 tu devrais pouvoir repasser le script sur tes rawjson archivées

pour l'option -h, le principe est le suivant:

python iperf3tocsv -h > log.cvs
iperf3 ... | python iperf3tocvs >>log.cvs 2>>error.log


-h affiche donc les entêtes et termine, il fait rien d'autre