« Atelier SysRes SE4 2024/2025 E16 » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
(20 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
== Conteneur == | == Conteneur == | ||
=== VM et | === VM et bridge === | ||
On doit faire un conteneur pour commencer. Il doit respecter les critères suivants: 10GB d'espace disque, 1GB de mémoire RAM et doit tourner sous daedalus. | On doit faire un conteneur pour commencer. Il doit respecter les critères suivants: 10GB d'espace disque, 1GB de mémoire RAM et doit tourner sous daedalus. | ||
Pour ce faire, on va d'abord créer le bridge pour permettre au conteneur de communiquer avec l'extérieur. Pour cela, dans /etc/network/interfaces.d/ on crée un fichier au nom du bridge où l'on y écrit:<syntaxhighlight lang="sh"> | Pour ce faire, on va d'abord créer le bridge pour permettre au conteneur de communiquer avec l'extérieur. Pour cela, dans /etc/network/interfaces.d/ on crée un fichier au nom du bridge où l'on y écrit:<syntaxhighlight lang="sh"> | ||
Ligne 39 : | Ligne 39 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Connexion à Internet == | === Connexion à Internet === | ||
=== IPv4 === | ==== IPv4 ==== | ||
dans /etc/network/interfaces remplacer "iface eth0 inet dhcp" par "iface eth0 inet static" | dans /etc/network/interfaces remplacer "iface eth0 inet dhcp" par "iface eth0 inet static" | ||
puis écrire en dessous " address <adresse IP privée avec le masque> ". On a pris 192.168.42.69/24 pour ElMordjene et .41 pour jeanluc. | puis écrire en dessous " address <adresse IP privée avec le masque> ". On a pris 192.168.42.69/24 pour ElMordjene et .41 pour jeanluc. | ||
Petit conseil pour la suite: modifier le nom d'hote de la machine pour savoir qui est qui (référence à who's who) car les machines s'appellent tous "SE4" | Petit conseil pour la suite: modifier le nom d'hote de la machine pour savoir qui est qui (référence à who's who) car les machines s'appellent tous "SE4" | ||
=== IPv6 === | |||
==== IPv6 ==== | |||
Pour configurer l'IPv6 de la machine, on doit ajouter un deuxième VIF dans le fichier de configuration de la VM:<syntaxhighlight lang="bash"> | Pour configurer l'IPv6 de la machine, on doit ajouter un deuxième VIF dans le fichier de configuration de la VM:<syntaxhighlight lang="bash"> | ||
vif = ['mac=00:16:3E:7F:62:D2,bridge=norman', | vif = ['mac=00:16:3E:7F:62:D2,bridge=norman', | ||
Ligne 55 : | Ligne 58 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Certificat sur | == Certificat sur Gandi == | ||
Pour que les moteurs de recherches autorise la navigation sur notre site on a besoin d'un certificat qu'on va récuperer sur Gandi. | Pour que les moteurs de recherches autorise la navigation sur notre site on a besoin d'un certificat qu'on va récuperer sur Gandi. | ||
Ligne 82 : | Ligne 85 : | ||
Laisser les autres vides (appuyez sur entrée) | Laisser les autres vides (appuyez sur entrée) | ||
</syntaxhighlight>- | </syntaxhighlight>- 2 fichiers sont apparus dans votre dossier, copier TOUT le contenu du server.csr (y compris les BEGIN CERTIFICATE et END CERTIFICATE) et coller dans le CSR sur gandi.net | ||
- Next, puis auto et faire le payement (normalement il est à 0€) | - Next, puis auto et faire le payement (normalement il est à 0€) | ||
Ligne 89 : | Ligne 92 : | ||
Le 2eme fichier contient votre clé PRIVEE, il faut donc la GARDER AU CHAUD et ne PAS LA DIVULGER. | Le 2eme fichier contient votre clé PRIVEE, il faut donc la GARDER AU CHAUD et ne PAS LA DIVULGER. | ||
== Machines mandataire == | |||
Pendant que notre certificat est en train d'être généré par Gandi, on fait les mêmes interfaces que celles des machines de service. | |||
=== SSH et redirection de ports === | === SSH et redirection de ports === | ||
Il faut autoriser les autres machines du VLAN50 à se connecter via ssh sur notre machine mandataire. Pour ce faire il suffit de décommenter la ligne "#PermitRootLogin prohibit-password" et remplacer "prohibit-password" par "yes". | |||
Pour la redirection de ports:<syntaxhighlight lang="c"> | Pour la redirection de ports:<syntaxhighlight lang="c"> | ||
Ligne 99 : | Ligne 105 : | ||
nft add rule NAT PREROUTING tcp dport 2202 dnat to 192.168.42.69:22 //redirection de requete reçu sur le port 2202 vers le port 22 de SE4.ElMordjene | nft add rule NAT PREROUTING tcp dport 2202 dnat to 192.168.42.69:22 //redirection de requete reçu sur le port 2202 vers le port 22 de SE4.ElMordjene | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== DNS et DNSSEC == | |||
Une fois nos certificats générés, on va pouvoir configurer un DNS et le sécuriser avec le DNSSEC. | |||
=== DNS === | |||
Après avoir installé bind9, on va créer un fichier <code>kiffeur.zone</code> dans lequel on va configurer notre zone comme ceci:<syntaxhighlight lang="sh"> | |||
$TTL 200 | |||
@ IN SOA ns.kiffeur.online. admin.kiffeur.online. ( | |||
3609 ; Version | |||
21600 ; Refresh secondary (6h) | |||
3600 ; Retry secondary (1h) | |||
2592000 ; Expire if no refresh (30j) | |||
86400 ) ; Negative cache (24h) | |||
@ IN NS ns.kiffeur.online. | |||
@ IN NS ns.jeanluc.site. | |||
;Enregistrements A | |||
ns IN A 193.48.57.168 | |||
@ IN A 193.48.57.168 | |||
;Enregistrements AAAA | |||
IN AAAA 2001:660:4401:60a0:216:3eff:fe2d:4b62 | |||
@ IN AAAA 2001:660:4401:60a0:216:3eff:fe2d:4b62 | |||
;Enregistrements CNAME | |||
www IN CNAME kiffeur.online. | |||
</syntaxhighlight>Puis on enregistre notre zone dans le <code>named.conf</code> | |||
<syntaxhighlight lang="sh"> | |||
zone "kiffeur.online" { | |||
type primary; | |||
file "/etc/bind/zones/kiffeur.zone"; | |||
allow-transfer{secondaries;}; | |||
also-notify{hiddensecondaries;}; | |||
key-directory "/etc/bind/keys"; | |||
dnssec-policy "dnspol"; | |||
inline-signing yes; | |||
}; | |||
acl "secondaries" { | |||
2001:660:4401:60a0:216:3eff:fe7f:62d3; | |||
2001:660:4401:60a0:216:3eff:fea1:3d45; | |||
}; | |||
masters "hiddensecondaries" { | |||
2001:660:4401:60a0:216:3eff:fea1:3d45; | |||
}; | |||
zone "jeanluc.site"{ | |||
type secondary; | |||
file "/etc/bind/backup/kiffeur.zone"; | |||
primaries{ 2001:660:4401:60a0:216:3eff:fe7f:62d3; }; | |||
}; | |||
</syntaxhighlight>Pour utiliser le DNS, on doit le renseigner dans <code>resolv.conf</code> | |||
<syntaxhighlight lang="sh"> | |||
search kiffeur.online | |||
nameserver 192.168.42.69 #primaire | |||
nameserver 192.168.42.41 #secondaire | |||
</syntaxhighlight> | |||
Pour le faire fonctionner, il suffit de relancer le service named et de renseigner le glue record sur gandi.net | |||
Pour voir si le DNS se propage bien, on peut aller sur [https://dnschecker.org/ dnschecker.org] | |||
[[Fichier:Propagation de kiffeur.online.png|vignette|Propagation de kiffeur.online|centré]] | |||
=== DNSSEC === | |||
Maintenant que le DNS fonctionne il faut le protéger contre des possibles attaques avec DNSSEC. | |||
Pour ce faire, dans <code>named.conf</code> il faut rajouter les 3 lignes à partir de "key-directory" dans le <code>named.conf</code> que j'ai mis plus haut et rajouter la politique suivante: | |||
<syntaxhighlight lang="sh"> | |||
dnssec-policy "dnspol" { | |||
keys { | |||
ksk key-directory lifetime unlimited algorithm 13; | |||
zsk key-directory lifetime unlimited algorithm 13; | |||
}; | |||
nsec3param; | |||
}; | |||
</syntaxhighlight>Pour l'activer, il faut restart bind9 avec <code>systemctl restart bind9</code> | |||
On peut voir s'il fonctionne bien grace à https://dnsviz.net | |||
[[Fichier:Test DNSSEC kiffeur.online.png|centré|vignette|Test DNSSEC kiffeur.online]] | |||
Si tout est bleu, c'est que c'est bon. | |||
== Apache 2 == | |||
Notre DNS étant maintenant sécurisé, on peut commencer à deployer une page web avec Apache 2. | |||
Avant de déployer, il faut renseigner à Apache 2 les certificats signés dans <code>/etc/apache2/sites-available</code> en créant un fichier et y mettre: | |||
<syntaxhighlight lang="sh"> | |||
<VirtualHost *:80> | |||
ServerName kiffeur.online. | |||
ServerAlias www.kiffeur.online. | |||
Redirect permanent / https://kiffeur.online/ | |||
</VirtualHost> | |||
<VirtualHost *:443> | |||
ServerName kiffeur.online. | |||
DocumentRoot /var/www/html/index.html | |||
SSLProxyEngine on | |||
SSLCertificateFile /etc/ssl/certs/kiffeur.online.crt | |||
SSLCertificateKeyFile /etc/ssl/private/kiffeur.online.key | |||
SSLCertificateChainFile /etc/ssl/certs/GandCert.pem | |||
Errorlog /var/log/apache2/kiffeur_error.log | |||
</VirtualHost> | |||
</syntaxhighlight>Y faire de même sur la machine mandataire. | |||
Une fois cela fait, il suffit de démarrer Apache 2 en tapant les commandes suivantes:<syntaxhighlight lang="sh"> | |||
a2enmod proxy | |||
a2enmod proxy_http | |||
a2ensite /etc/apache2/sites-enabled/kiffeur.online.conf | |||
a2ensite /etc/apache2/sites-available/kiffeur.online.conf | |||
service apache2 restart | |||
</syntaxhighlight>En allant sur http://kiffeur.online, on remarque que la page par défaut d'Apache 2 s'affiche (à un titre près mais c'était pour tester si l'on pouvait modifier la page). | |||
== Avancement du projet == | |||
Le site affiche une page web uniquement en http, le www et le https ne fonctionnent pas sûrement à cause d'une mauvaise configuration du DNS. Ce problème n'ayant pas été résolu, le fail2ban n'a pas été installé et le projet s'est arrêté à cette étape. | |||
De plus, j'ai remarqué que la page web affichée est en fait la page de la machine mandataire. |
Version actuelle datée du 13 avril 2025 à 11:25
Conteneur
VM et bridge
On doit faire un conteneur pour commencer. Il doit respecter les critères suivants: 10GB d'espace disque, 1GB de mémoire RAM et doit tourner sous daedalus.
Pour ce faire, on va d'abord créer le bridge pour permettre au conteneur de communiquer avec l'extérieur. Pour cela, dans /etc/network/interfaces.d/ on crée un fichier au nom du bridge où l'on y écrit:
auto norman #Notre bridge s'appelle norman
iface norman inet manual
bridge_ports none
up ip link set $IFACE up
down ip link set $IFACE down
Ensuite, on crée l'image comme ceci:
xen-create-image --hostname=SE4.ElMordjene --dir=/usr/local/xen --dist=daedalus --size=10GB --memory=1024M --bridge=norman --dhcp
xen-create /etc/xen/SE4.ElMordjene.cfg
Pour s'y connecter :
xen console SE4.ElMordjene
Machines de service
Partitions
Pour implémenter /var et /home dans les partitions LVM:dans la VM:
écrire dans /etc/fstab:
/dev/xvda3 /home ext4 defaults 0 2
/dev/xvdb1 /var ext4 defaults 0 2
Ensuite, formater les disques:
mkfs -t ext4 /dev/xvda3
mkfs -t ext4 /dev/xvdb1
monter les fichier à implémenter, en l'occurence, seulement le /var (qui est xvdb1), copier les données et démonter le fichier:
mount /dev/xvdb1 /mnt
mv /var/* /mnt
unmount /mnt
mount -a #appliquer les changements sans redémarrer la vm
Connexion à Internet
IPv4
dans /etc/network/interfaces remplacer "iface eth0 inet dhcp" par "iface eth0 inet static"
puis écrire en dessous " address <adresse IP privée avec le masque> ". On a pris 192.168.42.69/24 pour ElMordjene et .41 pour jeanluc.
Petit conseil pour la suite: modifier le nom d'hote de la machine pour savoir qui est qui (référence à who's who) car les machines s'appellent tous "SE4"
IPv6
Pour configurer l'IPv6 de la machine, on doit ajouter un deuxième VIF dans le fichier de configuration de la VM:
vif = ['mac=00:16:3E:7F:62:D2,bridge=norman',
'mac=00:16:3E:7F:62:D3,bridge=SE4']
Ensuite, rajouter une nouvelle interface eth1 dans la VM et la configurer en IPv6 comme ceci:
auto eth1
iface eth1 inet6 auto
Certificat sur Gandi
Pour que les moteurs de recherches autorise la navigation sur notre site on a besoin d'un certificat qu'on va récuperer sur Gandi.
- Se connecter sur gandi.net
- Dans l'onglet SSL Certificates, en haut à droite cliquer sur Buy
- Next sans modifier
- Pour obtenir le CSR, taper dans la vm:
openssl req -nodes -newkey rsa:2048 -sha256 -keyout NOM_DE_DOMAINE -out server.csr -utf8
- Remplir avec les infos suivantes:
Country: FR
State or Province: Nord
Locality: Lille
Organization: PolytechLille
Organizational Unit: SE
Common Name: NOM_DE_DOMAINE
Email Address: VOTRE_ADRESSE_MAIL_POLYTECH
Laisser les autres vides (appuyez sur entrée)
- 2 fichiers sont apparus dans votre dossier, copier TOUT le contenu du server.csr (y compris les BEGIN CERTIFICATE et END CERTIFICATE) et coller dans le CSR sur gandi.net
- Next, puis auto et faire le payement (normalement il est à 0€)
- Faut attendre un peu histoire de recevoir le certificat et c'est bon !
Le 2eme fichier contient votre clé PRIVEE, il faut donc la GARDER AU CHAUD et ne PAS LA DIVULGER.
Machines mandataire
Pendant que notre certificat est en train d'être généré par Gandi, on fait les mêmes interfaces que celles des machines de service.
SSH et redirection de ports
Il faut autoriser les autres machines du VLAN50 à se connecter via ssh sur notre machine mandataire. Pour ce faire il suffit de décommenter la ligne "#PermitRootLogin prohibit-password" et remplacer "prohibit-password" par "yes".
Pour la redirection de ports:
nft add table ip NAT
nft add chain NAT PREROUTING { type nat hook prerouting priority 0\; }
nft add rule NAT PREROUTING tcp dport 2201 dnat to 192.168.42.41:22 //redirection de requete reçu sur le port 2201 vers le port 22 de SE4.jeanluc
nft add rule NAT PREROUTING tcp dport 2202 dnat to 192.168.42.69:22 //redirection de requete reçu sur le port 2202 vers le port 22 de SE4.ElMordjene
DNS et DNSSEC
Une fois nos certificats générés, on va pouvoir configurer un DNS et le sécuriser avec le DNSSEC.
DNS
Après avoir installé bind9, on va créer un fichier kiffeur.zone
dans lequel on va configurer notre zone comme ceci:
$TTL 200
@ IN SOA ns.kiffeur.online. admin.kiffeur.online. (
3609 ; Version
21600 ; Refresh secondary (6h)
3600 ; Retry secondary (1h)
2592000 ; Expire if no refresh (30j)
86400 ) ; Negative cache (24h)
@ IN NS ns.kiffeur.online.
@ IN NS ns.jeanluc.site.
;Enregistrements A
ns IN A 193.48.57.168
@ IN A 193.48.57.168
;Enregistrements AAAA
IN AAAA 2001:660:4401:60a0:216:3eff:fe2d:4b62
@ IN AAAA 2001:660:4401:60a0:216:3eff:fe2d:4b62
;Enregistrements CNAME
www IN CNAME kiffeur.online.
Puis on enregistre notre zone dans le named.conf
zone "kiffeur.online" {
type primary;
file "/etc/bind/zones/kiffeur.zone";
allow-transfer{secondaries;};
also-notify{hiddensecondaries;};
key-directory "/etc/bind/keys";
dnssec-policy "dnspol";
inline-signing yes;
};
acl "secondaries" {
2001:660:4401:60a0:216:3eff:fe7f:62d3;
2001:660:4401:60a0:216:3eff:fea1:3d45;
};
masters "hiddensecondaries" {
2001:660:4401:60a0:216:3eff:fea1:3d45;
};
zone "jeanluc.site"{
type secondary;
file "/etc/bind/backup/kiffeur.zone";
primaries{ 2001:660:4401:60a0:216:3eff:fe7f:62d3; };
};
Pour utiliser le DNS, on doit le renseigner dans resolv.conf
search kiffeur.online
nameserver 192.168.42.69 #primaire
nameserver 192.168.42.41 #secondaire
Pour le faire fonctionner, il suffit de relancer le service named et de renseigner le glue record sur gandi.net
Pour voir si le DNS se propage bien, on peut aller sur dnschecker.org
DNSSEC
Maintenant que le DNS fonctionne il faut le protéger contre des possibles attaques avec DNSSEC.
Pour ce faire, dans named.conf
il faut rajouter les 3 lignes à partir de "key-directory" dans le named.conf
que j'ai mis plus haut et rajouter la politique suivante:
dnssec-policy "dnspol" {
keys {
ksk key-directory lifetime unlimited algorithm 13;
zsk key-directory lifetime unlimited algorithm 13;
};
nsec3param;
};
Pour l'activer, il faut restart bind9 avec systemctl restart bind9
On peut voir s'il fonctionne bien grace à https://dnsviz.net
Si tout est bleu, c'est que c'est bon.
Apache 2
Notre DNS étant maintenant sécurisé, on peut commencer à deployer une page web avec Apache 2.
Avant de déployer, il faut renseigner à Apache 2 les certificats signés dans /etc/apache2/sites-available
en créant un fichier et y mettre:
<VirtualHost *:80>
ServerName kiffeur.online.
ServerAlias www.kiffeur.online.
Redirect permanent / https://kiffeur.online/
</VirtualHost>
<VirtualHost *:443>
ServerName kiffeur.online.
DocumentRoot /var/www/html/index.html
SSLProxyEngine on
SSLCertificateFile /etc/ssl/certs/kiffeur.online.crt
SSLCertificateKeyFile /etc/ssl/private/kiffeur.online.key
SSLCertificateChainFile /etc/ssl/certs/GandCert.pem
Errorlog /var/log/apache2/kiffeur_error.log
</VirtualHost>
Y faire de même sur la machine mandataire. Une fois cela fait, il suffit de démarrer Apache 2 en tapant les commandes suivantes:
a2enmod proxy
a2enmod proxy_http
a2ensite /etc/apache2/sites-enabled/kiffeur.online.conf
a2ensite /etc/apache2/sites-available/kiffeur.online.conf
service apache2 restart
En allant sur http://kiffeur.online, on remarque que la page par défaut d'Apache 2 s'affiche (à un titre près mais c'était pour tester si l'on pouvait modifier la page).
Avancement du projet
Le site affiche une page web uniquement en http, le www et le https ne fonctionnent pas sûrement à cause d'une mauvaise configuration du DNS. Ce problème n'ayant pas été résolu, le fail2ban n'a pas été installé et le projet s'est arrêté à cette étape.
De plus, j'ai remarqué que la page web affichée est en fait la page de la machine mandataire.