TP sysres IMA5 2022/2023 G2

De Wiki d'activités IMA
Révision datée du 18 novembre 2022 à 16:32 par Fderliqu (discussion | contributions) (Bannissement Fail2Ban)

Taches accomplies :

  • Séance 1 :
    • Réinstallation de l'Os sur la zabeth14
    • Remplissage du fichier /etc/ansible/hosts sur zabeth21
    • Création du rôle network pour la configuration du réseau. La machine hôte choisit automatiquement son ipv4 et son ipv6 en fonction de son numéro de zabeth. Ce rôle utilise également un template et un fichier séparé pour les variables.
  • Séance 2
    • Réinstallation de l'OS sur la zabeth05
    • Installation de la machine virtuelle Xem (dio2)
  • Séance 3
    • Amélioration du coffre-fort
    • Création des LVM
    • Linkage des LVM vers la Xem

Installation de l'OS

Récupérer le .iso sur internet : fichier .iso

Si ce n'est pas fait : unmount la clé usb

Pour rendre la clé bootable : dd if=<path_image> of=<path_device> bs=4M status=progress où :

  • <path_image> est le chemin vers l'image .iso
  • <path_device> est le chemin vers la clé usb, pour la trouver :
    • ls /dev/ sans la clé de brancher
    • un deuxième ls /dev/ avec la clé, c'est généralement /dev/sda ou /dev/sdb

Reboot le pc, puis aller sur le boot menu, et booter sur la clé usb, réalisez les étapes un à un, rappel :

  • Adresse machine = 172.26.145.50+chiffre de la zabeth /24 (mask : 255.255.255.0)
  • Adresse routeur = 172.26.145.254
  • Server dns = 193.48.57.48
  • Proxy = proxy.polytech-lille:3128
  • Configuration de l'interface réseau sur eth0

Reboot le PC sans la clé, puis autoriser les connection ssh root : mettre à true PermitRootLogin dans /etc/ssh/sshd_config

Installer Python pour Ansible

Installation Xem

Pour créer la xen :

xen-create-image --hostname=dio2 --ip=172.26.145.102 --dist=chimaera --nameserver=193.48.57.48 --dir=/usr/local/xen/ --netmask=255.255.255.0 --gateway=172.26.145.254 --force

Pour lancer la Xen :

xen console dio2

Sur Capbreton, il faut créer les LVM /home /var :

lvcreate -L10G -ndio2_home storage ; mkfs /dev/storage/dio2_home

lvcreate -L5G -ndio2_var storage ; mkfs /dev/storage/dio2_var

Ensuite il faut changer le config file (situé dans /etc/xen) ajouter ces deux lignes dans la partie disk =

  'phy:/dev/storage/dio2_home,xvdb1,w',
  'phy:/dev/storage/dio2_var,xvdb2,w',

Reboot Xen halt

On vérifie si les LVM sont présents et comment ils sont formatés avec cette ligne : lsblk -f

Comme /var est plein, on doit effectuer ces commandes pour éviter d'écraser ce qu'il y a dans /var lors du mount :

  mount /dev/xvdb2 /mnt
  mv /var/* /mnt
  umount /mnt

Dans le fichier /etc/fstab on ajoute ces deux lignes ci-dessous pour configurer le mount les LVM définitivement :

  /dev/xvdb1 /home ext4 defaults 0 2
  /dev/xvdb2 /var ext4 defaults 0 2

On lance mount -a et on reboot la Xen

Services Internet

Pour cette partie, on réalise toute les commandes sur la VM dio2 en root

SSH d'un machine distante

Dans le fichier : /etc/ssh/sshd_config, mettre PermitRootLogin à yes

Puis restart du service ssh service ssh restart

Création des clefs et CSR

Réservation du nom de domaine brochette.site

Installation de openssl pour la génération du certificat SSL :

  apt install openssl
  openssl req -nodes -newkey rsa:2048 -sha256 -keyout myserver.key -out server.csr -utf8
  COUNTRY NAME : FR
  STATE OR PROVINCE NAME : Nord
  LOCALITY : Lille
  ORGANISATION NAME : PolytechLille
  ORGANISATION : SE
  COMMON NAME : brochette.site
  EMAIL ADRESS : Florian.Derlique@polytech-lille.net

Apache HTTP/HTTPS

  apt install apache2

Configuration apache pour autoriser HTTPS, ajouter ces lignes après le bloc <VirtualHost *:80> du fichier /etc/apache2/sites-available/000-default.conf :

  <VirtualHost *:443>
      #ServerName example.com
      #ServerAlias www.example.com
      ServerAdmin webmaster@localhost
      DocumentRoot /var/www/html
         # directives obligatoires pour TLS
          SSLEngine on
          SSLCertificateFile       /root/brochette.site.crt
          SSLCertificateKeyFile    /root/myserver.key
          SSLCertificateChainFile  /root/GandiStandardSSLCA2.pem
          ErrorLog /var/log/apache2/error.example.com.log
          CustomLog /var/log/apache2/access.example.com.log combined
  </VirtualHost>

On recupère le .crt (fichier de certification) et le .pem (fichier de chaine de certification) sur le site du fournisseur de nom de domaine gandi. Le .key (clé de certification) est obtenu normalement par la commande openssl de la partie précédente

Reload le service apache :

  a2enmod ssl
  a2ensite default-ssl.conf
  service apache2 restart

Forcer la connexion en HTTPS, ajouter cette ligne dans le bloc <VirtualHost *:80> :

  Redirect permanent / https://brochette.site

Pour ajouter vos premiers fichiers dans le site : dans le repertoire /var/www/html

Serveur DNS

Installation de bind9 : apt install bind9

Nom de serveur DNS : ns.brochette.site, ip : 193.48.57.179

Nom de serveur DNS secondaire : ns6.gandi.net, ip : 217.70.177.40

Sur l'interface web gandi :

  • Ajouter le glue record pour ns.brochette.site (le glue record est utilisé par les utilisateurs avancés pour associer un nom d'hôte (serveur de noms ou DNS) à une adresse IP au niveau du registre).
  • Ajouter les deux noms de server si dessus, dans l'onglet "Nameserver"

Configuration du fichier d'option

Dans le fichier /etc/bind/named.conf.options, si failed les log sont dans /var/log/daemon.log

  options {
          directory "/var/cache/bind";
  
          // If there is a firewall between you and nameservers you want
          // to talk to, you may need to fix the firewall to allow multiple
          // ports to talk.  See http://www.kb.cert.org/vuls/id/800113
  
          // If your ISP provided one or more IP addresses for stable
          // nameservers, you probably want to use them as forwarders.
          // Uncomment the following block, and insert the addresses replacing
          // the all-0's placeholder.
  
          forwarders {
                  8.8.8.8;
                  4.4.2.2;
          };
  
          
  //========================================================================
          // If BIND logs error messages about the root key being expired,
          // you will need to update your keys.  See https://www.isc.org/bind-keys
          
  //========================================================================
          dnssec-validation auto;
          recursion yes;
          listen-on-v6 { any; };
          listen-on { any; };
          allow-recursion { trusted; };
          allow-transfer{ none; };
  };
  acl "trusted" {
          193.48.57.179;  //ns.brochette.site
          217.70.177.40;  //ns6.gandi.net
  };

Configuration forward and reverse lookup zones

  • La zone lookup "forward" est check lorsque l'utilisateur demande une adresse ip à partir de son nom de domaine
  • La zone lookup "reverse" st check lorsque l'utilisateur demande un nom d'hôte à partir de son adresse ip

Dans le fichier /etc/bind/named.conf.local

  zone "brochette.site" {
          type master;
          file "/etc/bind/db.brochette.site";
          allow-transfer{ 217.70.177.40; }; //ns6.gandi.net
          notify yes;
  };
  zone "57.48.193.in-addr.arpa" {
      type master;
      file "/etc/bind/db.193.48.57"; 
      allow-transfer {217.70.177.40; }; //ns6.gandi.net
      notify yes;
  };

Création des fichiers de zones

  • Copier le fichier local de base :

cp /etc/bind/db.local /etc/bind/db.brochette.site pour la forward zone

cp /etc/bind/db.127 /etc/bind/db.193.48.57 pour la reserve zone

  • Contenu du nouveau fichier forward zone:
  ;
  ; BIND data file for local loopback interface
  ;
  $TTL    604800
  @       IN      SOA     ns.brochette.site. root.brochette.site. (
                                3         ; Serial
                           604800         ; Refresh
                            86400         ; Retry
                          2419200         ; Expire
                           604800 )       ; Negative Cache TTL
  ;
  @       IN      NS      ns.brochette.site.
  @       IN      NS      ns6.gandi.net.
  @       IN      A       193.48.57.179
  @       IN      AAAA    2001:660:4401:60b0:216:3eff:fe21:d102
  ns      IN      A       193.48.57.179
  ns      IN      AAAA    2001:660:4401:60b0:216:3eff:fe21:d102
  www     IN      A       193.48.57.179
  www     IN      AAAA    2001:660:4401:60b0:216:3eff:fe21:d102
  127     IN      A       193.48.57.179
  • Contenu du nouveau fichier reverse zone :
  ;
  ; BIND reverse data file for local loopback interface
  ;
  $TTL    604800
  @       IN      SOA     ns.brochette.site. root.brochette.site. (
                                1         ; Serial
                           604800         ; Refresh
                            86400         ; Retry
                          2419200         ; Expire
                           604800 )       ; Negative Cache TTL
  
  ;NS records
  
  @       IN      NS      ns.brochette.site.
  
  ;PTR records
  
  179     IN      PTR     ns.brochette.site. ;193.48.57.179

Restart bind9 : service named restart

Tests

  • Forward :
  root@dio2:~# host -t any brochette.site localhost
  Using domain server:
  Name: localhost
  Address: 127.0.0.1#53
  Aliases:
  
  brochette.site has SOA record ns.brochette.site. root.brochette.site. 3 604800 86400 2419200 604800
  brochette.site name server ns.brochette.site.
  brochette.site name server ns6.gandi.net.
  brochette.site has address 193.48.57.179
  brochette.site has IPv6 address 2001:660:4401:60b0:216:3eff:fe21:d102
  • Reverse :
  root@dio2:~# host 193.48.57.179 localhost
  Using domain server:
  Name: localhost
  Address: 127.0.0.1#53
  Aliases:
  
  179.57.48.193.in-addr.arpa domain name pointer ns.brochette.site.

Sécurisation DNSSEC

On crée un répertoire pour stocker les clés DNSSEC : mkdir /etc/bind/brochette.site.dnssec

On ajoute ces lignes dans notre /etc/bind/named.conf.options

  dnssec-enable yes;
  dnssec-validation auto;

On crée les deux clés dsnsec ksk et zsk (il y aura sûrement des warning car l'algorithme RSA/SHA1 est obsolète) :

  dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE brochette.site
  dnssec-keygen -a RSASHA1 -b 1024 -n ZONE brochette.site

On les renomme proprement :

  mv ./Kbrochette.site.+005+14263.key ./brochette.site-ksk.key
  mv ./Kbrochette.site.+005+14263.private ./brochette.site-ksk.private
  mv ./Kbrochette.site.+005+19815.key ./brochette.site-zsk.key
  mv ./Kbrochette.site.+005+19815.private ./brochette.site-zsk.private

On inclut les clés dans le fichier de zone /etc/bind/db.brochette.site

  $INCLUDE "/etc/bind/brochette.site.dnssec/brochette.site-zsk.key";
  $INCLUDE "/etc/bind/brochette.site.dnssec/brochette.site-ksk.key";

On signe le fichier de zone :

  dnssec-signzone -o brochette.site -k brochette.site-ksk.key ../db.brochette.site brochette.site-zsk.key 

On modifie le fichier /etc/bind/named.conf.local pour prendre en compte les fichiers de zones signées :

  file "/etc/bind/db.brochette.site.signed";

On ajoute la clé publique ksk sur gandi en précisant algorithme RSA/SHA1

Bannissement Fail2Ban

On regarde si notre port SSH subit des attaques par force brute :

  grep 'sshd' /var/log/auth.log | grep Failed

Sortie :

  Nov 18 06:01:00 dio2 sshd[10216]: Failed password for root from 107.172.21.122 port 51698 ssh2
  Nov 18 08:08:21 dio2 sshd[10512]: Failed password for root from 46.193.65.70 port 49157 ssh2
  Nov 18 08:41:02 dio2 sshd[10680]: Failed password for root from 107.172.21.122 port 52798 ssh2
  Nov 18 10:05:25 dio2 sshd[10752]: Failed password for root from 107.172.21.122 port 53856 ssh2
  Nov 18 11:01:12 dio2 sshd[10797]: Failed password for root from 172.26.145.74 port 54398 ssh2
  Nov 18 11:01:17 dio2 sshd[10797]: Failed password for root from 172.26.145.74 port 54398 ssh2
  Nov 18 11:01:23 dio2 sshd[10797]: Failed password for root from 172.26.145.74 port 54398 ssh2
  Nov 18 11:01:28 dio2 sshd[10799]: Failed password for root from 172.26.145.74 port 54400 ssh2
  Nov 18 12:15:26 dio2 sshd[1417]: Failed password for root from 172.26.145.64 port 53410 ssh2
  Nov 18 12:15:32 dio2 sshd[1417]: Failed password for root from 172.26.145.64 port 53410 ssh2

En effet, nous avons des attaques, installons le package fail2ban puis on run le service, iptables va filtrer les paquets réseaux :

  apt install iptables
  apt install fail2ban
  service fail2ban start
  service fail2ban enable
  service fail2ban status

On active le bannissement sur le service sshd (SSH) et named-refused (Serveur DNS) dans le fichier : /etc/fail2ban/jail.d/defaults-debian.conf :

  [sshd]
  enabled = true
  [named-refused]
  enabled = true

Si on essaye de restart le service fail2ban il y aura une erreur sur l'activation de named-refused car par défault, le service de logging de named est off. Il faut ajouter le block logging dans /etc/bind/named.conf.options

  logging {
          channel security_file {
             	file "/var/log/named/security.log" versions 3 size 30m;
        	severity dynamic;
        	print-time yes;
    	   };
    	   category security {
        	security_file;
    	   };
  };

Il va lire le fichier /var/log/named/security.log qui n'existe pas, il faut le crée et mettre l'utilisateur bind comme owner :

  mkdir /var/log/named
  touch /var/log/named/security.log
  cd /var/log
  chown bind -R named/
  chown bind named/security.log 

On restart et on regarde le client :

  root@dio2:~# fail2ban-client status
  Status
  |- Number of jail:	2
  `- Jail list:	named-refused, sshd
  root@dio2:~# fail2ban-client status sshd
  Status for the jail: sshd
  |- Filter
  |  |- Currently failed:	1
  |  |- Total failed:	2
  |  `- File list:	/var/log/auth.log
  `- Actions
     |- Currently banned:	0
     |- Total banned:	0
     `- Banned IP list:	
  root@dio2:~# fail2ban-client status named-refused         
  Status for the jail: named-refused
  |- Filter
  |  |- Currently failed:	0
  |  |- Total failed:	0
  |  `- File list:	/var/log/named/security.log
  `- Actions
     |- Currently banned:	0
     |- Total banned:	0
     `- Banned IP list:

Configuration du Réseau

Avec Julien,Thibault,Logan,Quentin,Tom : Configuration en SR52

  • Connection vers l'interface Te1/1/2 vers port6 armoire de brassage E304
  • Connection vers l'interface Te1/1/5 vers port5 armoire de brassage E304
  • Configuration des interface en Vlan 531

Configuration réseau :

Création vlan 531

seulement si n'existe pas (faire (config)#show vlan

  #enable
  #config t
  (config)#vlan 531
  (config-vlan)#name INTERCO-4B
  (config-vlan)#exit
  (config)#do write

Configuration interface

  (config)#interface Te1/1/2
  (config-if)#switchport
  (config-if)#switchport mode access
  (config-if)#switchport access vlan 531
  (config-if)#exit
  (config)#interface Te1/1/5
  (config-if)#switchport
  (config-if)#switchport mode access
  (config-if)#switchport access vlan 531
  (config-if)#exit
  (config)#exit
  #write

Coffre Fort

Coffre_fort_code

Coffre_fort_code_v2

Coffre_fort_code_v3

Serveur Minecraft

Ping du serveur en vert soit il est connecté
Dans le serveur avec un message de la console

Le but de cette partie est d'installer un serveur Minecraft sur notre dio2.

Méthode 1 : Installation brute

On récupère le fichier server.jar sur notre dio2 avec wget (on installe le package si n'est pas installé):

  wget https://piston-data.mojang.com/v1/objects/f69c284232d7c7580bd89a5a4931c3581eae1378/server.jar

Pour structurer notre VM, on place ce fichier dans le répertoire /root/minecraft. Avant de procéder à l'installation, on installe la dernière version de open-jdk : apt install openjdk-17-jre

On lance le .jar (-Xmx et -Xms permet de spécifier la ram à allouer):

  java -Xmx500M -Xms500M -jar server.jar nogui

Dans le fichier eula.txt mettre eula=false à eula=true, ce que signifie que vous avez accepté les conditions générale d'utilisation

On relance le .jar avec la même commande

Pour que le serveur reste actif, on peut lancer le .jar dans un multiplexeur de terminaux comme screen par exemple.

Pour ce faire :

  • Lancer le package screen
  • Pour se détacher du terminal : [Ctrl+A][D]
  • Pour revenir sur le terminal : screen -dr

On peut se connecter à l'adresse 193.48.57.179 ou brochette.site si le serveur DNS est correctement configuré (voir partie ci-dessus)

Méthode 2 : En utilisant un conteneur docker

On peut facilement trouver des conteneurs dockers contenant un serveur minecraft, par exemple celui la, puis suivre le README.md pour lancer le server. Cette méthode est assez pratique puisque il ne nécessite pas d'installer les packages open-jdk