TP sysres IMA2a5 2017/2018 G2
Introduction
Dans le cadre de la 5ème année en section IMA à Polytech'Lille nous avons pu réaliser sur une machine virtuelle des serveurs web et DNS. De plus une tâche personnel nous a été confiée.
Ce wiki relate des tenants et aboutissants des mésaventures encourues.
Objectifs communs
- Installer une machine virtuelle
- Mettre en place un serveur DNS sécurisé
- Mettre en place un serveur web sécurisé
- Réaliser des tests d'intrusion WIFI
Objectifs personnels
- Rétablir les connexions ADSL et SDSL du local technique en B300.
- Déplacer les modems sur le routeur destiné aux TP et reconfigurer ce dernier
- Aménager un espace pour les différents modems
Analyse des plans de câblage avant modification
Liste des différents appareils et connexions
1. SpeedTouch 546-V6
- Port 1 > Câble Ethernet Rouge > CISCO Catalyst 3560-E Series "3560E-2" | Port 7
- Port 2 > Câble Ethernet Blanc > SpeedTouch 609-V5 | Port 1
- Port Adsl > Câble Adsl Noir > "Rocade" Baie de brassage | A-03
2. SpeedTouch 609-V5
- Port 1 > Câble Ethernet Blanc > SpeedTouch 546-V6 | Port 2
- Port Adsl > Câble Adsl Blanc > "Rocade" Baie de brassage | A-04
3. LA-210
- Port 1/2 > Câble Ethernet Blanc > "Rocade" Baie de brassage | A-05
- Port 3/4 > Câble Ethernet Blanc > "Rocade" Baie de brassage | A-06
- Port 10/100 > Câble Ethernet Rouge > CISCO-1700 | Port 10/100
4. CISCO-1700
- Port 2 > Câble Ethernet Noir > CISCO Catalyst 3560-E Series "3560E-2" | Port 5
- Port 3 > Câble Ethernet Blanc > "Rocade" Baie de brassage | A-01
- Port 10/100 > Câble Ethernet Blanc > LA-210 | Port 10/100
5. "Rocade" Baie de brassage
- A-01 > PC
- A-02 > ADSL
- A-03 > ADSL
- A-04 > SDSL
- A-05 > SDSL - 0036WvW5
- A-06 > SDSL - S036WvW5
Topographie des différents appareils et connexions
TP commun
Installation de la machine virtuelle
Nous avons installé notre machine sur le serveur Cordouan de l'école, c'est pourquoi dans un premier temps nous nous connectâmes sur ce dernier en ssh:
ssh cordouan.insecserv.deule.net
Puis avec la commande suivante...
xen-create-image
... et les paramètres ci-dessous, nous avons pu crée notre VM:
--hostname karmeliett -- ip 193.48.57.167 -- dir /etc/xen
Pour lancer la VM il suffit d'entrer la commande suivante:
xl create /etc/karmeliett.cfg
(comme vous avez pu le remarquer, 'karmeliet' est écrit avec une faute d'orthographe, pour une question de cohérence la faute ne sera pas corrigée sur ce wiki)
Pour s'y connecter, le mot clé 'console' est utilisé:
xl console karmeliett
Par la suite, le ssh étant configuré sur la VM nous avons utilisé:
ssh root@193.48.57.167
Configuration du serveur DNS
Grâce à l'achat d'un nom de domaine sur Gandi, nous avons pu configurer notre propre serveur DNS sur notre VM. Dans un premier temps il a fallu installer les packages Bind9
$ apt-get install bind9
On commence par renseigner notre nom de réseau IP, l'interface du routeur, notre machine et le nom de l'adresse de diffusion de notre réseau IP dans le fichier de zone correspondant à notre nom de domaine: db.karmeliet.space . (PS: NE PAS OUBLIER LES '.' A LA FIN DES ADRESSES ! En effet c'est une erreur qui nous a coûté chère en heures...)
root@karmeliett:/etc/bind# cat db.karmeliet.space $TTL 604800 @ IN SOA ns.karmeliet.space. admin.karmeliet.space. ( 6 ; Serial 72000 ; Refresh 3600 ; Retry 1209600 ; Expire 259200 ); Negative Cache TTL IN NS ns.karmeliet.space. IN NS ns6.gandi.net. IN MX 100 ns.karmeliet.space. ns IN A 193.48.57.167 IN MX 100 ns.karmeliet.space. IN AAAA 2001:660:4401:60b8:216:3eff:fe96:a908 ns6 IN A 217.70.177.40 www IN CNAME ns
A notre nom de domaine, on associe le fichier de zone précédemment crée:
root@karmeliett:/etc/bind# cat named.conf.local zone "karmeliet.space" { type master; file "/etc/bind/db.karmeliet.space"; };
On autorise également le DNS secondaire ns6.gandi.net à transferer:
root@karmeliett:/etc/bind# cat named.conf.options ... allow-transfer {217.70.177.40;}; };
On modifie le fichier resolv.conf afin d'indiquer le serveur de nom utilisé par notre machine.
root@karmeliett:/etc/bind# cat /etc/resolv.conf search karmeliet.space nameserver 127.0.0.1
Après un restart du service bind, on vérifie le bon fonctionnement du service DNS configuré
root@karmeliett:/etc/bind# host ns.karmeliet.space ns.karmeliet.space has address 193.48.57.167 ns.karmeliet.space has IPv6 address 2001:660:4401:60b8:216:3eff:fe96:a908 ns.karmeliet.space mail is handled by 100 ns.karmeliet.space.
La dernière étape consiste à renseigner (sur Gandi) les noms des serveurs DNS associés à notre nom de domaine: ns.karmeliet.space et ns6.gandi.net
C'est sur cette dernière étape qu'a était notre plus grosse erreur. C'est également à partir de ce point que nous avons était en retard sur le reste du groupe. En effet n'y connaissant peu dans ce domaine, nous avons décidé de renseigner sur Gandi le nom du serveur DNS maître de l'école: 'douaisis.escaut.net' . Or une fois enregistré par Gandi, nous avons essayé une dizaine de fois de remettre ns.karmeliet.space et ns6.gandi.net sans succès. 48h après une demande, Gandi rejetait à chaque fois notre requête. Finalement in extremis pendant la dernière séance, l'idée de rétablir les serveurs DNS Gandi par défaut nous est venue. 'a.dns.gandi.net', 'b.dns.gandi.net' et 'c.dns.gandi.net' furent trouvés en 10 minutes à peine. C'est seulement à partir de ce point que Gandi à pu retrouver 'ns.karmeliet.space' et 'ns6.gandi.net', en 10 minutes également. (PS/Conclusion : préférez rester en retrait et suivre les autres groupes de TP pas à pas que de vouloir prendre les devants)
Installation d'un site web sécurisé
Installation du package apache2 pour faire office de serveur web
root@karmeliett:/# apt-get install apache2
Ajout du nom du serveur web et de son alias:
root@karmeliett:/etc/apache2/sites-available# cat default-ssl.conf ... ServerName www.karmeliet.space ServerAlias karmeliet.space ...
Certification SSL :
Pour la sécurisation de notre site web, nous avons utilisé 'openssl' pour créer une clé asymétrique (myKEY.key) et une demande de certification (myCRS.crs) afin de recevoir un certificat signé (myCRT.crt) par un CA (dans notre cas Gandi) et une chaîne de certification (myPEM.pem):
root@karmeliett:/etc/apache2# ls apache2.conf conf-enabled magic mods-enabled myCSR.csr myPEM.pem sites-available conf-available envvars mods-available myCRT.crt myKEY.key ports.conf sites-enabled
Ensuite il faut renseigner tous ces fichiers dans la configuration pour gérer le HTTPS sur le port 443:
root@karmeliett:/etc/apache2# cat sites-available/default-ssl.conf <IfModule mod_ssl.c> <VirtualHost _default_:443> ServerName www.karmeliet.space ServerAlias karmeliet.space ... # SSL Engine Switch: # Enable/Disable SSL for this virtual host. SSLEngine on # A self-signed (snakeoil) certificate can be created by installing # the ssl-cert package. See # /usr/share/doc/apache2/README.Debian.gz for more info. # If both key and certificate are stored in the same file, only the # SSLCertificateFile directive is needed. SSLCertificateFile myCRT.crt SSLCertificateKeyFile myKEY.key # Server Certificate Chain: # Point SSLCertificateChainFile at a file containing the # concatenation of PEM encoded CA certificates which form the # certificate chain for the server certificate. Alternatively # the referenced file can be the same as SSLCertificateFile # when the CA certificates are directly appended to the server # certificate for convinience. SSLCertificateChainFile myPEM.pem ... </VirtualHost> </IfModule>
Finalement notre site web sécurisé fonctionne bien:
https://www.karmeliet.space/
Installation du DNSSEC
Nous avons sécurisé notre serveur DNS avec la création de deux clés asymétriques et en signant les enregistrements de la zone grâce à celle-ci.
Dans un premier temps il a fallut ajouter l'option 'dnssec-enable yes' dans le fichier named.conf.options:
root@karmeliett:/etc/bind# cat named.conf.options
options { directory "/etc/bind"; ... dnssec-validation auto; dnssec-enable yes; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; };
Puis nous avons crée le dossier karmeliet.space.dnssec pour y stocker les clés. La première paire de clés crée est la clé asymétrique de signature de clefs de zone:
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 2048 -f KSK -n ZONE karmeliet.space
(utilisez '-r /dev/urandom' uniquement pour un système de test) Les clés crées sont renommées en 'karmeliet.space-ksk.key' et 'karmeliet.space-ksk.private'.
la deuxième paire de clés crée est la clé asymétrique de la zone pour signer les enregistrements
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 1024 -n ZONE karmeliet.space
(de même utilisez '-r /dev/urandom' uniquement pour un système de test) Les clés crées sont renommées en 'karmeliet.space-zsk.key' et 'karmeliet.space-zsk.private'.
Ensuite nous avons inclus les clés publics dans notre fichier de zone 'db.karmeliet.space':
root@karmeliett:/etc/bind# cat db.karmeliet.space ; ; BIND data file for local loopback interface ; $TTL 604800 $include /etc/bind/karmeliet.space.dnssec/karmeliet.space-ksk.key $include /etc/bind/karmeliet.space.dnssec/karmeliet.space-zsk.key ...
(PS: ne pas oublier d'incrémenter le numéro de série du fichier de zone et de redemarrer bind9 'service bind9 restart')
Et enfin la commande suivante lancée depuis le dossier 'karmeliet.space.dnssec' nous a permis de signer les enregistrements de notre zone:
dnssec-signzone -o karmeliet.space -k karmeliet.space-ksk ../db.karmeliet.space karmeliet.space-zsk
L'avant dernière étape consistait remplacer l'ancienne zone par la nouvelle signée en remplaçant 'db.karmeliet.space' par 'db.karmeliet.space.signed' dans le fichier 'named.conf.local':
root@karmeliett:/etc/bind# cat named.conf.local zone "karmeliet.space" { type master; file "/etc/bind/db.karmeliet.space.signed"; }; ...
La dernière étape était de communiquer la partie publique de la KSK soit 'karmeliet.space-ksk.key' à Gandi. (Voir l'onglet "Manage DNSSEC" sur Gandi)
Pour vérifier la sécurisation DNSSEC on peut utiliser le site 'dnsviz.net' et entrer notre nom de domaine 'www.karmeliet.space'
http://dnsviz.net/d/www.karmeliet.space/dnssec/