« Atelier SysRes SE2a5 2023/2024 E9 » : différence entre les versions

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche
 
(72 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
== Créer la VM ==
= WIKI TP Jérôme -> KIEV =
 
== Créer la machine de service ==


Se connecter au serveur en tant que root :  
Se connecter au serveur en tant que root :  
Ligne 5 : Ligne 7 :


Créer le fichier de config de la VM :
Créer le fichier de config de la VM :
*<code> xen-create-image --hostname=kiev --ip=172.26.145.103 --netmask=255.255.255.0 --gateway=172.26.145.254 --bridge=bridgeStudents --dir=/usr/local/xen --password=glopglopglop </code>
*<code> xen-create-image --hostname=kiev --ip=172.26.145.103 --netmask=255.255.255.0 --gateway=172.26.145.254 --bridge=SE2A5 --dir=/usr/local/xen --password=glopglopglop </code>


Démarrer la VM :  
Démarrer la VM :  
*< code> xen create /etc/xen/kiev.cfg </code>
*<code> xen create /etc/xen/kiev.cfg </code>


Lister les VM :  
Lister les VM :  
Ligne 25 : Ligne 27 :


Redémarrer le service SSH :  
Redémarrer le service SSH :  
*<code> service ssh restart </code>
*<code> service ssh restart </code> ou <code> /etc/init.d/ssh restart </code>


Se connecter en root via SSH :
Se connecter en root via SSH :
*<code> ssh root@172.26.145.103 </code>
*<code> ssh root@172.26.145.103 </code>
</br>
</br>


Ligne 35 : Ligne 36 :


Créer 2 partitions LVM sur capbreton pour y rattacher, par la suite /home et /var :
Créer 2 partitions LVM sur capbreton pour y rattacher, par la suite /home et /var :
*<code> lvcreate -L10G -n kiev-home storage </code>
*<code> lvcreate -L10G -n kiev-home virtual </code>
*<code> lvcreate -L10G -n kiev-var storage </code>
*<code> lvcreate -L10G -n kiev-var virtual </code>


Dans '''/etc/xen/kiev.cfg''', ajouter les 2 partitions :
Dans '''/etc/xen/kiev.cfg''', ajouter les 2 partitions :
Ligne 51 : Ligne 52 :
             ]
             ]


Eteindre la VM :
Eteindre la VM <code> xen shut kiev </code> et la redémarrer.
*<code> xen shut kiev </code>
La redémarrer et s'y connecter.
 
</br>
</br>


Ligne 92 : Ligne 90 :
*<code> xen create balltrap.cfg </code>
*<code> xen create balltrap.cfg </code>


Se connecter à la VM
*Se connecter à la VM : <code> xen console balltrap </code>
*<code> xen console balltrap </code>
*Vérifier qu'on ping google.com


Vérifier qu'on ping google
Dans '''/etc/network/interfaces''', obtenir une IPv6 par DHCP: <code> iface eth0 inet6 auto </code>
*Dans /etc/network/interfaces, obtenir une IPv6 par dhcp :
</br>
*<code> iface eth0 inet6 auto </code>
</br>
</br>


== Créer la mascarade ==
== Créer la mascarade ==


Sur capbreton, créer un bridge '''balltrap''' (pour ponter la carte réseau virtuelle de la VM à une carte réseau physique). Dans /etc/network/interfaces :
Sur capbreton, créer un bridge '''balltrap''' (pour ponter la carte réseau virtuelle de la VM à une carte réseau physique). Dans '''/etc/network/interfaces''' :
   #balltrap_bridge
   #balltrap_bridge
   iface balltrap inet manual
   iface balltrap inet manual
Ligne 115 : Ligne 112 :
*<code> ip=192.168.163.1, bridge=balltrap' </code>
*<code> ip=192.168.163.1, bridge=balltrap' </code>


Redémarrer les VM et, dans /etc/network/interfaces, leur déclarer une nouvelle interface réseau (eth1) avec une IP privée statique :
Redémarrer les VM et, dans '''/etc/network/interfaces''', leur déclarer une nouvelle interface réseau (eth1) avec une IP privée statique :
* balltrap = 192.168.163.1<br>
* balltrap = 192.168.163.1<br>
* kiev = 192.168.163.2<br>
* kiev = 192.168.163.2<br>
Ligne 138 : Ligne 135 :
   auto eth0
   auto eth0
   iface eth0 inet6 auto
   iface eth0 inet6 auto
</br>
 
Activer le routage (autoriser la redirection d'IP en mode définitif) sur notre machine mandataire. Dans le dossier '''/etc/sysctl.conf''' :
Activer le routage (autoriser la redirection d'IP en mode définitif) sur notre machine mandataire. Dans le dossier '''/etc/sysctl.conf''' :
*<code> sysctl net.ipv4.ip_forward=1 </code>
*<code> sysctl net.ipv4.ip_forward=1 </code>
Ligne 151 : Ligne 148 :
== Configurer le serveur DNS ==
== Configurer le serveur DNS ==


Sur http://www.gandi.net, acheter un nom de domaine : '''kievjeje.lol''' </br>
Sur https://www.gandi.net, acheter le nom de domaine '''kievjeje.lol''' et spécifier les serveurs DNS (GlueRecords + externalServerNames):  
Spécifier les serveurs DNS sur Gandi (glue records + liveDNSrecords) :  
*DNS principal (machine de service) -> IPv6
*DNS principal (machine de service) -> IPv6
*DNS secondaire (machine mandataire) -> IPv4
*DNS secondaire (machine mandataire) -> IPv4
[[Fichier:GlueRecord.png|thumb|center|vignette]]
[[Fichier:GlueRecord.png|vignette|néant]]
+ à rajouter ??? 12h ???
[[Fichier:Externalservers_kievjeje.lol.png|vignette|néant]]
 
Sur la machine de service, ajouter le serveur DNS de google (8.8.8.8) dans '''/etc/resolv.conf (nameserver)'''
Sur la machine de service, ajouter le serveur DNS de google (8.8.8.8) dans '''/etc/resolv.conf (nameserver)'''
*Maintenant on peut télécharger bind9 sur la machine de service. </br>
*Maintenant on peut télécharger bind9 sur la machine de service. </br>


Configurer le bind9 :
Configurer le bind9 :
Dans '''/etc/bind/named.conf.local''', créer la zone DNS :
Dans '''/etc/bind/named.conf.local''', créer la zone DNS (sur la machine de service et mandataire):
*Sur la machine de service (master)
   zone "kievjeje.lol" {
   zone "kievjeje.lol" {
     type master;
     type master;
     file "/etc/bind/db.kievjeje.lol";
     file "/etc/bind/db.kievjeje.lol";
     allow-transfer {217.70.184.38; };
     allow-transfer {192.168.163.1; };
   };
   };
*217.70.184.38 est l'adresse de Gandi
*Sur la machine mandataire (slave)
Dans '''/etc/bind/db.kievjeje.lol''', créer les enregistrements DNS :
  zone "kievjeje.lol" {
[[Fichier:Bind.png|center|vignette]]
    type slave;
Dans '''/etc/bind/named.conf.options''', ajouter :
    file "/etc/bind/db.kievjeje.lol";
    allow-transfer {192.168.163.2; };
  };*
 
Dans '''/etc/bind/named.conf.options''' :
   listen-on-v6 { any; }
   listen-on-v6 { any; }
   listen-on { any; };
   listen-on { any; };
   allow-recursion {127.0.0.1; };
   allow-recursion {127.0.0.1; };
Maintenant redémarrer le service DNS (ne pas oublier d'incrémenter le SN dans '''named.conf.local''' à chaque restart :
*'''allow-recursion''' spécifie les IPs ayant la permission de faire des requêtes récursives sur le DNS. Cela permet d'éviter que notre serveur ne serve de relais DNS ouvert.
*<code> service bind9 restart </code>
 
Le fichier '''/etc/bind/db.kievjeje.lol''' contient les enregistrements DNS:
[[Fichier:Bind.png|vignette|néant]]


restart dns + dig + ajout DNS (screen)
Vérifier qu'il n'y a pas d'erreur de conf DNS :
Vérifier qu'il n'y a pas d'erreur de conf DNS :
*<code> named-checkconf named.conf."" </code> pour vérifier les fichiers de conf
*<code> named-checkzone kievjeje.lol db.kievjeje.lol </code>
*<code> cat /var/log/daemon.log </code>
*<code> cat /var/log/daemon.log </code>


Installer openssl, et générer une CSR (Certificate Signing Request SSL) :
Redémarrer le service DNS (ne pas oublier d'incrémenter le SN dans '''named.conf.local''' à chaque restart :
*<code> service bind9 restart </code>
 
Vérifier qu'un serveur DNS est bien présent sur une machine pour la zone demandée (installer le package dnsutils préalablement) :
*<code> dig @localhost kievjeje.lol </code> ou <code> dig @192.168.163.2 kiev.jeje.lol </code>
[[Fichier:DigLocalHost.PNG|vignette|néant]]
*On observe bien 1 query 1 answer DNS sur la zone.
 
Installer apache2 sur la machine de service et vérifier avec un browser que notre site web '''www.kievjeje.lol''' est en ligne:
*On peut aussi tester la résolution DNS avec <code> nslookup ns1.kievjeje.lol </code> et  <code> nslookup www.kievjeje.lol </code>
</br>
 
== Activer le HTTPS sur Apache2 ==
Sur la machine de service, installer openssl, et générer une CSR (Certificate Signing Request SSL) :
*https://docs.gandi.net/fr/ssl/operations_courantes/csr.html
*https://docs.gandi.net/fr/ssl/operations_courantes/csr.html
*<code> openssl req -nodes -newkey rsa:2048 -sha256 -keyout kievjeje.lol.key -out kievjeje.lol.csr </code>
*<code> openssl req -nodes -newkey rsa:2048 -sha256 -keyout kievjeje.lol.key -out kievjeje.lol.csr </code>
*(Attention à bien renseigner kievjeje.lol comme Common Name)
*(Attention à bien renseigner kievjeje.lol comme Common Name)
*'''kievjeje.lol.key''' est notre clé privée ( -> elle est très importante, je la range dans '''/etc/ssl/private/''') et je securise son accès : <code>chmod 440 kievjeje.lol.key</code>
</br>
Copier le certificat ('''kievjeje.lol.crt''') obtenu sur Gandi.net et le copier dans '''/etc/ssl/certs/'''
</br>
Activer le mode SSL sur apache2 : <code> a2enmod ssl </code> et configurer apache2 pour gérer du HTTPS sur le port 443 :
*Créer une nouvelle zone dans '''/etc/apache2/sites-available/vhosts-https.conf'''
*Insérer la ligne de conf '''SSLEngine On''' et préciser l'emplacement de la clé privée du serveur et du certificat :
*Clef privée du serveur ('''kievjeje.lol.key''') via <code> SSLCertificateKeyFile </code> et certificat ('''kievjeje.lol.crt''') via <code> SSLCertificateFile </code>
[[Fichier:Vhosts kievjeje.lol.png|vignette|néant]]
Activer le virtualhost : <code> a2ensite vhost-https.conf </code> et redémarrer le service apache2 <code> service apache2 restart </code>
</br>
</br>


mv totoguigui.site.key /etc/ssl/private
== Sécuriser le DNS par DNSSEC ==
mv totoguigui.site.csr /etc/ssl/certificats
Il est nécessaire de faire signer le certificat .csr par un registrar tel que Let’s Encrypt ou Gandi afin d’en obtenir le nouveau certificat signé .crt.
Puisque le registrar Gandi a été utilisé pour réserver le nom de domaine totoguigui.site, il est alors possible d’utiliser à nouveau ce service pour signer gratuitement le certificat totoguigui.site.csr.


Pour cela, il faut “acheter” un certificat SSL pour un hôte “ailleurs” et coller le contenu du fichier .csr. Une fois le CN entré et reconnu, l’achat devient gratuit et peut être effectué.
https://docs.gandi.net/en/domain_names/advanced_users/dnssec.html
Après quelques minutes, il est désormais possible de télécharger le certificat signé .crt ainsi que le certificat nommé GandiStandardSSLCA2.pem.
https://www.cloudflare.com/fr-fr/dns/dnssec/how-dnssec-works/
 
</br>
Ces deux certificats sont à copier dans le répertoire /etc/ssl/certificats de la VM.
On choisit de gérer la gestion automatique des clefs en utilisant '''dnssec-policy''' au lieu de '''auto-dnssec''':
 
*https://shaunc.com/blog/article/migrating-from-autodnssec-to-dnssecpolicy-in-bind~aEpnuMVvmPF7
Copier les certificats sur la VM :
*Pour cela il faut installer l'image Debian chimera.
scp -r -p totoguigui.site.crt root@193.48.57.168:/etc/ssl/certs
*Puis configurer '''named.conf.local''' comme ceci :
scp -r -p GandiStandardSSLCA2.pem root@193.48.57.168:/etc/ssl/certificats
[[Fichier:Capture d'écran 2023-11-23 210657.png|vignette|néant]]
Installation du paquet apache2 :
*Si DNSSEC fonctionne bien, nous devrions voir les paires (privées et publiques) des clés ZSK et KSK s'ajouter dans '''/etc/bind/keys/'''
apt install apache2
??? Ajouter photo ???</br>
Tester le DNS dans https://dnsviz.net/d/dublin.lol/dnssec/
[[Fichier:DNSVIZ.png|vignette|néant]]

Version actuelle datée du 23 novembre 2023 à 21:33

WIKI TP Jérôme -> KIEV

Créer la machine de service

Se connecter au serveur en tant que root :

  • ssh root@capbreton.plil.info

Créer le fichier de config de la VM :

  • xen-create-image --hostname=kiev --ip=172.26.145.103 --netmask=255.255.255.0 --gateway=172.26.145.254 --bridge=SE2A5 --dir=/usr/local/xen --password=glopglopglop

Démarrer la VM :

  • xen create /etc/xen/kiev.cfg

Lister les VM :

  • xen list

Se connecter à la VM depuis capbreton:

  • xen console


Configurer le SSH

Modifier le fichier /etc/ssh/sshd_config: Autoriser la connexion en root :

  • PermitRootLogin yes

Redémarrer le service SSH :

  • service ssh restart ou /etc/init.d/ssh restart

Se connecter en root via SSH :

  • ssh root@172.26.145.103


Créer les partitions LVM

Créer 2 partitions LVM sur capbreton pour y rattacher, par la suite /home et /var :

  • lvcreate -L10G -n kiev-home virtual
  • lvcreate -L10G -n kiev-var virtual

Dans /etc/xen/kiev.cfg, ajouter les 2 partitions :

  • phy:/dev/virtual/kiev-home, xvdb, w',
  • phy:/dev/virtual/kiev-var, xvdc, w',
 #  Disk device(s).
#
root        = '/dev/xvda2 ro'
disk        = [
                'file:/usr/local/xen/domains/HG/disk.img,xvda2,w',
                'file:/usr/local/xen/domains/HG/swap.img,xvda1,w',
                'phy:/dev/virtual/kiev-home,xvdb,w',
                'phy:/dev/virtual/kiev-var,xvdc,w',
            ]

Eteindre la VM xen shut kiev et la redémarrer.

Sur la VM, créer 2 répertoires, y placer le contenu de /var et /home pour ensuite monter notre disque dans /home et /var :

 mkdir /new_home
 mkdir /new_var
 mkfs /dev/xvdb //Formater les partitions LVM au format ext4 et y créer un système de fichier
 mkfs /dev/xvdc
 mount /dev/xvdb /new_home
 mount /dev/xvdc /new_var
 cp -r /var/* /new_var/ 
  • lsblk // Lister les LVM
 xvda1 202:1    0  512M  0 disk [SWAP]
 xvda2 202:2    0   10G  0 disk /
 xvdb1 202:17   0   10G  0 disk /new-home
 xvdb2 202:18   0   10G  0 disk /new-var

Dans /etc/fstab, ajouter :

 /dev/xvdb  /home ext4 defaults 0 2 *
 /dev/xvdc  /var ext4 defaults 0 2 *

Reboot la VM

 umount /new_var
 umount /new_home
 mount -a // Monter tous les systèmes de fichiers spécifiés dans le fichier "/etc/fstab".
  • lsblk // Lister les LVM
 xvda1 202:1    0  512M  0 disk [SWAP]
 xvda2 202:2    0   10G  0 disk /
 xvdb1 202:17   0   10G  0 disk /home
 xvdb2 202:18   0   10G  0 disk /var


Créer la machine mandataire

  • xen-create-image --hostname=balltrap --ip=193.48.57.163 --netmask=255.255.255.240 --bridge=SE2a5 --dir=/usr/local/xen --password=glopglop --gateway=193.48.57.161
  • xen create balltrap.cfg
  • Se connecter à la VM : xen console balltrap
  • Vérifier qu'on ping google.com

Dans /etc/network/interfaces, obtenir une IPv6 par DHCP: iface eth0 inet6 auto

Créer la mascarade

Sur capbreton, créer un bridge balltrap (pour ponter la carte réseau virtuelle de la VM à une carte réseau physique). Dans /etc/network/interfaces :

 #balltrap_bridge
 iface balltrap inet manual
 bridge_ports none
 post-up ip link set $IFACE up
 post-down ip link set $IFACE down

Up l'interface du bridge

  • ifup balltrap

Ajouter le bridge dans le fichier de config de chaque VM (dans vif):

  • ip=192.168.163.1, bridge=balltrap'

Redémarrer les VM et, dans /etc/network/interfaces, leur déclarer une nouvelle interface réseau (eth1) avec une IP privée statique :

  • balltrap = 192.168.163.1
  • kiev = 192.168.163.2
  • Riga = 192.168.163.3

Monter l'interface réseau eth1 nouvellement créée (et vérifier qu'elle est bien montée) :

 ifup -a
 ip a

Ping les autres IP dans ce réseau privé.

Créer une redirection de l'interface routée et notre interface privée sur la machine mandataire :

iptables -t nat -A POSTROUTING -j MASQUERADE -s 192.168.163.0/24
apt install iptables-persistant
iptables-save
iptables-save >> /etc/iptables/rules.v4

Vérifier dans /etc/iptables/rules.v4 les nouvelles règles de routage. Ping google.com depuis la machine mandataire et les machines de service.

Se connecter en ssh depuis capbreton à la machine de service en utilisant la machine mandataire comme jump :

  • ssh -J root@193.48.57.163 root@192.168.163.2

Supprimer l'IPV4 sur l'interface eth0 sur les machines de service :

 auto eth0
 iface eth0 inet6 auto

Activer le routage (autoriser la redirection d'IP en mode définitif) sur notre machine mandataire. Dans le dossier /etc/sysctl.conf :

  • sysctl net.ipv4.ip_forward=1

Créer maintenant des règles de routages pour se connecter en ssh aux machines de service en utilisant un port différent.

iptables -A PREROUTING -t nat -i eth0 -p tcp -m tcp --dport 2201 -j DNAT --to-destination 192.168.163.2:22
iptables -A PREROUTING -t nat -i eth0 -p tcp -m tcp --dport 2202 -j DNAT --to-destination 192.168.163.3:22

Se connecter en ssh à la machine de service depuis capbreton en utilisant sur le port 2201 :

 ssh root@193.48.57.163 -p 2201
 ssh root@193.48.57.163 -p 2202


Configurer le serveur DNS

Sur https://www.gandi.net, acheter le nom de domaine kievjeje.lol et spécifier les serveurs DNS (GlueRecords + externalServerNames):

  • DNS principal (machine de service) -> IPv6
  • DNS secondaire (machine mandataire) -> IPv4
GlueRecord.png
Externalservers kievjeje.lol.png

Sur la machine de service, ajouter le serveur DNS de google (8.8.8.8) dans /etc/resolv.conf (nameserver)

  • Maintenant on peut télécharger bind9 sur la machine de service.

Configurer le bind9 : Dans /etc/bind/named.conf.local, créer la zone DNS (sur la machine de service et mandataire):

  • Sur la machine de service (master)
 zone "kievjeje.lol" {
   type master;
   file "/etc/bind/db.kievjeje.lol";
   allow-transfer {192.168.163.1; };
 };
  • Sur la machine mandataire (slave)
 zone "kievjeje.lol" {
   type slave;
   file "/etc/bind/db.kievjeje.lol";
   allow-transfer {192.168.163.2; };
 };*

Dans /etc/bind/named.conf.options :

 listen-on-v6 { any; }
 listen-on { any; };
 allow-recursion {127.0.0.1; };
  • allow-recursion spécifie les IPs ayant la permission de faire des requêtes récursives sur le DNS. Cela permet d'éviter que notre serveur ne serve de relais DNS ouvert.

Le fichier /etc/bind/db.kievjeje.lol contient les enregistrements DNS:

Bind.png

Vérifier qu'il n'y a pas d'erreur de conf DNS :

  • named-checkconf named.conf."" pour vérifier les fichiers de conf
  • named-checkzone kievjeje.lol db.kievjeje.lol
  • cat /var/log/daemon.log

Redémarrer le service DNS (ne pas oublier d'incrémenter le SN dans named.conf.local à chaque restart :

  • service bind9 restart

Vérifier qu'un serveur DNS est bien présent sur une machine pour la zone demandée (installer le package dnsutils préalablement) :

  • dig @localhost kievjeje.lol ou dig @192.168.163.2 kiev.jeje.lol
DigLocalHost.PNG
  • On observe bien 1 query 1 answer DNS sur la zone.

Installer apache2 sur la machine de service et vérifier avec un browser que notre site web www.kievjeje.lol est en ligne:

  • On peut aussi tester la résolution DNS avec nslookup ns1.kievjeje.lol et nslookup www.kievjeje.lol


Activer le HTTPS sur Apache2

Sur la machine de service, installer openssl, et générer une CSR (Certificate Signing Request SSL) :

  • https://docs.gandi.net/fr/ssl/operations_courantes/csr.html
  • openssl req -nodes -newkey rsa:2048 -sha256 -keyout kievjeje.lol.key -out kievjeje.lol.csr
  • (Attention à bien renseigner kievjeje.lol comme Common Name)
  • kievjeje.lol.key est notre clé privée ( -> elle est très importante, je la range dans /etc/ssl/private/) et je securise son accès : chmod 440 kievjeje.lol.key


Copier le certificat (kievjeje.lol.crt) obtenu sur Gandi.net et le copier dans /etc/ssl/certs/
Activer le mode SSL sur apache2 : a2enmod ssl et configurer apache2 pour gérer du HTTPS sur le port 443 :

  • Créer une nouvelle zone dans /etc/apache2/sites-available/vhosts-https.conf
  • Insérer la ligne de conf SSLEngine On et préciser l'emplacement de la clé privée du serveur et du certificat :
  • Clef privée du serveur (kievjeje.lol.key) via SSLCertificateKeyFile et certificat (kievjeje.lol.crt) via SSLCertificateFile
Vhosts kievjeje.lol.png

Activer le virtualhost : a2ensite vhost-https.conf et redémarrer le service apache2 service apache2 restart

Sécuriser le DNS par DNSSEC

https://docs.gandi.net/en/domain_names/advanced_users/dnssec.html https://www.cloudflare.com/fr-fr/dns/dnssec/how-dnssec-works/
On choisit de gérer la gestion automatique des clefs en utilisant dnssec-policy au lieu de auto-dnssec:

Capture d'écran 2023-11-23 210657.png
  • Si DNSSEC fonctionne bien, nous devrions voir les paires (privées et publiques) des clés ZSK et KSK s'ajouter dans /etc/bind/keys/

??? Ajouter photo ???
Tester le DNS dans https://dnsviz.net/d/dublin.lol/dnssec/

DNSVIZ.png