TP sysres IMA5sc 2020/2021 G2

De Wiki d'activités IMA

TP PRA BARGIBANT-LAGNEAU

Installation des systèmes d’exploitation

Durant ce TP, nous utiliserons comme nom de machine virtuelle le champignon suivant: ophiocordyceps. On travaillera durant cette partie sur le serveur capbreton.plil.info

ssh root@capbreton.plil.info

Installation dans la machine virtuelle Xen

En utilisant le mot de passe non-admin couramment utilisé à l'école, nous avons créé la machine via cette commande:

xen-create-image --hostname=ophiocordyceps --ip=100.64.0.17 --netmask=255.255.255.0 --password=******* --dir=/usr/local/xen --dist=buster --gateway=100.64.0.5

Comme les adresses ont changé au cours du TP nous avons modifié le fichier /etc/network/interfaces et après avoir utilisé les commandes suivantes nous avons la bonne adresse IP sur notre vm.

ifdown eth0
ifup eth0

Montage des disques

(fait, à remplir)

Architecture réseau

L'architecture générale

Les réseaux virtuels

Le routage du site (IPv4)

Le routage du site (IPv6)

Interconnexion avec Internet (IPv4)

Interconnexion avec Internet (IPv6)

Sécurisation du réseau

Interconnexion Internet de secours (IPv4)

Interconnexion Internet de secours (IPv6)

Services Internet

Mise en place du serveur SSH

Autorisation de la connexion en root en ssh en modifiant le paramètre PermitRootLogin dans le fichier /etc/ssh/sshd_config

Pour se connecter en SSH il faut rentrer la commande suivante sur capbreton :

ssh root@ns1.ophiocordyceps.site

Mise en place du serveur DNS

Modification de /etc/resolv.conf : Utilisation de l'adresse locale (127.0.0.1) comme serveur DNS

Modification de /etc/bind/named.conf.options : Ajout des options

listen-on-v6 { any; }
allow-transfer { "allowed_to_transfer"; }

ainsi que de l'acces list :

acl "allowed_to_transfer" {
 217.70.177.40/32 ;
};

Modification de /etc/bind/named.conf.local : Création de la zone

zone "ophiocordyceps.site" {
        type master;
        file "/etc/bind/db.ophiocordyceps.site";
};

Création du fichier d'adresses /etc/bind/db.ophiocordyceps.site:

$TTL    3600
@       IN      SOA     ns1.ophiocordyceps.site. root.ophiocordyceps.site. (
                      	    1           ; Version
                         3600           ; Refresh [1h]
                          600           ; Retry   [10m]
                        86400           ; Expire  [1d]
                          600 )         ; Negative Cache TTL [1h] 

@       IN      NS      ns1.ophiocordyceps.site.
@       IN 	NS 	ns6.gandi.net.
@       IN      MX      100 ns1.ophiocordyceps.site.

ns1     IN      A       193.48.57.187

On parametre également notre serveur mail dans ce fichier.

On installe postfix et on choisit la configuration "Internet Site" pour configurer notre serveur mail. On entre notre nom de site : "ophiocordyceps.site".

On rajoute l'alias suivant dans le fichier /etc/aliases

admin:root

et on effectue la commande

newaliases

Après avoir testé d'envoyer un mail à admin@ophiocordyceps.site via une adresse polytech, on reçoit nos mails dans le fichier /var/mail/root.

Sécurisation par certificat

Après avoir paramétrer notre mail, nous utiliserons le tutoriel Gandi pour générer la clé SSL https://docs.gandi.net/en/ssl/common_operations/csr.html#generate-csr

On génère une demande de signature de certificat SSL via la commande

openssl req -nodes -newkey rsa:2048 -sha256 -keyout ophiocordyceps.site.key -out ophiocordyceps.csr

On génère le certificat SSL sur gandi et on l'utilise ensuite dans notre fichier de configuration du serveur web apache2. Après s'être rendu compte que notre serveur web ne fonctionne pas, on vérifie notre serveur DNS et on rajoute la ligne suivante au fichier /etc/bind/db.ophiocordyceps.site:

www     IN      CNAME   ns1

Notre fichier de configuration du serveur apache /etc/apache2/sites-availables/ophiocordyceps.site.conf est le suivant:

<VirtualHost *:80>
    ServerName ophiocordyceps.site
    ServerAlias www.ophiocordyceps.site
    # Redirection 301  vers le site en HTTPS
    Redirect permanent / https://www.ophiocordyceps.site/
</VirtualHost>
<VirtualHost *:443>
	ServerName ophiocordyceps.site
	ServerAdmin admin@ophiocordyceps.site
	DocumentRoot /var/www/html
        SSLEngine on
	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
	SSLCertificateFile      /root/ophiocordyceps.site.crt
        SSLCertificateKeyFile /root/ophiocordyceps.site.key
	SSLCACertificateFile	/root/GandiStandardSSLCA2.pem
	SSLVerifyClient None
</VirtualHost>

Sécurisation de serveur DNS par DNSSEC

On ajoute l'option:

dnssec-enable yes;

dans le fichier etc/bind/named.conf.options

On génère ensuite les clefs asymétriques de signature de clef de zone et de zone pour signer les enregistrements:

dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE ophiocordyceps.site
dnssec-keygen -a RSASHA1 -b 1024 -n ZONE ophiocordyceps.site

On renomme nos fichier pour rendre le tout plus lisible: -ksk pour la KSK et -zsk pour la ZSK puis .key pour la clef publique et .private pour la clef privée.

On inclue ensuite les clefs publique dans notre fichier de zone /etc/bind/db.ophiocordyceps.site:

$include /etc/bind/ophiocordyceps.site.dnssec/ophiocordyceps.site-ksk.key
$include /etc/bind/ophiocordyceps.site.dnssec/ophiocordyceps.site-zsk.key

On signe les enregistrement de la zone:

dnssec-signzone -o ophiocordyceps.site -k ophiocordyceps.site-ksk ../ophiocordyceps.site ophiocordyceps.site-zsk

Dans le fichier /etc/bind/named.conf.local, on définit d'utiliser la zone signée:

file:"/etc/bind/db.ophiocordyceps.site.signed"

On indique ensuite à gandi la partie publique de la clef KSK. On peut tester notre DNSSEC en utilisant la commande

host -t any ophiocordyceps.site

ou depuis le site https://dnsviz.net/d/ophiocordyceps.site/dnssec/.

Tests d'intrusion

Exploitation de failles du système

Cassage de clef WEP d'un point d'accès WiFi

Cassage de mot de passe WPA-PSK par force brute

Attaque de type "homme du milieu" par usurpation ARP

Après avoir installer dsniff sur le eeePC, on le passe en mode routeur via la commande:

systctl -w net.ipv4.ip_forward=1

On effectue ensuite la commande

arpspoof -i eth0 -t 172.26.145.55 172.26.145.254

avec 172.26.145.55 notre ip de zabeth05, et 172.26.145.254 l'ip du routeur

En utilisant Wireshark, on réussit alors à intercepter des packets contenant possiblement des mots de passe sur les sites non sécurisés.

Réalisations

Sécurisation de données

Configuration du point d'accès Wifi

Username: cisco

Password: Cisco1

Re-enter Employee PSK Passphrase: glopglop

Ferme de serveurs Web

Architecture générale de la ferme

modifier /etc/xen/ophiocordyceps.cfg

vif = ['bridge=IMA5sc, mac=...', 'bridge=bridgeStudents, mac=...']

ajouter interface eth1 sur la VM principale (capbreton)

auto eth1
iface eth1 inet static
  address 192.168.42.16
  netmask 255.255.255.0

ajouter interface eth0 sur la VM chassiron (déjà fait)

pour avoir acces a internet il faut supprimer le fichier rm /etc/apt/apt.conf.d/01proxy sur les 2 machines et enlever le nom de domaine dans le fichier /etc/resolv.conf


mettre en place la mascarade :

iptables -P FORWARD DROP
iptables -A FORWARD -j ACCEPT -s 192.168.42.2/32
iptables -A FORWARD -j ACCEPT -d 192.168.42.2/32
iptables -t nat -A POSTROUTING -j SNAT -s 192.168.42.2/32 --to-source 193.48.57.187

nous installons le paquet iptables-persistent et sauvegardons nos modifications avec iptables-save

il faut aussi décommenter la ligne suivante dans le fichier /etc/sysctl.conf :

net.ipv4.ip_forward = 1

génération des la clé ssh (cf cours) et la déployer sur toutes les VM du groupe

cat .ssh/id_rsa.pub | ssh root@ip_cible "cat >> /root/.ssh/authorized_keys2"

On installe ansible sur notre machine virtuelle principale pour gérer les machines sur le serveur chassiron. On crée alors l'inventaire:

[host]
192.168.42.2
[hosts]
192.168.42.4
192.168.42.5
192.168.42.7
192.168.42.9
192.168.42.12

On peut ensuite tester avec la commande suivante qui nous renvoie les réponses de chaque machine:

ansible all -a "lsb_release -d"

On crée un dossier de ~/roles qui comprendra les différents rôles utilisés par notre playbook ~/playbook.yml. On configure 3 rôles basic, docker et registry pour notre machine sur chassiron, et un role deployer qui sera déployé sur toutes les machines sur chassiron. Dans chaque role, on crée un dossier task, qui contient notre main.yml qui sera executé lors de l'utilisation du playbook.

Installation de docker

On installe le docker créé par geerlingguy:

ansible-galaxy install geerlingguy.docker

On ajoute dans notre playbook les variables suivantes :

vars:
    docker_apt_gpg_key: "https://download.docker.com/linux/debian/gpg"
    docker_apt_repository: "deb [arch=Modèle:Docker apt arch] https://download.docker.com/linux/debian buster Modèle:Docker apt release channel"

ainsi que le role suivant:

- geerlingguy.docker

Création de votre conteneur

Configuration de vos serveurs internes

Equilibreur de charge