TP sysres IMA5sc 2020/2021 G2 : Différence entre versions
(→Mise en place du serveur SSH) |
|||
(12 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 48 : | Ligne 48 : | ||
Autorisation de la connexion en root en ssh en modifiant le paramètre PermitRootLogin dans le fichier /etc/ssh/sshd_config | 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 == | == Mise en place du serveur DNS == | ||
Ligne 96 : | Ligne 99 : | ||
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 | 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 == | == 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 = | = Tests d'intrusion = | ||
Ligne 108 : | Ligne 164 : | ||
== Attaque de type "homme du milieu" par usurpation ARP == | == 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 = | = Réalisations = | ||
Ligne 120 : | Ligne 185 : | ||
Re-enter Employee PSK Passphrase: glopglop | 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
Sommaire
- 1 Installation des systèmes d’exploitation
- 2 Architecture réseau
- 2.1 L'architecture générale
- 2.2 Les réseaux virtuels
- 2.3 Le routage du site (IPv4)
- 2.4 Le routage du site (IPv6)
- 2.5 Interconnexion avec Internet (IPv4)
- 2.6 Interconnexion avec Internet (IPv6)
- 2.7 Sécurisation du réseau
- 2.8 Interconnexion Internet de secours (IPv4)
- 2.9 Interconnexion Internet de secours (IPv6)
- 3 Services Internet
- 4 Tests d'intrusion
- 5 Réalisations
- 6 Configuration du point d'accès Wifi
- 7 Ferme de serveurs Web
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