La Fibre
Télécom => Logiciels et systèmes d'exploitation => Tutoriels pour Ubuntu server => Discussion démarrée par: vivien le 14 octobre 2021 à 09:25:13
-
(https://lafibre.info/images/logo/logo_testdebit.webp)
Il s'agit de mettre en place des fichiers de différente taille, utilisés pour tester son débit, comme sur https://appliwave.testdebit.info/ ou https://bouygues.testdebit.info/
Afin d'avoir de hautes performances, les fichiers sont dans un ramdisque.
Ce tutoriel inclut également tout le nécessaire pour que le serveur devienne un serveur officiel de QoSi / MOZARK, l'éditeur de 5GMark.
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/) (PHP est nécessaire pour le script d'upload de QoSi)
- Base: Installation et sécurisation d'Apache2 (https://lafibre.info/ubuntu/apache2/)
1/ Installation de fichiers de test de débit
sudo -s
apt install lz4
LZ4 a été retenu car c'est l'algorithme qui permet d'voir une décompression très rapide, l’utilisation du CPU est 10 fois plus faible que gzip pour un ratio de compression équivalent.
adduser net-test --disabled-login --gecos net-test
chmod 755 /home/net-test
cd /home/net-test
Mise en place des fichiers qui ne sont pas dans le ramdisque :
wget -O /home/net-test/web.tar.gz https://soft.lafibre.info/download/web/net-test/web.tar.gz
tar -xvzf web.tar.gz
chown www-data:www-data /home/net-test/web
wget -O /home/net-test/ul.tar.gz https://soft.lafibre.info/download/web/net-test/ul.tar.gz
tar -xvzf ul.tar.gz
chown www-data:www-data /home/net-test/ul
wget -O /home/net-test/videos.tar.gz https://test.5gmark.com/videos.tar.gz
tar -xvzf videos.tar.gz
chown www-data:www-data /home/net-test/videos
Téléchargement du logo de l'opérateur de 100 pixels de hauteur :
- Hivane: wget -O /home/net-test/web/logo.webp https://lafibre.info/images/logo/logo_hivane.webp
- Appliwave: wget -O /home/net-test/web/logo.webp https://lafibre.info/images/pro/logo_appliwave.webp
- Scaleway: wget -O /home/net-test/web/logo.webp https://lafibre.info/images/online/logo_scaleway.webp
- Bouygues : wget -O /home/net-test/web/logo.webp https://lafibre.info/images/bytel/logo_bouygues_telecom.webp
-
2/ Création du ramdique et télécharger le fichier qui le remplira
mkdir -p /home/net-test/tmpfs
chmod 777 /home/net-test/tmpfs
echo "# RamDisque pour Net-test" >> /etc/fstab
1/ Serveurs avec 32Go de ram (ou plus) : Hébergement en ramdisque de 22 Go qui sera utilisé à 59%
echo "tmpfs /home/net-test/tmpfs tmpfs defaults,size=22G 0 0" >> /etc/fstab
wget -O /home/net-test/net-test.tar.lz4 https://soft.lafibre.info/download/web/net-test/net-test_13815m.tar.lz4
2/ Serveurs avec 8Go de ram (ou plus) : Hébergement en ramdisque de 6 Go qui sera utilisé à 60%
echo "tmpfs /home/net-test/tmpfs tmpfs defaults,size=6G 0 0" >> /etc/fstab
wget -O /home/net-test/net-test.tar.lz4 https://soft.lafibre.info/download/web/net-test/net-test_3815m.tar.lz4
Vérification :
nano /etc/fstab
mount -a permet de monter tous les systèmes de fichiers déclarés dans le fichier /etc/fstab.
=> Vérifier l'absence d'erreur.
net-test_13815m.tar.lz4 : 13,815 Go Tous les fichiers soit 1 de 10 Go et 3 de chaque taille en-dessous + fichiers QoSi (512-rand.png + 2k.zip + 50Mi-rand.zip + 250Mi-rand.zip)
10000000000 10G.zip
1000000000 1G-rand.zip
1000000000 1G-zero.zip
1000000000 1G.zip
262144000 250Mi-rand.zip
100000000 100M-rand.zip
100000000 100M-zero.zip
100000000 100M.zip
52428800 50Mi-rand.zip
50000000 50M-rand.zip
50000000 50M-zero.zip
50000000 50M.zip
10000000 10M-rand.zip
10000000 10M-zero.zip
10000000 10M.zip
5000000 5M-rand.zip
5000000 5M-zero.zip
5000000 5M.zip
1000000 1M-rand.zip
1000000 1M-zero.zip
1000000 1M.zip
500000 500k.jpg
500000 500k-rand.jpg
500000 500k-zero.jpg
100000 100k.jpg
100000 100k-rand.jpg
100000 100k-zero.jpg
50000 50k.jpg
50000 50k-rand.jpg
50000 50k-zero.jpg
10000 10k.jpg
10000 10k-rand.jpg
10000 10k-zero.jpg
5000 5k.jpg
5000 5k-rand.jpg
5000 5k-zero.jpg
1000 1k.jpg
1000 1k-rand.jpg
1000 1k-zero.jpg
512 512-rand.png
500 500.png
500 500-rand.png
500 500-zero.png
100 100.png
100 100-rand.png
100 100-zero.png
50 50.gif
50 50-rand.gif
50 50-zero.gif
10 10.exe
10 10-rand.exe
10 10-zero.exe
5 5.exe
5 5-rand.exe
5 5-zero.exe
1 1.exe
1 1-rand.exe
1 1-zero.exe
0 0.exe
0 0-rand.exe
0 0-zero.exe
net-test_3815m.tar.lz4 : 3,815 Go Idem net-test_13762m.tar.lz4, sans le fichier de 10 Go
net-test_1415m.tar.lz4 : 1,415 Go 5 fichiers "rand" uniquement : 1 Go , 100 Mo + fichiers Arcep/QoSi (512-rand.png + 2k.zip + 50Mi-rand.zip + 250Mi-rand.zip) + sha256sum.txt
net-test_1166m.tar.lz4 : 1,166 Go décompressé, seulement 4,6 Mo compressé => 1166 Mo décompressé. 6 fichiers "zero" uniquement : 1 Go, 100 Mo, 50 Mo, 10 Mo, 5 Mo et 1 Mo + sha256sum.txt
net-test_315m.tar.lz4 : 315 Mo. 3 fichiers "rand" + 2k.zip : les fichiers Arcep/QoSi (512-rand.png + 2k.zip + 50Mi-rand.zip + 250Mi-rand.zip) et sha256sum.txt correspondant
-
3/ Configurer Apache2
Cas où Apache écoute sur toutes les IP : Demander Apache d'écouter sur le port 81 et 444 en plus du port 80 et 443 standard :
echo -e "Listen 80\nListen 81 http\nListen 443\nListen 444 https" > /etc/apache2/ports.conf
Voir en annexe si vous souhaitez que Apache n'écoute que sur une partie des IP du serveur.
Sécurité : Configurer le VirtualHost par défaut pour qu'il écoute sur le port 81 et 444 :
sed -i -e "s/<VirtualHost \*:80>/<VirtualHost \*:80 \*:81>/g" /etc/apache2/sites-available/000-default.conf
sed -i -e "s/<VirtualHost \*:443>/<VirtualHost \*:443 \*:444>/g" /etc/apache2/sites-available/000-default.conf
Configuration du VirtualHost Net-test :
wget -O /etc/apache2/sites-available/net-test.conf https://soft.lafibre.info/download/web/net-test/apache2-net-test-tmp.conf
changer le nom de domaine :
sed -i -e "s/domain-name.com/1.testdebit.info/g" /etc/apache2/sites-available/net-test.conf (remplacez 1.testdebit.info par le nom de domaine du serveur Net-test)
Vérifiez que les différents nom de domaines sont ok :
nano /etc/apache2/sites-available/net-test.conf
a2ensite net-test.conf ; systemctl restart apache2
-
4/ Installation du certificat Let's Encrypt
On utiliser Certbot, qui doit être déjà installé, cf section 9/ Installation des pré-requis pour avoir un certificat TLS Let's Encrypt (https://lafibre.info/ubuntu/apache2/msg898862/#msg898862).
Demande du certificat : (le DNS doit pointer les IP vers le serveur sans quoi cela sera un échec)
certbot certonly --apache --domains scaleway.testdebit.info,ipv4.scaleway.testdebit.info,ipv6.scaleway.testdebit.info
5/ Mise en place du certificat dans la configuration Apache
wget -O /etc/apache2/sites-available/net-test.conf https://soft.lafibre.info/download/web/net-test/apache2-net-test.conf
changer le nom de domaine :
sed -i -e "s/domain-name.com/1.testdebit.info/g" /etc/apache2/sites-available/net-test.conf (remplacez 1.testdebit.info par le nom de domaine du serveur Net-test)
-
6/ Fichiers cron pour remplir le ramdisque au démarrage
Le script permet de faire plusieurs choses au démarrage du serveur :
- Décompression et mise en place des fichiers de test
- Mise en place de liens physique afin de mettre à disposition plusieurs extensions pour un même fichier situé dans le ramdisque
- Récupération de la page index.html qui est mise à jour régulièrement. Cette récupération se fait avec le nom du serveur qu'il faut me transmettre, afin que je prépare le script de génération du fichier index.html.
wget -O /home/net-test/net-test-filling-tmpfs.sh https://soft.lafibre.info/download/web/net-test/net-test-filling-tmpfs.sh ; chmod +x /home/net-test/net-test-filling-tmpfs.sh
echo "# Extraction des fichiers Net-test vers le ram disque au reboot" > /etc/cron.d/net-test
echo "@reboot net-test sleep 15 ; /home/net-test/net-test-filling-tmpfs.sh" >> /etc/cron.d/net-test
-
7/ Configuration d'iptables
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).
Voici ce que vont faire les commandes ci-dessous :
- Port 1 > 79 =redirection iptables=> Port 444 (https)
- Port 80 =on ne fait rien=> Écouté par Apache2 (http)
- Port 81 =on ne fait rien=> Écouté par Apache2 (http)
- Port 82 > 442 =redirection iptables=> Port 444 (https)
- Port 443 =on ne fait rien=> Écouté par Apache2 (https)
- Port 444 =on ne fait rien=> Écouté par Apache2 (https)
- Port 445 > 9199 =redirection iptables=> Port 444 (https)
- Port 9200 > 9222 =on ne fait rien=> Écouté par iPerf3 si installé
nano /root/iptables-rules.sh
Copier / coller le texte ci-dessous à la fin du fichier iptables-rules.sh après avoir fait un recherché / remplacé de a.b.c.d par l'IPv4 et de x:x:x:x:x:x:x:x par l'IPv6:
# Net-test
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d a.b.c.d --dport 1:79 -j REDIRECT --to 444
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d x:x:x:x:x:x:x:x --dport 1:79 -j REDIRECT --to 444
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d a.b.c.d --dport 82:442 -j REDIRECT --to 444
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d x:x:x:x:x:x:x:x --dport 82:442 -j REDIRECT --to 444
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d a.b.c.d --dport 445:9199 -j REDIRECT --to 444
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d x:x:x:x:x:x:x:x --dport 445:9199 -j REDIRECT --to 444
Exemple de configuration plus complexe avec deux IP :
- 45.85.134.187 / 2a05:46c0:100:1007::3/64 : tous les ports écoutent en https sauf le port 80
- 45.85.134.188 / 2a05:46c0:100:1007::4/64 : tous les ports écoutent en http
# Net-test https
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.187 --dport 1:79 -j REDIRECT --to 444
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::3 --dport 1:79 -j REDIRECT --to 444
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.187 --dport 82:442 -j REDIRECT --to 444
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::3 --dport 82:442 -j REDIRECT --to 444
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.187 --dport 445:9199 -j REDIRECT --to 444
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::3 --dport 445:9199 -j REDIRECT --to 444
# Net-test http
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.188 --dport 1:79 -j REDIRECT --to 81
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::4 --dport 1:79 -j REDIRECT --to 81
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 45.85.134.188 --dport 82:9199 -j REDIRECT --to 81
/usr/sbin/ip6tables -t nat -A PREROUTING -p tcp -d 2a05:46c0:100:1007::4 --dport 82:9199 -j REDIRECT --to 81
-
8/ Vérifier que tout est ok
Redémarrer le serveur: reboot
Une fois redémarré depuis 3 minutes, vérifier que tout est ok :
1/ Le ramdisque est bien crée et il est rempli à près de 60%
2/ Le fichier index.html s'est bien téléchargé (il doit faire plus de 100 Ko)
3/ Vérifier les sommes de contrôle :
cd /home/net-test/tmpfs/
sha256sum -c /home/net-test/tmpfs/sha256sum.txt
4/ Aller sur le site pour vérifier que le certificat https fonctionne et est valide
5/ Vérifier que l'upload est bien possible : Tutoriel pour Windows (https://lafibre.info/tester-son-debit/curl-upload/msg438530/#msg438530), pour Linux (https://lafibre.info/tester-son-debit/curl-linux/msg438534/#msg438534) ou pour MacOS (https://lafibre.info/tester-son-debit/curl-mac/msg438538/#msg438538).
6/ Vérifications IPtables : sudo iptables -L -t nat
-
Annexes
Fichiers proposés par Net-test
- net-test_13762m.tar.lz4 => 13 Go 762 Mo décompressé (inclus le fichier de 10 Go)
- net-test_3762m.tar.lz4 => 3Go 762 Mo décompressé (sans le fichier de 10 Go)
- net-test_1362m.tar.lz4 => 1Go 362 Mo décompressé : 1G-rand.zip + 250Mi-rand.zip + 100M-rand.zip + sha256sum.txt
- net-test_1166m.tar.lz4 (4,6 Mo compressé) => 1 Go 166 Mo décompressé : 1G-zero.zip + 100M-zero.zip + 50M-zero.zip + 10M-zero.zip + 5M-zero.zip + 1M-zero.zip + sha256sum.txt
- net-test_262m.tar.lz4 => 262 Mo uniquement le fichier 250Mi-rand.zip et sha256sum.txt correspondant
Liste des fichiers proposés :
10000000000 10G.zip
1000000000 1G-rand.zip
1000000000 1G-zero.zip
1000000000 1G.zip
262144000 250Mi-rand.zip
100000000 100M-rand.zip
100000000 100M-zero.zip
100000000 100M.zip
50000000 50M-rand.zip
50000000 50M-zero.zip
50000000 50M.zip
10000000 10M-rand.zip
10000000 10M-zero.zip
10000000 10M.zip
5000000 5M-rand.zip
5000000 5M-zero.zip
5000000 5M.zip
1000000 1M-rand.zip
1000000 1M-zero.zip
1000000 1M.zip
500000 500k.jpg
500000 500k-rand.jpg
500000 500k-zero.jpg
100000 100k.jpg
100000 100k-rand.jpg
100000 100k-zero.jpg
50000 50k.jpg
50000 50k-rand.jpg
50000 50k-zero.jpg
10000 10k.jpg
10000 10k-rand.jpg
10000 10k-zero.jpg
5000 5k.jpg
5000 5k-rand.jpg
5000 5k-zero.jpg
1000 1k.jpg
1000 1k-rand.jpg
1000 1k-zero.jpg
500 500.png
500 500-rand.png
500 500-zero.png
100 100.png
100 100-rand.png
100 100-zero.png
50 50.gif
50 50-rand.gif
50 50-zero.gif
10 10.exe
10 10-rand.exe
10 10-zero.exe
5 5.exe
5 5-rand.exe
5 5-zero.exe
1 1.exe
1 1-rand.exe
1 1-zero.exe
0 0.exe
0 0-rand.exe
0 0-zero.exe
Les étapes de la création d'un fichier :
touch -t 202105010000 *
rm sha256sum.txt
sha256sum * > sha256sum.txt
touch -t 202105010000 *
sha256sum -c sha256sum.txt
tar --create -vf ../net-test.tar * => pour avoir la taille non compressée
tar cvf - * | lz4 > ../net-test_13762m.tar.lz4
-
Configuration du /etc/apache2/ports.conf pour que Apache n'écoute pas sur toutes les IP possédées par le serveur.
Cela ne concerne que quelques cas où les serveurs qui ont plusieurs IPv4 et IPv6 ET où ne faut pas que Apache écoute sur toutes ses IP.
Se baser sur ce type de configuration :
nano /etc/apache2/ports.conf
# IP localhost
Listen 127.0.0.1:80
Listen [::1]:80
Listen 127.0.0.1:443
Listen [::1]:443
# IP N°1 : Net-test
Listen xx.xx.xx.2:80
Listen [xx:xx:xx:xx::2]:80
Listen xx.xx.xx.2:443
Listen [xx:xx:xx:xx::2]:443
Listen xx.xx.xx.2:81 http
Listen [xx:xx:xx:xx::2]:81 http
Listen xx.xx.xx.2:444 https
Listen [xx:xx:xx:xx::2]:444 https
# IP N°2 : Service autre (SpeedTest par exemple)
Listen xx.xx.xx.3:80
Listen [xx:xx:xx:xx::3]:80
Listen xx.xx.xx.3:443
Listen [xx:xx:xx:xx::3]:443
# IP N°3 : Service autre
Listen xx.xx.xx.4:80
Listen [xx:xx:xx:xx::4]:80
Listen xx.xx.xx.4:443
Listen [xx:xx:xx:xx::4]:443