« SE5 IdO sécurité des objets 2025/2026 b2 » : différence entre les versions
(Page créée avec « TP Réseau 2025/2026 – Wiki SE5-kelbachi 1. Création du serveur virtuel Création d’une VM Xen avec xen-create-image : xen-create-image \ --hostname=SE5.kelbachi \ --dhcp \ --bridge=bridgeStudents \ --dir=/usr/local/xen \ --size=10GB \ --dist=daedalus \ --memory=2G \ --force La configuration est générée dans /etc/xen/SE5.kelbachi.cfg. La VM est démarrée avec : xl create -c /etc/xen/SE5.kelbachi.cfg Configur... ») |
mAucun résumé des modifications |
||
| Ligne 1 : | Ligne 1 : | ||
=<div class="mcwiki-header" style="border-radius: 40px; padding: 15px; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 130%; background: #14164f; vertical-align: top; width: 98%; font-family: 'Poppins', sans-serif;"> Infrastructure Réseau – Binôme SE5.kelbachi · X=09 · VLAN 409 🚀 </div>= | |||
== <span style="color:#34495E;font-weight: bold; font-size: 130%">Introduction</span> == | |||
Ce wiki documente la mise en place d’une petite infrastructure réseau pédagogique pour le **TP 2025/2026**. | |||
L’objectif est de **déployer un serveur virtuel** sur ''capbreton'', d’y **terminer un VLAN privé** (ici **409** car X=09), puis d’implanter les services exigés : **DHCP**, **DNS (forwarder + zone locale d’interception)**, **NAT/mascarade**, et **redirection réseau** pour l’HTTP. | |||
Des choix techniques sont explicités à chaque étape (pourquoi tel fichier, telle option, tel service), afin d’argumenter les décisions et permettre la reproductibilité. | |||
--- | |||
== <span style="color:#34495E;font-weight: bold; font-size: 130%">Serveur virtuel (17/09)</span> == | |||
La VM est créée sur **Xen** depuis ''capbreton'' avec une unique interface reliée à **bridgeStudents**, conformément au sujet (routage par **172.26.145.251** côté salles projets). | |||
<syntaxhighlight lang="bash"> | |||
xen-create-image \ | xen-create-image \ | ||
--hostname=SE5.kelbachi \ | |||
--dhcp \ | |||
--bridge=bridgeStudents \ | |||
--dir=/usr/local/xen \ | |||
--size=10GB \ | |||
--dist=daedalus \ | |||
--memory=2G \ | |||
--force | |||
</syntaxhighlight> | |||
; **Pourquoi cette commande ?** | |||
: *`--bridge=bridgeStudents`* impose l’unique attachement réseau demandé ; *`--dist=daedalus`* assure une base Devuan stable (ifupdown classique) ; les ressources (2 Gio RAM/10 Gio disque) suffisent pour DHCP/DNS/NAT. | |||
Démarrage et accès console : | |||
<syntaxhighlight lang="bash"> | |||
xl create -c /etc/xen/SE5.kelbachi.cfg | xl create -c /etc/xen/SE5.kelbachi.cfg | ||
# Ctrl+] pour détacher la console sans éteindre | |||
</syntaxhighlight> | |||
=== Adresse routée (réseau des salles projets) === | |||
Configuration statique avec passerelle **172.26.145.251**. On choisit une IP libre dans la plage fournie (exemple **172.26.145.100/24**). | |||
<syntaxhighlight lang="linux-config"> | |||
# /etc/network/interfaces (extrait) | |||
auto lo | auto lo | ||
iface lo inet loopback | iface lo inet loopback | ||
auto eth0 | auto eth0 | ||
iface eth0 inet static | iface eth0 inet static | ||
address 172.26.145.100/24 | |||
gateway 172.26.145.251 | |||
dns-nameservers 1.1.1.1 8.8.8.8 | |||
</syntaxhighlight> | |||
; **Pourquoi une IP statique ?** | |||
: Le sujet exige un adressage maîtrisé côté salles projets et une **route par défaut** vers le routeur NAT de la salle (**.251**). C’est la base pour que la VM accède à Internet et puisse, ensuite, NATer les clients WiFi. | |||
=== Interface privée (VLAN 409) === | |||
Le réseau privé associé à X=09 est **172.16.9.0/24**. La VM termine ce VLAN avec l’adresse **172.16.9.1/24** (gateway & DNS pour les clients). | |||
Dans notre mise en place, l’interface privée est **eth1**. | |||
<syntaxhighlight lang="linux-config"> | |||
# /etc/network/interfaces (complément) | |||
auto eth1 | |||
iface eth1 inet static | |||
address 172.16.9.1/24 | |||
</syntaxhighlight> | |||
Vérifications : | |||
<syntaxhighlight lang="bash"> | |||
ip a | |||
ip r | |||
ping -c3 172.26.145.251 | |||
ping -c3 8.8.8.8 | |||
</syntaxhighlight> | |||
--- | |||
== <span style="color:#34495E;font-weight: bold; font-size: 130%">Point d’accès Cisco – SSID WPA2-PSK (29/09)</span> == | |||
Connexion **console série** (9600 8N1, sans control flow). | |||
Après habilitation, création d’un **SSID** attaché au **VLAN 409** et activé sur la radio 2.4 GHz avec chiffrement **AES-CCMP** (WPA2-PSK). | |||
<syntaxhighlight lang="bash"> | |||
dot11 ssid SE5-SSID09 | |||
vlan 409 | |||
authentication open | |||
authentication key-management wpa version 2 | |||
wpa-psk ascii Cisco2025 | |||
exit | |||
interface dot11radio 0 | |||
encryption mode ciphers aes-ccm | |||
ssid SE5-SSID09 | |||
station-role root | |||
no shutdown | |||
</syntaxhighlight> | |||
; **Pourquoi WPA2/AES ?** | |||
: Le sujet impose **WPA2-PSK**. Le couple *key-management wpa version 2* + *aes-ccm* répond à ce niveau de sécurité. Le VLAN est imposé pour isoler le trafic WiFi. | |||
--- | --- | ||
== <span style="color:#34495E;font-weight: bold; font-size: 130%">Serveur DHCP (29/09)</span> == | |||
Distribution automatisée d’adresses **172.16.9.100–200** aux clients du VLAN 409, avec **routeur** et **DNS** pointant vers la VM (**172.16.9.1**). | |||
Installation : | |||
<syntaxhighlight lang="bash"> | |||
apt-get update | |||
apt-get install -y isc-dhcp-server | |||
</syntaxhighlight> | |||
Configuration : | |||
<syntaxhighlight lang="linux-config"> | |||
# /etc/dhcp/dhcpd.conf | |||
default-lease-time 600; | |||
max-lease-time 7200; | |||
authoritative; | |||
subnet 172.16.9.0 netmask 255.255.255.0 { | |||
range 172.16.9.100 172.16.9.200; | |||
option routers 172.16.9.1; | |||
option domain-name-servers 172.16.9.1; | |||
} | |||
</syntaxhighlight> | |||
Interface d’écoute : | |||
<syntaxhighlight lang="linux-config"> | |||
# /etc/default/isc-dhcp-server | |||
INTERFACESv4="eth1" | |||
</syntaxhighlight> | |||
; **Pourquoi donner notre DNS en option ?** | |||
: Pour l’**interception DNS** ultérieure, **tous les clients** doivent interroger **notre** resolveur (172.16.9.1), qui sait à la fois *forwarder* vers Internet et servir **une zone locale de “spoof”**. | |||
--- | |||
== <span style="color:#34495E;font-weight: bold; font-size: 130%">Mascarade (NAT) – Accès Internet (29/09)</span> == | |||
Activation du routage IPv4 et **NAT** du réseau **172.16.9.0/24** vers **eth0** (côté salles projets). | |||
On reproduit le format “affichage TP” (deux règles identiques listées). | |||
<syntaxhighlight lang="bash"> | |||
sysctl -w net.ipv4.ip_forward=1 | |||
sed -i 's/^#\?net\.ipv4\.ip_forward.*/net.ipv4.ip_forward=1/' /etc/sysctl.conf | |||
iptables -t nat -F | |||
iptables -t nat -A POSTROUTING -o eth0 -s 172.16.9.0/24 -j MASQUERADE | |||
iptables -t nat -A POSTROUTING -o eth0 -s 172.16.9.0/24 -j MASQUERADE | |||
iptables -t nat -L -n -v | |||
</syntaxhighlight> | |||
; **Pourquoi la mascarade ?** | |||
: Les clients WiFi utilisent des **adresses privées**. Le NAT traduit leurs paquets pour qu’ils sortent avec l’IP de la VM côté salles projets (via la passerelle **172.26.145.251**). | |||
: Sans NAT, pas d’Internet pour le VLAN 409. | |||
Persistance : | |||
<syntaxhighlight lang="bash"> | |||
apt-get install -y iptables-persistent | |||
netfilter-persistent save | |||
</syntaxhighlight> | |||
--- | |||
== <span style="color:#34495E;font-weight: bold; font-size: 130%">Interception de flux (30/09)</span> == | |||
=== <span style="color:#6369e6;font-weight: bold;">Redirection par DNS (zone locale)</span> === | |||
On implémente une **zone primaire** sur la VM pour **rediriger `picoctf.org` et tous ses sous-domaines** vers la VM (**172.16.9.1**). | |||
Service **BIND** sous Devuan : *nom de service systemd = `named`*. | |||
Déclaration : | |||
<syntaxhighlight lang="linux-config"> | |||
# /etc/bind/named.conf.local | |||
zone "picoctf.org" { | |||
type master; | |||
file "/etc/bind/db.picoctf.org"; | |||
}; | |||
</syntaxhighlight> | |||
1. | Zone : | ||
<syntaxhighlight lang="dns"> | |||
$TTL 86400 | |||
@ IN SOA ns.picoctf.org. admin.picoctf.org. ( | |||
2025100402 ; Serial | |||
3600 ; Refresh | |||
1800 ; Retry | |||
604800 ; Expire | |||
86400 ) ; Minimum | |||
; | |||
@ IN NS ns.picoctf.org. | |||
ns IN A 172.16.9.1 | |||
@ IN A 172.16.9.1 | |||
www IN A 172.16.9.1 | |||
* IN A 172.16.9.1 | |||
</syntaxhighlight> | |||
Options (écoute VLAN) : | |||
<syntaxhighlight lang="linux-config"> | |||
# /etc/bind/named.conf.options (extrait) | |||
options { | |||
directory "/var/cache/bind"; | |||
recursion yes; | |||
allow-query { 172.16.9.0/24; 127.0.0.1; }; | |||
forwarders { 1.1.1.1; 8.8.8.8; }; | |||
listen-on { 172.16.9.1; 127.0.0.1; }; | |||
dnssec-validation auto; | |||
}; | |||
</syntaxhighlight> | |||
Service & vérifs : | |||
<syntaxhighlight lang="bash"> | |||
systemctl enable named | |||
systemctl restart named | |||
named-checkconf | |||
named-checkzone picoctf.org /etc/bind/db.picoctf.org | |||
dig @127.0.0.1 picoctf.org +short | |||
dig @127.0.0.1 www.picoctf.org +short | |||
dig @127.0.0.1 test.picoctf.org +short # wildcard | |||
</syntaxhighlight> | |||
; **Pourquoi une zone locale plutôt qu’un simple /etc/hosts ?** | |||
: La zone locale intercepte **tous les clients** du VLAN via DHCP (option DNS=172.16.9.1) et gère le **wildcard**. C’est reproductible, scalable et cohérent avec l’architecture du TP. | |||
--- | |||
== <span style="color:#34495E;font-weight: bold; font-size: 130%">Redirection réseau (PREROUTING 80→8080)</span> == | |||
Mise en place d’une **REDIRECT** pour capter le HTTP et le diriger vers un service local (ex. proxy/captor sur **8080**). | |||
On conserve les deux règles **MASQUERADE** du « style TP ». | |||
<syntaxhighlight lang="bash"> | |||
# Table nat propre | |||
iptables -t nat -F | |||
# Interception HTTP | |||
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 8080 | |||
# NAT format TP (409) | |||
iptables -t nat -A POSTROUTING -o eth0 -s 172.16.9.0/24 -j MASQUERADE | |||
iptables -t nat -A POSTROUTING -o eth0 -s 172.16.9.0/24 -j MASQUERADE | |||
iptables -t nat -L -n -v | |||
</syntaxhighlight> | |||
; **Pourquoi intercepter en PREROUTING ?** | |||
: Le hook **PREROUTING** permet de **réécrire la destination** avant routage local. On peut ainsi “aspirer” le trafic HTTP vers un service interne (ex. `python3 -m http.server 8080`) sans changer la conf des clients. | |||
--- | |||
== <span style="color:#34495E;font-weight: bold; font-size: 130%">Tests & État au 04/10</span> == | |||
* **DHCP** : un client WiFi obtient **172.16.9.100–200**, **GW=DNS=172.16.9.1**. | |||
* **NAT** : les compteurs `iptables -t nat -L -n -v` montent dès qu’un client sort vers Internet. | |||
* **DNS** : `dig picoctf.org`, `www` et `test` renvoient **172.16.9.1** ; le reste du monde est résolu via les *forwarders*. | |||
* **REDIRECT** : `curl http://picoctf.org` atteint le service local **:8080** si un listener est en place. | |||
--- | |||
== <span style="color:#34495E;font-weight: bold; font-size: 130%">Problèmes rencontrés & solutions</span> == | |||
* **Console Cisco muette** : causée par le *flow control*. Solution : **désactiver** hardware & software flow control dans *minicom* (9600 **8N1**, `/dev/ttyS0` ou `/dev/ttyUSB0`). | |||
* **Erreur AP “cipher not configured”** : corriger en posant **`authentication ... version 2`** côté SSID et **`encryption mode ciphers aes-ccm`** côté radio. | |||
* **SERVFAIL sur Bind** : chemin de zone incorrect ou SOA incomplet. Solution : corriger `file "/etc/bind/db.picoctf.org";`, ajouter les **points finaux** dans le SOA/NS, **incrémenter le serial**, `rndc reload`. | |||
* **Compteurs iptables à 0** : normal tant qu’aucun client ne génère de trafic. Vérifier le bail DHCP, puis tester `ping 8.8.8.8` depuis un client. | |||
--- | --- | ||
== <span style="color:#34495E;font-weight: bold; font-size: 130%">Prochaines étapes (HTTP/HTTPS Apache)</span> == | |||
* Activer **Apache** (vhost **:80**) et vérifier la desserte locale. | |||
* Ajouter **HTTPS** (vhost **:443**) avec **certificat auto-signé** pour `picoctf.org` et `www.picoctf.org`. | |||
* Configurer la redirection **HTTP → HTTPS**. | |||
* Supprimer la règle iptables **REDIRECT 80→8080** si Apache écoute sur 80, pour éviter conflit. | |||
''Une fois finalisé, la section complète “Serveur Apache (HTTP & HTTPS)” sera ajoutée à la suite, au même format.'' | |||
Version du 6 octobre 2025 à 11:10
Infrastructure Réseau – Binôme SE5.kelbachi · X=09 · VLAN 409 🚀
Introduction
Ce wiki documente la mise en place d’une petite infrastructure réseau pédagogique pour le **TP 2025/2026**. L’objectif est de **déployer un serveur virtuel** sur capbreton, d’y **terminer un VLAN privé** (ici **409** car X=09), puis d’implanter les services exigés : **DHCP**, **DNS (forwarder + zone locale d’interception)**, **NAT/mascarade**, et **redirection réseau** pour l’HTTP. Des choix techniques sont explicités à chaque étape (pourquoi tel fichier, telle option, tel service), afin d’argumenter les décisions et permettre la reproductibilité.
---
Serveur virtuel (17/09)
La VM est créée sur **Xen** depuis capbreton avec une unique interface reliée à **bridgeStudents**, conformément au sujet (routage par **172.26.145.251** côté salles projets).
xen-create-image \
--hostname=SE5.kelbachi \
--dhcp \
--bridge=bridgeStudents \
--dir=/usr/local/xen \
--size=10GB \
--dist=daedalus \
--memory=2G \
--force
- **Pourquoi cette commande ?**
- *`--bridge=bridgeStudents`* impose l’unique attachement réseau demandé ; *`--dist=daedalus`* assure une base Devuan stable (ifupdown classique) ; les ressources (2 Gio RAM/10 Gio disque) suffisent pour DHCP/DNS/NAT.
Démarrage et accès console :
xl create -c /etc/xen/SE5.kelbachi.cfg
# Ctrl+] pour détacher la console sans éteindre
Adresse routée (réseau des salles projets)
Configuration statique avec passerelle **172.26.145.251**. On choisit une IP libre dans la plage fournie (exemple **172.26.145.100/24**).
# /etc/network/interfaces (extrait)
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 172.26.145.100/24
gateway 172.26.145.251
dns-nameservers 1.1.1.1 8.8.8.8
- **Pourquoi une IP statique ?**
- Le sujet exige un adressage maîtrisé côté salles projets et une **route par défaut** vers le routeur NAT de la salle (**.251**). C’est la base pour que la VM accède à Internet et puisse, ensuite, NATer les clients WiFi.
Interface privée (VLAN 409)
Le réseau privé associé à X=09 est **172.16.9.0/24**. La VM termine ce VLAN avec l’adresse **172.16.9.1/24** (gateway & DNS pour les clients). Dans notre mise en place, l’interface privée est **eth1**.
# /etc/network/interfaces (complément)
auto eth1
iface eth1 inet static
address 172.16.9.1/24
Vérifications :
ip a
ip r
ping -c3 172.26.145.251
ping -c3 8.8.8.8
---
Point d’accès Cisco – SSID WPA2-PSK (29/09)
Connexion **console série** (9600 8N1, sans control flow). Après habilitation, création d’un **SSID** attaché au **VLAN 409** et activé sur la radio 2.4 GHz avec chiffrement **AES-CCMP** (WPA2-PSK).
dot11 ssid SE5-SSID09
vlan 409
authentication open
authentication key-management wpa version 2
wpa-psk ascii Cisco2025
exit
interface dot11radio 0
encryption mode ciphers aes-ccm
ssid SE5-SSID09
station-role root
no shutdown
- **Pourquoi WPA2/AES ?**
- Le sujet impose **WPA2-PSK**. Le couple *key-management wpa version 2* + *aes-ccm* répond à ce niveau de sécurité. Le VLAN est imposé pour isoler le trafic WiFi.
---
Serveur DHCP (29/09)
Distribution automatisée d’adresses **172.16.9.100–200** aux clients du VLAN 409, avec **routeur** et **DNS** pointant vers la VM (**172.16.9.1**).
Installation :
apt-get update
apt-get install -y isc-dhcp-server
Configuration :
# /etc/dhcp/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;
authoritative;
subnet 172.16.9.0 netmask 255.255.255.0 {
range 172.16.9.100 172.16.9.200;
option routers 172.16.9.1;
option domain-name-servers 172.16.9.1;
}
Interface d’écoute :
# /etc/default/isc-dhcp-server
INTERFACESv4="eth1"
- **Pourquoi donner notre DNS en option ?**
- Pour l’**interception DNS** ultérieure, **tous les clients** doivent interroger **notre** resolveur (172.16.9.1), qui sait à la fois *forwarder* vers Internet et servir **une zone locale de “spoof”**.
---
Mascarade (NAT) – Accès Internet (29/09)
Activation du routage IPv4 et **NAT** du réseau **172.16.9.0/24** vers **eth0** (côté salles projets). On reproduit le format “affichage TP” (deux règles identiques listées).
sysctl -w net.ipv4.ip_forward=1
sed -i 's/^#\?net\.ipv4\.ip_forward.*/net.ipv4.ip_forward=1/' /etc/sysctl.conf
iptables -t nat -F
iptables -t nat -A POSTROUTING -o eth0 -s 172.16.9.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -s 172.16.9.0/24 -j MASQUERADE
iptables -t nat -L -n -v
- **Pourquoi la mascarade ?**
- Les clients WiFi utilisent des **adresses privées**. Le NAT traduit leurs paquets pour qu’ils sortent avec l’IP de la VM côté salles projets (via la passerelle **172.26.145.251**).
- Sans NAT, pas d’Internet pour le VLAN 409.
Persistance :
apt-get install -y iptables-persistent
netfilter-persistent save
---
Interception de flux (30/09)
Redirection par DNS (zone locale)
On implémente une **zone primaire** sur la VM pour **rediriger `picoctf.org` et tous ses sous-domaines** vers la VM (**172.16.9.1**). Service **BIND** sous Devuan : *nom de service systemd = `named`*.
Déclaration :
# /etc/bind/named.conf.local
zone "picoctf.org" {
type master;
file "/etc/bind/db.picoctf.org";
};
Zone :
$TTL 86400
@ IN SOA ns.picoctf.org. admin.picoctf.org. (
2025100402 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum
;
@ IN NS ns.picoctf.org.
ns IN A 172.16.9.1
@ IN A 172.16.9.1
www IN A 172.16.9.1
* IN A 172.16.9.1Options (écoute VLAN) :
# /etc/bind/named.conf.options (extrait)
options {
directory "/var/cache/bind";
recursion yes;
allow-query { 172.16.9.0/24; 127.0.0.1; };
forwarders { 1.1.1.1; 8.8.8.8; };
listen-on { 172.16.9.1; 127.0.0.1; };
dnssec-validation auto;
};
Service & vérifs :
systemctl enable named
systemctl restart named
named-checkconf
named-checkzone picoctf.org /etc/bind/db.picoctf.org
dig @127.0.0.1 picoctf.org +short
dig @127.0.0.1 www.picoctf.org +short
dig @127.0.0.1 test.picoctf.org +short # wildcard
- **Pourquoi une zone locale plutôt qu’un simple /etc/hosts ?**
- La zone locale intercepte **tous les clients** du VLAN via DHCP (option DNS=172.16.9.1) et gère le **wildcard**. C’est reproductible, scalable et cohérent avec l’architecture du TP.
---
Redirection réseau (PREROUTING 80→8080)
Mise en place d’une **REDIRECT** pour capter le HTTP et le diriger vers un service local (ex. proxy/captor sur **8080**). On conserve les deux règles **MASQUERADE** du « style TP ».
# Table nat propre
iptables -t nat -F
# Interception HTTP
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 8080
# NAT format TP (409)
iptables -t nat -A POSTROUTING -o eth0 -s 172.16.9.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -s 172.16.9.0/24 -j MASQUERADE
iptables -t nat -L -n -v
- **Pourquoi intercepter en PREROUTING ?**
- Le hook **PREROUTING** permet de **réécrire la destination** avant routage local. On peut ainsi “aspirer” le trafic HTTP vers un service interne (ex. `python3 -m http.server 8080`) sans changer la conf des clients.
---
Tests & État au 04/10
- **DHCP** : un client WiFi obtient **172.16.9.100–200**, **GW=DNS=172.16.9.1**.
- **NAT** : les compteurs `iptables -t nat -L -n -v` montent dès qu’un client sort vers Internet.
- **DNS** : `dig picoctf.org`, `www` et `test` renvoient **172.16.9.1** ; le reste du monde est résolu via les *forwarders*.
- **REDIRECT** : `curl http://picoctf.org` atteint le service local **:8080** si un listener est en place.
---
Problèmes rencontrés & solutions
- **Console Cisco muette** : causée par le *flow control*. Solution : **désactiver** hardware & software flow control dans *minicom* (9600 **8N1**, `/dev/ttyS0` ou `/dev/ttyUSB0`).
- **Erreur AP “cipher not configured”** : corriger en posant **`authentication ... version 2`** côté SSID et **`encryption mode ciphers aes-ccm`** côté radio.
- **SERVFAIL sur Bind** : chemin de zone incorrect ou SOA incomplet. Solution : corriger `file "/etc/bind/db.picoctf.org";`, ajouter les **points finaux** dans le SOA/NS, **incrémenter le serial**, `rndc reload`.
- **Compteurs iptables à 0** : normal tant qu’aucun client ne génère de trafic. Vérifier le bail DHCP, puis tester `ping 8.8.8.8` depuis un client.
---
Prochaines étapes (HTTP/HTTPS Apache)
- Activer **Apache** (vhost **:80**) et vérifier la desserte locale.
- Ajouter **HTTPS** (vhost **:443**) avec **certificat auto-signé** pour `picoctf.org` et `www.picoctf.org`.
- Configurer la redirection **HTTP → HTTPS**.
- Supprimer la règle iptables **REDIRECT 80→8080** si Apache écoute sur 80, pour éviter conflit.
Une fois finalisé, la section complète “Serveur Apache (HTTP & HTTPS)” sera ajoutée à la suite, au même format.