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

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche
 
(134 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 =
*Se connecter au serveur en tant que root : '''ssh root@capbreton.plil.info'''
 
*Créer le fichier de config de la VM :
== Créer la machine de service ==
'''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'''
 
*Créer la VM : '''xen create kiev.cfg'''
Se connecter au serveur en tant que root :  
*Lister les VM : '''xen list'''
*<code> ssh root@capbreton.plil.info </code>
*se connecter à la VM : '''xen console'''
 
kievgg.lol
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=SE2A5 --dir=/usr/local/xen --password=glopglopglop </code>
 
Démarrer la VM :
*<code> xen create /etc/xen/kiev.cfg </code>
 
Lister les VM :
*<code> xen list </code>
 
Se connecter à la VM depuis capbreton:
*<code> xen console </code>
 
</br>
 
== Configurer le SSH ==
 
Modifier le fichier '''/etc/ssh/sshd_config''':
Autoriser la connexion en root :
*<code> PermitRootLogin yes </code>
 
Redémarrer le service SSH :
*<code> service ssh restart </code> ou <code> /etc/init.d/ssh restart </code>
 
Se connecter en root via SSH :
*<code> ssh root@172.26.145.103 </code>
</br>
 
== Créer les partitions LVM ==
 
Créer 2 partitions LVM sur capbreton pour y rattacher, par la suite /home et /var :
*<code> lvcreate -L10G -n kiev-home virtual </code>
*<code> lvcreate -L10G -n kiev-var virtual </code>
 
Dans '''/etc/xen/kiev.cfg''', ajouter les 2 partitions :
*<code> phy:/dev/virtual/kiev-home, xvdb, w', </code>
*<code> phy:/dev/virtual/kiev-var, xvdc, w', </code>
  #  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 <code> xen shut kiev </code> et la redémarrer.
</br>
 
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/
 
*<code> lsblk  // Lister les LVM </code>
  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".
*<code> lsblk  // Lister les LVM </code>
  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
 
</br>
 
== Créer la machine mandataire ==
 
*<code> 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 </code>
*<code> xen create balltrap.cfg </code>
 
*Se connecter à la VM : <code> xen console balltrap </code>
*Vérifier qu'on ping google.com
 
Dans '''/etc/network/interfaces''', obtenir une IPv6 par DHCP: <code> iface eth0 inet6 auto </code>
</br>
</br>
 
== 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
*<code> ifup balltrap </code>
 
Ajouter le bridge dans le fichier de config de chaque VM (dans vif):
*<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 :
* balltrap = 192.168.163.1<br>
* kiev = 192.168.163.2<br>
* Riga = 192.168.163.3<br>
 
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 :
* <code> ssh -J root@193.48.57.163 root@192.168.163.2 </code>
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''' :
*<code> sysctl net.ipv4.ip_forward=1 </code>
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
</br>
 
== 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
[[Fichier:GlueRecord.png|vignette|néant]]
[[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)'''
*Maintenant on peut télécharger bind9 sur la machine de service. </br>
 
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:
[[Fichier:Bind.png|vignette|néant]]
 
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>
 
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
*<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)
*'''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>
 
== 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/
</br>
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
*Pour cela il faut installer l'image Debian chimera.
*Puis configurer '''named.conf.local''' comme ceci :
[[Fichier:Capture d'écran 2023-11-23 210657.png|vignette|néant]]
*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 ???</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