TP sysres IMA5sc 2018/2019 G10 : Différence entre versions
(→Création des partitions) |
(→Mise en place du DNS) |
||
Ligne 286 : | Ligne 286 : | ||
604800 ) ; Negative Cache TTL | 604800 ) ; Negative Cache TTL | ||
; | ; | ||
− | |||
IN NS ns.mercure-hermes.space. | IN NS ns.mercure-hermes.space. | ||
IN NS ns6.gandi.net. | IN NS ns6.gandi.net. |
Version du 17 décembre 2018 à 14:12
Sommaire
TP Systeme Reseau
Vous trouverez sur cette page Wiki tous les travaux relatifs au cours de Systeme Reseau réalisés par Olivier MAHIEUX & Etienne PROFIT
TP Conteneur Reseau
Etapes de realisation des conteneurs (a la main)
Creation d'un fichier (utilisé en tant que partition) de 10240 bloc de 1024k octets (Soit un fichier de 10Go)
dd if=/dev/zero of=disc.img bs=1024k count=10240
Creation d'un systeme d'un systeme de fichier linux au sein du fichier precedemment créé
mkfs disc.img
Creation des dossiers temporaires dans lequel le systeme sera monté
mkdir /tmp/fs1 mkdir /tmp/fs2 mkdir /tmp/fs3
Montage du systeme de fichier dans fs1
mount -o loop disc.img /tmp/fs1
La commande df -Ath permet d'avoir la liste des partitions montés par le systeme
On voit bien que le /tmp/fs0 propose un emplacement memoire de 10Go
Bootstrap d'un systeme Debian au sein de la partition montée
debootstrap --include=apache2,vim,nano stable /tmp/fs1
On inclue les package Apache2 et nano pour nos conteneurs.
Preparation du montage du systeme
echo "proc /proc proc defaults 0 0" >> rootfs/etc/fstab
Unmount de la partition
umount /tmp/fs1
(On remarque bien que la partition n'est plus montée via df -h)
Duplication de l'image deux fois, puis montage des trois systemes de fichier
cp diskTPconteneur diskTPconteneur2 cp diskTPconteneur diskTPconteneur3
mount -o loop diskTPconteneur /tmp/fs1 mount -o loop diskTPconteneur2 /tmp/fs2 mount -o loop diskTPconteneur3 /tmp/fs3
On verifie le resultat avec un autre df -h
Demarrage des conteneurs en chargeant les systemes de fichier.
unshare -n -u -p -f -m chroot /tmp/fs1 /bin/sh -c "mount /proc ; /bin/bash"; # La commande unshare permet de couper la liaison d'un processus avec les differentes tables de nom # -n : table de nom reseau # -u : table des hostnames
Si la creation du conteneur fonctionne bien : on ne peut pas revenir dans le dossier parent en faisant la commande 'cd ..', et de plus la commande ps ne retourne que les processus isolés du conteneur.
En lancant donc les trois conteneurs, chacun est alors independant de l'autre. On peut lancer sur la machine physique un ps et on observe bien les processus unshare liés à nos conteneurs.
Mise en réseau des conteneurs
Creation du bridge (commutateur virtuel) sur la machine hôte
ip link add bridge2 type bridge
Sur la machine hote, on crée également les différentes interfaces réseaux (une par conteneur + une pour le mandataire)
ip link add vif1 type veth peer name eth0@vif1 #conteneur 1 ip link add vif2 type veth peer name eth0@vif2 #conteneur 2 ip link add vif3 type veth peer name eth0@vif3 #conteneur 3 ip link add vif4 type veth peer name eth1@vif4 #mandataire
Ajout puis activation des differentes interfaces reseaux dans leur bridge respectif.
ip link set vif1 master commutPM ip link set vif2 master commutPM ip link set vif3 master commutPM ip link set vif4 master bridge
ip link set vif1 up ip link set vif2 up ip link set vif3 up ip link set vif4 up
On recupere les PID des differents conteneurs
ps aux | grep unshare
Il faut ensuite connecter les differentes interfaces reseaux du commutateur virtuel à leur conteneur respectif
ip link set eth0@vif1 netns /proc/[PID CONTENEUR 1]/ns/net name eth0 #conteneur 1 ip link set eth0@vif2 netns /proc/[PID CONTENEUR 2]/ns/net name eth0 #conteneur 2 ip link set eth0@vif3 netns /proc/[PID CONTENEUR 3]/ns/net name eth0 #conteneur 3
On ajoute ensuite les adresses IP a chaque conteneur
Dans le conteneur 1
ip addr add 192.168.1.4/24 dev eth0 ip link set eth0 up ip link set lo up
Dans le conteneur 2
ip addr add 192.168.1.3/24 dev eth0 ip link set eth0 up ip link set lo up
Dans le conteneur 3
ip addr add 192.168.1.2/24 dev eth0 ip link set eth0 up ip link set lo up
On peut pinger les conteneurs entre eux ainsi qu'avec la machine hôte pour verifier les interconnexions
On ajoute egalement l'interface eth1 au conteneur 3 qui servira de mandataire
ip link set eth1@vif4 netns /proc/[PID CONTENEUR 3]/ns/net name eth1 ip addr add 172.26.145.3/24 dev eth1 ip link set eth1 up
Mise en place des mandataires inverses
Configuration du fichier sites-enables/000-default.conf du mandataire inverse (conteneur 3)
<VirtualHost *:80> ServerName oli.plil.space ServerAdmin webmaster@localhost ProxyPass / http://192.168.0.4 ProxyPassRever / http://192.168.0.4 ProxyRequests Off ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> <VirtualHost *:80> ServerName eti.plil.space ServerAdmin webmaster@localhost ProxyPass / http://192.168.0.3 ProxyPassRever / http://192.168.0.3 ProxyRequests Off ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
11h10 => Serveurs Web unshare OK
Utilisation de Docker
Installation de Docker
Nous avons du réaliser une installation du logiciel à la main en téléchargeant les images docker nous-même. L'installation par le service Docker connaissant des difficuoltés.
Avant de lancer une image Docker, il convient de réaliser quelques modifications : Dans etc/default/docker : on doit commenter Docker opts ="--iptables=false"
service docker restart iptables-save
Ensuite on peut lancer notre docker avec
docker run -it debian
Puis on exporte les variables d'environnements pour le proxy et on peut faire
apt update apt install apache2 apt install vim nano
Ensuite on sort du conteneur en faisant Ctrl+P et Ctrl+Q. (Attention ! Un exit arrête le processus du conteneur)
docker image //nous permet de voir les différents Docker créés docker commit ID debian_apache// nous permet de sauvegarder ce docker avec cette configuration
On va ensuite créer nos 3 conteneurs et les lier au même reseau (ne pas oublier de préciser le port) :
docker network create OurReseau docker run -i -t --network=OurReseau debian_apache docker run -i -t --network=OurReseau debian_apache docker run -i -t --network=OurReseau -p:80:80 debian_apache
Nos 3 conteneurs sont donc créés et les interfaces reseau sont gérées par Docker. Cependant on ne connait pas les adresses ip de nos conteneurs.
On les récupère avec "ip a" et on peut ensuite commencer la creation du mandataire inverse.
Conteneur 1 : 172.18.0.2
Conteneur 2 : 172.18.0.3
Conteneur 3 : 172.18.0.4
En suivant les même étapes :
- Installation d'Apache2
- Modification du fichier de configuration
- Creation d'un second nom de domaine "MahPro/Etid/Olid" sur Gandi avec l'ip 172.26.145.1 (Tutur01)
- Modification du fichier HTML de test du serveur Apache
- Connexion à partir d'un navigateur sur "olid.plil.space ou etid.plil.space"
14h00 => Serveur Web (docker) OK
Installation de Xen et Devuan sur un serveur HP
Elements physiques
Les slots de RAM étant innocupés, nous avons partagé 4GB de RAM ,récupérés sur un autre serveur, sur les deux HP.
Ceci fait nous pouvions lancer le serveur.
Dans le BIOS, nous avons changé d'une part la sequence de boot afin de booter sur clé.
D'autre part, nous avons supprimé toute les traces des disques précedemment installés. Pour les disques physiques déjà présents, nous avions 2*36GB et 6*146GB. Les 6 disques ont été installés en RAID5 + 1 disque spare.
Elements systèmes et logiciels
Linux Devuan version 4.9.0-6-amd64
Xen version 4.9.0-6-amd64
Installation des paquets Xen
apt-get install xen-hypervisor-4.4-amd64 apt-get install xen-tools
Modification de grub pour changer la priorité du boot sur "Devuan avec Xen".
dpkg-divert --divert /etc/gub.d/20_linux_xen --rename /etc/grub.d/50_linux_xen
Cette opération permet de booter directement avec XEN.
On met à jour grub puis on reboot
update-grub reboot
Elements reseaux
On peut choisir 2 options ici :
- Connecter en RJ45 le serveur sur la carte eth1 d'un PC et configurer puis utiliser l'interface du PC.
- (Notre choix) Connecter directement le serveur au reseau de la salle et configurer son interface eth0 en DHCP.
Le fichier interfaces contient les informations suivantes :
auto lo iface lo inet loopback auto eth0 allow_hotplug eth0 iface eth0 inet dhcp
On ajoute aussi les proxy.
Creation d'une VM avec Xen
Maintenat que Xen est installé on peut utiliser la commande suivante pour creer la premiere machine virtuelle.
xen-create-image --hostname glopiglopa --dhcp --dir /usr/local/xen --dist stable --force --mirror=http://fr.deb.devuan.org/merged
Installation d'une machine virtuelle sur serveur
Le serveur Corduan installé et les tables de routage IP créées, on installe notre machine virtuelle sur le serveur Cordouan.
On passe par l'hyperviseur Xen.
xen-create-image --hostname=Hermes --ip=193.48.57.186 --netmask=255.255.255.240 --gateway=193.48.57.160 --dir=/usr/local/xen
Une fois la VM créée, il est possible de la démarrer de la manière suivante :
xl create /etc/xen/Hermes.cfg
Ensuite, nous lançons la console de cette manière :
xl console HermesPuis, pour sortir de cette dernière, nous faisons :
ctrl + alt gr + ]Enfin, pour éteindre la machine virtuelle :
xl shutdown HermesEt pour détruire la VM :
xl destroy Hermes
Création des partitions
Nous allons créer des partitions sur l'hôte pour héberger /home et /var
lvcreate -L10G -n hermes-home virtual lvcreate -L10G -n hermes-var virtual
Modification du fichier /etc/xen/hermes.cfg pour ajouter les disques
(+) disk = [ 'phy:/dev/virtual/hermes-home,xvda3,w', 'phy:/dev/virtual/hermes-var,xvda4,w', ]
Après redémarrage de la VM, nous créons les systèmes de fichiers sur les volumes:
mkfs -t ext4 /dev/xvda3 mkfs -t ext4 /dev/xvda4
On utilise la commande fdisk -l afin de constater que les volumes sont bien montés.
Home
Afin de s'assurer que la partition home soit montée au démarrage de la VM, nous modifions le fichier /etc/fstab de celle-ci:
(+) /dev/xvda3 /home ext4 defaults 0 2
Nous pouvons ensuite simplement monter la partition
mount -a
Var
La partition var est d'abord montée dans un répertoire temporaire /mnt:
mount /dev/xvda4 /mnt mv /var/* /mnt
La partition est ensuite rajoutée dans le fichier /etc/fstab:
/dev/xvda4 /var ext4 defaults 0 2
Mise en place du DNS
On ajoute les paquets pour le serveur apache2 et bind9.
On réserve un nom de domaine sur Gandi.net : mercure-hermes.space
Nous avons ensuite configuré bind en créant le fichier db.thotplil.space dans le dossier /etc/bind/
@ IN SOA ns.mercure-hermes.space. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; IN NS ns.mercure-hermes.space. IN NS ns6.gandi.net. @ IN A 193.48.57.177 ns IN A 193.48.57.177 www IN A 193.48.57.177
La zone est spécifiée dans le fichier named.conf.local:
zone "mercure-hermes.space" { type master; file "/etc/bind/db.mercure-hermes.space"; allow-transfer {217.70.177.40;}; notify no; };
Configuration Gandi.net
Sur gandi.net --> Domains --> Glue Record pour y ajouter notre espace de nom (namespace) mercure-hermes.space et notre IP.
Nous avons ajouté sur gandi notre DNS principal et notre DNS secondaire dans gandi.net --> Domains --> Nameservers avec :
DNS1 : ns.mercure-hermes.space DNS2 : ns6.gandi.net
Mise en place de DNSSEC=
Modification dans le fichier named.conf.options:
dnssec-validation auto; dnssec-enable yes;
On génère ensuite deux paires de clés ZSK et KSK:
dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE mercure-hermes.space dnssec-keygen -a RSASHA1 -b 1024 -n ZONE mercure-hermes.space
On inclut ensuite les clés dans le fichier /etc/bind/db.mercure-hermes.space:
$include /etc/bind/mercure-hermes.space.dnssec/mercure-hermes.space-ksk.key $include /etc/bind/mercure-hermes.space.dnssec/mercure-hermes.space-zsk.key
On prend soin de mettre $TTL 604800 au début du fichier.
On signe enfin la zone avec les clés ZSK et KSK:
dnssec-signzone -o mercure-hermes.space -k mercure-hermes.space-ksk ../db.mercure-hermes.space mercure-hermes.space-zsk
On renseigne ensuite les clés signées sur gandi.net -> Domains -> mercure-hermes.space -> DNSSEC
Sécurisation de notre serveur web par certificat SSL
Nous avons commencé par générer un certificate request grâce à la commande suivante:
openssl req -nodes -newkey rsa:2048 -sha1 -keyout mercure-hermes.space.key -out mercure-hermes.space.csr
Le certificat est stocké dans etc/apache/apache_keys.