TP sysres IMA5sc 2020/2021 G2 : Différence entre versions

De Wiki d'activités IMA
(Mise en place du serveur SSH)
 
(32 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 
TP PRA BARGIBANT-LAGNEAU
 
TP PRA BARGIBANT-LAGNEAU
  
- Installation de la machine virtuelle -
+
= Installation des systèmes d’exploitation =
  
- Configuration du point d'accès Wifi -
+
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={{ docker_apt_arch }}] https://download.docker.com/linux/debian buster {{ docker_apt_release_channel }}"
 +
 
 +
ainsi que le role suivant:
 +
 
 +
- geerlingguy.docker
 +
 
 +
== Création de votre conteneur ==
 +
 
 +
== Configuration de vos serveurs internes ==
 +
 
 +
== Equilibreur de charge ==

Version actuelle datée du 15 janvier 2021 à 07:32

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