« Atelier SysRes SE4 2024/2025 E2 » : différence entre les versions
Aucun résumé des modifications |
|||
Ligne 1 : | Ligne 1 : | ||
CART Benjamin | CART Benjamin | ||
== | == Mise en place du bridge == | ||
Pour que nos futures machines virtuelles puissent communiquer entre elles, nous devons créer un bridge sur Capbreton. | |||
[[Fichier:Styx_interfaces.png]] | |||
Création | == Création des VM == | ||
Nous devons maintenant créer les Machines Virtuelles, pour cela nous avons utilisés xen pour la mandataires et les machines de services.<syntaxhighlight> | |||
xen-create-image --hostname=SE4.Poseidon --dhcp --dir=/usr/local/xen --size=10G --dist=daedalus --memory=2G --bridge=Styx | xen-create-image --hostname=SE4.Poseidon --dhcp --dir=/usr/local/xen --size=10G --dist=daedalus --memory=2G --bridge=Styx | ||
xen-create-image --hostname=SE4.Zeus --dhcp --dir=/usr/local/xen --size=10G --dist=daedalus --memory=2G --bridge=Styx | xen-create-image --hostname=SE4.Zeus --dhcp --dir=/usr/local/xen --size=10G --dist=daedalus --memory=2G --bridge=Styx | ||
</syntaxhighlight>Pour la suite du projet, notre machine mandataire est '''Zeus''' et les deux machines de services sont '''Poséidon''' et '''Orion'''. | |||
< | Pour se connecter aux Machines Virtuelles, nous utiliserons la commande<syntaxhighlight> | ||
xen console SE4.Poseidon | |||
</syntaxhighlight> | |||
== Configuration de la machine de service == | == Configuration de la machine de service == | ||
=== Montage dans /var et /home === | |||
Il faut maintenant monter les systèmes de fichiers /home et /var sur nos machines | |||
=== Assignation des partitions === | |||
Montage permanent dans [https://debian-facile.org/doc:systeme:fstab /etc/fstab] | |||
assignation des partitions dans le '''/etc/xen/SE4.Poseidon.cfg''' en créant les fichiers '''SE4.Poseidon.home''' et '''SE4.Poseidon.var''' | |||
'phy:/dev/virtual/SE4.Poseidon.home,xvda3,w', | 'phy:/dev/virtual/SE4.Poseidon.home,xvda3,w', | ||
'phy:/dev/virtual/SE4.Poseidon.var,xvda4,w', | 'phy:/dev/virtual/SE4.Poseidon.var,xvda4,w', | ||
[[Fichier: | [[Fichier:Fstab_poseidon.png|547x547px]] | ||
=== Création des partitions LVM et montage === | |||
[[Fichier:Df orion.png| | [[Fichier:Df orion.png|néant|cadre|Création de xvda3 et xvda4]] | ||
==== Montage de home ==== | |||
[[Fichier:Var1 orion.png|vignette|434x434px]]<syntaxhighlight> | |||
root@Poseidon: mkfs -t ext4 /dev/xvda3 | |||
root@Poseidon: mount -a | |||
</syntaxhighlight> | |||
==== Montage pour var ==== | |||
[[Fichier:Var2 orion.png|vignette|433x433px]]<syntaxhighlight> | |||
root@Poseidon: mkfs -t ext4 /dev/xvda4 | |||
root@Poseidon: mount /dev/xvda4 /mnt | |||
root@Poseidon: mv /var/* /mnt | |||
root@Poseidon: umount /mnt | |||
root@Poseidon: mount -a | |||
</syntaxhighlight> | |||
== Configuration IPV4 et IPV6 == | |||
On configure le fichier /etc/network/interfaces en mettant une adresse ipv4 locale manuelle et une ipv6 en automatique. | |||
Dans l'état actuel des choses, les machines Poséidon et Orion sont capables de se ping entre elles en passant par le mandataire qui agit comme une gateway. Malgré l'isolation des VM, notre bridge Styx permet de lier ces machines. | |||
L'objectif maintenant est de lier la machine mandataire Zeus à internet.[[Fichier:Interfaces poseidon.png|droite]] | |||
[[Fichier:Interfaces | |||
=== Configuration de l'interface de Poseidon === | |||
[[Fichier:Interfaces ZEUS.png|droite]] | |||
[[Fichier: | |||
=== Configuration de l'interface de Zeus === | |||
<br clear="all"/> | |||
== Configuration de la mandataire == | |||
=== Interface virtuelle === | |||
[[Fichier:Config zeus.png|droite]]Nous avons ajouté une adresse publique à notre machine mandataire. Pour cela, nous avons ajouté une interface eth1 et en parallèle, sur le fichier de configuration de la VM, nous avons ajouté une interface avec une adresse mac +1 et mis sur le bridge SE4.<nowiki> </nowiki> | |||
Nous avons du faire un halt de la VM pour que les fichiers de configuration soient chargés ( ce qu'un reboot ne fait pas).<syntaxhighlight> | |||
auto eth1 | |||
iface eth1 inet static | |||
address 192.48.57.171/28 | |||
</syntaxhighlight> | |||
[[Fichier:Ipa zeus.png|droite|626x626px]]Après la configuration et le branchement du routeur. Notre machine mandataire peut ping ce router et aussi les autres machines mandataires du réseau. | |||
Autorisation de ssh par /etc/ssh/sshd_config | === Autorisation de ssh: === | ||
Il y a aussi une possibilité de se connecter par ssh à une autre machine du réseau. Pour cela il faut autoriser le ssh sur la machine cible dans le fichier /etc/ssh/sshd_config.<syntaxhighlight> | |||
PermitRootLogin yes | PermitRootLogin yes | ||
</syntaxhighlight>Redémarrage du serveur ssh : <syntaxhighlight> | </syntaxhighlight> | ||
==== Redémarrage du serveur ssh : ==== | |||
<syntaxhighlight> | |||
root@Zeus:/etc/ssh# /etc/init.d/ssh restart | root@Zeus:/etc/ssh# /etc/init.d/ssh restart | ||
</syntaxhighlight>Redirection du port 2202 de la mandataire vers Poseidon avec nftables:<syntaxhighlight> | </syntaxhighlight> | ||
=== Redirection === | |||
Redirection du port 2202 de la mandataire vers Poseidon avec nftables:<syntaxhighlight> | |||
nft add table ip NAT | nft add table ip NAT | ||
nft add chain NAT PREROUTING { type nat hook prerouting priority 0\; } | nft add chain NAT PREROUTING { type nat hook prerouting priority 0\; } | ||
nft add rule NAT PREROUTING tcp dport 2202 dnat to 192.168.2.3:22 | nft add rule NAT PREROUTING tcp dport 2202 dnat to 192.168.2.3:22 | ||
</syntaxhighlight> | </syntaxhighlight>Grâce à la configuration du router et des vlan il est maintenant possible de sortir sur internet et de ping google par exemple. | ||
Il a fallu ajouter à Zeus le routeur en gateway. (193.48.57.161) | Il a fallu ajouter à Zeus le routeur en gateway. (193.48.57.161) | ||
== Serveur DNS == | |||
Pour la configuration de notre serveur DNS, nous allons utiliser [https://doc.ubuntu-fr.org/bind9 bind9] | |||
=== Ajout du DNS === | |||
Pour ajouter l'adresse de notre DNS, il faut modifier le fichier '''[https://www.malekal.com/le-fichier-etc-resolv-conf-linux/ /etc/resolv.conf]'''<syntaxhighlight> | |||
search plil.info | |||
nameserver 172.26.188.12 | |||
nameserver 193.48.57.48 | |||
search poissonidon.online | |||
nameserver 192.168.2.2 | |||
nameserver 192.168.2.3 | |||
</syntaxhighlight> | |||
=== Fichier de configuration === | |||
Il s'agit du fichier named.conf.local<syntaxhighlight> | |||
zone "poissonidon.online" { | zone "poissonidon.online" { | ||
type master; | type master; | ||
Ligne 135 : | Ligne 133 : | ||
also-notify{hiddensecondaries;}; // pour les secondaires vicieux | also-notify{hiddensecondaries;}; // pour les secondaires vicieux | ||
notify yes; | notify yes; | ||
}; | }; | ||
Ligne 156 : | Ligne 150 : | ||
masters{2001:660:4401:60a0:216:3eff:fe7c:cea;}; | masters{2001:660:4401:60a0:216:3eff:fe7c:cea;}; | ||
}; | }; | ||
</syntaxhighlight> | |||
=== Fichier de zone === | |||
<syntaxhighlight> | |||
root@Poseidon:/etc/bind# cat db.poissonidon.online.zone | |||
$TTL 200 | |||
@ IN SOA ns1.poissonidon.online. admin.poissonidon.online. ( | |||
2025020504 ; Serial Number | |||
86400 ; Refresh (1 jour) | |||
7200 ; Retry (2 heures) | |||
1209600 ; Expire (14 jours) | |||
3600 ) ; Minimum TTL (1 heure) | |||
@ IN NS ns1.poissonidon.online. | |||
ns1 IN A 193.48.57.171 | |||
IN AAAA 2001:660:4401:60a0:216:3eff:fe28:c918 | |||
@ IN A 193.48.57.171 | |||
@ IN AAAA 2001:660:4401:60a0:216:3eff:fe28:c918 | |||
</syntaxhighlight> | |||
=== Test du serveur DNS === | |||
Afin d'appliquer les changement du serveur DNS, nous devons redémarrer le service : <syntaxhighlight> | |||
root@Poseidon:/etc/bind# systemctl restart bind9 | |||
root@Poseidon:/etc/bind# systemctl status bind9 | |||
bind9.service - BIND Domain Name Server | |||
Loaded: loaded (/etc/systemd/system/bind9.service, disabled) | |||
Active: active (running) | |||
</syntaxhighlight> | |||
[[Fichier:Map DNS.png|vignette]] | |||
=== DNS et Gandi === | |||
Afin de rendre notre DNS accessible au monde entier, nous remplissons les informations nécessaires sur le registrar (Gandi). | |||
Nous y entrons les adresses ipv4 (de la mandataire) et ipv6 (de la service) routée. | |||
Pour vérifier que la propagation s'effectue, nous pouvons consulter le site [https://dnschecker.org/ DNS Checker] en recherchant "poissonidon.online" | |||
=== DNSSEC === | |||
Le protocole DNSSEC permet de palier à certains risques de sécurité du DNS. Pour cela, il faut que les secondaires soient configurées dans le fichier named.conf.local. Pour faire cela, le répertoire backup a été créé avec les droits donnés à bind. | |||
Pour ajouter les fichiers de backup ( dans ce cas, Poseidon se met en backup de Orion).<syntaxhighlight> | |||
rndc refresh basrion.online | |||
</syntaxhighlight> | |||
Il faut ensuite ajouter à named.conf.local : <syntaxhighlight> | |||
dnssec-policy "dnspol" { | dnssec-policy "dnspol" { | ||
keys { | keys { | ||
Ligne 163 : | Ligne 208 : | ||
nsec3param; | nsec3param; | ||
}; | }; | ||
</syntaxhighlight>les deux zones ont aussi été ajoutés à la mandataire Zeus : <syntaxhighlight> | </syntaxhighlight>Ainsi que de changer notre zone principale<syntaxhighlight> | ||
zone "poissonidon.online" { | |||
type master; | |||
file "/etc/bind/db.poissonidon.online.zone"; | |||
allow-transfer{secondaries;}; // filtrage des secondaires | |||
also-notify{hiddensecondaries;}; // pour les secondaires vicieux | |||
notify yes; | |||
key-directory "/etc/bind/keys"; | |||
dnssec-policy "dnspol"; | |||
inline-signing yes; | |||
}; | |||
</syntaxhighlight>les deux zones ont aussi été ajoutés à la mandataire Zeus :<syntaxhighlight> | |||
zone "basrion.online" { | zone "basrion.online" { | ||
type slave; | type slave; | ||
Ligne 176 : | Ligne 233 : | ||
}; | }; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[Fichier:Dnsviz.png|droite|sans_cadre|257x257px]] | |||
Afin de vérifier le tout, nous nous rendons sur le site [https://dnsviz.net/ dnsviz] | |||
=== Fail2ban === | === Fail2ban === | ||
Afin d'ajouter encore plus de sécurité, nous ajoutons le service Fail2ban qui permet de bannir une ip lorsque trop de tentative de connexion ont échouées. Cela évite le brute force. | |||
ajout d'un fichier jail.local dans /etc/fail2ban<syntaxhighlight> | - ajout du service avec apt install fail2ban | ||
- ajout d'un fichier jail.local dans /etc/fail2ban<syntaxhighlight> | |||
[sshd] | [sshd] | ||
enable = true | enable = true | ||
Ligne 189 : | Ligne 252 : | ||
findtime = 300 | findtime = 300 | ||
bantime = 600 | bantime = 600 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Serveur Apache2 == | |||
Tout d'abord, nous nous rendons sur le site de Gandi afin de récupérer les certificats de notre site. (.crt .key et .pem) | |||
Ensuite il faut activer les modules ssl, proxy et proxy_http avec a2enmod. | |||
Bien évidemment, il faut créer un fichier html qui est situé dans /var/www/poissonidon.online/ | |||
=== Configuration d'Apache2 === | |||
sites-available/000-poissonidon.online-ssl.conf<syntaxhighlight> | |||
<VirtualHost *:80> | |||
ServerName poissonidon.online | |||
Redirect permanent / https://poissonidon.online/ | |||
</VirtualHost> | |||
<VirtualHost *:443> | |||
ServerName poissonidon.online | |||
ServerAlias poissonidon.online | |||
DocumentRoot /var/www/poissonidon.online | |||
CustomLog /var/log/apache2/secure_access.log combined | |||
SSLEngine on | |||
SSLCertificateFile /etc/ssl/certs/poissonidon.online.crt | |||
SSLCertificateKeyFile /etc/ssl/private/poissonidon.online.key | |||
SSLCertificateChainFile /etc/ssl/certs/GandiCert.pem | |||
SSLVerifyClient None | |||
</VirtualHost> | |||
</syntaxhighlight>ports.conf<syntaxhighlight> | |||
Listen 80 | |||
#<IfModule mod_ssl.c> | |||
<IfModule ssl_module> | |||
#Listen 80 | |||
Listen 443 | |||
# NameVirtualHost 2001:660:4401:60a0:216:3eff:fe28:c918:443 | |||
</IfModule> | |||
<IfModule mod_gnutls.c> | |||
Listen 443 | |||
</IfModule> | |||
</syntaxhighlight> | |||
== Etat du projet == | |||
Pour le moment, Les VM sont accessibles par ssh, les sites ont un serveur DNSSEC et La redirection http vers https est fonctionnelle . | |||
Nous avons commencé à faire l'installation d'une architecture réseau complète afin que notre site puisse rester actif même si la connexion principale ne fonctionne plus. | |||
Pour cela nous avons commencé à câbler en SR52 et SR31 ainsi que de créer nos vlans. |
Version actuelle datée du 4 mars 2025 à 23:55
CART Benjamin
Mise en place du bridge
Pour que nos futures machines virtuelles puissent communiquer entre elles, nous devons créer un bridge sur Capbreton.
Création des VM
Nous devons maintenant créer les Machines Virtuelles, pour cela nous avons utilisés xen pour la mandataires et les machines de services.
xen-create-image --hostname=SE4.Poseidon --dhcp --dir=/usr/local/xen --size=10G --dist=daedalus --memory=2G --bridge=Styx
xen-create-image --hostname=SE4.Zeus --dhcp --dir=/usr/local/xen --size=10G --dist=daedalus --memory=2G --bridge=Styx
Pour la suite du projet, notre machine mandataire est Zeus et les deux machines de services sont Poséidon et Orion. Pour se connecter aux Machines Virtuelles, nous utiliserons la commande
xen console SE4.Poseidon
Configuration de la machine de service
Montage dans /var et /home
Il faut maintenant monter les systèmes de fichiers /home et /var sur nos machines
Assignation des partitions
Montage permanent dans /etc/fstab
assignation des partitions dans le /etc/xen/SE4.Poseidon.cfg en créant les fichiers SE4.Poseidon.home et SE4.Poseidon.var
'phy:/dev/virtual/SE4.Poseidon.home,xvda3,w', 'phy:/dev/virtual/SE4.Poseidon.var,xvda4,w',
Création des partitions LVM et montage
Montage de home
root@Poseidon: mkfs -t ext4 /dev/xvda3
root@Poseidon: mount -a
Montage pour var
root@Poseidon: mkfs -t ext4 /dev/xvda4
root@Poseidon: mount /dev/xvda4 /mnt
root@Poseidon: mv /var/* /mnt
root@Poseidon: umount /mnt
root@Poseidon: mount -a
Configuration IPV4 et IPV6
On configure le fichier /etc/network/interfaces en mettant une adresse ipv4 locale manuelle et une ipv6 en automatique.
Dans l'état actuel des choses, les machines Poséidon et Orion sont capables de se ping entre elles en passant par le mandataire qui agit comme une gateway. Malgré l'isolation des VM, notre bridge Styx permet de lier ces machines.
L'objectif maintenant est de lier la machine mandataire Zeus à internet.
Configuration de l'interface de Poseidon
Configuration de l'interface de Zeus
Configuration de la mandataire
Interface virtuelle
Nous avons ajouté une adresse publique à notre machine mandataire. Pour cela, nous avons ajouté une interface eth1 et en parallèle, sur le fichier de configuration de la VM, nous avons ajouté une interface avec une adresse mac +1 et mis sur le bridge SE4.
Nous avons du faire un halt de la VM pour que les fichiers de configuration soient chargés ( ce qu'un reboot ne fait pas).
auto eth1
iface eth1 inet static
address 192.48.57.171/28
Après la configuration et le branchement du routeur. Notre machine mandataire peut ping ce router et aussi les autres machines mandataires du réseau.
Autorisation de ssh:
Il y a aussi une possibilité de se connecter par ssh à une autre machine du réseau. Pour cela il faut autoriser le ssh sur la machine cible dans le fichier /etc/ssh/sshd_config.
PermitRootLogin yes
Redémarrage du serveur ssh :
root@Zeus:/etc/ssh# /etc/init.d/ssh restart
Redirection
Redirection du port 2202 de la mandataire vers Poseidon avec nftables:
nft add table ip NAT
nft add chain NAT PREROUTING { type nat hook prerouting priority 0\; }
nft add rule NAT PREROUTING tcp dport 2202 dnat to 192.168.2.3:22
Grâce à la configuration du router et des vlan il est maintenant possible de sortir sur internet et de ping google par exemple.
Il a fallu ajouter à Zeus le routeur en gateway. (193.48.57.161)
Serveur DNS
Pour la configuration de notre serveur DNS, nous allons utiliser bind9
Ajout du DNS
Pour ajouter l'adresse de notre DNS, il faut modifier le fichier /etc/resolv.conf
search plil.info
nameserver 172.26.188.12
nameserver 193.48.57.48
search poissonidon.online
nameserver 192.168.2.2
nameserver 192.168.2.3
Fichier de configuration
Il s'agit du fichier named.conf.local
zone "poissonidon.online" {
type master;
file "/etc/bind/db.poissonidon.online.zone";
allow-transfer{secondaries;}; // filtrage des secondaires
also-notify{hiddensecondaries;}; // pour les secondaires vicieux
notify yes;
};
acl "secondaries" {
2001:660:4401:60a0:216:3eff:fe7c:cea; // Serveur secondaire en IPv6
2001:660:4401:60a0:216:3eff:fe85:c2fe;
};
masters "hiddensecondaries"{
2001:660:4401:60a0:216:3eff:fe85:c2fe;
};
zone "basrion.online" {
type slave;
file "/etc/bind/backup/db.basrion.online";
masters{2001:660:4401:60a0:216:3eff:fe7c:cea;};
};
Fichier de zone
root@Poseidon:/etc/bind# cat db.poissonidon.online.zone
$TTL 200
@ IN SOA ns1.poissonidon.online. admin.poissonidon.online. (
2025020504 ; Serial Number
86400 ; Refresh (1 jour)
7200 ; Retry (2 heures)
1209600 ; Expire (14 jours)
3600 ) ; Minimum TTL (1 heure)
@ IN NS ns1.poissonidon.online.
ns1 IN A 193.48.57.171
IN AAAA 2001:660:4401:60a0:216:3eff:fe28:c918
@ IN A 193.48.57.171
@ IN AAAA 2001:660:4401:60a0:216:3eff:fe28:c918
Test du serveur DNS
Afin d'appliquer les changement du serveur DNS, nous devons redémarrer le service :
root@Poseidon:/etc/bind# systemctl restart bind9
root@Poseidon:/etc/bind# systemctl status bind9
bind9.service - BIND Domain Name Server
Loaded: loaded (/etc/systemd/system/bind9.service, disabled)
Active: active (running)
DNS et Gandi
Afin de rendre notre DNS accessible au monde entier, nous remplissons les informations nécessaires sur le registrar (Gandi).
Nous y entrons les adresses ipv4 (de la mandataire) et ipv6 (de la service) routée.
Pour vérifier que la propagation s'effectue, nous pouvons consulter le site DNS Checker en recherchant "poissonidon.online"
DNSSEC
Le protocole DNSSEC permet de palier à certains risques de sécurité du DNS. Pour cela, il faut que les secondaires soient configurées dans le fichier named.conf.local. Pour faire cela, le répertoire backup a été créé avec les droits donnés à bind.
Pour ajouter les fichiers de backup ( dans ce cas, Poseidon se met en backup de Orion).
rndc refresh basrion.online
Il faut ensuite ajouter à named.conf.local :
dnssec-policy "dnspol" {
keys {
ksk key-directory lifetime unlimited algorithm 13;
zsk key-directory lifetime unlimited algorithm 13;
};
nsec3param;
};
Ainsi que de changer notre zone principale
zone "poissonidon.online" {
type master;
file "/etc/bind/db.poissonidon.online.zone";
allow-transfer{secondaries;}; // filtrage des secondaires
also-notify{hiddensecondaries;}; // pour les secondaires vicieux
notify yes;
key-directory "/etc/bind/keys";
dnssec-policy "dnspol";
inline-signing yes;
};
les deux zones ont aussi été ajoutés à la mandataire Zeus :
zone "basrion.online" {
type slave;
file "/etc/bind/backup/db.basrion.online";
masters{2001:660:4401:60a0:216:3eff:fe7c:cea;};
};
zone "poissonidon.online" {
type slave;
file "/etc/bind/backup/db.poissonidon.online";
masters{2001:660:4401:60a0:216:3eff:fe28:c918;};
};
Afin de vérifier le tout, nous nous rendons sur le site dnsviz
Fail2ban
Afin d'ajouter encore plus de sécurité, nous ajoutons le service Fail2ban qui permet de bannir une ip lorsque trop de tentative de connexion ont échouées. Cela évite le brute force.
- ajout du service avec apt install fail2ban
- ajout d'un fichier jail.local dans /etc/fail2ban
[sshd]
enable = true
port = ssh
filter = sshd
maxretry = 3
findtime = 300
bantime = 600
Serveur Apache2
Tout d'abord, nous nous rendons sur le site de Gandi afin de récupérer les certificats de notre site. (.crt .key et .pem)
Ensuite il faut activer les modules ssl, proxy et proxy_http avec a2enmod.
Bien évidemment, il faut créer un fichier html qui est situé dans /var/www/poissonidon.online/
Configuration d'Apache2
sites-available/000-poissonidon.online-ssl.conf
<VirtualHost *:80>
ServerName poissonidon.online
Redirect permanent / https://poissonidon.online/
</VirtualHost>
<VirtualHost *:443>
ServerName poissonidon.online
ServerAlias poissonidon.online
DocumentRoot /var/www/poissonidon.online
CustomLog /var/log/apache2/secure_access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/poissonidon.online.crt
SSLCertificateKeyFile /etc/ssl/private/poissonidon.online.key
SSLCertificateChainFile /etc/ssl/certs/GandiCert.pem
SSLVerifyClient None
</VirtualHost>
ports.conf
Listen 80
#<IfModule mod_ssl.c>
<IfModule ssl_module>
#Listen 80
Listen 443
# NameVirtualHost 2001:660:4401:60a0:216:3eff:fe28:c918:443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
Etat du projet
Pour le moment, Les VM sont accessibles par ssh, les sites ont un serveur DNSSEC et La redirection http vers https est fonctionnelle .
Nous avons commencé à faire l'installation d'une architecture réseau complète afin que notre site puisse rester actif même si la connexion principale ne fonctionne plus.
Pour cela nous avons commencé à câbler en SR52 et SR31 ainsi que de créer nos vlans.