R&T R4C11 - Administration Système¶
Description Générale
//Todo
TP2¶
Etape 1 - Vous allez créer une nouvelle machine virtuelle sous QAMU à partir de la machine « Debian12Srv » disponible sur le partage.¶
void
Etape 2 - Après avoir récupérer le fichier d’installation sur Ametice (WebInstall.zip) vous le décompresserez et vous obtiendrez un répertoire « WebServerInstallation »¶
void
Etape 3 - Après avoir analysé le contenu du script install.sh, décrivez rapidement ce qu’il fait.¶
Le script install.sh permet d'installer l'ensemble des services nécessaires et de les configurer.
Etape 4 - Transférez le répertoire via SCP ou autre sur le serveur à configurer et lancez l’installation¶
void
Etape 5 - Vérifiez, après avoir récupéré l’adresse IP du serveur, que vous pouvez bien accéder avec un navigateur¶
void
Etape 6 - Avec une commande nmap intelligemment exécutée, lister tous les services accessibles du serveur et les ports associés, en précisant à quoi les services servent et si leurs ports sont sécurisés.¶
nmap -p- -sV -sC -T4 <IP-SERVER> -vvv
- -p- : tout les ports
- -sV : Service Version
- -sC : scripts par default de nmap
- -T4 : Timing Template, augmente la vitesse du scan
- -v : mode verbeux
Resultats :
Starting Nmap 7.93 ( https://nmap.org ) at 2026-01-30 11:01 CET
NSE: Loaded 155 scripts for scanning.
NSE: Script Pre-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 11:01
Completed NSE at 11:01, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 11:01
Completed NSE at 11:01, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 11:01
Completed NSE at 11:01, 0.00s elapsed
Initiating Parallel DNS resolution of 1 host. at 11:01
Completed Parallel DNS resolution of 1 host. at 11:01, 0.00s elapsed
DNS resolution of 1 IPs took 0.00s. Mode: Async [#: 2, OK: 0, NX: 1, DR: 0, SF: 0, TR: 1, CN: 0]
Initiating SYN Stealth Scan at 11:01
Scanning 192.168.122.102 [65535 ports]
Discovered open port 3306/tcp on 192.168.122.102
Discovered open port 22/tcp on 192.168.122.102
Discovered open port 21/tcp on 192.168.122.102
Discovered open port 443/tcp on 192.168.122.102
Discovered open port 80/tcp on 192.168.122.102
Discovered open port 83/tcp on 192.168.122.102
Discovered open port 81/tcp on 192.168.122.102
Discovered open port 82/tcp on 192.168.122.102
Discovered open port 389/tcp on 192.168.122.102
Completed SYN Stealth Scan at 11:01, 0.71s elapsed (65535 total ports)
Initiating Service scan at 11:01
Scanning 9 services on 192.168.122.102
Completed Service scan at 11:01, 11.02s elapsed (9 services on 1 host)
NSE: Script scanning 192.168.122.102.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 11:01
Completed NSE at 11:01, 5.07s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 11:01
Completed NSE at 11:01, 0.14s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 11:01
Completed NSE at 11:01, 0.00s elapsed
Nmap scan report for 192.168.122.102
Host is up, received localhost-response (0.0000030s latency).
Scanned at 2026-01-30 11:01:42 CET for 17s
Not shown: 65526 closed tcp ports (reset)
PORT STATE SERVICE REASON VERSION
21/tcp open ftp syn-ack ttl 64 vsftpd 3.0.3
22/tcp open ssh syn-ack ttl 64 OpenSSH 9.2p1 Debian 2+deb12u7 (protocol 2.0)
| ssh-hostkey:
| 256 e4d62d84387b5c5d0f27183d0b2108c3 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNR9gb7ORHCXf9Y0udzcOIdA2iujcG/t/Cxxw4yWUS03AbFdeX7mFGrdicACfr3CQ0qWhE62qL6JBt8HNN4aHIA=
| 256 2b6a181d3e91b018ee19dc50a02bec33 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDVQe1I8WX390GG0SLqkumwwmdpoXPUMtqGPOJiCsR5i
80/tcp open http syn-ack ttl 64 Apache httpd 2.4.66
|_http-server-header: Apache/2.4.66 (Debian)
|_http-title: Index of /
| http-methods:
|_ Supported Methods: POST OPTIONS HEAD GET
| http-ls: Volume /
| maxfiles limit reached (10)
| SIZE TIME FILENAME
| - 2026-01-30 10:54 dolibarr/
| 34K 2024-11-27 11:59 dolibarr/COPYING
| 7.1K 2024-11-27 11:59 dolibarr/COPYRIGHT
| 614K 2024-12-29 14:58 dolibarr/ChangeLog
| 1.3K 2024-11-27 11:59 dolibarr/DCO
| 10K 2024-11-27 11:59 dolibarr/README.md
| 8.2K 2024-11-27 11:59 dolibarr/SECURITY.md
| - 2024-12-29 15:04 dolibarr/build/
| 1.5K 2024-11-27 11:59 dolibarr/composer.json.disabled
| - 2024-12-29 14:59 dolibarr/dev/
|_
81/tcp open http syn-ack ttl 64 Apache httpd 2.4.66 ((Debian))
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.66 (Debian)
| http-title: Setup GLPI
|_Requested resource was install/install.php
82/tcp open http syn-ack ttl 64 Apache httpd 2.4.66 ((Debian))
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.66 (Debian)
|_http-favicon: Unknown favicon MD5: DD1E24B1FB6CCA8441671B624B5785DD
| http-robots.txt: 1 disallowed entry
|_/
83/tcp open http syn-ack ttl 64 Apache httpd 2.4.66 ((Debian))
|_http-favicon: Unknown favicon MD5: 531B63A51234BB06C9D77F219EB25553
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-title: phpMyAdmin
|_http-server-header: Apache/2.4.66 (Debian)
| http-robots.txt: 1 disallowed entry
|_/
389/tcp open ldap syn-ack ttl 64 OpenLDAP 2.2.X - 2.3.X
443/tcp open http syn-ack ttl 64 Apache httpd 2.4.66
|_http-server-header: Apache/2.4.66 (Debian)
| http-methods:
|_ Supported Methods: POST OPTIONS HEAD GET
|_http-title: 404 Not Found
3306/tcp open mysql syn-ack ttl 64 MariaDB (unauthorized)
Service Info: Host: 127.0.1.1; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
NSE: Script Post-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 11:01
Completed NSE at 11:01, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 11:01
Completed NSE at 11:01, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 11:01
Completed NSE at 11:01, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 17.48 seconds
Raw packets sent: 65535 (2.884MB) | Rcvd: 131079 (5.505MB)
Etape 7 - Essayer de vous connecter en SSH avec l’utilisateur root sur le serveur ? Y arrivez-vous ? Est-ce normal ?¶
On peut se logger en root, c'est dangereux, par défault impossible de mémoire
Etape 8 - En analysant le fichier /etc/ssh/sshd_config, pouvez-vous corriger le problème ? Comment ?¶
Ouvrir /etc/ssh/sshd_config et commenter la ligne : PermitRootLogin yes
Etape 9 - Comment pourriez-vous plus limiter les connexions en SSH et sécuriser le serveur ?¶
Installer des services de protections comme fail2ban
Etape 10 - Que fait le paquet failtoban ? Installez-le.¶
apt install fail2ban
Etape 11 - Pour chacun des services en écoute sur l’extérieur, pouvez-vous dire s’il est judicieux de laisser ce service installé et cette écoute active sur l’extérieur.¶
- Mariadb:3306 Inutile et dangereux
- ** FTP:21** Dangereux car obsolète
- Slapd:389 Si utile uniquement pour auth interne sert a rien
- PhpMyAdmin:83 Peut etre dangereux si qqn trouve le port
- GLPI:81 & Dolibarr:82 OK
Etape 12 - Supprimer les services non nécessaires.¶
Etape 13 - Modifier le fichier /etc/mysql/mariadb.conf.d/50-server.cnf pour que le serveur n’écoute que localement c’est-à-dire sur 127.0.0.1. Pensez à redémarrer le serveur Mysql et vérifiez la configuration via la commande nmap.¶
Modifier la ligne :bind-address = 0.0.0.0 et mettre 127.0.0.1 à la place du 0.0.0.0
Etape 14 - Installez puis activez le firewall ufw et essayer d’accéder à l’url http://<SERVER-IP>. Que se passe-t’il ? (Pensez à l’aide – man ou help – des commandes).¶
On n'a plus acces à la page
Etape 15 - Autorisez l’accès aux services Web (WWW ALL) dans le firewall et refaites le test de fonctionnement via l’URL.¶
Etape 16 - Exécutez la commande suivante sur le serveur et complétez les invites de commande¶
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
Etape 17 - Lorsque vous accédez à l’adresse http://<SERVER-IP> via le navigateur, la connexion est-elle sécurisée ? Comment le définissez-vous ?¶
La connexion ne semble pas encore sécurisé car pas encore le endpoint https
Etape 18 - Nmap a normalement fait ressortir les ports 81,82,83. En testant ces ports dans l’URL, notez quelle application est associée et si l’accès est sécurisé (Ex. http://<SERVER-IP>:<PORT>)¶
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt * 81 GLPI * 82 Dolibarr
Etape 19 - Dupliquez les fichiers compta.conf, glpi.conf et phpmyadmin.conf respectivement en compta-ssl.conf,glpi-ssl.conf et phpmyadmin.conf puis modifier les fichiers *-ssl.conf pour qu’ils tiennent compte de l’exemple ci-dessus en pensant à changer les ports existants (81,82,83) vers des ports dédiés (ex. 8081,8082,8083).¶
Ensuite rajouter devant le port "80xx" (ex: 81 -> 8081) Et rajouter :SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
entre les deux balises fermantes </Directory> & </VirtualHost>
Etape 20 - Modifiez le fichier /etc/apache2/ports.conf en y rajoutant, dans la partie SSL, les nouveaux ports.¶
et transformer le fichier pour ressembler à cela :Etape 21 - Redémarrez Apache et vérifiez en utilisant l’url https://<SERVER-IP>:<PORT> si le certificat est bien pris en compte. Si oui, les échanges seront bien cryptés.¶
OK -> HTTPS actif mais mais non sécurisé d'apres firefox car certificat auto-signé
Etape 22 - Supprimez le port d’écoute 80 qui n’est pas utile de la configuration Apache2.¶
commenter la ligneListen 80
redémarrer apache2
TP3¶
Installation de GitLab¶
apt update
apt install ca-certificates curl openssh-server postfix tzdata perl
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
apt install gitlab-ee
Securisation¶
Sécurisation SSH¶
Trouver PermitRootLogin et le placer a no
Limiter nombre tentatives MaxAuthTries 2 & MaxSessions 3
Installation de fail2ban
Securisation GitLab¶
placerexternal_url à http://<IP-Machine>
desactivation des ports ouverts et non utiles
Activation SSL¶
sudo mkdir /etc/gitlab/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/gitlab/ssl/nginx-selfsigned.key -out /etc/gitlab/ssl/nginx-selfsigned.crt
nano /etc/gitlab/gitlab.rb
external_url = 'https://<IP-Machine>
nginx['enable'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/nginx-selfsigned.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/nginx-selfsigned.key"
nginx['redirect_http_to_https'] = false
nginx['redirect_http_to_https_port'] = 80
Activation Firewall¶
TP4 – Installation et sécurisation d'un serveur mail Postfix¶
Introduction¶
L'objectif de ce TP est d'installer un serveur de messagerie Postfix sur une machine Debian 12, de le configurer pour permettre l'envoi et la réception d'e-mails via les protocoles IMAPS et SMTPS (avec STARTTLS), puis de le sécuriser en ajoutant :
- Un antivirus (ClamAV) ;
- Un filtre anti-spam (SpamAssassin) ;
- Un client webmail (Rainloop).
1. Mise en place de l'environnement¶
Étape 1 – Création de la machine virtuelle¶
Créer une nouvelle machine virtuelle sous QAMU à partir de l'image Debian12Srv disponible sur le partage réseau.
Identifiants par défaut :
- root / toor
- support / support
Étape 2 – Installation des paquets utiles¶
Exécuter le script d'installation fourni sur Ametice afin d'installer les paquets nécessaires au TP.
Note : Le paquet
Le paquetbsd-mailx(commandentpn'est pas nécessaire : stopper et désactiver le service associé :
2. Installation du serveur Postfix¶
Documentation officielle : https://wiki.debian.org/Postfix
Étape 3 – Installation de Postfix¶
Répondre aux questions de configuration comme suit :
| Paramètre | Valeur |
|---|---|
| Type de configuration | Site Internet |
| System Mail Name | mailserverbut |
Les fichiers de configuration principaux sont :
- /etc/postfix/main.cf
- /etc/postfix/master.cf
Étape 4 – Autoriser le réseau local¶
Modifier /etc/postfix/main.cf pour ajouter le réseau local à la variable mynetworks :
Modifier la ligne mynetworks pour y ajouter le réseau local (exemple avec 192.168.122.0/24) :
Adapter l'adresse réseau selon votre configuration (ex.
192.168.56.0/24pour VirtualBox).
Étape 5 – Redémarrage de Postfix¶
Étape 6 – Vérification de la connexion via Telnet¶
Une bannière Postfix doit apparaître, confirmant que le service est actif :
Pour quitter Telnet : taper :q
3. Gestion des utilisateurs et envoi de mails¶
Étape 7 – Création des utilisateurs¶
Créer deux utilisateurs thomas et leonie. Ne pas utiliser de majuscules ni d'accents dans les noms.
Définir un mot de passe pour chacun (exemple : abc), qui sera utilisé lors de la connexion depuis Thunderbird.
Étape 8 – Envoi de mails en ligne de commande¶
Utiliser la commande mail pour envoyer un e-mail à chaque utilisateur :
echo "Contenu du mail" | mail -s "Titre du mail" thomas
echo "Contenu du mail" | mail -s "Titre du mail" leonie
Étape 9 – Vérification des mails reçus¶
Les mails sont stockés dans /var/mail/ sous forme d'un fichier par utilisateur :
Exemple de mail reçu :
From root@debian12srv Fri Mar 6 14:09:58 2026
Return-Path: <root@debian12srv>
X-Original-To: leonie
Delivered-To: leonie@debian12srv.qamu.local
Subject: objet
From: root <root@debian12srv>
[contenu du mail]
4. Ajout du support IMAP avec Dovecot¶
Étape 10 – Installation de Dovecot¶
Étape 11 – Identification des ports en écoute¶
Les ports attendus après installation :
| Port | Service | Description |
|---|---|---|
| 22/tcp | SSH | Accès distant sécurisé |
| 25/tcp | SMTP | Envoi de mails (non sécurisé) |
| 143/tcp | IMAP | Accès boîte mail (sans chiffrement) |
| 993/tcp | IMAPS | Accès boîte mail (SSL/TLS) |
5. Configuration du client Thunderbird¶
Étape 12 – Création des comptes dans Thunderbird¶
Sur la machine cliente, ajouter dans /etc/hosts l'entrée suivante pour résoudre le nom du serveur :
Adapter l'adresse IP selon votre configuration.
Dans Thunderbird, créer un compte pour chaque utilisateur en configuration manuelle :
Exemple pour thomas :
| Paramètre | Valeur |
|---|---|
| Nom complet | thomas |
| Adresse e-mail | thomas@mailserverbut |
| Mot de passe | abc |
| IMAP – Serveur entrant | |
| Serveur | mailserverbut (ou IP du serveur) |
| Port | 143 |
| Sécurité | STARTTLS |
| SMTP – Serveur sortant | |
| Serveur | mailserverbut (ou IP du serveur) |
| Port | 25 |
| Sécurité | STARTTLS |
Si Thunderbird affiche une alerte de certificat, accepter l'exception de sécurité en cochant "Enregistrer cette exception de manière permanente".
Étape 13 – Vérification de l'envoi/réception¶
Vérifier que les mails envoyés par root sont bien visibles dans la boîte de réception de chaque utilisateur, puis tester l'envoi d'un e-mail de thomas vers leonie et vice-versa.
6. Sécurisation du serveur mail¶
Étape 14 – Analyse de la sécurité par défaut¶
Dans Thunderbird → Paramètres du compte → Serveur entrant : vérifier la sécurité détectée automatiquement.
Par défaut, STARTTLS est utilisé, ce qui permet à la fois les connexions IMAP (port 143, sans chiffrement initial) et IMAPS (port 993, chiffré). La connexion est donc partiellement sécurisée, mais l'authentification sur le port 25 n'est pas encore obligatoire.
Étape 15 – Activation du port 587 (SMTP sécurisé)¶
Différences entre les ports SMTP :
| Port | Usage | Sécurité |
|---|---|---|
| 25 | Échanges entre serveurs mail | STARTTLS, pas d'authentification |
| 587 | Client → serveur mail | Authentification obligatoire + STARTTLS (recommandé) |
| 465 | Client → serveur mail | TLS implicite (encore supporté mais 587 préféré) |
Activation du port 587 côté serveur – décommenter les lignes suivantes dans /etc/postfix/master.cf :
Décommenter :
Redémarrer Postfix :
Modification côté client – Dans Thunderbird :
Paramètres → Account Settings → Outgoing Server (SMTP) → Éditer → changer le port 25 en 587
Configuration SASL avec Dovecot¶
L'authentification SASL (login/password) est gérée par Dovecot. Modifier /etc/postfix/main.cf :
## Commenter la ligne suivante (si présente) :
## cyrus_sasl_config_path = /etc/postfix/sasl
## Ajouter :
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
Ajouter la configuration suivante dans /etc/dovecot/conf.d/10-master.conf, dans le bloc service auth :
service auth {
# ...laisser les lignes existantes...
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
Étape 16 – Vérification des ports ouverts¶
Les ports attendus après activation du port 587 :
tcp 0 0 0.0.0.0:22 LISTEN # SSH
tcp 0 0 0.0.0.0:25 LISTEN # SMTP
tcp 0 0 0.0.0.0:143 LISTEN # IMAP
tcp 0 0 0.0.0.0:587 LISTEN # Submission (SMTP sécurisé)
tcp 0 0 0.0.0.0:993 LISTEN # IMAPS
Le port 25 reste ouvert pour les échanges inter-serveurs. L'accès client doit désormais utiliser le port 587.
Étape 17 – Mise en place du firewall UFW¶
apt install ufw
ufw allow ssh # port 22
ufw allow 143 # IMAP
ufw allow 993 # IMAPS
ufw allow 587 # SMTP sécurisé (Submission)
ufw enable
Vérifier les règles actives :
Résultat attendu :
Status: active
To Action From
-- ------ ----
587 ALLOW Anywhere
22 ALLOW Anywhere
143 ALLOW Anywhere
993 ALLOW Anywhere
Étape 18 – Vérification finale dans Thunderbird¶
Après avoir modifié les ports dans les paramètres de chaque compte Thunderbird (587 pour l'envoi), vérifier que l'envoi et la réception de mails fonctionnent correctement entre thomas et leonie.
7. Pour aller plus loin¶
ClamAV – Antivirus pour les mails¶
Référence : https://ixnfo.com/en/configuring-clamav-postfix.html
Fonctionnement : ClamAV agit comme un proxy entre Postfix et la boîte mail. Le flux est le suivant :
Postfix (reçoit le mail)
→ ClamSMTP :10026 (analyse antivirus)
→ Postfix :10025 (mail vérifié, livraison finale)
Installation :
Configuration de /etc/postfix/main.cf – ajouter :
Configuration de /etc/postfix/master.cf – ajouter en fin de fichier :
scan unix - - n - 16 smtp
-o smtp_send_xforward_command=yes
127.0.0.1:10025 inet n - n - 16 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
Vérification : Après envoi d'un mail, l'en-tête doit contenir :
Rainloop Webmail – Interface web de messagerie¶
Références : https://www.rainloop.net/docs/installation/
Installation des dépendances :
Déploiement de Rainloop :
mkdir /var/www/rainloop
cd /var/www/rainloop
curl -sL https://repository.rainloop.net/installer.php | php
Permissions :
find /var/www/rainloop -type d -exec chmod 755 {} \;
find /var/www/rainloop -type f -exec chmod 644 {} \;
chown -R www-data:www-data /var/www/rainloop/
Création du VirtualHost dans /etc/apache2/sites-available/001-rainloop.conf :
<VirtualHost *:80>
ServerName rainloop.mailserverbut
ServerAlias www.rainloop.mailserverbut
DocumentRoot /var/www/rainloop
ErrorLog ${APACHE_LOG_DIR}/error-rainloop.log
CustomLog ${APACHE_LOG_DIR}/access-rainloop.log combined
<Directory /var/www/rainloop/>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Activation du site :
Sur la machine cliente, ajouter dans /etc/hosts :
Sur le serveur mail, ajouter dans /etc/hosts (ligne 127.0.1.1) :
Configuration via l'interface admin à l'adresse http://www.rainloop.mailserverbut/?admin
Login : admin / Mot de passe : 12345
Dans Domains → Add Domain :
| Paramètre | Valeur |
|---|---|
| Name | mailserverbut |
| IMAP | |
| Server | mailserverbut |
| Port | 143 |
| Secure | STARTTLS |
| Use short login | ✓ |
| SMTP | |
| Server | mailserverbut |
| Port | 587 |
| Secure | STARTTLS |
| Use short login | ✓ |
| Use authentication | ✓ |
Connexion utilisateur via http://www.rainloop.mailserverbut/ :
- Email : thomas@mailserverbut
- Mot de passe : abc
Sécurisation HTTPS de Rainloop¶
Générer un certificat auto-signé :
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/apache-selfsigned.key \
-out /etc/ssl/certs/apache-selfsigned.crt
Modifier /etc/apache2/sites-available/001-rainloop.conf :
<VirtualHost *:443>
ServerName rainloop.mailserverbut
ServerAlias www.rainloop.mailserverbut
DocumentRoot /var/www/rainloop
ErrorLog ${APACHE_LOG_DIR}/error-rainloop.log
CustomLog ${APACHE_LOG_DIR}/access-rainloop.log combined
<Directory /var/www/rainloop/>
AllowOverride All
Require all granted
</Directory>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
</VirtualHost>
Activer le module SSL et redémarrer :
Rainloop est maintenant accessible en HTTPS : https://www.rainloop.mailserverbut/
Le navigateur affichera un avertissement de sécurité car le certificat est auto-signé — c'est attendu.
SpamAssassin – Filtre anti-spam¶
Référence officielle : https://wiki.debian.org/DebianSpamAssassin
Installation :
Configuration de /etc/postfix/master.cf – ajouter -o content_filter=spamassassin sur les lignes smtp et submission, puis ajouter en fin de fichier :
spamassassin unix - n n - - pipe
user=debian-spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
Redémarrer Postfix :
Vérification : Après configuration, les en-têtes des mails doivent contenir les champs SpamAssassin, comme :
X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25)
X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED autolearn=ham
X-AV-Checked: ClamAV using ClamSMTP
Un mail légitime aura un score inférieur à 5.0 et sera marqué No — il sera distribué normalement. Un spam avec un score ≥ 5.0 sera redirigé vers le dossier SPAM.
Récapitulatif des ports utilisés¶
| Port | Protocole | Service | Sécurité |
|---|---|---|---|
| 22 | TCP | SSH | Chiffré |
| 25 | TCP | SMTP | STARTTLS (inter-serveurs) |
| 143 | TCP | IMAP | STARTTLS |
| 587 | TCP | SMTP Submission | STARTTLS + Authentification |
| 993 | TCP | IMAPS | SSL/TLS |
| 80/443 | TCP | HTTP/HTTPS | Apache (Rainloop) |
TP5 – Attaques DDoS (SYN Flood)¶
Introduction¶
L'objectif de ce TP est de mettre en place et d'observer des attaques de type DDoS (Distributed Denial of Service), notamment via une attaque SYN Flood, afin d'en comprendre le fonctionnement et les conséquences sur un serveur cible.
1. Mise en place de l'environnement¶
Étape 1 – Création des machines virtuelles¶
Créer deux nouvelles machines virtuelles sous QAMU à partir de l'image Debian12Srv disponible sur le partage, nommées respectivement server et attack.
Identifiants par défaut :
- root / toor
- support / support
Étape 2 – Installation d'Apache2 sur le serveur cible¶
Sur la machine server, installer Apache2 :
Vérifier l'accès depuis un navigateur via l'IP du serveur : http://<IP-SERVER>
Étape 3 – Installation des outils sur les 3 machines¶
Sur chacune des 3 machines (server, attack, Ubuntu), installer les paquets suivants :
2. Fonctionnement du handshake TCP et notion d'ACK¶
Étape 4 – Explication du handshake TCP¶
L'établissement d'une connexion TCP repose sur un handshake en 3 étapes :
Client Serveur
|--- SYN ------->| (1) Le client demande à ouvrir une connexion
|<-- SYN-ACK ----| (2) Le serveur accepte et confirme
|--- ACK ------->| (3) Le client confirme la réception → connexion établie
L'ACK (Acknowledgment) est un segment de confirmation : il informe l'émetteur que le segment précédent a bien été reçu.
Que se passe-t-il si l'ACK est bloqué ?
Si le client n'envoie jamais le ACK final, le serveur reste en attente de la confirmation et maintient la connexion dans un état SYN_RECV. Le serveur va réémettre le SYN-ACK plusieurs fois avant d'abandonner. Si des milliers de connexions sont ouvertes simultanément sans ACK, la table des connexions du serveur sature — c'est le principe du SYN Flood.
3. Attaque SYN Flood¶
Étape 5 – Identification de la machine cible¶
Utiliser fping pour découvrir les machines actives sur le réseau :
Exemple de résultat :
192.168.122.1 # Passerelle
192.168.122.102 # Serveur cible (Apache)
192.168.122.114 # Autre machine
192.168.122.136 # Machine attaquante
Étape 6 – Scan des ports de la cible¶
Résultat attendu :
Le port 80 (HTTP/Apache2) est ouvert : c'est la cible de l'attaque.
Étape 7 – Lancement de l'attaque SYN Flood (1 machine)¶
Depuis la machine attaquante, lancer la commande suivante :
Options :
- --flood : envoie les paquets aussi vite que possible
- -p 80 : port cible
- -S : flag SYN activé (simule l'initiation de milliers de connexions TCP)
Étape 8 – Observation des effets sur le serveur (1 attaquant)¶
Sur le serveur, lancer htop pour observer l'utilisation des ressources :
CPU : charge montant à 60–70%, avec environ 80 processus Apache actifs.
Réseau (via ifconfig) : afflux massif de paquets entrants (SYN) et sortants (SYN-ACK).
Exemple observé :
RX packets 35353609 bytes 2121404672 (1.9 GiB) ← SYN reçus
TX packets 18909590 bytes 1134971234 (1.0 GiB) ← SYN-ACK envoyés
Connexions (via netstat) : des centaines de connexions en état SYN_RECV, signe que le serveur attend des ACK qui n'arrivent jamais :
tcp6 0 0 192.168.122.102:80 192.168.122.136:21642 SYN_RECV
tcp6 0 0 192.168.122.102:80 192.168.122.136:21656 SYN_RECV
tcp6 0 0 192.168.122.102:80 192.168.122.136:21537 SYN_RECV
[... des centaines de lignes similaires ...]
Étape 9 – Lancement de l'attaque depuis une seconde machine¶
Lancer la même commande hping3 simultanément depuis une deuxième machine attaquante.
Étape 10 – Observation des effets (2 attaquants)¶
Avec deux machines attaquantes en simultané, les effets sont nettement amplifiés :
- Le CPU monte à 90–100%
- La VM cible commence à ne plus répondre (lag, perte de connexion SSH)
- À 100% de CPU, la machine est totalement inaccessible
Étape 11 – Arrêt des attaques et retour à la normale¶
Une fois les commandes hping3 stoppées sur les machines attaquantes, le serveur récupère rapidement :
- CPU retombe à 0–2%
- Les connexions
SYN_RECVdisparaissent progressivement - Le serveur redevient accessible normalement
4. Attaque alternative – HTTP Flood via wget¶
Étape 12 – Attaque par requêtes HTTP répétées¶
Une alternative au SYN Flood consiste à envoyer des requêtes HTTP en boucle, forçant Apache à traiter chaque requête (même vers une URL inexistante).
Script d'attaque :
La variante utilisée avec
-q(quiet) pour ne pas afficher les sorties :
Résultats observés :
| Scénario | CPU serveur cible |
|---|---|
| Sans attaque | 0–2% |
| 1 machine (wget) | ~13% |
| 2 machines (wget) | ~23% |
| 1 machine (hping3 SYN flood) | 60–70% |
| 2 machines (hping3 SYN flood) | 95–100% (machine inaccessible) |
Conclusion : L'attaque par HTTP flood (wget) est nettement moins efficace que le SYN Flood. Elle génère une charge CPU réelle sur Apache mais reste limitée par le débit atteignable en HTTP classique. Dans un contexte réel avec des milliers de machines (botnet), cette approche peut cependant être dévastatrice.
R4.C11 – Sécurité des services réseaux¶
TP6 – Recherche et apprentissages (QCM)¶
L'objectif de ce TP est de vérifier et d'acquérir des connaissances en cybersécurité en répondant à 40 questions.
Questions et réponses¶
1. Qu'est-ce que CVE : « Common Vulnerabilities and Exposures » ?
- Communauté ouverte d'experts, d'industriels, de représentants d'organisation, de définition et de préconisation, normes, d'outils, pour la sécurité du WEB
- Centre d'expertise gouvernemental de Réponse et de Traitement des Attaques informatiques
- ✓ Notation pour identifier d'une manière unique ou convergente les vulnérabilités et leurs expositions
- Langage de requêtes permettant d'extraire des informations d'un document XML
2. Que signifie « CSRF » ?
- Common Script Request Function
- ✓ Cross Site Request Forgery
- Cross Site Response Form
- Complete Strategy Request Forgery
3. Par quel organisme non commercial est prise en charge la sécurité des applications ?
- ✓ OWASP
- SecurityFocus
- CSI
- Sophos
4. L'injection de scripts « côté-client » dans des pages web lues par d'autres utilisateurs est permise par quel type de faille ?
- SQL Injection
- CSRF
- ✓ XSS
- Buffer overflow
5. Les failles de type XSS ou CSRF peuvent être contrées par quel outil ?
- HTTPS-Everywhere
- ✓ NoScript
- Firebug
- Proxyswitch
6. Une attaque APT (menace persistante avancée) est composée de quelles phases ?
- Utilisation d'une porte dérobée, phishing, attaque 0-day, mouvement latéral, récupération d'informations, exfiltration de données
- ✓ Phishing, attaque 0-day, utilisation d'une porte dérobée, mouvement latéral, récupération d'informations, exfiltration de données
- Phishing, attaque 0-day, utilisation d'une porte dérobée, récupération d'informations, exfiltration de données, mouvement latéral
- Phishing, attaque 0-day, mouvement latéral, récupération d'informations, exfiltration de données, utilisation d'une porte dérobée
7. La mission d'autorité nationale en matière de sécurité des systèmes d'information est portée par quel organisme (créé en 2009) ?
- CERTA
- CERT-RENATER
- ANSI
- ✓ ANSSI
8. A quoi correspond l'acronyme APT ?
- Advanced Persistent Trend
- Advanced Polymorphic Threat
- ✓ Advanced Persistent Threat
- Anonymous Persistent Threat
9. Une faille « 0-day » représente :
- ✓ Une faille inconnue et donc « sans correctif » offrant la possibilité de réaliser une attaque
- Une faille inconnue nécessitant peu de temps à l'éditeur pour réaliser son correctif
- Une faille connue obtenue par « reverse engineering » du correctif de l'éditeur
- Une faille connue utilisée lors d'une intrusion sur un serveur « non patché »
10. Le « Social engineering » est permis par :
- Un attaquant se faisant passer pour un utilisateur légitime
- Un attaquant se faisant passer pour une personne importante
- ✓ Un attaquant se faisant passer pour un membre de l'équipe de support technique
- Un attaquant écoutant les conversations de ses collègues
11. En quoi consiste une faille de type « XSS Stored » ?
- ✓ A injecter un script malveillant de manière permanente dans un site web
- A exécuter un script malveillant de manière temporaire dans un site web au travers d'une URL forgée à cet effet
- A injecter un script malveillant au travers d'un document de type « PDF »
- A exécuter un script malveillant au travers d'une vulnérabilité de type CSRF
12. En quoi consiste une faille de type « XSS Reflected » ?
- A injecter un script malveillant de manière permanente dans un site web
- ✓ A exécuter un script malveillant de manière temporaire dans un site web au travers d'une URL forgée à cet effet
- A injecter un script malveillant au travers d'un document de type « PDF »
- A exécuter un script malveillant au travers d'une vulnérabilité de type CSRF
13. Sur quoi se base une attaque appelée « session fixation » ?
- ✓ La définition par l'attaquant de l'identifiant de session utilisé par la victime
- La possibilité pour un utilisateur d'avoir plusieurs sessions actives en même temps
- La validité d'un identifiant de session sans limite dans le temps
- Le caractère prédictif d'un identifiant de session
14. Quelle est la définition qui se rapproche le plus d'un CERT ?
- ✓ Centre d'Expertise gouvernemental de Réponse et de Traitement des attaques informatiques
- Centre d'Expertise gouvernemental de Régulation et de Traitement des données privées
- Centre d'Expertise gouvernemental de Renouvellement et de Traitement des solutions virtualisées
- Cabinet d'Expertise en Reclassement des Travailleurs
15. Parmi les outils ci-dessous lesquels peuvent être utilisés comme « proxy » ?
- ✓ Burp Suite
- ✓ Zap
- Nmap
- Nikto
16. Que permet www.archive.org ?
- D'archiver ses données
- De consulter les archives officielles de services gouvernementaux
- ✓ De retrouver des pages supprimées des sites
- De sécuriser ses données dans le « cloud »
17. A quoi peut servir le site www.exploit-db.com ?
- Pour le Google Hacking
- ✓ Pour trouver une liste des dernières vulnérabilités
- ✓ Pour télécharger des outils de « hacking »
- Pour scanner les vulnérabilités des sites web
18. Dans quelle phase d'attaque l'outil « nmap » est le plus souvent utilisé ?
- ✓ Reconnaissance active
- Maintien d'un accès
- Scanning du réseau de la cible
- Obtention d'un accès
19. Quel outil n'est pas un outil de reconnaissance passive ?
- Maltego
- ✓ Nmap
20. Que permet la reconnaissance active ?
- Obtenir des informations sur une personne sans entrer en contact avec elle directement
- ✓ Obtenir des informations sur une personne en interagissant avec elle
- Utiliser le « social engineering »
- ✓ Effectuer un scan du réseau de l'entreprise où travaille notre cible
21. Que permet « Metasploit » ?
- Il fournit des informations sur les vulnérabilités de systèmes informatiques
- ✓ C'est un outil pour le développement et l'exécution d'exploits
- C'est un scanner de vulnérabilités dynamique
- C'est l'équivalent de Nessus
22. Que permet le Google Hacking ?
- Il utilise un langage de création de requêtes complexes
- ✓ Il détecte les sites web vulnérables à certains exploits, via le Google Doxing
- Il utilise le langage de Google
- Il permet de trouver les hackeurs via internet
23. Dans quel ordre se passent les phases d'une attaque ?
- ✓ Reconnaître, scanner, obtenir un accès, maintenir un accès, couvrir ses traces
- Obtenir un accès, reconnaître, scanner, maintenir un accès, couvrir ses traces
- Obtenir un accès, scanner, reconnaître, maintenir un accès, couvrir ses traces
- Reconnaître, obtenir un accès, scanner, maintenir un accès, couvrir ses traces
24. En quoi consiste le « piggybacking » ?
- Utiliser un faux badge pour pénétrer dans une entreprise
- ✓ Demander à une personne autorisée (ayant un badge) d'entrer avec elle
- Effectuer un « rollback » après une attaque
- Augmenter la sécurité périmétrique de l'entreprise pour éviter les intrusions
25. Une attaque XSS :
- Permet de défigurer un site web
- Permet de forger une URL de phishing pour récupérer les mots de passe des utilisateurs du site
- ✓ Permet de voler un identifiant de session
- Permet de faire un déni de service sur le site web
26. A quoi correspond le terme XXE ?
- ✓ XML eXternal Entity
- eXternal XSS Execution
- Cross eXternal Execution
- XML eXperienced Element
27. Une attaque XXE :
- ✓ Permet d'exfiltrer des données sensibles
- Permet d'importer un fichier DTD stocké sur une URL contrôlée par l'attaquant
- Permet d'injecter du code XML malveillant
- Permet de convertir les données à exfiltrer en « base64 »
28. A quoi correspond l'acronyme RFI en cybersécurité ?
- Remote Folder Interception
- ✓ Remote File Inclusion
- Recursive File Interception
- Remote Filter Inclusion
29. A quoi correspond l'acronyme LFI en cybersécurité ?
- Local Folder Interception
- Lateral File Interception
- ✓ Local File Inclusion
- Local Filter Inclusion
30. A quoi correspond « stored webshell » ?
- ✓ Un fichier devant être stocké sur le serveur pour permettre de prendre la main sur le serveur
- Du code passé dans le paramètre d'une URL permettant de prendre la main sur le serveur
- Un fichier passé directement dans le paramètre d'une URL permettant de prendre la main sur le serveur sans avoir à stocker le fichier sur le serveur
- Une page web affichée en réponse à une requête de l'attaquant
31. A quoi correspond « reflected webshell » ?
- Un fichier devant être stocké sur le serveur pour permettre de prendre la main sur le serveur
- ✓ Du code passé dans le paramètre d'une URL permettant de prendre la main sur le serveur
- Un fichier passé directement dans le paramètre d'une URL permettant de prendre la main sur le serveur sans avoir à stocker le fichier sur le serveur
- Une page web affichée en réponse à une requête de l'attaquant
32. Que signifie l'acronyme CVSS ?
- ✓ Common Vulnerability Scoring System
- Critical Vulnerability Secondary Score
- Critical Vulnerability Scoring Suite
- Common Vulnerability Securing System
33. Que signifie l'acronyme BeEF ?
- ✓ Browser Exploitation Framework project
- Browser Encryption Framework project
- Banner Exploitation Framework project
- Browser Exfiltration Framework project
34. BeEF :
- ✓ Permet de prendre le contrôle d'un browser hameçonné
- Permet d'augmenter la prise de conscience des utilisateurs aux risques liés à internet
- Fournit les outils permettant d'installer un malware sur le poste d'un utilisateur dont le browser est hameçonné
- Fournit des APIs pour automatiser la détection d'un browser hameçonné et les actions à mener sur ce browser
35. Quels interpréteurs peuvent donner lieu à des attaques de type « injection » selon l'OWASP ?
- ✓ LDAP
- ✓ XPATH
- ✓ Les commandes d'un OS
- ✓ XML
36. Quelles sont les affirmations fausses ?
- « testssl.sh » et www.ssllabs.com permettent de détecter les configurations TLS faibles (vraie)
- ✓ Il est conseillé d'utiliser SSL 3.0 (fausse — SSL 3.0 est obsolète et vulnérable)
- ✓ Aucune vulnérabilité SSL n'a été découverte depuis 2013 (fausse — ex. POODLE en 2014)
- Il est conseillé de ne plus utiliser RC4 (vraie)
37. Qu'est-ce qu'une « propriété de sécurité » ?
- La contre-mesure appliquée à une vulnérabilité
- ✓ La disponibilité
- ✓ La confidentialité
- ✓ La non-répudiation
38. En quoi consistent les « données sensibles » ?
- Certaines « metadata »
- ✓ Les numéros des cartes de crédit
- Les résultats d'examen médicaux anonymisés (sans lien avec les patients)
- Une dizaine de noms et prénoms
39. La sensibilité d'une donnée dépend de :
- Son type
- Sa quantité
- ✓ Sa combinaison avec d'autres données
- Sa localisation
40. Quelles sont les fonctions de sécurité (ou contrôles de sécurité) ?
- ✓ L'utilisation d'une suite cryptographique forte
- ✓ L'intégration d'un WAF pour protéger le portail web
- ✓ La formation des développeurs aux bonnes pratiques « sécurité »
- ✓ La mise en place de tests de pénétration périodiques
TP7¶
Mise en place de l'environnement¶
Lister les ports ouverts¶
Changements de configuration SSL¶
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/portainer-selfsigned.key -out /etc/ssl/certs/portainer-selfsigned.crt
Utilisation de templates¶
Cliquer sur environnements "Local" -> Templates/Application -> chercher Mariadb.
Name : MariaDB Network : bridge root password : toto
Pareil pour Joomla.
Name : Joomla Network : bridge MySQL database host : 172.17.0.3r et tous les conteneurs, rédiger u database password : toto