Aller au contenu

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.

sudo systemctl stop vsftpd
sudo apt purge vsftpd
sudo apt autoremove

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.

nano /etc/mysql/mariadb.conf.d/50-server.cnf
Modifier la ligne : bind-address = 0.0.0.0 et mettre 127.0.0.1 à la place du 0.0.0.0

systemctl restart mariadb

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).

apt install ufw
ufw enable
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.

ufw allow 80/tcp
ufw allow 81/tcp
ufw allow 82/tcp
ufw allow 443/tcp
ufw reload

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).

cp compta.conf compta-ssl.conf
cp glpi.conf glpi-ssl.conf
cp phpmyadmin.conf phpmyadmin-ssl.conf
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.

nano /etc/apache2/ports.conf
et transformer le fichier pour ressembler à cela :
<IfModule ssl_module>
        Listen 443
        Listen 8081
        Listen 8082
</IfModule>

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.

a2ensite compta-ssl.conf
a2ensite glpi-ssl.conf
systemctl restart apache2
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.

nano /etc/apache2/ports.conf
commenter la ligne Listen 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
nano /etc/ssh/sshd_config

Trouver PermitRootLogin et le placer a no Limiter nombre tentatives MaxAuthTries 2 & MaxSessions 3

Installation de fail2ban

sudo apt install fail2ban
Securisation GitLab

sudo gitlab-ctl reconfigure
nano /etc/gitlab/gitlab.rb
placer external_url à http://<IP-Machine>

sudo gitlab-ctl reconfigure

desactivation des ports ouverts et non utiles

sudo systemctl stop postfix.service && sudo systemctl disable postfix.service
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
décommenter les lignes suivantes :

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
sudo apt install ufw
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw enable

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 bsd-mailx (commande mail) peut ne pas s'installer automatiquement via le script. L'installer manuellement si besoin :

apt install bsd-mailx
Le paquet ntp n'est pas nécessaire : stopper et désactiver le service associé :
systemctl stop ntpsec.service
systemctl disable ntpsec.service


2. Installation du serveur Postfix

Documentation officielle : https://wiki.debian.org/Postfix

Étape 3 – Installation de Postfix

apt install 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 :

nano /etc/postfix/main.cf

Modifier la ligne mynetworks pour y ajouter le réseau local (exemple avec 192.168.122.0/24) :

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.122.0/24

Adapter l'adresse réseau selon votre configuration (ex. 192.168.56.0/24 pour VirtualBox).

Étape 5 – Redémarrage de Postfix

systemctl restart postfix

Étape 6 – Vérification de la connexion via Telnet

telnet localhost 25

Une bannière Postfix doit apparaître, confirmant que le service est actif :

220 debian12srv.qamu.local ESMTP Postfix (Debian/GNU)

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.

adduser thomas
adduser leonie

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 :

ls /var/mail/
cat /var/mail/leonie

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

apt install dovecot-core dovecot-imapd

Étape 11 – Identification des ports en écoute

nmap -sS localhost

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 :

192.168.122.102  mailserverbut

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 :

nano /etc/postfix/master.cf

Décommenter :

submission inet n       -       y       -       -       smtpd
  -o smtpd_sasl_auth_enable=yes

Redémarrer Postfix :

systemctl restart 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

netstat -laputen | grep LISTEN

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 :

ufw status

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 :

apt install clamav-daemon clamsmtp clamav

Configuration de /etc/postfix/main.cf – ajouter :

content_filter = scan:[127.0.0.1]:10026
receive_override_options = no_address_mappings

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 :

X-AV-Checked: ClamAV using ClamSMTP

Rainloop Webmail – Interface web de messagerie

Références : https://www.rainloop.net/docs/installation/

Installation des dépendances :

apt install apache2 php php-curl php-xml

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 :

a2ensite 001-rainloop.conf
systemctl restart apache2
ufw allow 80

Sur la machine cliente, ajouter dans /etc/hosts :

192.168.122.102  rainloop.mailserverbut

Sur le serveur mail, ajouter dans /etc/hosts (ligne 127.0.1.1) :

127.0.1.1  mailserverbut

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 :

a2enmod ssl
systemctl restart apache2
ufw reject http
ufw allow https

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 :

apt install spamassassin

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 :

systemctl restart 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 :

apt install 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 :

apt install htop net-tools hping3

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 :

fping -g 192.168.122.0/24 -a 2> /dev/null

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

nmap 192.168.122.102

Résultat attendu :

PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

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 :

hping3 --flood -p 80 -S 192.168.122.102

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 :

netstat -laputen
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_RECV disparaissent 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 :

#!/bin/bash
while [ 1 -eq 1 ]
do
    wget --tries=0 --retry-connrefused 192.168.122.102/test
done

La variante utilisée avec -q (quiet) pour ne pas afficher les sorties :

wget --quiet 192.168.122.102/lien_qui_nexiste_pas

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
  • Google
  • Facebook
  • ✓ 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

PORT     STATE    SERVICE
22/tcp   open     ssh
8000/tcp filtered http-alt
9443/tcp filtered tungsten-https

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
Settings > Général ; forcer le https Only

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