La Fibre

Télécom => Logiciels et systèmes d'exploitation => Ubuntu Tutoriels pour Ubuntu server => Discussion démarrée par: vivien le 14 octobre 2021 à 13:06:08

Titre: iPerf3 : Serveur qui écoute du port 9200 au port 9240
Posté par: vivien le 14 octobre 2021 à 13:06:08
Iperf3 est petit (quelques dizaines de Ko) logiciel en ligne de commande permettant la mesure de différentes variables d'une connexion réseau IP : Débit, perte de paquet,... Il est possible de définir un nombre de threads en parallèle, la durée, le débit si on ne souhaites pas qu'il soit maximum, le protocole de congestion tcp, UDP ou TCP, IPv4 ou IPv6,...

Le port par défaut est le port 5201.
Chaque port ne pouvant être utilisé que par un client, on va configurer l'écoute du port 9200 au port 9240, ce qui diminue la probabilité de tomber sur un port déjà utilisé.

la version d'iPerrf3 livré dans les dépôts d'Ubuntu 20.04 est iPerf 3.7, on va installer la version 3.9.




Tutoriel testé avec Ubuntu version 20.04 et 22.04

Prérequis :
- Base: Installation et sécurisation d'un serveur Ubuntu (https://lafibre.info/ubuntu/securisation-serveur/)

Optionnel pour jumeler iPerf3 avec un serveur Apache qui propose des fichier de différentes tailles sur un même serveur :
- Base: Installation et sécurisation d'Apache2 (https://lafibre.info/ubuntu/apache2/)
- Net-test: fichiers de différente taille, utilisés pour tester son débit (https://lafibre.info/ubuntu/fichiers-net-test/)
La configuration Apache proposée écoute du port 1 au port 9199, tandis que ce tutoriel propose de dédier les ports 9200 à 9240 à iPerf3.




1/ Installation d'iPerf3 sur le système

sudo apt remove iperf3 libiperf0 : On supprime l'ancienne version d'iPerf3 si elle a été installée
sudo apt install libsctp1 : Dépendance pour iPerf3 que l'on installe depuis les dépôts
wget https://iperf.fr/download/ubuntu/libiperf0_3.9-1_amd64.deb : Téléchargement de libiperf0_3.9
wget https://iperf.fr/download/ubuntu/iperf3_3.9-1_amd64.deb : Téléchargement de iperf3_3.9
sudo dpkg -i libiperf0_3.9-1_amd64.deb iperf3_3.9-1_amd64.deb : Installation
rm libiperf0_3.9-1_amd64.deb iperf3_3.9-1_amd64.deb : suppression des fichiers temporaires
Titre: iPerf3 : Serveur qui écoute du port 9200 au port 9240
Posté par: vivien le 14 octobre 2021 à 13:07:31
2/ Lancement automatique d'iPerf3 au démarrage du système :

sudo adduser iperf --disabled-login --gecos iperf
sudo nano /etc/systemd/system/iperf3-server@.service

[Unit]
Description=iperf3 server on port %i
After=syslog.target network.target

[Service]
ExecStart=/usr/bin/iperf3 -s -1 -p %i
Restart=always
RuntimeMaxSec=3600
User=iperf

[Install]
WantedBy=multi-user.target
DefaultInstance=5201

Le "Restart=always" permet de redémarrer iperf3 au bout d'une heure (RuntimeMaxSec=3600) pour limiter les cas de non réponse ou quand le serveur iperf3 s'est terminé de façon brutale.

# penser daemon-reload a chaque modif du fichier
sudo systemctl daemon-reload

# pour activer au boot il faut 'enable' les services (et "disable" donc pour les désactiver)
for p in $(seq 9200 9240); do sudo systemctl enable iperf3-server@$p ; done

$ for p in $(seq 9200 9240); do sudo systemctl enable iperf3-server@$p ; done
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9200.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9201.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9202.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9203.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9204.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9205.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9206.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9207.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9208.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9209.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9210.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9211.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9212.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9213.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9214.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9215.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9216.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9217.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9218.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9219.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9220.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9221.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9222.service → /etc/systemd/system/iperf3-server@.service.
Titre: iPerf3 : Serveur qui écoute du port 9200 au port 9240
Posté par: vivien le 14 octobre 2021 à 13:07:51
3/ Sécurité : bloquer les flux UDP :

Les flux UDP entrainent un petit risque de sécurité (utilisation pour faire du déni de service), je conseille de bloquer les flux UDP.

sudo nano /root/iptables-rules.sh

Copier / coller le texte ci-dessous à la fin du fichier iptables-rules.sh après avoir adapté les ports (ici, on bloque tous le trafic UDP sur les ports 9200 à 9240).
# Sécurité: bloquer le trafic iPerf3 UDP
/usr/sbin/iptables -A INPUT -p udp --dport 9200:9240 -j DROP
/usr/sbin/ip6tables -A INPUT -p udp --dport 9200:9240 -j DROP


4/ Appliquer les modifications et vérifier que tout est conforme :

On redémarre le serveur pour appliquer les changements.
sudo reboot

sudo iptables -L

Vérifier la présence de la ligne DROP  UDP :
DROP       udp  --  anywhere             anywhere             udp dpts:9200:9240
sudo ip6tables -L
Vérifier la présence de la ligne DROP  UDP :
DROP       udp  --  anywhere             anywhere             udp dpts:9200:9240

Pour voir l'état et les logs ce sont les commandes usuelles de systemd :
sudo systemctl status iperf3-server@*
sudo journalctl -u iperf3-server@*
Titre: iPerf3 : Serveur qui écoute du port 9200 au port 9240
Posté par: vivien le 14 octobre 2021 à 13:15:10
Annexes :

Pour information pour démarrer il faut 'start' les services (les services 'enable' vont start au boot tout seuls, la c'est pour lancer manuellement).
for p in $(seq 9200 9240); do sudo systemctl start iperf3-server@$p ; done
et "stop" pour les arrêter.

Pour information pour lister les scripts :
ls /etc/systemd/system/multi-user.target.wants/ | grep iperf3
Titre: iPerf3 : Serveur qui écoute du port 9200 au port 9240
Posté par: vivien le 14 octobre 2021 à 13:15:54
Solution utilisée pour https://appliwave.testdebit.info/ afin de permettre à iPerf3 d'écouter sur appliwave.iperf.fr de tester son débit avec iPerf3 sur tous les ports, du port 1 au port 9199 (sauf le port 5201).

On utilise le script, crée à l'étape 5/ Limitation du nombre de connexion TCP simultanées par IP (https://lafibre.info/ubuntu/securisation-serveur/msg898840/#msg898840).

La solution est de renvoyer les ports sur des process iPerf3 existants, sur les ports 9200 à 9240, car il n'est pas réaliste de lancer 9240 iperf3 sur un même serveur.

sudo nano /root/iptables-rules.sh

Copier / coller le texte ci-dessous à la fin du fichier iptables-rules.sh après avoir modifié les IPv4/IPv6.
# iperf3 TCP - 45.85.134.189 / 2a05:46c0:100:1007::5/64 : appliwave.iperf.fr
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.189 --dport 1:59 -j REDIRECT --to 9219
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::5 --dport 1:59 -j REDIRECT --to 9219
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.189 --dport 60:99 -j REDIRECT --to 9220
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::5 --dport 60:99 -j REDIRECT --to 9220
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.189 --dport 100:199 -j REDIRECT --to 9221
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::5 --dport 100:199 -j REDIRECT --to 9221
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.189 --dport 200:299 -j REDIRECT --to 9222
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::5 --dport 200:299 -j REDIRECT --to 9222
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.189 --dport 300:399 -j REDIRECT --to 9223
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::5 --dport 300:399 -j REDIRECT --to 9223
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.189 --dport 400:499 -j REDIRECT --to 9224
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::5 --dport 400:499 -j REDIRECT --to 9224
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.189 --dport 500:599 -j REDIRECT --to 9225
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::5 --dport 500:599 -j REDIRECT --to 9225
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.189 --dport 600:699 -j REDIRECT --to 9226
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::5 --dport 600:699 -j REDIRECT --to 9226
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.189 --dport 700:799 -j REDIRECT --to 9227
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::5 --dport 700:799 -j REDIRECT --to 9227
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.189 --dport 800:899 -j REDIRECT --to 9228
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::5 --dport 800:899 -j REDIRECT --to 9228
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.189 --dport 900:999 -j REDIRECT --to 9229
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::5 --dport 900:999 -j REDIRECT --to 9229
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.189 --dport 1000:1999 -j REDIRECT --to 9231
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::5 --dport 1000:1999 -j REDIRECT --to 9231
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.189 --dport 2000:2999 -j REDIRECT --to 9232
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::5 --dport 2000:2999 -j REDIRECT --to 9232
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.189 --dport 3000:3999 -j REDIRECT --to 9233
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::5 --dport 3000:3999 -j REDIRECT --to 9233
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.189 --dport 4000:5200 -j REDIRECT --to 9234
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::5 --dport 4000:5200 -j REDIRECT --to 9234
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.189 --dport 5202:5999 -j REDIRECT --to 9235
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::5 --dport 5202:5999 -j REDIRECT --to 9235
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.189 --dport 6000:6999 -j REDIRECT --to 9236
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::5 --dport 6000:6999 -j REDIRECT --to 9236
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.189 --dport 7000:7999 -j REDIRECT --to 9237
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::5 --dport 7000:7999 -j REDIRECT --to 9237
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.189 --dport 8000:8999 -j REDIRECT --to 9238
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::5 --dport 8000:8999 -j REDIRECT --to 9238
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.189 --dport 9000:9199 -j REDIRECT --to 9239
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::5 --dport 9000:9199 -j REDIRECT --to 9239

Vérifications après redémarrage :
sudo iptables -L -t nat