TP sysres IMA5sc 2019/2020 G5 : Différence entre versions
(→Docker) |
|||
Ligne 112 : | Ligne 112 : | ||
===Docker=== | ===Docker=== | ||
+ | Pour le déploiement docker, il est plus facile de | ||
+ | |||
+ | Tout d'abord, on modifie le fichier /etc/ansible/hosts | ||
+ | |||
+ | --- | ||
+ | all: | ||
+ | hosts: | ||
+ | moa: | ||
+ | ansible_host: 192.168.0.5 | ||
+ | children: | ||
+ | webservs: | ||
+ | hosts: | ||
+ | 192.168.0.1: | ||
+ | 192.168.0.2: | ||
+ | 192.168.0.3: | ||
+ | 192.168.0.4: | ||
+ | 192.168.0.6: | ||
+ | |||
+ | On effectuera nos tests sur notre vm private (moa) | ||
+ | |||
+ | Ensuite, j'utiliserais des roles Ansibles que je stockerais dans le dossier /etc/ansible/roles/ | ||
+ | |||
+ | J'utilisais un simple playbook qui appelle des roles | ||
+ | |||
+ | --- | ||
+ | - hosts: all | ||
+ | roles: | ||
+ | - deploy_docker | ||
+ | vars: | ||
+ | docker_apt_repository: "deb [arch={{ docker_apt_arch }}] https://download.docker.com/linux/debian stretch stable" | ||
+ | |||
+ | Attention, la variable est nécessaire suite a un bug rencontré au niveau de l'achitecture de la VM private. | ||
+ | Celle ci n'est nécessaire que pour le role deploy_docker. (Elle aurait pu être situé dans le dossier vars du role. | ||
+ | |||
+ | ====Role Maison==== | ||
+ | Permet de configurer les vms (par l'installation de tous les paquets nécessaires) | ||
+ | |||
+ | tasks : | ||
+ | - name: Copy motd | ||
+ | copy: | ||
+ | dest: /etc/motd | ||
+ | src: motd | ||
+ | |||
+ | - name: install ntp | ||
+ | apt: | ||
+ | state: present | ||
+ | name: | ||
+ | - ntp | ||
+ | - ntpdate | ||
+ | |||
+ | - name: Copy over the NTP configuration | ||
+ | copy: src=ntp.conf dest=/etc/ntp.conf | ||
+ | tags: ntp | ||
+ | |||
+ | - name: Stop ntp | ||
+ | service: name=ntp state=stopped enabled=yes | ||
+ | tags: ntpd | ||
+ | |||
+ | - name: Sync time initialy | ||
+ | shell: ntpdate ntp.polytech-lille.fr | ||
+ | tags: ntp | ||
+ | |||
+ | - name: Make sure NTP is started up | ||
+ | service: name=ntp state=started enabled=yes | ||
+ | tags: ntp | ||
+ | |||
+ | Les fichiers | ||
+ | |||
+ | motd : (Permet de modifier le message d’accueil du terminal) | ||
+ | |||
+ | The programs included with the Devuan GNU/Linux system are free software; | ||
+ | the exact distribution terms for each program are described in the | ||
+ | individual files in /usr/share/doc/*/copyright. | ||
+ | |||
+ | Devuan GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent | ||
+ | permitted by applicable law. | ||
+ | |||
+ | HELLO LES CHAUDEPISSEUX /!\ sortez couverts ! | ||
+ | |||
+ | et ntp.conf: (permet de configurer le ntp (pour qu'il synchronise l'heure du système)) | ||
+ | |||
+ | server ntp.polytech-lille.fr | ||
+ | |||
+ | ====Role deploy_docker==== | ||
+ | |||
+ | |||
+ | Permet, comme son nom l'indique, de déployer le container docker sur une VM. | ||
+ | |||
+ | Le fichier task : | ||
+ | |||
+ | --- | ||
+ | # tasks file for deploy_docker | ||
+ | - name: install rsync and python-pip | ||
+ | apt: | ||
+ | state: present | ||
+ | name: | ||
+ | - rsync | ||
+ | - python-pip | ||
+ | |||
+ | - name: install docker-py | ||
+ | shell: pip install docker | ||
+ | |||
+ | - name: upload the site directory to the docker host | ||
+ | synchronize: src=chaudepisse dest=/tmp/site/ | ||
+ | register: sync_result | ||
+ | |||
+ | - name: Stop a container | ||
+ | docker_container: | ||
+ | name: chaudepisse_container | ||
+ | state: stopped | ||
+ | image: chaudepisse_image | ||
+ | when: sync_result.changed | ||
+ | |||
+ | - name: delete container | ||
+ | docker_container: | ||
+ | name: chaudepisse_container | ||
+ | state: absent | ||
+ | image: chaudepisse_image | ||
+ | when: sync_result.changed | ||
+ | ignore_errors: yes | ||
+ | |||
+ | - name: delete the image | ||
+ | docker_image: > | ||
+ | name=chaudepisse_image | ||
+ | tag=latest | ||
+ | path=/tmp/site/chaudepisse | ||
+ | state=absent | ||
+ | force=yes | ||
+ | when: sync_result.changed | ||
+ | |||
+ | - name: build the image | ||
+ | docker_image: > | ||
+ | name=chaudepisse_image | ||
+ | tag=latest | ||
+ | path=/tmp/site/chaudepisse | ||
+ | state=present | ||
+ | |||
+ | |||
+ | - name: create container | ||
+ | docker_container: | ||
+ | name: chaudepisse_container | ||
+ | state: present | ||
+ | image: chaudepisse_image | ||
+ | |||
+ | - name: Start container, connect to network and link | ||
+ | docker_container: | ||
+ | name: chaudepisse_container | ||
+ | image: chaudepisse_image | ||
+ | state: started | ||
+ | recreate: yes | ||
+ | ports: | ||
+ | - "8005:80" | ||
+ | |||
+ | |||
+ | Après coup, il est possible de simplifier ce script de déploiement, mais celui-ci est 100% fonctionnel. | ||
+ | |||
+ | Pour que celui ci fonctionne il faut les fichiers: | ||
+ | |||
+ | - files /chaudepisse/Dockerfile : | ||
+ | |||
+ | FROM centos:latest | ||
+ | MAINTAINER chaudepisse | ||
+ | RUN yum -y install httpd | ||
+ | COPY index.html /var/www/html/ | ||
+ | CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"] | ||
+ | EXPOSE 80 | ||
+ | |||
+ | - files /chaudepisse/index.html : | ||
+ | |||
+ | <!DOCTYPE html> | ||
+ | <html> | ||
+ | <body> | ||
+ | <h1>La chaude-pisse</h1> | ||
+ | </body> | ||
+ | </html> | ||
+ | |||
+ | Il est possible de simplifier le DockerFile, celui-ci ne nécessite pas de FROM centos mais aurait pu simplement utiliser from httpd. Cependant, il est plus facile de débugger avec une distribution centos qu'une image réduite fournie par apache. | ||
==Configuration du serveur DNS/DNSSEC== | ==Configuration du serveur DNS/DNSSEC== |
Version du 26 janvier 2020 à 23:29
Sommaire
Création des VMs
Nous avons commandés les noms de domaines sur le site gandi.net.
Tout d'abord, nous avons réserver le nom de domaine via gandi.net: chaudepisse.site.
Installation
Tout d’abord nous allons créer une machine virtuelle sur cordouan grâce à l’hyperviseur Xen.
On se connecte d'abord en SSH à Cordouan, puis on spécifie le proxy pour pouvoir ensuite récupérer les packages. On peut alors créer l'image de la machine en spécifiant --dhcp car on ne connaît pas encore l’adresse IP.
Tout d'abord, il faut se connecter en SSH sur le serveur cordouan.insecserv.deule.net avec l'utilisateur root et le mot de passe habituel.
ssh root@cordouan.insecserv.deule.net
Ensuite, nous avons installés les VM xen. Pour se faire, il suffit de spécifier les proxys de polytech.
export http_proxy=http://proxy.polytech-lille.fr/ export https_proxy=https://proxy.polytech-lille.fr/
Et lancer la commande d'installation des VM xen.
xen-create-image --hostname=chaudepisse --dhcp --dir=/usr/local/xen/ --force
Le fichier config généré se trouve à l'emplacement /etc/xen/chaudepisse.cfg
# # Configuration file for the Xen instance chaudepisse, created # by xen-tools 4.7 on Mon Nov 18 17:05:05 2019. # # # Kernel + memory size # kernel = '/boot/vmlinuz-4.9.0-6-amd64' extra = 'elevator=noop' ramdisk = '/boot/initrd.img-4.9.0-6-amd64' vcpus = '1' memory = '256' # # Disk device(s). # root = '/dev/xvda2 ro' disk = [ 'file:/usr/local/xen//domains/chaudepisse/disk.img,xvda2,w', 'file:/usr/local/xen//domains/chaudepisse/swap.img,xvda1,w', 'phy:/dev/virtual/ima5_chaudepisse_home,xvdb1,w', 'phy:/dev/virtual/ima5_chaudepisse_var,xvdb2,w', 'phy:/dev/virtual/ima5_chaudepisse_disk1,xvdb3,w', 'phy:/dev/virtual/ima5_chaudepisse_disk2,xvdb4,w', 'phy:/dev/virtual/ima5_chaudepisse_disk3,xvdb5,w', ] # # Physical volumes # # # Hostname # name = 'chaudepisse' # # Networking # dhcp = 'dhcp' vif = [ 'mac=00:16:3E:FE:21:79, bridge=IMA5sc', 'mac=00:16:3E:FE:21:8F, bridge=IMA5sc_priv' ] # # Behaviour # on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart'
On a créé le bridge IMA5sc_priv afin d'avoir un réseau isolé pour les VMs (192.168.0.x)
Les fichiers de configurations /etc/network/interfaces :
Pour la publique :
auto eth1 iface eth1 inet static address 192.168.0.15 netmask 255.255.255.0
Pour la private :
auto eth0 iface eth0 inet static gateway 192.168.0.15 address 192.168.0.5/24
On oublie pas de réaliser la masquerade pour laisser les packets transiter vers la private
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
Cette mascarade étant temporaire, il faut la sauvegarder à l'aide du paquet iptables-persistent
apt install iptables-persistent
Docker
Pour le déploiement docker, il est plus facile de
Tout d'abord, on modifie le fichier /etc/ansible/hosts
--- all: hosts: moa: ansible_host: 192.168.0.5 children: webservs: hosts: 192.168.0.1: 192.168.0.2: 192.168.0.3: 192.168.0.4: 192.168.0.6:
On effectuera nos tests sur notre vm private (moa)
Ensuite, j'utiliserais des roles Ansibles que je stockerais dans le dossier /etc/ansible/roles/
J'utilisais un simple playbook qui appelle des roles
--- - hosts: all roles: - deploy_docker vars: docker_apt_repository: "deb [arch=Modèle:Docker apt arch] https://download.docker.com/linux/debian stretch stable"
Attention, la variable est nécessaire suite a un bug rencontré au niveau de l'achitecture de la VM private. Celle ci n'est nécessaire que pour le role deploy_docker. (Elle aurait pu être situé dans le dossier vars du role.
Role Maison
Permet de configurer les vms (par l'installation de tous les paquets nécessaires)
tasks :
- name: Copy motd copy: dest: /etc/motd src: motd - name: install ntp apt: state: present name: - ntp - ntpdate - name: Copy over the NTP configuration copy: src=ntp.conf dest=/etc/ntp.conf tags: ntp - name: Stop ntp service: name=ntp state=stopped enabled=yes tags: ntpd - name: Sync time initialy shell: ntpdate ntp.polytech-lille.fr tags: ntp
- name: Make sure NTP is started up service: name=ntp state=started enabled=yes tags: ntp
Les fichiers
motd : (Permet de modifier le message d’accueil du terminal)
The programs included with the Devuan GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Devuan GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. HELLO LES CHAUDEPISSEUX /!\ sortez couverts !
et ntp.conf: (permet de configurer le ntp (pour qu'il synchronise l'heure du système))
server ntp.polytech-lille.fr
Role deploy_docker
Permet, comme son nom l'indique, de déployer le container docker sur une VM.
Le fichier task :
--- # tasks file for deploy_docker - name: install rsync and python-pip apt: state: present name: - rsync - python-pip - name: install docker-py shell: pip install docker - name: upload the site directory to the docker host synchronize: src=chaudepisse dest=/tmp/site/ register: sync_result - name: Stop a container docker_container: name: chaudepisse_container state: stopped image: chaudepisse_image when: sync_result.changed - name: delete container docker_container: name: chaudepisse_container state: absent image: chaudepisse_image when: sync_result.changed ignore_errors: yes - name: delete the image docker_image: > name=chaudepisse_image tag=latest path=/tmp/site/chaudepisse state=absent force=yes when: sync_result.changed - name: build the image docker_image: > name=chaudepisse_image tag=latest path=/tmp/site/chaudepisse state=present
- name: create container docker_container: name: chaudepisse_container state: present image: chaudepisse_image - name: Start container, connect to network and link docker_container: name: chaudepisse_container image: chaudepisse_image state: started recreate: yes ports: - "8005:80"
Après coup, il est possible de simplifier ce script de déploiement, mais celui-ci est 100% fonctionnel.
Pour que celui ci fonctionne il faut les fichiers:
- files /chaudepisse/Dockerfile :
FROM centos:latest MAINTAINER chaudepisse RUN yum -y install httpd COPY index.html /var/www/html/ CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"] EXPOSE 80
- files /chaudepisse/index.html :
<!DOCTYPE html> <html> <body>
La chaude-pisse
</body> </html>
Il est possible de simplifier le DockerFile, celui-ci ne nécessite pas de FROM centos mais aurait pu simplement utiliser from httpd. Cependant, il est plus facile de débugger avec une distribution centos qu'une image réduite fournie par apache.
Configuration du serveur DNS/DNSSEC
On installe les paquets suivants
apt install bind9 bind9-host dnsutils
Puis, on créé un fichier de configuration à l'emplacement /etc/bind/chaudepisse.site
; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA ns.chaudepisse.site. root.chaudepisse.site ( 4 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL IN NS ns.chaudepisse.site. IN NS ns6.gandi.net. @ IN A 193.48.57.181 ns IN A 193.48.57.181 www IN A 193.48.57.181
On ajoute ensuite la configuration de note zone dans le fichier /etc/bind/named.conf.local
zone "chaudepisse.site" { type master; file "/etc/bind/chaudepisse.site.signed"; allow-transfer {217.70.177.40;}; //dns Gandi };
Puis, on redémarre le service bind9
Le fichier /etc/bind/chaudepisse.site.signed a été généré à partir de clés ZSK et KSK privées et publiques. (Pour que notre DNS soit un DNSSEC)
KSK :
dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE chaudepisse.site
ZSK :
dnssec-keygen -a RSASHA1 -b 1024 -n ZONE chaudepisse.site
On inclue ces fichiers dans le fichier de zone chaudepisse.site
$include /etc/bind/chaudepisse.site-dnssec/chaudepisse.site-ksk.key $include /etc/bind/chaudepisse.site-dnssec/chaudepisse.site-zsk.key
On signe le fichier de zone avec la commande dnssec-signzone
On effectue ensuite un restart du service bind9 afin de prendre en compte les changements
On oublie pas d'ajouter le DNS fraichement créé au Glue Records de Gandi.
Serveurs Apache
VM publique
Sur cette VM, le serveur apache doit prendre en charge les requetes HTTP et HTTPS (certificat Gandi).
Elle doit également utiliser un équilibreur de charge qui réparti la charge sur toutes les VM privates.
VM private
Sur ces VM, un simple serveur apache httpd suffit, il permet de créé un basique site web facilement. Les VM privates seront déployés via docker.
La page principale du site sera au chemin /var/www/index.html
Configuration du serveur Freeradius
La configuration de ce serveur permet l'authentification eap sur la borne wifi (avec id et mdp).
Pour cela, il faut installer Freeradius
apt-get install freeradius
Ensuite, il suffit de le configurer de la bonne manière.
client 10.60.200.5/24 { secret = secretIMA5SC shortname = borneChaudepisse1 } # IPv6 Client client localhost_ipv6 { ipv6addr = ::1 secret = testing123 } # All IPv6 Site-local clients #client sitelocal_ipv6 { # ipv6addr = fe80::/16 # secret = testing123 #} client PA_IMA5sc { ipaddr = 10.60.201.5 secret = secretIMA5SC }
Configuration de la borne wifi
Il suffit de créer un model contenant les informations nécessaires à la connexion au Freeradius.
ap(config)#aaa new-model ap(config)#aaa authentication login eap_groupe5 group radius_group5 ap(config)#aaa group server radius radius_group5 ap(config-sg-radius)#server 193.48.57.181 auth-port 1812 acct-port 1813 ap(config-sg-radius)#auth-port 1812 acct-port 1813 key secretIMA5SC ap(config)#exit
En faisant cela, on peut voir que notre serveur radius est bien enregistré
ap#show aaa servers
Puis on peut créer le réseau wifi :
ap#conf t ap(config)#dot11 ssid Chaudepisse ap(config-ssid)#vlan 105 ap(config-ssid)#authentication open eap eap_group5 ap(config-ssid)#authentication network-eap eap_group5 ap(config-ssid)#authentication key-management wpa ap(config-ssid)#Mbssid Guest-mode ap(config-ssid)#end
puis :
ap(config)#int dot11radio0 ap(config-if)#Mbssid ap(config-if)#encryption vlan 105 mode ciphers aes-ccm tkip ap(config-if)#ssid Chaudepisse ap(config-if)#end
et enfin l'encapsulation
ap(config)#int dot11radio0.11 ap(config-subif)#encapsulation dot1Q 105 ap(config-subif)#end
et
ap(config)#int dot11radio0.11 ap(config-subif)#encapsulation dot1q 105 ap(config-subif)#bridge-group 105 ap(config-subif)#end
En n'oubliant pas de démarrer l'interface :) :
ap(config)#interface Dot11Radio0 ap(config-if)#no shutdown
Intrusion
Les clés WEP et WPA ont été toutes les deux crackées. Il y a une net différence entre les deux.
Pour notre part, nous avons consacrès nos efforts sur le crackage d'une clé de type WPA-PSK. Le nom du réseau est kracotte06.
Pour se faire, il suffit (après avoir passé sa carte wifi en mode monitoring) via airmon-ng.
Ensuite, il faut écouter le réseau à la rechercher d'un handshake.
airodump-ng --encrypt wpa wlan0mon
Une fois le SSID récupéré, il suffit d'utiliser la commande suivante afin d'enregistrer les paquets reçus
airodump-ng --bssid 04:DA:D2:9C:50:5D --ch 2 -w cap
Une fois les paquets reçu (Attention il faut qu'un handshake ait été reçu)
Il faut ensuite créer un dictionnaire afin d'obtenir toutes les possibilitées à tester lors de l'attaque bruteforce.
crunch 8 8 0123456789 -o dico.txt
Puis, il suffit de lancer l'algorithme de bruteforce afin de déterminer les différentes clés PSK, TSK...
aircrack-ng cap.cap -w dico.txt
La clé à été trouvée en 42 minutes et est 20133333
Cryptage de la clé USB
Le but de cette partie est de crypter la clé USB à l'aide de l'outil cryptsetup.
L'utilisation de cet outil est décrit [[1]]
Pour afficher la liste des périphériques connectés au PC:
fdisk -l
On formate la partition au format LUKS (crypté) une clé de cryptage sera alors demandée
cryptsetup luksFormat -c aes-xts-plain -s 512 /dev/sdb1
Pour acceder à la partition LUKS on utilise la commande
cryptsetup luksOpen /dev/sdb1 chaudepisse_encrypt
Puis, on formate notre volume en ext4
mkfs -t ext4 /dev/mapper/chaudepisse_encrypt
On le monte ensuite sur /mnt
mount -t ext4 /dev/mapper/chaudepisse_encrypt /mnt/
On y créé un fichier et on démonte la partition ext4:
touch test umount /mnt
Puis on démonte la partition LUSK
cryptsetup luksClose chaudepisse_encrypt
Seul un montage de la partition précédé d'un cryptsetup luksOpen permettra d'afficher le fichier test
Un montage simple, sans utiliser la clé de cryptage, ne sera pas possible. Le format de partition Luks ne peut pas être monté sans luksOpen.
Configuration du réseau
Nous devons créer un réseau à haute disponibilité, pour ce faire nous disposons de deux routeurs, deux commutateurs et d'un serveur Corduan sur lequel se trouve notre MV.
Voici le réseau que nous allons mettre en place:
nous allons tout d'abord effectuer des liaisons physiques pour ensuite définir tout notre réseau sur les différents éléments de ce dernier, l'organisation de ce dernier est précisé sur la page d’accueil du groupe.
Réseau physique
Nos commutateurs/routeurs 1 et 2 sont liés par des câbles de fibre pour ce faire nous avons dû repérer les câbles libres dans chaque salle grâce à un code couleur, les voici:
- Jaune/Noir (liaison commutateur 2/routeur 1)
- Rouge/Vert (liaison commutateur 1/routeur 2)
- Orange/Noir (liaison commutateur 1/XEN)
Puis nous avons listés les adaptateurs et différents de liaisons desquels nous aurons besoin pour mettre en place notre réseau:
- 4 câbles ethernet dont un long
- 5 adaptateurs fibre/ethernet
Nous avons ensuite effectué les branchements pour respecter le schéma ci-dessus.
Réseau sur les éléments
Sur le routeur 1,nous avons répété la commande suivante 8 fois afin de créer une Vlan par machine virtuelle et d'autres d'interconnexion et pour la XEN:
enable conf t interface Gi 0/0/0 service instance 101 ethernet encapsulation dot1q 101 rewrite ingress tag pop 1 symmetric bridge domain 101 exit
sur l'exemple ci-dessus qui est pour la Vlan du groupe 1, il ne faut pas spécifié l'utilisation de trunk (un port pour plusieurs Vlan) car c'est déja fait, cependant il ne faut surtout pas oublier le "symmetric" pour que la liaison fonctionne.
Sur le Commutateur 1, nous avons effectué les mêmes différemment:
enable conf t interface vlan101 nom_de_la_vlan ip adress ip_adress mask standby version 2 standby 101 ip ip_adress standby 101 preempt exit