TP sysres IMA5sc 2019/2020 G2 : Différence entre versions
(→Configuration du commutateur 1 (COM-1)) |
(→Création du conteneur) |
||
(70 révisions intermédiaires par 3 utilisateurs non affichées) | |||
Ligne 40 : | Ligne 40 : | ||
xl console mycoplasma | xl console mycoplasma | ||
− | + | * '''SSH''' | |
Mais il y a une seconde façon d'accéder à notre VM: c'est en utilisant SSH. Pour le faire il faut remplacer la ligne suivante : | Mais il y a une seconde façon d'accéder à notre VM: c'est en utilisant SSH. Pour le faire il faut remplacer la ligne suivante : | ||
" #PermitRootLogin prohibit-password" | " #PermitRootLogin prohibit-password" | ||
Ligne 197 : | Ligne 197 : | ||
Nous devons allouer sur le réseau non-routé, dit privé, un VLAN pour chaque groupe pour qu'il puisse y connecter son client Wifi en plus des VLANs fonctionnels. | Nous devons allouer sur le réseau non-routé, dit privé, un VLAN pour chaque groupe pour qu'il puisse y connecter son client Wifi en plus des VLANs fonctionnels. | ||
+ | |||
+ | ---- | ||
+ | |||
====Configuration du commutateur 1 (COM-1)==== | ====Configuration du commutateur 1 (COM-1)==== | ||
Ligne 241 : | Ligne 244 : | ||
|} | |} | ||
− | Donner | + | Donner au commutateur 1 une IP dans le Vlan de management : |
conf t | conf t | ||
interface Vlan300 | interface Vlan300 | ||
ip address 10.60.200.254 255.255.255.0 | ip address 10.60.200.254 255.255.255.0 | ||
+ | |||
+ | |||
+ | En première approche, nous avons souhaité activer une connexion sécurisée (SSH) de management en créant des clés RSA et une configuration VTY mais le commutateur n'a pas l'air, à première vue, d'implémenter cette fonctionnalité nous laissant qu'avec du Telnet (en Clair) que nous avons donc décidé de ne pas configurer. | ||
=====Liaison COM-1 vers XEN===== | =====Liaison COM-1 vers XEN===== | ||
Cette connexion doit faire transiter les différents VLANs et doit donc être en Trunk. | Cette connexion doit faire transiter les différents VLANs et doit donc être en Trunk. | ||
− | |||
conf t | conf t | ||
interface GigabitEthernet1/1 | interface GigabitEthernet1/1 | ||
Ligne 259 : | Ligne 264 : | ||
=====Liaison COM-1 vers R1===== | =====Liaison COM-1 vers R1===== | ||
− | + | ||
conf t | conf t | ||
interface GigabitEthernet4/1 | interface GigabitEthernet4/1 | ||
Ligne 267 : | Ligne 272 : | ||
=====Liaison COM-1 vers R2===== | =====Liaison COM-1 vers R2===== | ||
− | + | ||
conf t | conf t | ||
interface GigabitEthernet1/2 | interface GigabitEthernet1/2 | ||
Ligne 275 : | Ligne 280 : | ||
=====Liaison COM-1 vers Borne Wifi===== | =====Liaison COM-1 vers Borne Wifi===== | ||
− | + | ||
conf t | conf t | ||
interface GigabitEthernet4/4 | interface GigabitEthernet4/4 | ||
Ligne 281 : | Ligne 286 : | ||
switchport mode trunk | switchport mode trunk | ||
− | + | ||
+ | |||
+ | |||
+ | ---- | ||
====Configuration du Routeur 1 (R1)==== | ====Configuration du Routeur 1 (R1)==== | ||
=====Création des Réseaux virtuels===== | =====Création des Réseaux virtuels===== | ||
− | La notion de Bridge Domain Interface | + | La notion de Bridge Domain se rapproche de la notion de domaine de diffusion voire VLAN avec des options plus poussés pour le filtrage et le forwarding [https://www.cisco.com/c/en/us/td/docs/routers/asr1000/configuration/guide/chassis/bdi.html plus]. Pour permettre à notre routeur d'avoir une interface sur un bridge domaine on doit lui configurer une interface logique appelée BDI (Bridge Domain Interface) .Un routeur peut avoir plusieurs Bridge Domaines mais un Bridge Domaine n'accepte qu'une seule BDI. |
− | HSRP | + | On en profite aussi pour faire notre configuration HSRP (Hot standby router protocol) [https://en.wikipedia.org/wiki/Hot_Standby_Router_Protocol plus] et IPv6 |
conf t | conf t | ||
Ligne 386 : | Ligne 394 : | ||
no shut | no shut | ||
exit | exit | ||
− | + | ||
+ | Et pour le management | ||
+ | interface BDI300 | ||
+ | ip address 10.60.200.1 255.255.255.0 | ||
+ | no shut | ||
+ | exit | ||
+ | exit | ||
write | write | ||
Ligne 406 : | Ligne 420 : | ||
− | sans quitter l'interface GigabitEthernet0/0/1 , et pour '''<NUMERO>''' ={ 101, 102, 103, 104, 105, 106, 200 } , nous créons des instances de service en utilisant la suite de commandes: | + | sans quitter l'interface GigabitEthernet0/0/1 , et pour '''<NUMERO>''' ={ 101, 102, 103, 104, 105, 106, 200, 300 } , nous créons des instances de service en utilisant la suite de commandes: |
service instance '''<NUMERO>''' ethernet | service instance '''<NUMERO>''' ethernet | ||
Ligne 419 : | Ligne 433 : | ||
negotiation auto | negotiation auto | ||
− | sans quitter l'interface GigabitEthernet0/0/2, et pour '''<NUMERO>''' = { 101, 102, 103, 104, 105, 106, 200 } , nous créons des instances de service en utilisant la suite de commandes: | + | sans quitter l'interface GigabitEthernet0/0/2, et pour '''<NUMERO>''' = { 101, 102, 103, 104, 105, 106, 200, 300 } , nous créons des instances de service en utilisant la suite de commandes: |
service instance '''<NUMERO>''' ethernet | service instance '''<NUMERO>''' ethernet | ||
Ligne 495 : | Ligne 509 : | ||
On active unicast IPv6 permettant de router les addresses IPv6 unicast Global (2001:...) que nous avons choisis. | On active unicast IPv6 permettant de router les addresses IPv6 unicast Global (2001:...) que nous avons choisis. | ||
ipv6 unicast-routing | ipv6 unicast-routing | ||
− | |||
− | |||
==Services Internet == | ==Services Internet == | ||
Ligne 505 : | Ligne 517 : | ||
xl console mycoplasma --depuis cordouan. | xl console mycoplasma --depuis cordouan. | ||
− | Pour sécuriser les services réseaux il faut être capable de se connecter à la VM en SSH, il faut faire quelques modifications dans le fichier etc/ssh/sshd_config de la VM. Voici la modification : | + | Pour sécuriser les services réseaux il faut être capable de se connecter à la VM en SSH, il faut faire quelques modifications dans le fichier '''etc/ssh/sshd_config''' de la VM. Voici la modification : |
#PermitRootLogin prohibit-password | #PermitRootLogin prohibit-password | ||
par | par | ||
Ligne 517 : | Ligne 529 : | ||
Nous avons utiliser le registrar Gandi (http://www.gandi.net) pour réserver notre nom de domaine, nous avons choisi mycoplasma2. | Nous avons utiliser le registrar Gandi (http://www.gandi.net) pour réserver notre nom de domaine, nous avons choisi mycoplasma2. | ||
− | Dans un premier temps, faire apparaitre dans le fichier /etc/bind/named.conf.options la ligne suivante: | + | Dans un premier temps, faire apparaitre dans le fichier '''/etc/bind/named.conf.options''' la ligne suivante: |
dnssec-validation auto; | dnssec-validation auto; | ||
====Configuration apache ==== | ====Configuration apache ==== | ||
− | root@mycoplasma:~# cat /etc/apache2/sites-available/loadbalance.conf | + | '''root@mycoplasma:~# cat /etc/apache2/sites-available/loadbalance.conf''' |
<VirtualHost 193.48.57.178:443> | <VirtualHost 193.48.57.178:443> | ||
− | + | ServerName www.mycoplasma2.site | |
− | + | ServerAlias mycoplasma2.site | |
− | + | DocumentRoot /var/www/html/ | |
− | + | ServerAdmin lina.mejbar@polytech-lille.net | |
− | + | SSLEngine on | |
− | + | SSLCertificateFile /etc/ssl/certs/mycoplasma2.site.crt | |
− | + | SSLCertificateKeyFile /etc/ssl/private/myserver.key | |
− | + | SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem | |
− | + | SSLVerifyClient None | |
− | + | ErrorLog ${APACHE_LOG_DIR}/lb-error.log | |
− | + | CustomLog ${APACHE_LOG_DIR}/lb-access.log combined | |
</VirtualHost> | </VirtualHost> | ||
− | |||
<VirtualHost 193.48.57.178:80> | <VirtualHost 193.48.57.178:80> | ||
− | + | ServerName www.mycoplasma2.site | |
− | + | ServerAlias mycoplasma2.site | |
− | + | #ProxyPass / http://192.168.0.2:8002/ | |
− | + | ProxyPassReverse / http://192.168.0.2:8002/ | |
− | + | Redirect permanent / https://www.mycoplasma2.site/ | |
</VirtualHost> | </VirtualHost> | ||
+ | <Proxy balancer://mycoplasma-balancer> | ||
+ | BalancerMember http://192.168.0.1:8002 | ||
+ | BalancerMember http://192.168.0.2:8002 | ||
+ | BalancerMember http://192.168.0.3:8002 | ||
+ | BalancerMember http://192.168.0.4:8002 | ||
+ | BalancerMember http://192.168.0.5:8002 | ||
+ | BalancerMember http://192.168.0.6:8002 | ||
+ | ProxySet lbmethod=byrequests | ||
+ | </Proxy> | ||
+ | <Location /balancer-manager> | ||
+ | SetHandler balancer-manager | ||
+ | </Location> | ||
+ | ProxyPass /balancer-manager ! | ||
+ | ProxyPass / balancer://mycoplasma-balancer/ | ||
+ | |||
Enfin pour enregistrer nos modifications : | Enfin pour enregistrer nos modifications : | ||
Ligne 560 : | Ligne 586 : | ||
Nous avons déjà installer le package [http://www.example.com/ titre du lien ici]. | Nous avons déjà installer le package [http://www.example.com/ titre du lien ici]. | ||
− | Ensuite il faut créer un fichier de configuration dans le dossier /etc/bind/ avec les informations de notre site: | + | Ensuite il faut créer un fichier de configuration dans le dossier '''/etc/bind/''' avec les informations de notre site: |
− | root@mycoplasma:/etc/bind# cat mycoplasma2.site | + | '''root@mycoplasma:/etc/bind# cat mycoplasma2.site''' |
; | ; | ||
Ligne 582 : | Ligne 608 : | ||
Il faut modifier le fichier named.conf.local pour lui donner le nom de notre fichier configuration et de définir les paramètres généraux d'une zone.: | Il faut modifier le fichier named.conf.local pour lui donner le nom de notre fichier configuration et de définir les paramètres généraux d'une zone.: | ||
− | root@mycoplasma:/etc/bind# cat named.conf.local | + | '''root@mycoplasma:/etc/bind# cat named.conf.local |
− | + | ''' | |
zone "mycoplasma2.site" { | zone "mycoplasma2.site" { | ||
type master; | type master; | ||
Ligne 677 : | Ligne 703 : | ||
===Serveur Freeradius=== | ===Serveur Freeradius=== | ||
+ | Freeradius est un serveur Radius libre permettant de s’authentifier. Le protocole radius permet de se connecter via un échange de paquets UDP. RADIUS est un protocole client-serveur. | ||
+ | La configuration du serveur FreeRADIUS consiste à : | ||
+ | |||
+ | * Déclarer ses clients (adresses IP), les routeurs ou switchs, et d’y renseigner le mot de passe partagé ; | ||
+ | * Puis d’enregistrer les utilisateurs avec leur mot de passe. | ||
+ | |||
+ | Dans un premier temps: | ||
+ | root@mycoplasma:/ apt-get install freeradius | ||
+ | |||
+ | Ensuite, il faut modifier les fichiers de configuration: | ||
+ | * Déclarer ses clients | ||
+ | root@mycoplasma:/etc/freeradius/3.0 # vi clients.conf | ||
+ | client 10.60.200.2/24 { | ||
+ | secret = secretIMA5SC | ||
+ | shortname = borneMycoplasma | ||
+ | } | ||
+ | |||
+ | client PA { | ||
+ | ipaddr = 10.60.201.5 | ||
+ | secret = secretIMA5SC | ||
+ | } | ||
+ | |||
+ | * Enregistrer les utilisateurs | ||
+ | Il faut ajouter une ligne qui indique l'identifiant et le mot de passe. On a choisi les mêmes id que la VM : root et mot de passe habituel. | ||
+ | root@mycoplasma:/etc/freeradius/3.0# vim users | ||
+ | |||
+ | user Cleartext-Password := "<password>" | ||
+ | |||
+ | Enregistrer les modifications et relancer : | ||
+ | service freeradius stop | ||
+ | freeradius -X | ||
+ | |||
+ | |||
+ | Enfin cette comande permet d'afficher les logs: | ||
+ | root@mycoplasma:/etc/freeradius/3.0# tail -f /var/log/freeradius/radius.log | ||
==Ferme de serveurs Web== | ==Ferme de serveurs Web== | ||
Ligne 735 : | Ligne 796 : | ||
Voici le fichier DockerFile que l'on a codé : | Voici le fichier DockerFile que l'on a codé : | ||
− | root@mycoplasma:~/test# cat docker/Dockerfile | + | '''root@mycoplasma:~/test# cat docker/Dockerfile''' |
− | + | ||
FROM centos:latest | FROM centos:latest | ||
MAINTAINER NewstarCorporation | MAINTAINER NewstarCorporation | ||
RUN yum -y install httpd | RUN yum -y install httpd | ||
− | COPY | + | COPY index.html /var/www/html |
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"] | CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"] | ||
EXPOSE 80 | EXPOSE 80 | ||
+ | |||
Ligne 760 : | Ligne 822 : | ||
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.5. Set the 'ServerName' directive globally to suppress this message | AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.5. Set the 'ServerName' directive globally to suppress this message | ||
− | |||
− | === | + | Nous avons finalement trouvé l'erreur qui se située sur la cible de la commande COPY du dockerfile. |
+ | |||
+ | === Ansible === | ||
+ | Ansible est un logiciel Open Source qui permet de gérer finement une infrastructure informatique, les déploiements automatisés multi-environnements, les ordinateurs et les configurations systèmes[https://www.syloe.com/glossaire/ansible plus]. Nous allons nous servir de cet outil afin d'automatiser le déploiement de notre site web sur la ferme de serveurs. | ||
+ | |||
+ | ====Diffusion de la clé SSH==== | ||
+ | Pour travailler le plus efficacement avec ansible il faut que l'on puissent se connecter en SSH aux machines cibles sans avoir à taper le mot de passe à chaque fois. Pour ce faire, nous devons ajouter manuellement notre clé publique à la liste des hôtes autorisés sur chaque machine. | ||
+ | |||
+ | Etape à suivre sur notre machine virtuelle publique: | ||
+ | * On installe ansible avec un apt-get. | ||
+ | * On génère une clef asymétrique: | ||
+ | ssh-keygen -t rsa | ||
+ | * On diffuse la clef publique sur les machines virtuelles privées 192.168.0.1 à 192.168.0.6 : | ||
+ | cat .ssh/id_rsa.pub | ssh 192.168.0.1 "cat >> /root/.ssh/authorized_keys2" | ||
+ | |||
+ | ====Hosts==== | ||
+ | Sur la VM publique et afin de rendre notre inventaire plus explicite, nous ajoutons la configuration des noms d'hôtes à notre /etc/network/hosts: | ||
+ | '''root@mycoplasma:~# cat /etc/hosts''' | ||
+ | 127.0.0.1 localhost | ||
+ | 127.0.1.1 mycoplasma mycoplasma | ||
+ | 192.168.0.1 private-6phil | ||
+ | 192.168.0.2 private-mycoplasma | ||
+ | 192.168.0.3 private-herpesgenital | ||
+ | 192.168.0.4 private-chlamydiae | ||
+ | 192.168.0.5 private-chaudepisse | ||
+ | 192.168.0.6 private-blennoragie | ||
+ | ... | ||
+ | |||
+ | Toujours sur la VM publique on rédige l'inventaire de notre parc en modifiant ( /etc/ansible/hosts ) c'est un fichier à remplir en utilisant la syntaxe YAML: | ||
+ | |||
+ | '''root@mycoplasma:~# cat /etc/ansible/hosts''' | ||
+ | all: | ||
+ | hosts: | ||
+ | mycoplasma: | ||
+ | children: | ||
+ | webservers: | ||
+ | hosts: | ||
+ | private-6phil: | ||
+ | private-mycoplasma: | ||
+ | private-herpesgenital: | ||
+ | private-chlamydiae: | ||
+ | private-chaudepisse: | ||
+ | private-blennoragie: | ||
+ | ntp-client: | ||
+ | hosts: | ||
+ | private-mycoplasma | ||
+ | ntp-server: | ||
+ | hosts: | ||
+ | mycoplasma | ||
+ | |||
+ | |||
+ | On peut tester notre parc: | ||
+ | '''root@mycoplasma:~# ansible all -m ping -o''' | ||
+ | private-6phil | SUCCESS => {"changed": false,"ping": "pong"} | ||
+ | private-mycoplasma | SUCCESS => {"changed": false,"ping": "pong"} | ||
+ | private-herpesgenital | SUCCESS => {"changed": false,"ping": "pong"} | ||
+ | private-chlamydiae | SUCCESS => {"changed": false,"ping": "pong"} | ||
+ | mycoplasma | SUCCESS => {"changed": false,"ping": "pong"} | ||
+ | private-chaudepisse | SUCCESS => {"changed": false,"ping": "pong"} | ||
+ | private-blennoragie | SUCCESS => {"changed": false,"ping": "pong"} | ||
+ | |||
+ | ====Playbooks==== | ||
+ | |||
+ | Maintenant qu'on a défini toutes les machines dans notre parc et qu'on peut se connecter sans mot de passe, on peut exécuter une commande à distance sur tout le parc. | ||
+ | Un "playbook" c'est un moyen d’exécuter une liste des tâches sur des machines à l'aide d'ansible. Nous avons préparé le palybook suivant pour le déploiement de notre ferme de serveurs. | ||
+ | '''root@mycoplasma:/etc/ansible/PLAYBOOKS# cat deploy-site.yaml''' | ||
+ | --- | ||
+ | - hosts: webservers | ||
+ | tasks: | ||
+ | - name: 1. Copying Website files | ||
+ | copy: | ||
+ | src: "deployment-files/index.html" | ||
+ | dest: "/tmp/docker/mycoplasma/index.html" | ||
+ | owner: root | ||
+ | group: root | ||
+ | mode: '0666' | ||
+ | - name: 2. Copying Dockerfile | ||
+ | copy: | ||
+ | src: "deployment-files/Dockerfile" | ||
+ | dest: "/tmp/docker/mycoplasma/Dockerfile" | ||
+ | owner: root | ||
+ | group: root | ||
+ | mode: '0666' | ||
+ | - name: 3. Install pip | ||
+ | apt: name=python-pip state=present | ||
+ | - name: 4. install docker package | ||
+ | pip: name=docker | ||
+ | - name: 5. Stop container if running | ||
+ | docker_container: | ||
+ | name: mycoplasmacontainer | ||
+ | state: stopped | ||
+ | - name: 6. delete image | ||
+ | docker_image: | ||
+ | name: mycoplasma | ||
+ | force: yes | ||
+ | state: absent | ||
+ | - name: 7. Build Docker image from Dockerfile | ||
+ | docker_image: | ||
+ | name: mycoplasma | ||
+ | path: "/tmp/docker/mycoplasma/" | ||
+ | state: build | ||
+ | - name: 8. Running the container | ||
+ | docker_container: | ||
+ | image: mycoplasma:latest | ||
+ | state: started | ||
+ | recreate: yes | ||
+ | name: mycoplasmacontainer | ||
+ | ports: "8002:80" | ||
+ | - name: 9. Check if container is running | ||
+ | shell: docker ps | ||
+ | |||
+ | '''root@mycoplasma:/etc/ansible/PLAYBOOKS# ansible-playbook deploy-site.yaml''' | ||
+ | |||
+ | [[Fichier:load_balancers.png]] | ||
==Tests d’intrusion== | ==Tests d’intrusion== | ||
Ligne 772 : | Ligne 946 : | ||
airodump-ng --encrypt wep wlan0mon | airodump-ng --encrypt wep wlan0mon | ||
− | On a choisi de casser la clé WEP de la | + | On a choisi de casser la clé WEP de la cracotte6 sur le channel 2, on enregistre les paquets dans webPack. |
− | airodump-ng -c 2 –-bssid 04:DA:D2:9C:5O:5A -w | + | airodump-ng -c 2 –-bssid 04:DA:D2:9C:5O:5A -w dico wlan0mon |
La commande suivante permet de se faire passer pour un client afin de générer de l'activité sur le réseau. | La commande suivante permet de se faire passer pour un client afin de générer de l'activité sur le réseau. | ||
aireplay-ng --fakeauth 30 -a 04:DA:D2:9C:5O:5A wlan0mon | aireplay-ng --fakeauth 30 -a 04:DA:D2:9C:5O:5A wlan0mon | ||
+ | Un fichier dico**.cap a été créé, vérifier le nom du fichier avec la commande ls | ||
On utilise les paquets enregistrés pour réaliser le cassage: | On utilise les paquets enregistrés pour réaliser le cassage: | ||
− | aircrack-ng | + | aircrack-ng dico*.cap |
− | [[Fichier: | + | [[Fichier:g2_wep2.png|center|600 px]] |
=== Cassage de mot de passe WPA-PSK par force brute === | === Cassage de mot de passe WPA-PSK par force brute === | ||
Ligne 814 : | Ligne 989 : | ||
On remarque ce la photo ci dessus que la commande a pris 21 min et 42 sec. | On remarque ce la photo ci dessus que la commande a pris 21 min et 42 sec. | ||
− | == | + | == Réalisation == |
+ | |||
+ | ===Sécurisation de données=== | ||
+ | |||
+ | Cette partie n'est pas à réaliser. | ||
+ | |||
+ | ===Cryptage de données=== | ||
+ | |||
+ | L'objectif de cette partie est d'apprendre à sécuriser des données sur une clé en cryptant les informations. Pour ce faire, il faut commencer par installer les outils nécessaires : | ||
+ | root@zabethX :~$ apt-get update | ||
+ | root@zabethX :~$ apt-get install lvm2 cryptsetup | ||
+ | |||
+ | Cryptsetup est une interface en ligne de commande permettant de gérer les fonctionnalités et les actions de dm-crypt. Nous avons trouvé beaucoup de documentations sur internet, nous vous conseillons ce [https://doc.ubuntu-fr.org/cryptsetup site]. | ||
+ | |||
+ | Dans un premier temps, il faut (brancher la clé USB et) chercher le périphérique et ses partitions avec la commande suivante : | ||
+ | root@zabethX:~# fdisk -l // Permet de lister les partitions de la machine | ||
+ | |||
+ | root@zabethX:~# lsblk | ||
+ | |||
+ | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT | ||
+ | sda 254:0 0 124G 0 disk | ||
+ | └─sda1 254:1 0 124G 0 part / | ||
+ | sdb 254:16 0 8G 0 disk | ||
+ | ├─sdb1 254:17 0 8G 0 part / | ||
+ | |||
+ | Notre clé USB est sdb, on peut la crypter : | ||
+ | root@zabethX:~# cryptsetup luksFormat -c aes-xts-plain -s 512 /dev/sdb1 | ||
+ | On crée un répertoire de point de montage, par convention c'est /mnt mais on peut créer un autre dossier dans ce dernier: | ||
+ | root@zabethX:~# mkdir /mnt/USBCrypt | ||
+ | |||
+ | On chiffre la clé USB, on doit entrer le mot de passe qui permettra de sécuriser la clé. | ||
+ | root@zabethX:~# cryptsetup luksOpen /dev/sdb1 usbkey | ||
+ | root@zabethX:~# mkfs.ext4 /dev/mapper/usbkey | ||
+ | Il faut faire l'association entre la partition du périphérique et le point de montage. | ||
+ | root@zabethX:~# mount -t ext4 /dev/mapper/usbkey /mnt/USBCrypt | ||
+ | |||
+ | Il faut créer un fichier basique avec la commande vim par exemple, on peut écrire un mot et démonter la clé: | ||
+ | root@zabethX:~# umount /mnt/USBCrypt | ||
+ | |||
+ | Lorsqu'on échange nos clés entre deux binômes, on remarque que le processus a bien fonctionné et que lorsqu'on essaye d'accéder à la clé cette dernière est protégé par un mot de passe. | ||
+ | |||
+ | ===Sécurisation WiFi par WPA2-EAP=== | ||
+ | Le but est de faire en sorte que l’accès à la borne WiFi soit controlé par WPA2-EAP. L’identification va se faire en utilisant le même serveur FreeRadius que pour la sécurisation filaire. | ||
+ | |||
+ | Pour accéder à la configuration Wifi : | ||
+ | root@zabethX:~# minicom -os // Sur l'ordinateur avec la clé Wifi | ||
+ | |||
+ | Il faut changer quelques propriétés : | ||
+ | * concernant le port : /dev/ttyUSB0, | ||
+ | * 9600 bauds | ||
+ | * Désactiver le control de flux | ||
+ | |||
+ | Pour passer en super utilisateur : | ||
+ | ap> enable | ||
+ | Il faut entrer le mot de passe :"Cisco" | ||
+ | |||
+ | '''AAA :''' | ||
+ | |||
+ | * Authentication: Reconnaissance d'un utilisateur et l'association à un mot de passe. | ||
+ | * Authorization : Droits des utilisateurs | ||
+ | * Accounting : Informations de suivis de consommation d’un utilisateur (sur quel routeur il s’est connecté ? Combien de temps s’est-il connecté ? ..) | ||
− | |||
− | + | Concernant la configuration: | |
− | + | ap#> config term | |
− | + | ap(config)#> aaa new-model | |
+ | ap(config)#> aaa authentication login eap_group2 group radius_group2 | ||
+ | ap(config)#> aaa group server radius radius_group2 | ||
+ | ap(config)#> radius-server host 193.48.57.178 auth-port 1812 acct-port 1813 key secretIMA5SC | ||
− | |||
− | |||
− | + | * Création des SSID, protégé par la méthode WPA2-EAP : | |
− | |||
− | |||
− | |||
− | + | ap(config)#> dot11 ssid Mycoplasma | |
− | + | ap(config-ssid)# vlan 102 | |
− | + | ap(config-ssid)# authentication open eap eap_group2 | |
− | + | ap(config-ssid)# authentication network-eap eap_group2 | |
− | + | ap(config-ssid)# authentication key-management wpa | |
− | + | ap(config-ssid)#mbssid Guest-mode | |
− | |||
− | |||
− | + | ap(config)#int dot11radio0 | |
+ | ap(config-if)#mbssid | ||
+ | ap(config-if)#encryption vlan 102 mode ciphers aes-ccm tkip | ||
+ | ap(config-if)#ssid | ||
− | + | ap(config)#int dot11radio0.2 | |
− | + | ap(config-subif)#encapsulation dot1Q 102 | |
+ | ap(config-subif)#bridge-group 102 |
Version actuelle datée du 30 janvier 2020 à 15:23
Sommaire
- 1 Présentation générale
- 2 Réalisation du TP
- 2.1 Installation dans la machine virtuelle Xen
- 2.2 Architecture réseau
- 2.3 Services Internet
- 2.4 Ferme de serveurs Web
- 2.5 Tests d’intrusion
- 2.6 Réalisation
Présentation générale
Travaux pratiques protocoles avancés. Cet atelier consiste en la réalisation d’une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6.
Le cours se trouve à cette adresse Le sujet du TP se trouve à cette adresse
Réalisation du TP
Installation dans la machine virtuelle Xen
Nous avons acheté notre domaine : mycoplasma.site sur le site gandi. Il faut créer la machine virtuelle Xen Linux sur le dom0 cordouan.insecserv.deule.net
Donc il faut se connecter en shh à Cordouan:
ssh root@cordouan.insecserv.deule.net
Puis créer notre machine virtuelle :
xen-create-image --hostname=mycoplasma --dhcp --dir=/usr/local/xen --dist=buster xl create mycoplasma.cfg
On a ensuite installer les paquetages nécessaires pour SSH, le serveur Web apache2 et le serveur DNS bind :
sudo apt-get install openssh-server sudo apt-get install apache2 sudo apt-get install -y bind9
Pour afficher les logs et savoir si l'installation à bien lieu :
tail -f /var/log/xen-tools/mycoplasma.log
Accès Internet et Permettre SSH
Une fois la VM créée (semaine 1), il faut installer les packages, donc il faut lui donner l'accès à internet. Il faut modifier le fichier suivant etc/network/interfaces. Pour enregistrer les modifications, il faut exécuter les commandes: if down eth0, ifup eth0.
auto eth0 iface eth0 inet static address 193.48.57.178 netmask 255.255.255.240
Pour le moment, pour se connecter à la Machine virtuelle, on utilise la commande suivante:
xl console mycoplasma
- SSH
Mais il y a une seconde façon d'accéder à notre VM: c'est en utilisant SSH. Pour le faire il faut remplacer la ligne suivante :
" #PermitRootLogin prohibit-password"
par
" PermitRootLogin yes"
de ce fichier etc/ssh/sshd_config.
Architecture réseau
L’architecture générale
L'objectif que l'on souhaite réaliser dans cette partie est une architecture capable de résister à la défaillance de quelques uns des équipements réseau qui la composent par le biais de la redondance.
Nous disposons, pour la réalisation, de deux commutateurs et de deux routeurs et deux bornes wifi répartis entre les deux salles E304 et E306.
Nous avons sur les deux terminaisons de notre architecture:
- Le serveur XEN qui abrite des machines virtuelles avec les différents services qui y sont implantés.
- Le réseau de l'école.
Le schéma de principe ci-joint, résume l'architecture proposée.
On peut ainsi voir à partir de ce schéma que tant que nous avons au minimum un routeur et un commutateur fonctionnels l’infrastructure pourra toujours assurer le service
Entre autres, on doit satisfaire le cahier des charges suivant:
- Un routage IPv4
- Un routage IPv6
- Interconnexion avec Internet (IPv4)
- Interconnexion avec Internet (IPv6)
- Sécurisation du réseau en implantant le protocol VRRP sur les routeurs.
- Confguration des bornes wifi
Organisation du travail
Nous avons pris l'initiative de nous répartir la réalisation de l'infrastructure et notre groupe s'est principalement chargé de l'implémentation sur la partie E304.
Sur cette partie nous devons donc configurer le commutateur (COM-1) pour:
- Communiquer avec la serveur XEN
- Communiquer avec le routeur R1 en E304 et le R2 en E306.
Et configurer le routeur R1 pour:
- L'interconnexion des deux commutateurs COM-1 et COM-2 avec le réseau de l'école et internet
Le schéma proposé à droite résume le choix des interfaces pour la réalisation de l'interconnexion des équipements.
Réalisation
Rappelons la table des adressages convenue en phase d'architecture:
Nom | VLAN | Réseau IPV4 | Réseau IPV6 | IP routeur 1 | IP routeur 2 | Routeur virtuel | Nom VM | IP VM | IP VM Private |
---|---|---|---|---|---|---|---|---|---|
XEN | 200 | 193.48.57.176/28 | 2001:660:4401:60AB::/64 | 193.48.57.188/28 | 193.48.57.189/28 | 193.48.57.190/28 | *** | 193.48.57.176/28 | *** |
Interconnection | 131 | 10.60.100.0/24 | *** | 10.60.100.1/24 | 10.60.100.2/24 | *** | *** | *** | *** |
Groupe 1 | 101 | 10.60.101.0/24 | 2001:660:4401:60A1::/64 | 10.60.101.1/24 | 10.60.101.2/24 | 10.60.101.3/24 | 6phil | 193.48.57.177/28 | 192.168.0.1 |
Groupe 2 | 102 | 10.60.102.0/24 | 2001:660:4401:60A2::/64 | 10.60.102.1/24 | 10.60.102.2/24 | 10.60.102.3/24 | mycoplasma | 193.48.57.178/28 | 192.168.0.2 |
Groupe 3 | 103 | 10.60.103.0/24 | 2001:660:4401:60A3::/64 | 10.60.103.1/24 | 10.60.103.2/24 | 10.60.103.3/24 | herpesgenital | 193.48.57.179/28 | 192.168.0.3 |
Groupe 4 | 104 | 10.60.104.0/24 | 2001:660:4401:60A4::/64 | 10.60.104.1/24 | 10.60.104.2/24 | 10.60.104.3/24 | chlamydiae | 193.48.57.180/28 | 192.168.0.4 |
Groupe 5 | 105 | 10.60.105.0/24 | 2001:660:4401:60A5::/64 | 10.60.105.1/24 | 10.60.105.2/24 | 10.60.105.3/24 | chaudepisse | 193.48.57.181/28 | 192.168.0.5 |
Groupe 6 | 106 | 10.60.106.0/24 | 2001:660:4401:60A6::/64 | 10.60.106.1/24 | 10.60.106.2/24 | 10.60.106.3/24 | blennoragie | 193.48.57.182/28 | 192.168.0.6 |
Autres | 300 | 10.60.200.0/24 | 2001:660:4401:60AA::/64 | 10.60.200.1/24 | 10.60.200.2/24 | 10.60.200.3/24 | *** | *** | *** |
Comme on peut le voir, les VMs exposées possèdent chacune deux adresses IPv4 sur deux réseaux différents:
- Le réseau routé : 193.48.57.176/28 (Class C)
- Le réseau non-routé : 10.10.0.0/16 (Class A)
Nous devons allouer sur le réseau non-routé, dit privé, un VLAN pour chaque groupe pour qu'il puisse y connecter son client Wifi en plus des VLANs fonctionnels.
Configuration du commutateur 1 (COM-1)
Création des VLANs
Pour la création des VLANs nous utilisons la suite de commandes ci-dessous:
conf t vlan <NUMERO> name <NOM> exit exit write
avec les couples de valeurs:
<NUMERO> | <NOM> |
---|---|
101 | VLAN0101 |
102 | VLAN0102 |
103 | VLAN0103 |
104 | VLAN0104 |
105 | VLAN0105 |
106 | VLAN0106 |
131 | INTERCNX |
200 | XEN |
300 | MANAGEMENT |
Donner au commutateur 1 une IP dans le Vlan de management :
conf t interface Vlan300 ip address 10.60.200.254 255.255.255.0
En première approche, nous avons souhaité activer une connexion sécurisée (SSH) de management en créant des clés RSA et une configuration VTY mais le commutateur n'a pas l'air, à première vue, d'implémenter cette fonctionnalité nous laissant qu'avec du Telnet (en Clair) que nous avons donc décidé de ne pas configurer.
Liaison COM-1 vers XEN
Cette connexion doit faire transiter les différents VLANs et doit donc être en Trunk.
conf t interface GigabitEthernet1/1 switchport switchport trunk encapsulation dot1q # On utilise le standard 802.1q pour l'encapsulation switchport mode trunk # On met l'interface en mode Trunk no shut
Liaison COM-1 vers R1
conf t interface GigabitEthernet4/1 switchport switchport mode trunk
Liaison COM-1 vers R2
conf t interface GigabitEthernet1/2 switchport switchport trunk encapsulation dot1q switchport mode trunk
Liaison COM-1 vers Borne Wifi
conf t interface GigabitEthernet4/4 switchport switchport mode trunk
Configuration du Routeur 1 (R1)
Création des Réseaux virtuels
La notion de Bridge Domain se rapproche de la notion de domaine de diffusion voire VLAN avec des options plus poussés pour le filtrage et le forwarding plus. Pour permettre à notre routeur d'avoir une interface sur un bridge domaine on doit lui configurer une interface logique appelée BDI (Bridge Domain Interface) .Un routeur peut avoir plusieurs Bridge Domaines mais un Bridge Domaine n'accepte qu'une seule BDI.
On en profite aussi pour faire notre configuration HSRP (Hot standby router protocol) plus et IPv6
conf t interface BDI101 ip address 10.60.101.1 255.255.255.0 # adresse IPv4 locale standby version 2 # utilisation du protocol HSRP version 2 pour la haute disponibilité dans le cas où un routeur tombe en panne standby 101 ip 10.60.101.3 # on définit un standby group pour cette interface avec l'adresse du routeur virtuel standby 101 preempt # fait en sorte que le routeur actif avec la plus grande priorité prenne en charge le routage par préemption sur ce groupe ipv6 address 2001:660:4401:60A1::/64 eui-64 # configuration des adresses IPv6 ipv6 enable ipv6 nd prefix 2001:660:4401:60A1::/64 1000 900 ipv6 nd router-preference High no shut exit
interface BDI102 ip address 10.60.102.1 255.255.255.0 standby version 2 standby 102 ip 10.60.102.3 standby 102 preempt ipv6 address 2001:660:4401:60A2::/64 eui-64 ipv6 enable ipv6 nd prefix 2001:660:4401:60A2::/64 1000 900 ipv6 nd router-preference High no shut exit
interface BDI103 ip address 10.60.103.1 255.255.255.0 standby version 2 standby 103 ip 10.60.103.3 standby 103 preempt ipv6 address 2001:660:4401:60A3::/64 eui-64 ipv6 enable ipv6 nd prefix 2001:660:4401:60A3::/64 1000 900 ipv6 nd router-preference High no shut exit
interface BDI104 ip address 10.60.104.1 255.255.255.0 standby version 2 standby 104 ip 10.60.104.3 standby 104 preempt ipv6 address 2001:660:4401:60A4::/64 eui-64 ipv6 enable ipv6 nd prefix 2001:660:4401:60A4::/64 1000 900 ipv6 nd router-preference High no shut exit
interface BDI105 ip address 10.60.105.1 255.255.255.0 standby version 2 standby 105 ip 10.60.105.3 standby 105 priority 150 # pour faire de l'équilibrage de charge nous faisons transiter en priorité le Vlan 105 par le R1 standby 105 preempt ipv6 address 2001:660:4401:60A5::/64 eui-64 ipv6 enable ipv6 nd prefix 2001:660:4401:60A5::/64 1000 900 ipv6 nd router-preference High no shut exit
interface BDI106 ip address 10.60.106.1 255.255.255.0 standby version 2 standby 106 ip 10.60.106.3 standby 106 priority 150 # pour faire de l'équilibrage de charge nous faisons transiter en priorité le Vlan 106 aussi par le R1 standby 106 preempt ipv6 address 2001:660:4401:60A6::/64 eui-64 ipv6 enable ipv6 nd prefix 2001:660:4401:60A6::/64 1000 900 ipv6 nd router-preference High no shut exit
interface BDI131 ip address 192.168.222.10 255.255.255.248 ipv6 enable no shut exit
interface BDI200 ip address 193.48.57.188 255.255.255.240 standby version 2 standby 200 ip 193.48.57.190 standby 200 preempt ipv6 enable no shut exit
Et pour le management
interface BDI300 ip address 10.60.200.1 255.255.255.0 no shut exit exit write
Liaison R1 vers Réseau école
interface GigabitEthernet0/0/0 no ip address media-type rj45 negotiation auto service instance 131 ethernet encapsulation dot1q 131 rewrite ingress tag pop 1 symmetric bridge-domain 131
Liaison R1 vers COM-1
interface GigabitEthernet0/0/1 no ip address negotiation auto
sans quitter l'interface GigabitEthernet0/0/1 , et pour <NUMERO> ={ 101, 102, 103, 104, 105, 106, 200, 300 } , nous créons des instances de service en utilisant la suite de commandes:
service instance <NUMERO> ethernet encapsulation dot1q <NUMERO> rewrite ingress tag pop 1 symmetric bridge-domain <NUMERO>
Liaison R1 vers COM-2
interface GigabitEthernet0/0/2 no ip address negotiation auto
sans quitter l'interface GigabitEthernet0/0/2, et pour <NUMERO> = { 101, 102, 103, 104, 105, 106, 200, 300 } , nous créons des instances de service en utilisant la suite de commandes:
service instance <NUMERO> ethernet encapsulation dot1q <NUMERO> rewrite ingress tag pop 1 symmetric bridge-domain <NUMERO>
Configuration Générale
Un routeur proposent différents protocoles de routage
routerE304(config)#router ? bgp Border Gateway Protocol (BGP) eigrp Enhanced Interior Gateway Routing Protocol (EIGRP) isis ISO IS-IS iso-igrp IGRP for OSI networks mobile Mobile routes odr On Demand stub Routes ospf Open Shortest Path First (OSPF) ospfv3 OSPFv3 rip Routing Information Protocol (RIP)
Nous allons en utiliser quelques uns dans notre implémentation
OSPF pour IPv4
Open Shortest Path First (OSPF) est un protocol qui permet à des routeurs adjacents dans un même domaine d'administration de s'échanger des informations sur le réseau et sa topologie. Cet échange d'information introduit une notion de voisinage entre routeurs. Les informations échangées (LSBD), permettent aux différents routeurs d'ajuster leurs tables de routage et de choisir les meilleures routes sur la base du coût de transmission. Plus
router ospf 1 # un numéro de processus router-id 10.60.100.1 # un id pour le routeur. c'est comme ça qu'il s'identifie auprès de ses voisins summary-address 193.48.57.176 255.255.255.240 # on définie les adresses que l'on souhaite diffuser aux voisins summary-address 10.60.0.0 255.255.0.0 not-advertise # Celles que l'on veut pas diffuser (c'est notre précieux...) redistribute connected subnets # autorise la diffusion pour les nouveaux réseaux qui peuvent être connectés network 192.168.222.8 0.0.0.7 area 2 # délimite le domaine OSPF sur lequel on diffuse pour ne pas surcharger la bases de données de routeurs
RIP pour IPv6
Routing Information Protocol pour l'échange d'information de routage. Ceci permet de router les paquets entre les routeurs de notre infrastructure avec le minimum de sauts (chemin le plus court).
conf t ipv6 router rip tpima5sc # un identifiant pour le process RIP que nous voulons configurer redistribute connected metric 1 # on autorise la diffusion des routes connectées au maximum nombre de sauts redistribute static metric 1 # on autorise la diffusion des routes définies en statique au maximum nombre de sauts redistribute rip 1 metric 1 # on autorise la diffusion des routes sous le protocole rip 1
Vous pouvez faire un diagnostique des routes connues et leur sources une fois que l'interconnexion avec le réseau de l'école est configurée.
routerE304#sh ip route ospf 1 Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP a - application route + - replicated route, % - next hop override, p - overrides from PfR Gateway of last resort is 192.168.222.14 to network 0.0.0.0 O*E2 0.0.0.0/0 [110/1] via 192.168.222.14, 1w1d, BDI131 10.0.0.0/8 is variably subnetted, 85 subnets, 8 masks O E2 10.0.8.0/24 [110/10] via 192.168.222.14, 1w1d, BDI131 O E2 10.11.0.0/16 [110/10] via 192.168.222.14, 1w1d, BDI131 O E2 10.17.0.0/19 [110/10] via 192.168.222.14, 1w1d, BDI131 O E2 10.18.0.0/22 [110/10] via 192.168.222.14, 1w1d, BDI131 O E2 10.21.0.0/17 [110/10] via 192.168.222.14, 1w1d, BDI131 O E2 10.21.252.0/23 [110/10] via 192.168.222.14, 1w1d, BDI131 O E2 10.21.254.0/23 [110/10] via 192.168.222.14, 1w1d, BDI131 O E2 10.22.0.0/19 [110/10] via 192.168.222.14, 1w1d, BDI131 O E2 10.24.0.0/16 [110/10] via 192.168.222.14, 1w1d, BDI131 --More--
Configuration du spanning tree
Pour eviter que l'apparition de boucles dans notre infrastructure nous devons activer le protocole spanning-tree. En effet, dans les réseaux commutés Ethernet la présence de boucle génère des tempêtes de diffusion qui paralysent le réseau : tous les liens sont saturés de trames de diffusion qui tournent en rond dans les boucles et les tables d'apprentissage des commutateurs (switch) deviennent instables. plus
spanning-tree mode pvst # utilisation du protocole de planning tree en mode par Vlan (per vlan spanning tree) spanning-tree extend system-id # utilisation du standard system-id pour l'assignation des identifiants uniques
unicast IPv6
On active unicast IPv6 permettant de router les addresses IPv6 unicast Global (2001:...) que nous avons choisis.
ipv6 unicast-routing
Services Internet
Serveur SSH
Pour se connecter à la VM une première fois, il faut utiliser la commande :
xl console mycoplasma --depuis cordouan.
Pour sécuriser les services réseaux il faut être capable de se connecter à la VM en SSH, il faut faire quelques modifications dans le fichier etc/ssh/sshd_config de la VM. Voici la modification :
#PermitRootLogin prohibit-password
par
PermitRootLogin yes
Par la suite, il sera possible d'accéder à la VM directement :
ssh root@193.48.57.178
Serveur DNS
Nous avons utiliser le registrar Gandi (http://www.gandi.net) pour réserver notre nom de domaine, nous avons choisi mycoplasma2.
Dans un premier temps, faire apparaitre dans le fichier /etc/bind/named.conf.options la ligne suivante:
dnssec-validation auto;
Configuration apache
root@mycoplasma:~# cat /etc/apache2/sites-available/loadbalance.conf
<VirtualHost 193.48.57.178:443> ServerName www.mycoplasma2.site ServerAlias mycoplasma2.site DocumentRoot /var/www/html/ ServerAdmin lina.mejbar@polytech-lille.net SSLEngine on SSLCertificateFile /etc/ssl/certs/mycoplasma2.site.crt SSLCertificateKeyFile /etc/ssl/private/myserver.key SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem SSLVerifyClient None ErrorLog ${APACHE_LOG_DIR}/lb-error.log CustomLog ${APACHE_LOG_DIR}/lb-access.log combined </VirtualHost> <VirtualHost 193.48.57.178:80> ServerName www.mycoplasma2.site ServerAlias mycoplasma2.site #ProxyPass / http://192.168.0.2:8002/ ProxyPassReverse / http://192.168.0.2:8002/ Redirect permanent / https://www.mycoplasma2.site/ </VirtualHost> <Proxy balancer://mycoplasma-balancer> BalancerMember http://192.168.0.1:8002 BalancerMember http://192.168.0.2:8002 BalancerMember http://192.168.0.3:8002 BalancerMember http://192.168.0.4:8002 BalancerMember http://192.168.0.5:8002 BalancerMember http://192.168.0.6:8002 ProxySet lbmethod=byrequests </Proxy> <Location /balancer-manager> SetHandler balancer-manager </Location> ProxyPass /balancer-manager ! ProxyPass / balancer://mycoplasma-balancer/
Enfin pour enregistrer nos modifications :
a2enmod ssl a2ensite mycoplasma2.site.conf service apache2 restart
Comme on peut le voir sur la photo ci-dessous : nous avons accès à notre site de façon sécurisée.
Configuration bind9
BIND veut dire : Berkeley Internet Name Daemon Nous avons déjà installer le package titre du lien ici.
Ensuite il faut créer un fichier de configuration dans le dossier /etc/bind/ avec les informations de notre site:
root@mycoplasma:/etc/bind# cat mycoplasma2.site
; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA ns.chlamydiae.site. root.mycoplasma2.site ( 4 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; IN NS ns.mycoplasma2.site. IN NS ns6.gandi.net. @ IN A 193.48.57.178 ns IN A 193.48.57.178 www IN A 193.48.57.178
Il faut modifier le fichier named.conf.local pour lui donner le nom de notre fichier configuration et de définir les paramètres généraux d'une zone.:
root@mycoplasma:/etc/bind# cat named.conf.local
zone "mycoplasma2.site" { type master; file "/etc/bind/mycoplasma2.site"; allow-transfer {217.70.177.40;}; };
Il faut ensuite relancer avec la commande suivante :
service bind9 restart
Il faut aussi ajouter dans l'onglet GlueRecords le nom de domaine de notre site, et celui de gandi.
Sécurisation de site web par certificat
On doit configurer apache2 en mode sécurisé à l’aide d’une clef asymétrique et d’un certificat signé par une autorité de certification. Le CA signe un CSR (Certificate Signing Request), pour ce faire il faut créer les clefs et le CSR en utilisant openssl. Il faut ensuite le transformer en un certificat, on va donc configurer apache2 sur le port 443 afin qu'il puisse gérer du HTTPS.
openssl req -nodes -newkey rsa:2048 -sha256 -keyout myserver.key -out server.csr
Il faut ensuite renseigner quelques informations :
Country Name (2 letter code) [AU]: France State or Province Name (full name) [Some-State]: Haut de France Locality Name (eg, city) []: Lille Organization Name (eg, company) [Internet Widgits Pty Ltd]: Polytech Lille Organizational Unit Name (eg, section) []: IMA5 Common Name (e.g. server FQDN or YOUR name) []: mycoplasma2.site Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
La seule vraie ligne où il ne faut pas se tromper, c'est celle où l'on indique le nom du site (Common Name), si la ligne est fausse Gandi n'acceptera pas votre clef. Une fois ces informations renseignées, une clef est générée.
/!\ Il faut la garder précieusement et ne pas la SUPPRIMER des fichiers de la machine virtuelle, dans ce cas il faudra tout recommencer avec un nouveau nom de domaine parce que la clef n'est générable qu'une seule fois. Il faut maintenant copier le contenu de ce fichier avec le "BEGIN CERTIFICATE REQUEST-----" et le "END CERTIFICATE REQUEST-----" sur le site de gandi.
Sécurisation de serveur DNS par DNSSEC
root@mycoplasma:/etc/bind# vim named.conf
include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones"
Pour générer les clefs dans un même dossier, il faut le créer voici le chemin pour notre groupe :
root@mycoplasma:/etc/bind/mycoplasma2.site.dnssec#
Pour générer les clés KSK on lance la commande suivante :
dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE mycoplasma2.site
Pour ZSK :
dnssec-keygen -a RSASHA1 -b 1048 -n ZONE mycoplasma2.site
On peut maintenant rajouter nos clefs dans le fichier mycoplasma2.site:
root@mycoplasma:~# cat /etc/bind/mycoplasma2.site
$TTL 604800 $include /etc/bind/mycoplasma2.site.dnssec/mycoplasma2.site-ksk.key $include /etc/bind/mycoplasma2.site.dnssec/mycoplasma2.site-zsk.key @ IN SOA ns.chlamydiae.site. root.mycoplasma2.site ( 4 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; IN NS ns.mycoplasma2.site. IN NS ns6.gandi.net. @ IN A 193.48.57.178 ns IN A 193.48.57.178 www IN A 193.48.57.178
On signe les enregistrements de la zone en exécutant la commande suivante :
dnssec-signzone -o mycoplasma2.site -k mycoplasma2.site-ksk ../mycoplasma2.site mycoplasma2.site-zsk
Dernière étape, il fait ajouter le chemin du fichier pour utiliser le fichier de zone signé :
root@mycoplasma:~# cat /etc/bind/named.conf.local
zone "mycoplasma2.site" { type master; file "/etc/bind/mycoplasma2.site.signed"; allow-transfer {217.70.177.40;}; };
service bind9 restart
Nous vérifions sous dnsviz.net le bon fonctionnement du DNSSEC :
Serveur Freeradius
Freeradius est un serveur Radius libre permettant de s’authentifier. Le protocole radius permet de se connecter via un échange de paquets UDP. RADIUS est un protocole client-serveur. La configuration du serveur FreeRADIUS consiste à :
- Déclarer ses clients (adresses IP), les routeurs ou switchs, et d’y renseigner le mot de passe partagé ;
- Puis d’enregistrer les utilisateurs avec leur mot de passe.
Dans un premier temps:
root@mycoplasma:/ apt-get install freeradius
Ensuite, il faut modifier les fichiers de configuration:
- Déclarer ses clients
root@mycoplasma:/etc/freeradius/3.0 # vi clients.conf client 10.60.200.2/24 { secret = secretIMA5SC shortname = borneMycoplasma }
client PA { ipaddr = 10.60.201.5 secret = secretIMA5SC }
- Enregistrer les utilisateurs
Il faut ajouter une ligne qui indique l'identifiant et le mot de passe. On a choisi les mêmes id que la VM : root et mot de passe habituel.
root@mycoplasma:/etc/freeradius/3.0# vim users
user Cleartext-Password := "<password>"
Enregistrer les modifications et relancer :
service freeradius stop freeradius -X
Enfin cette comande permet d'afficher les logs:
root@mycoplasma:/etc/freeradius/3.0# tail -f /var/log/freeradius/radius.log
Ferme de serveurs Web
Il faut implanter une architecture d’équilibrage de charge pour un site Web.
Architecture générale de la ferme
Pour ce faire, chaque binôme a créé une nouvelle machine virtuelle Xen qui hébergera un serveur Web. Ainsi chaque binôme pourra disposer de plusieurs serveurs Web proposant exactement le même site sur plusieurs machines différentes. Ces serveurs Web ne seront pas directement disponibles d’Internet mais au travers d’un équilibreur de charge tournant sur leur machine virtuelle principale.
Nom de la Machine Virtuelle : private-mycoplasma
Commandes: La MV doit être créée sur Cordouan.
root@zabethX:~# ssh root@cordouan.insecserv.deule.net
root@cordouan:~# xen-create-image --hostname=private-mycoplasma --ip=ip 192.168.0.2 --dir=/usr/local/xen root@cordouan:~# xl create private-mlycoplasma.cfg
Il faut suivre les logs de la création de la machine virtuelle avec le fichier suivant:
root@cordouan:~# tail -f /var/log/xen-tools/private-mycoplasma.log
Pour accèder une première fois à la machine virtuelle, il faut utiliser cette commande car SSH n'est pas encore autorisé.
root@cordouan:~# xl console private-mycoplasma
Pour l'activer voici les modifications, il faut remplacer la ligne suivante de ce fichier /etc/ssh/sshd_config :
" #PermitRootLogin prohibit-password" par " PermitRootLogin yes"
Il est possible de se connecter en SSH et de paramétrer le proxy :
root@cordouan:~# ssh root@192.168.0.2 root@private-mycoplasma:~# export http_proxy=http://proxy.plil.fr:3128 root@private-mycoplasma:~# export https_proxy=http://proxy.plil.fr:3128 root@private-mycoplasma:~# xen-create-image --hostname=herpesgenital --dhcp --dir=/usr/local/xen --force
Il faut modifier l'adresse mac, pour avoir une adresse mac unique pour chaque binôme, et il faut configurer le bridge.
vif = [ 'mac=00:16:3E:2B:FF:6A,bridge=IMA5sc-priv' ]
Voici notre nouvelle structure :
Pour y arriver, il faut modifier les fichiers /etc/network/interfaces des deux machines virtuelles avec les adresses, Gateway, et netmask marque sur la photo ci-dessus. Et valider les modifications avec les commandes habituelles : ifdown ethi et ifup ethi
Mascarade
iptables -P FORWARD DROP iptables -A FORWARD -j ACCEPT -s 192.168.0.0/24 iptables -A FORWARD -j ACCEPT -d 192.168.0.0/24 iptables -t nat -A POSTROUTING -j MASQUERADE -s 192.168.0.0/24 echo 1 > /proc/sys/net/ipv4/ip_forward apt install iptables-persistent
Il faut ensuite décommenter
net.ipv4.ipforward=1
Création du conteneur
Il est important dans cette partie que tous les binômes se mettent d'accord pour installer le même package de docker
root@mycoplasma:~/# ansible-galaxy install geerlingguy.docker
Voici le fichier DockerFile que l'on a codé :
root@mycoplasma:~/test# cat docker/Dockerfile FROM centos:latest MAINTAINER NewstarCorporation RUN yum -y install httpd COPY index.html /var/www/html CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"] EXPOSE 80
On a eu le problème suivant lorsqu'on souhaite visiter notre site :
root@corduan:~/# docker ps => Notre docker "mycoplasma" tourne donc ce n'est pas le problème.
root@corduan:~/# docker exec -it <CONTAINER ID> /bash/bin root@<CONTAINER ID>:~/# ls /var/www/html
Avec cette dernière commande, on peut voir que le fichier index.html ne s'est pas copié malgré les commandes du Dockerfile. Pourtant le Docker build s'est exécuté sans afficher d'erreurs. On peut voir les logs pour avoir une idée :
root@corduan:~/# docker logs <CONTAINER ID>
Voici le résultat :
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.5. Set the 'ServerName' directive globally to suppress this message
Nous avons finalement trouvé l'erreur qui se située sur la cible de la commande COPY du dockerfile.
Ansible
Ansible est un logiciel Open Source qui permet de gérer finement une infrastructure informatique, les déploiements automatisés multi-environnements, les ordinateurs et les configurations systèmesplus. Nous allons nous servir de cet outil afin d'automatiser le déploiement de notre site web sur la ferme de serveurs.
Diffusion de la clé SSH
Pour travailler le plus efficacement avec ansible il faut que l'on puissent se connecter en SSH aux machines cibles sans avoir à taper le mot de passe à chaque fois. Pour ce faire, nous devons ajouter manuellement notre clé publique à la liste des hôtes autorisés sur chaque machine.
Etape à suivre sur notre machine virtuelle publique:
- On installe ansible avec un apt-get.
- On génère une clef asymétrique:
ssh-keygen -t rsa
- On diffuse la clef publique sur les machines virtuelles privées 192.168.0.1 à 192.168.0.6 :
cat .ssh/id_rsa.pub | ssh 192.168.0.1 "cat >> /root/.ssh/authorized_keys2"
Hosts
Sur la VM publique et afin de rendre notre inventaire plus explicite, nous ajoutons la configuration des noms d'hôtes à notre /etc/network/hosts:
root@mycoplasma:~# cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 mycoplasma mycoplasma 192.168.0.1 private-6phil 192.168.0.2 private-mycoplasma 192.168.0.3 private-herpesgenital 192.168.0.4 private-chlamydiae 192.168.0.5 private-chaudepisse 192.168.0.6 private-blennoragie ...
Toujours sur la VM publique on rédige l'inventaire de notre parc en modifiant ( /etc/ansible/hosts ) c'est un fichier à remplir en utilisant la syntaxe YAML:
root@mycoplasma:~# cat /etc/ansible/hosts all: hosts: mycoplasma: children: webservers: hosts: private-6phil: private-mycoplasma: private-herpesgenital: private-chlamydiae: private-chaudepisse: private-blennoragie: ntp-client: hosts: private-mycoplasma ntp-server: hosts: mycoplasma
On peut tester notre parc:
root@mycoplasma:~# ansible all -m ping -o private-6phil | SUCCESS => {"changed": false,"ping": "pong"} private-mycoplasma | SUCCESS => {"changed": false,"ping": "pong"} private-herpesgenital | SUCCESS => {"changed": false,"ping": "pong"} private-chlamydiae | SUCCESS => {"changed": false,"ping": "pong"} mycoplasma | SUCCESS => {"changed": false,"ping": "pong"} private-chaudepisse | SUCCESS => {"changed": false,"ping": "pong"} private-blennoragie | SUCCESS => {"changed": false,"ping": "pong"}
Playbooks
Maintenant qu'on a défini toutes les machines dans notre parc et qu'on peut se connecter sans mot de passe, on peut exécuter une commande à distance sur tout le parc. Un "playbook" c'est un moyen d’exécuter une liste des tâches sur des machines à l'aide d'ansible. Nous avons préparé le palybook suivant pour le déploiement de notre ferme de serveurs.
root@mycoplasma:/etc/ansible/PLAYBOOKS# cat deploy-site.yaml --- - hosts: webservers tasks: - name: 1. Copying Website files copy: src: "deployment-files/index.html" dest: "/tmp/docker/mycoplasma/index.html" owner: root group: root mode: '0666' - name: 2. Copying Dockerfile copy: src: "deployment-files/Dockerfile" dest: "/tmp/docker/mycoplasma/Dockerfile" owner: root group: root mode: '0666' - name: 3. Install pip apt: name=python-pip state=present - name: 4. install docker package pip: name=docker - name: 5. Stop container if running docker_container: name: mycoplasmacontainer state: stopped - name: 6. delete image docker_image: name: mycoplasma force: yes state: absent - name: 7. Build Docker image from Dockerfile docker_image: name: mycoplasma path: "/tmp/docker/mycoplasma/" state: build - name: 8. Running the container docker_container: image: mycoplasma:latest state: started recreate: yes name: mycoplasmacontainer ports: "8002:80" - name: 9. Check if container is running shell: docker ps
root@mycoplasma:/etc/ansible/PLAYBOOKS# ansible-playbook deploy-site.yaml
Tests d’intrusion
Cassage de clef WEP d’un point d’accès WiFi
Pour scanner l'environnement Wi-Fi, on utilise l'outil airodump-ng. On remarque qu'il y a deux types de wifi, les cracottes avec un c et les kracottes avec un k. On lance l'interface en mode moniteur :
airmon-ng start wlan0mon airodump-ng --encrypt wep wlan0mon
On a choisi de casser la clé WEP de la cracotte6 sur le channel 2, on enregistre les paquets dans webPack.
airodump-ng -c 2 –-bssid 04:DA:D2:9C:5O:5A -w dico wlan0mon
La commande suivante permet de se faire passer pour un client afin de générer de l'activité sur le réseau.
aireplay-ng --fakeauth 30 -a 04:DA:D2:9C:5O:5A wlan0mon
Un fichier dico**.cap a été créé, vérifier le nom du fichier avec la commande ls On utilise les paquets enregistrés pour réaliser le cassage:
aircrack-ng dico*.cap
Cassage de mot de passe WPA-PSK par force brute
Il faut lancer la commande ip a : récupérer le nom de l'interface wifi : ""wlx40a5ef0f6518"". Il faut le lancer avec la commande :
airmon-ng start wlx40a5ef0f6518
Il faut ensuite écouter le réseau, on récupère alors le channel(2), le nom du wifi, le BSSID (04:DA:D2:9C:5O:5A) avec la commande suivante:
airodump-ng --encrypt wpa wlan0mon
Nous avons choisi de cracker "kracote03"
airodump-ng wlan0mon --bssid 04:DA:D2:9C:5O:5A --ch 2 -w capture
Il faut l'arreter une fois qu'on obtient un handshake
Pour générer un dictionnaire, on a besoin de la commande suivante :
sudo apt-get update sudo apt-get install crunch
crunch 8 8 -o dico.txt 0123456789
- 8 8 : donne des codes de 8 caractères au minimum et au maximum
On lance cette commande :
airodump-ng -c 2 --bssid 04:DA:D2:9C:5O:5A -w ./home/pifou/crack wlx40a5ef0f6518
Voici une capture de la commande :
aircrack crack/capture.cap -w dico.txt
On remarque ce la photo ci dessus que la commande a pris 21 min et 42 sec.
Réalisation
Sécurisation de données
Cette partie n'est pas à réaliser.
Cryptage de données
L'objectif de cette partie est d'apprendre à sécuriser des données sur une clé en cryptant les informations. Pour ce faire, il faut commencer par installer les outils nécessaires :
root@zabethX :~$ apt-get update root@zabethX :~$ apt-get install lvm2 cryptsetup
Cryptsetup est une interface en ligne de commande permettant de gérer les fonctionnalités et les actions de dm-crypt. Nous avons trouvé beaucoup de documentations sur internet, nous vous conseillons ce site.
Dans un premier temps, il faut (brancher la clé USB et) chercher le périphérique et ses partitions avec la commande suivante :
root@zabethX:~# fdisk -l // Permet de lister les partitions de la machine
root@zabethX:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 254:0 0 124G 0 disk └─sda1 254:1 0 124G 0 part / sdb 254:16 0 8G 0 disk ├─sdb1 254:17 0 8G 0 part /
Notre clé USB est sdb, on peut la crypter :
root@zabethX:~# cryptsetup luksFormat -c aes-xts-plain -s 512 /dev/sdb1
On crée un répertoire de point de montage, par convention c'est /mnt mais on peut créer un autre dossier dans ce dernier:
root@zabethX:~# mkdir /mnt/USBCrypt
On chiffre la clé USB, on doit entrer le mot de passe qui permettra de sécuriser la clé.
root@zabethX:~# cryptsetup luksOpen /dev/sdb1 usbkey root@zabethX:~# mkfs.ext4 /dev/mapper/usbkey
Il faut faire l'association entre la partition du périphérique et le point de montage.
root@zabethX:~# mount -t ext4 /dev/mapper/usbkey /mnt/USBCrypt
Il faut créer un fichier basique avec la commande vim par exemple, on peut écrire un mot et démonter la clé:
root@zabethX:~# umount /mnt/USBCrypt
Lorsqu'on échange nos clés entre deux binômes, on remarque que le processus a bien fonctionné et que lorsqu'on essaye d'accéder à la clé cette dernière est protégé par un mot de passe.
Sécurisation WiFi par WPA2-EAP
Le but est de faire en sorte que l’accès à la borne WiFi soit controlé par WPA2-EAP. L’identification va se faire en utilisant le même serveur FreeRadius que pour la sécurisation filaire.
Pour accéder à la configuration Wifi :
root@zabethX:~# minicom -os // Sur l'ordinateur avec la clé Wifi
Il faut changer quelques propriétés :
- concernant le port : /dev/ttyUSB0,
- 9600 bauds
- Désactiver le control de flux
Pour passer en super utilisateur :
ap> enable
Il faut entrer le mot de passe :"Cisco"
AAA :
- Authentication: Reconnaissance d'un utilisateur et l'association à un mot de passe.
- Authorization : Droits des utilisateurs
- Accounting : Informations de suivis de consommation d’un utilisateur (sur quel routeur il s’est connecté ? Combien de temps s’est-il connecté ? ..)
Concernant la configuration:
ap#> config term ap(config)#> aaa new-model ap(config)#> aaa authentication login eap_group2 group radius_group2 ap(config)#> aaa group server radius radius_group2 ap(config)#> radius-server host 193.48.57.178 auth-port 1812 acct-port 1813 key secretIMA5SC
- Création des SSID, protégé par la méthode WPA2-EAP :
ap(config)#> dot11 ssid Mycoplasma ap(config-ssid)# vlan 102 ap(config-ssid)# authentication open eap eap_group2 ap(config-ssid)# authentication network-eap eap_group2 ap(config-ssid)# authentication key-management wpa ap(config-ssid)#mbssid Guest-mode
ap(config)#int dot11radio0 ap(config-if)#mbssid ap(config-if)#encryption vlan 102 mode ciphers aes-ccm tkip ap(config-if)#ssid
ap(config)#int dot11radio0.2 ap(config-subif)#encapsulation dot1Q 102 ap(config-subif)#bridge-group 102