TP sysres IMA5 2021/2022 G11
Sommaire
Creation de la machine virtuelle
Tout d'abord, s'il y a un problème de proxy, taper la commande :
export http_proxy=http://proxy.plil.fr:3128
Cela indique l'adresse du proxy à utiliser pour les requetes HTTP, HTTPS, FTP et autres joyeusetés.
On souhaite déployer une machine virtuelle sur l'hyperviseur Capbreton Pour ce faire, on se connecte d'abord en SSH sur root@capbreton On créé ensuite un répertoire dans /usr/local/xen en choisissant un nom en rapport avec le thème choisi : la bière. J'ai choisi la bière 'Corona' en référence aux temps sombres et incertains que nous vivons, tout en me rappellant que c'est après les nuits les plus somrbes que l'aurore apparait la plus rayonnante.
La creation de la VM requiert de fixer l'ip et le masque de sous-réseau. On se base sur les ips que nous avons fixé après concertation. On précise également le nom de la machine, le mot de passe, la distribution et l'emplacement des fichiers de la VM.
xen-create-image --hostname=Corona --ip=193.48.57.186 --gateway=193.48.57.188 --netmask=255.255.255.240 --dir=/usr/local/xen --password=pasglop --dist=bullseye
On créé ensuite 2 volumes logiques dans le répertoire /dev/storage :
lvcreate -L10G -n Corona1 storage lvcreate -L10G -n Corona2 storage
On les formate en ext4 :
mkfs.ext4 /dev/storage/Corona1 mkfs.ext4 /dev/storage/Corona2
Enfin, on modifie le fichier /etc/xen/Corona.cfg :
disk = [ 'file:/usr/local/xen/domains/Corona/disk.img,xvda2,w', 'file:/usr/local/xen/domains/Corona/swap.img,xvda1,w', ]
devient :
disk = [ 'file:/usr/local/xen/domains/Corona/disk.img,xvda2,w', 'file:/usr/local/xen/domains/Corona/swap.img,xvda1,w', 'phy:/dev/storage/Corona1,xvda3,w', 'phy:/dev/storage/Corona2,xvda4,w', ]
et
vif = [ 'ip=193.48.57.186 ,mac=00:16:3E:AE:EA:EC' ]
devient :
vif = [ 'ip=193.48.57.186 ,mac=00:16:3E:AE:EA:EC ,bridge=IMA5sc' ]
Pour lancer la VM, on execute :
xl create -c /etc/xen/Corona.cfg
Dans la VM, on visualise les informations relatives au file system avec la commande :
cat /etc/fstab
xvda1 et xvda2 apparaissent mais pas xvda3 et xvda4. On les créer avec :
mkdir /mnt/xvda3 mkdir /mnt/xvda4 mount /dev/xvda3 /mnt/xvda3 mount /dev/xvda4 /mnt/xvda4
On va utiliser xvda4 pour stocker le dossier var, et xvda3 pour stocker home :
mv /var/* /mnt/xvda4
Puis dans /etc/fstab, on ajoute :
/dev/xvda3 /home ext4 defaults 0 2 /dev/xvda4 /var ext4 defaults 0 2
Ensuite, on execute :
mount -a
Enfin, on vérifie que les partitions ajoutées existent :
lsblk
On ajoute ensuite la ligne suivante dans /etc/network/interfaces :
iface eth0 inet6 auto
On applique les changements en redemarrant :
systemctl restart networking
On vérifie que la modification a eu lieu :
ip a
Raccourci pour quitter la VM : CTRL + ']'
Commande pour se connecter à la VM : xen console Corona
Configuration de la VM
A présent, on configure la VM. On installe openssh-server s'il n'est pas installé :
apt install openssh-server
On édite ensuite dans le fichier /etc/ssh/sshd_config les lignes :
PermitRootLogin without-password PubkeyAuthentication yes
Puis on recharge la configuration avec :
systemctl reload ssh
Sur la zabeth, on créé une clé ssh avec :
ssh-keygen -t ed25519
On copie la clé publique que l'on vient de générer pour la coller dans le fichier ~/.shh/authorized_keys de la VM. Coté zabeth, on peut alors se connecter à la machine virtuelle directement en ssh grâce à la commande :
ssh -o "IdentitiesOnly=yes" -i ma_cle_privée root@193.48.57.186
Déploiement site
On achète le nom de domaine 'corona59.club' sur Gandi.net Toujours sur Gandi.net, on configure le Glue Record de notre nom de domaine en indiquant que notre nameserver s'appelle ns.corona59.club et qu'il se trouve à l'adresse 193.48.57.186. On configure également notre nameserver dans Domain > MON_NOM_DE_DOMAINE > nameservers On ajoute un nameserver externe. En premier on met "ns.corona59.club", en deuxième on met "ns6.gandi.net"
On installe ensuite bind sur la vm :
apt install bind9
et on vient modifier /etc/resolv.conf pour utiliser notre propre serveur de nom :
nameserver 193.48.57.186
(peut etre utiliser 127.0.0.1, mais je suis pas sûr) On modifie ensuite /etc/bind/named.conf.local :
zone MON_NOM_DE_DOMAINE { type master; file "/etc/bind/db.MON_NOM_DE_DOMAINE allow-transfer { 217.70.177.40; }; };
l'adresse "217.70.177.40" correspond au nameserver de Gandi.net et nous sert de nom de serveur secondaire. Ainsi, lorsque notre nameserver ne sait pas à quelle IP correspond un nom, il interroge Gandi.
On créé ensuite le fichier /etc/bind/db.corona59.club :
$TTL 604800 @ IN SOA ns.corona59.club postmaster.corona59.club. ( 4 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns.corona59.club. @ IN NS ns6.gandi.net.
On ajoute au fichier /etc/bind/db.corona59.club :
ns IN A 193.48.57.186 www IN A 193.48.57.186 IN AAAA 2001:7a8:116e:60b0:216:3eff:feae:eaec
On teste que notre configuration est correcte :
host -t any ns.corona59.club localhost
On obtient :
Using domain server: Name: localhost Address: 127.0.0.1#53 Aliases:
corona59.club has SOA record ns.corona59.club.corona59.club. postmaster.corona59.club. 4 604800 86400 2419200 604800 corona59.club name server ns.corona59.club. corona59.club name server ns6.gandi.net.
Si on obtient pas ça, penser à lancer la commande :
tail -50 /var/log/daemon.log
afin de voir ce qui c'est mal passé.
A chaque modification des fichiers du repertoire /etc/bind, penser à relancer bind avec
service bind9 restart
Certificat SSL
Pour obtenir un certificat SSL, on tape :
openssl req -nodes -newkey rsa:2048 -sha256 -keyout corona59.club.key -out corona59.club.csr
On rentre ensuite les informations demandées par l'utilitaire (adresse mail, pays, etc). Il faut faire bien attention à rentrer le nom de domaine dans "Common Name" Un fichier .csr et .key sont créés. On copie-colle le contenu du fichier .csr dans Gandi pour créer un certificat à l'adresse : https://shop.gandi.net/en/0f32d906-a208-11e7-9da6-00163e61ef31/certificate/create On choisit une procédure de validation (j'ai choisi DNS). Une fois le certificat validé, on peut télécharger le fichier .crt généré par Gandi que l'on place dans le répertoire /etc/ssl/certs/ de la VM. On télécharge également le certificat intermédiaire généré par Gaandi que l'on place dans le même répertoire.
Serveur web
Pour déployer un serveur web, on installe apache2. On utilise ensuite l'utilitaire a2enmod pour activer les modules apache qui nous interessent.
a2enmod ssl
On créé le répertoire corona59.club dans /var/www/ ainsi que le fichier de configuration /etc/apache2/sites-available/000-corona59.club-ssl.conf :
<VirtualHost 193.48.57.186:443> ServerName corona59.club ServerAlias www.corona59.club DocumentRoot /var/www/corona59.club/ CustomLog /var/log/apache2/secure_access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/corona59.club.crt SSLCertificateKeyFile /etc/ssl/corona59.club.key SSLCACertificateFile /etc/ssl/certs/GandiStandardSSLCA2.pem SSLVerifyClient None </VirtualHost>
On active notre site avec la commande :
a2ensite 000-corona59.club-ssl
On édite le fichier /etc/apache2/apache2.conf en rajoutant
ServerName corona59.club
On relance apache :
systemctl reload apache2
On teste le fonctionnement avec :
openssl s_client -connect 193.48.57.186:443
CONNECTED(00000003) Can't use SSL_get_servername depth=2 C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority verify return:1 depth=1 C = FR, ST = Paris, L = Paris, O = Gandi, CN = Gandi Standard SSL CA 2 verify return:1 depth=0 CN = corona59.club verify return:1 --- Certificate chain 0 s:CN = corona59.club i:C = FR, ST = Paris, L = Paris, O = Gandi, CN = Gandi Standard SSL CA 2 1 s:C = FR, ST = Paris, L = Paris, O = Gandi, CN = Gandi Standard SSL CA 2 i:C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority --- Server certificate -----BEGIN CERTIFICATE----- MIIGODCCBSCgAwIBAgIRANSBYLR9JBGxmC8RQbK0N1QwDQYJKoZIhvcNAQELBQAw XzELMAkGA1UEBhMCRlIxDjAMBgNVBAgTBVBhcmlzMQ4wDAYDVQQHEwVQYXJpczEO MAwGA1UEChMFR2FuZGkxIDAeBgNVBAMTF0dhbmRpIFN0YW5kYXJkIFNTTCBDQSAy MB4XDTIxMTIxMzAwMDAwMFoXDTIyMTIxMzIzNTk1OVowGDEWMBQGA1UEAxMNY29y b25hNTkuY2x1YjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALUUeFaW oimeIzBDolopsjlg2G0Q7qT24rPjh6a5BMp1tvCkKhV/3rCHzQSu6n4sK1qls0FB OqlddzYxV9qO38POg72/mBcXHs+fuEN46tCTl7Py+Zg5nOlaMjCB/F7MUZsFoSuf erRb0gmiCpXorXL+FUteOapZzCcpInFS56fIX1plipIP81RD//MZ4NFPDFRWHU1f D1Mm5xw3WIPFEVdqNvQHhUm0yNf9QEY7lV9pf7FXAX6ZBPvUYTaNMRkbfKkNgjrs 0T3aIAq+48UdLAk+miFFUH9UyM4BF/R76SItZ7NFhTNrdvXkzbPKNnWzvh8yb2Zh Nk/g6taWKSK29RsCAwEAAaOCAzQwggMwMB8GA1UdIwQYMBaAFLOQp9jJr07NYTyf fK1df0H9aTDqMB0GA1UdDgQWBBQphH/Ob2j83ZRdroQhFgvI3wjsyjAOBgNVHQ8B Af8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB BQUHAwIwSwYDVR0gBEQwQjA2BgsrBgEEAbIxAQICGjAnMCUGCCsGAQUFBwIBFhlo dHRwczovL2Nwcy51c2VydHJ1c3QuY29tMAgGBmeBDAECATBBBgNVHR8EOjA4MDag NKAyhjBodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vR2FuZGlTdGFuZGFyZFNTTENB Mi5jcmwwcwYIKwYBBQUHAQEEZzBlMDwGCCsGAQUFBzAChjBodHRwOi8vY3J0LnVz ZXJ0cnVzdC5jb20vR2FuZGlTdGFuZGFyZFNTTENBMi5jcnQwJQYIKwYBBQUHMAGG GWh0dHA6Ly9vY3NwLnVzZXJ0cnVzdC5jb20wKwYDVR0RBCQwIoINY29yb25hNTku Y2x1YoIRd3d3LmNvcm9uYTU5LmNsdWIwggF9BgorBgEEAdZ5AgQCBIIBbQSCAWkB ZwB2AEalVet1+pEgMLWiiWn0830RLEF0vv1JuIWr8vxw/m1HAAABfbQsDh0AAAQD AEcwRQIhAO17SRAY2GGTqlDqcIh5GPYmysEZ+9EQHNT4eGVA07GZAiB3jV1h/WvJ JjLamcWvZ5x4iMh2ZETtf33uRB6bQbXzKQB2AEHIyrHfIkZKEMahOglCh15OMYsb A+vrS8do8JBilgb2AAABfbQsDeMAAAQDAEcwRQIgbVz8muFonTu/DeOopCHEUpd1 5ckL7I9Bhu/2zLVeYzICIQCSkK2o0vMoGW99Gq9BjBtE/RO7kueJTF/COlPbIBfB DwB1ACl5vvCeOTkh8FZzn2Old+W+V32cYAr4+U1dJlwlXceEAAABfbQsDbUAAAQD AEYwRAIgCzAQUVKGb8EvqQ+WCALDrjvNTqf2DY4fUk06qeEAIVkCIBHbOUioDNnV UsEiUkXXtTOYVQlea94BtE5oYFjBqH3aMA0GCSqGSIb3DQEBCwUAA4IBAQCA4+9H XoMkIkagjr+TNxb4BXtruGyGGrx0MUWWjvcb3djn/8QCDLCwP6+BTVQEk2DP31v5 B4GNeWiNmI1QjprzjlLSQyWeauTdRDoAS+mxhsaPBtT3QmHbyVdnnPSeUmDKznr9 TEEfeGmPW/l0TiLc9yYrIyix6Ixb82qvL4BkfFkqk08lEstjimReU5Ma6zj85Q3X cvpT+Zav8mYMBAjJocgdTZYsiydajuv8h3I+EL5B5KxgFbvPtUySsPJwmLZ2pama 7zsTzgYhdjL6LasHLxT9PIKYzp4WiNGRvpYbvnimWDZJzyYNLbw+ZSeZoS9DSzhY e0D4Wcue+OV6y/j2 -----END CERTIFICATE----- subject=CN = corona59.club
issuer=C = FR, ST = Paris, L = Paris, O = Gandi, CN = Gandi Standard SSL CA 2
--- No client certificate CA names sent Peer signing digest: SHA256 Peer signature type: RSA-PSS Server Temp Key: X25519, 253 bits --- SSL handshake has read 3674 bytes and written 363 bytes Verification: OK --- New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384 Server public key is 2048 bit Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok) --- --- Post-Handshake New Session Ticket arrived: SSL-Session: Protocol : TLSv1.3 Cipher : TLS_AES_256_GCM_SHA384 Session-ID: 5376D0C56EE60841482046ED97C0C303438A2BF5262A7391D15559996425B7AF Session-ID-ctx: Resumption PSK: A881594DA00CCD5FF520055864E880EE6D2CB48C6125BC72DEA6A5F8DBD8C6EBEC1853DC5C886744211D4EE130C26382 PSK identity: None PSK identity hint: None SRP username: None TLS session ticket lifetime hint: 300 (seconds) TLS session ticket: 0000 - 34 f0 8c fe c2 12 d7 34-f3 36 2f 9c 86 c2 68 db 4......4.6/...h. 0010 - 01 f2 eb fd 4e f3 f4 88-6a d6 46 5e 8e f6 b9 d2 ....N...j.F^.... 0020 - bd a2 4c 42 95 fd 4a a7-c3 38 b0 7d b5 5b 33 50 ..LB..J..8.}.[3P 0030 - 6b 91 1e 69 e3 57 7d 1a-bb 0c 9d 75 f2 b6 c2 b6 k..i.W}....u.... 0040 - c3 73 f7 a7 45 b8 15 83-62 9e 47 1b f4 b0 f8 62 .s..E...b.G....b 0050 - 26 5f aa 92 fd d1 c6 54-55 56 2c a6 13 42 b5 b0 &_.....TUV,..B.. 0060 - cc 5c c5 98 2f 11 69 28-ee 16 84 46 69 ec c4 75 .\../.i(...Fi..u 0070 - b4 aa 3b 28 fb 84 1f cb-82 82 93 52 fe a8 2f 28 ..;(.......R../( 0080 - c7 2c 18 9f 9e e3 d2 44-b1 f8 a6 5b ae 6c 6b f7 .,.....D...[.lk. 0090 - a1 30 c9 af ad a8 92 4e-d9 af d8 3d 83 01 4c ec .0.....N...=..L. 00a0 - 4a fa fe c8 d9 ab ca 47-b1 5e be 87 e3 5f fc aa J......G.^..._.. 00b0 - c3 04 a6 49 84 e8 9d ad-84 73 22 e0 ca 15 1d 12 ...I.....s"..... 00c0 - d8 3f b1 24 b4 dc 52 a1-31 93 69 44 87 c5 ca a0 .?.$..R.1.iD.... 00d0 - 97 33 4d a9 dc 3f 01 0e-f1 28 c7 b7 6d 2f 0c 85 .3M..?...(..m/..
Start Time: 1639409551 Timeout : 7200 (sec) Verify return code: 0 (ok) Extended master secret: no Max Early Data: 0 --- read R BLOCK --- Post-Handshake New Session Ticket arrived: SSL-Session: Protocol : TLSv1.3 Cipher : TLS_AES_256_GCM_SHA384 Session-ID: 120904F1719C24AC422635D7ADA4AC0F8B7BF31269BA9EC9E0FA04E8D2168C67 Session-ID-ctx: Resumption PSK: 567CB793FE3B443C920AA3FCC5AA856EE38847E69A75CE53DB7545B1FD8470F3441ABDA3037A5F52D6A83F6CF56E3C80 PSK identity: None PSK identity hint: None SRP username: None TLS session ticket lifetime hint: 300 (seconds) TLS session ticket: 0000 - 34 f0 8c fe c2 12 d7 34-f3 36 2f 9c 86 c2 68 db 4......4.6/...h. 0010 - b6 8d cb 01 84 ee 6b 2d-85 46 99 50 22 28 a9 c5 ......k-.F.P"(.. 0020 - 24 5c 27 40 06 58 d5 b7-af 41 97 ef 21 a3 93 e0 $\'@.X...A..!... 0030 - ec ac a1 0c d2 f3 e3 10-bb 54 ae 1f 70 e3 e0 4e .........T..p..N 0040 - 48 88 aa 03 ab 93 f9 60-6d 8f a4 ab 18 08 30 90 H......`m.....0. 0050 - 68 5a 96 00 bd eb a9 d4-b8 24 9f 21 27 36 c4 29 hZ.......$.!'6.) 0060 - 37 3a 9d 53 d6 2a 26 af-04 d9 c9 d1 6e d2 6b cf 7:.S.*&.....n.k. 0070 - 94 b8 44 cc bc e9 d5 5f-67 83 a7 80 1c 3a b5 55 ..D...._g....:.U 0080 - aa f1 db f4 ec 7f f6 b5-3e 61 9e 6d b3 db da 09 ........>a.m.... 0090 - 4d cf 27 0d 9a 52 02 f4-5f b1 80 f7 a7 8e 67 f9 M.'..R.._.....g. 00a0 - a8 d8 90 da 87 ea 63 36-d7 84 a2 f3 06 a5 8f d8 ......c6........ 00b0 - 6e 55 d9 86 8f 53 74 b2-74 d0 73 85 f2 f5 e8 b2 nU...St.t.s..... 00c0 - 31 59 c3 c3 ff 22 e3 4f-23 df 9c 89 64 c3 5c 14 1Y...".O#...d.\. 00d0 - dc 99 92 04 4b f5 1e 43-5c 27 da 96 f3 d8 be 9e ....K..C\'......
Start Time: 1639409551 Timeout : 7200 (sec) Verify return code: 0 (ok) Extended master secret: no Max Early Data: 0 --- read R BLOCK closed
La commande :
apachectl configtest
nous confirme que la config est OK
En se connectant à l'adresse https://www.corona59.club/index.html, le navigateur affiche bien notre page d'accueil index.html
Securisation du DNS avec DNSSEC
On souhaite sécuriser notre DNS à l'aide de DNSSEC. Pour ce faire, on génère des clés dans le repertoire /etc/bind/corona59.club.dnssec/ avec
dnssec-keygen -a NSEC3RSASHA1 -b 4096 -f KSK -n ZONE ns.corona59.club dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE ns.corona59.club
on renomme respectivement les fichiers obtenus ksk.{key/private} et zsk.{key/private} on ajoute dans /etc/bind/db.corona59.club :
$INCLUDE "/etc/bind/corona59.club.dnssec/corona59.club-ksk.key" $INCLUDE "/etc/bind/corona59.club.dnssec/corona59.club-zsk.key"
On signe avec la commande :
dnssec-signzone -o ns.corona59.club -k ksk ../db.corona59.club zsk
on obtient :
Verifying the zone using the following algorithms: - NSEC3RSASHA1 Zone fully signed: Algorithm: NSEC3RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked ZSKs: 1 active, 0 stand-by, 0 revoked ../db.corona59.club.signed
ainsi qu'un fichier que l'on renomme en corona59.club.signed Ensuite, on modifie le fichier /etc/bind/named.conf.local pour avoir :
zone "corona59.club" {
type master; file "/etc/bind/corona59.club.dnssec/corona59.club.signed"; allow-transfer { 217.70.177.40; };
};
On ajoute ensuite notre clé ksk.key dans l'onglet DNSSEC. Enfin, on teste que ça fonctionne avec le site 'https://dnssec-analyzer.verisignlabs.com/corona59.club'
Test d'intrusion
On commence par tenter de casser une clé WEP. Sur l'ordi bleu, on récupère le nom de l'interface réseau (après avoir fait 'su -' ) :
airmon-ng
puis on lance (3 représente la channel utilisée)
airmon-ng start NOM_DE_L_INTERFACE 3
Notre interface est renommée 'wlan0mon' de manière à avoir un nom plus court.
Pour visualiser les paquets sniffés, on execute alors
airodump-ng -c 3 wlan0mon
On observe plusieurs emetteurs, avec leur BSSID associé. On choisit d'attaquer cracotte11 dont le BSSID est 04:DA:D2:9C:50:5A On lance alors la commande :
airodump-ng -w MonFichier -c 3 --bssid 04:DA:D2:9C:50:5A wlan0mon
Après 5-10 minutes, on met fin au programme avec CTRL+C et on execute :
aircrack-ng MonFichier-01.cap
Si le programme a accumulé suffisamment de vecteurs d'initialisation (IVs), la clé WEP est cassée.
On essaye à présent de casser une clé WPA.
On scanne la bande de fréquence 9 :
airodump-ng -c 9 wlan0mon
On récupère le BSSID de kracotte11 : 44:AD:D9:5F:87:0A On récupère ensuite des handshakes avec la commande :
airodump-ng -c 9 --bssid 44:AD:D9:5F:87:0A -w MonFichier wlan0mon
Par la suite, on souhaite utiliser l'utilitaire crunch.
apt install crunch
Pour l'installer, il faut une connexion internet. On utilise donc le bridge des zabeth et on configure le fichier /etc/network/interfaces de l'ordi bleu en ajoutant :
auto enp4s0 iface enp4s0 inet static address 172.26.145.121/24 gateway 172.26.145.254
Crunch va nous permettre de générer la liste des mots de passe d'exactement 8 chiffres que l'on utilisera pour cracker la clé :
crunch 8 8 0123456789 -o password.lst
Enfin, on lance la commande :
aircrack-ng -w password.lst -b 44:AD:D9:5F:87:0A MonFichier.cap
Le processus peut prendre plusieurs heures.
Injection SQL
A l'adresse honey.plil.info, on utilise de l'injection SQL pour obtenir les data backend Pour ce faire, on met dans la cellule 'identifiant' la valeur
' OR 1 = 1;
Coté backend, la requete SQL effectuée ressemble probablement à
select * from table1 where $id='$CELLULE1' and $password='$CELLULE2';
En conséquence, notre injection génère la requete :
select * from table1 where $id= or 1=1; ' and $password='$CELLULE2';
Le premier ';' met fin à la requete. Puisque la condition 1=1 est toujours vraie, on affiche ainsi l'ensemble de la table On accède ainsi à l'identifiant admin ainsi qu'au mot de passe que l'on utilise pour se connecter.
TP ASR
Setup SSH
on télécharge le dossier fourni par Thomas sur 'https://github.com/thomas-maurice/polytech-asr-lab' on définit une clé SSH et créé un environnement python virtuel :
$ ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "your.name@polytech-lille.net" -P
$ python3 -m venv ~/env-ansible $ . ~/env-ansible/bin/activate $ pip3 install -U setuptools wheel $ pip3 install -U ansible
puis
$ ansible-playbook -v -i inventory polytech.yaml
Parallèlement, on configure notre VM sur chassiron.plil.info. On utilise comme machine virtuelle celle attribuée à notre groupe (groupe 11) :
$ cd /etc/xen $ xen create pra-11.cfg $ xen console pra-11
On se log dans la VM et on configure l'interface eth0 dans /etc/network/interfaces: auto eth0 iface eth0 inet static
address 172.26.145.111 netmask 255.255.255.0 network 172.26.145.0 gateway 172.26.145.254
On
On s'assure qu'on peut ping l'adresse de la VM depuis la zabeth. On cherche à configurer automatiquement les clés SSH acceptées par la VM grâce à Ansible. Pour cela, on créé un nouveau role dans le dossier 'roles' que l'on appelle ssh-keys. On créé les dossiers templates et tasks en se basant sur le dossier base fourni.
--- - hosts: all roles: # installs the `ssh_keys` role onto the targetted host - role: ssh_key tags: ssh_key
On change également dans polytech.yaml les roles que l'on souhaite appeller au lancement de Ansible (on remplace base par ssh_key)
PRA-11 ansible_ssh_host="172.26.145.111"
Dans inventory, on spécifie le nom de la machine ainsi que l'adresse ip de cette dernière
On doit également ajouter une task afin de patch la distro BullsEye que l'on utilise sur la VM :
# # /etc/apt/sources.list # # # bullseye # deb http://deb.debian.org/debian bullseye main contrib non-free deb-src http://deb.debian.org/debian bullseye main contrib non-free # # Security updates # deb http://security.debian.org/debian-security bullseye-security main contrib non-free
On installe enfin python3 sur la VM, nécessaire pour le déploiment.
Setup Docker
On installe docker grâce à la commande
$ ansible-galaxy install geerlingguy.docker
on ajoute alors a polytech.yaml :
- role: geerlingguy.docker tags: docker
Ip table
On souhaite fermer les ports réservés à Consul. Pour cela, on utilise iptable. On créé un role dédié, nommé firewall. main.yml de firewall :
--- - name: "Block TCP" ansible.builtin.iptables: chain: INPUT source_port: " \{\{item\}\}" protocol: tcp match: tcp jump: DROP become: yes with_items: - "8600" - "8500" - "8501" - "8502" - "8300" - "8301" - "8302" - name: "Block UDP" ansible.builtin.iptables: chain: INPUT source_port: "\{\{ item \}\}" protocol: tcp match: tcp jump: DROP become: yes with_items: - "8600" - "8301" - "8302"
Install Consul
D'abord, on créé sur la VM un utilisateur Consul dont le GID et UID vaut 666
$ useradd consul $ passwd consul $ usermod -u 666 consul $ groupmod -g consul 666
On créé ensuite les repertoires /etc/consul et /var/lib/consul que l'on attribue à consul