TP sysres IMA5 2021/2022 G3 : Différence entre versions

De Wiki d'activités IMA
(Configuration en SR-52)
(Honey à descendre)
 
(68 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 +
=PRA=
 
Ceci est la contribution du groupe G3 ( numéroté groupe 2 ) aux travaux pratiques de réseau de cette 5ème Année. Le groupe est constitué de Axel Chemin et de Guillaume PERSON.
 
Ceci est la contribution du groupe G3 ( numéroté groupe 2 ) aux travaux pratiques de réseau de cette 5ème Année. Le groupe est constitué de Axel Chemin et de Guillaume PERSON.
  
  
== Première séance ==
+
==Table d'adressage==
===Table d'adressage===
 
 
Dans la première séance, toute la promotion s'est divisée en groupes qui se sont attachés à une tâche en particulier. Nous nous sommes pour notre part attelés à la partie adressage, avec les groupes 0, 5, 6, 8,9 et 10.
 
Dans la première séance, toute la promotion s'est divisée en groupes qui se sont attachés à une tâche en particulier. Nous nous sommes pour notre part attelés à la partie adressage, avec les groupes 0, 5, 6, 8,9 et 10.
 
Nous avons déterminé les tables d'adressage des VLAN ainsi que des adresses IP du VLAN 42 ( qui est le VLAN que nous avons choisi pour être celui associé aux machines virtuelles).
 
Nous avons déterminé les tables d'adressage des VLAN ainsi que des adresses IP du VLAN 42 ( qui est le VLAN que nous avons choisi pour être celui associé aux machines virtuelles).
Ligne 12 : Ligne 12 :
  
  
===Configuration en SR-52===
+
==Configuration en SR-52==
 
Dans un second temps, il a fallu configurer les trous routeurs situés en E-304, E-306 et SR-52. L'équipe 0 et nous-mêmes sommes allés configurer le routeur situé en SR-52.
 
Dans un second temps, il a fallu configurer les trous routeurs situés en E-304, E-306 et SR-52. L'équipe 0 et nous-mêmes sommes allés configurer le routeur situé en SR-52.
 +
 +
Voici ce qui a été fait et qui a causé le dérèglement de la plateforme.
  
 
Commandes rentrées :  
 
Commandes rentrées :  
enable
+
   
  
configure
+
    enable
  
interface Gigabitethernet 0/18 (ou Gi0/18)
+
    configure
  
switchport mode access
+
    interface Gigabitethernet 0/18 (ou Gi0/18)
  
switchport access vlan 531 // permet de déplacer l’interface Gi0/18 sur le vlan 531
+
    switchport mode access
 +
 
 +
    switchport access vlan 531 // permet de déplacer l’interface Gi0/18 sur le vlan 531
  
  
 
// config adresse ipv4 :
 
// config adresse ipv4 :
  
interface vlan 531
+
    interface vlan 531
  
ip address 192.168.222.43 255.255.255.248
+
    ip address 192.168.222.43 255.255.255.248
  
  
 
//config adresse ipv6
 
//config adresse ipv6
  
interface vlan 531
+
    interface vlan 531
  
ipv6 address 2001:660:4401:60b0::3/64
+
    ipv6 address 2001:660:4401:60b0::3/64
  
ipv6 unicast-routing
+
    ipv6 unicast-routing
 
//done
 
//done
  
 
//interconnexion
 
//interconnexion
  
router ospf 1  
+
    router ospf 1  
  
ipv4 router-id 192.168.222.43
+
    ipv4 router-id 192.168.222.43
  
summary-address 193.48.57.176 255.255.255.240
+
    summary-address 193.48.57.176 255.255.255.240
  
summary-address ??
+
    summary-address ??
  
summary-adress   
+
    summary-adress   
  
redistribute  connected subnets
+
    redistribute  connected subnets
  
redistribute static subnets route-map ospf
+
    redistribute static subnets route-map ospf
  
network 192.168.222.32 0.0.0.7 area 10
+
    network 192.168.222.32 0.0.0.7 area 10
  
network 192.168.222.40 0.0.0.7 area 20
+
    network 192.168.222.40 0.0.0.7 area 20
  
default-information originate
+
    default-information originate
  
 
//done
 
//done
Ligne 69 : Ligne 73 :
 
//filtre pour ospf
 
//filtre pour ospf
  
route ospf 1
+
    route ospf 1
  
 
summary-address 10.0.0.0 255.0.0.0 not-advertise
 
summary-address 10.0.0.0 255.0.0.0 not-advertise
  
 
//done
 
//done
 
+
   
  
  
Ligne 81 : Ligne 85 :
 
Enfin, nous avons tenté de configurer le router avec la fibre.
 
Enfin, nous avons tenté de configurer le router avec la fibre.
 
Nous devons aussi configurer le cas d'interconnexion pour l'ipv6.
 
Nous devons aussi configurer le cas d'interconnexion pour l'ipv6.
 +
 +
==Gestion de la machine virtuelle==
 +
 +
Pour cette séance nous créons la machine virtuelle sur Capbreton
 +
 +
Il faut d'abord se connecter en root (mot de passe habituel) sur Capbreton.
 +
 +
Pour utiliser le miroir Debian de l'école :
 +
    export http_proxy=http://proxy.plil.fr:3128
 +
 +
En utilisant Xen pour créer notre image :
 +
    xen-create-image --hostname=Kasteel --ip=193.48.57.178 --gateway=193.48.57.190 --netmask=255.255.255.224 --dir=/usr/local/xen --password=pasglop dist=debian
 +
 +
Les volumes logiques pour les répertoires home et var doivent être créés :
 +
    lvcreate -L10G -n KasteelHome storage
 +
    lvcreate -L10G -n KasteelVar storage
 +
 +
On peut vérifier le statut des volumes :
 +
    vgdisplay
 +
    lvdisplay [path]
 +
 +
Et vérifier qu'ils soient bien en ext4 :
 +
    file -Ls /dev/storage/
 +
    mkfs.ext4 Kasteel
 +
 +
 +
dans : nano /etc/xen/Kasteel.cfg
 +
 +
root        = '/dev/xvda2 ro'
 +
disk        = [
 +
                  'file:/usr/local/xen/domains/Kasteel/disk.img,xvda2,w',
 +
                  'file:/usr/local/xen/domains/Kasteel/swap.img,xvda1,w',
 +
                  'phy:/dev/storage/KasteelHome,xvda3,w'
 +
                  'phy:/dev/storage/KasteelVar,xvda4,w'
 +
              ]
 +
 +
 +
    vif        = [ 'ip=193.48.57.178 ,mac=00:16:3E:88:65:42 ,bridge=IMA5sc' ]
 +
 +
 +
Et on lance la machine pour s'y connecter.
 +
    xen create -c /etc/xen/Kasteel.cfg
 +
 +
 +
on configure SSH, déjà lancé, mais il faut permettre root de s'y connecter :
 +
/etc/ssh/sshd.config
 +
=> PermitRootLogin yes
 +
 +
et on redémarre le service :
 +
    service ssh restart
 +
 +
On installe installe Apache2 et on acitve le ssh en root dans /etc/ssh.
 +
 +
On monte ensuite /home et /var
 +
 +
On commence par créer les dossiers :
 +
    mkdir /mnt/xvda3
 +
    mkdir /mnt/xvda4
 +
 +
Puis :
 +
    mount /dev/xvda3 /mnt/xvda3
 +
    mount /dev/xvda4 /mnt/xvda4
 +
 +
Ensuite, on déplace le contenu de /var dans xvda4 :
 +
 +
    mv /var/* /mnt/xvda4
 +
 +
Alors, on ajoute les deux lignes dans le /etc/fstab :
 +
   
 +
    /dev/xvda3 /home ext4 defaults 0 2
 +
    /dev/xvda4 /var ext4 defaults 0 2
 +
 +
On peut enfin taper :
 +
 +
    mount -a
 +
 +
On peut alors voir avec lsblk que nos /home et /var existent !
 +
 +
VRRP : redondance de routeur, choix du meilleur routeur
 +
OSPF : les routeurs s'échangent leurs routes
 +
 +
==Tests d'intrusion==
 +
===Recherche de failles du système===
 +
 +
Nous recherchons des failles systèmes sur le ee.
 +
lsb_release -a
 +
  on est en Devuan 2.1
 +
 +
 +
===Honey à descendre===
 +
 +
L'ensemble de la rédaction se trouve dans cette [https://drive.google.com/file/d/17CvPimVH66YAKXji1230K_-6TV7uMwyI/view?usp=sharing archive protégée avec mot de passe] .
 +
 +
MAJ 15/01/2022 : le mot de passe est "ilestlechef"
 +
 +
== Crackage de clefs wifi ==
 +
 +
    airmon-ng start wlan0mon
 +
 +
cela affiche toutes les cracottes ( les pts wifi)
 +
ensuite on ecoute les trames wifi dela cracotte choisie ( la 03)
 +
pour cela, on utilise :
 +
    airodump-ng --encrypt wep wlan0mon
 +
on a son adresse MAC : 04:DA:D2:9C:50:52
 +
 +
 +
on va ensuite récupérer le BSSID associé à notre cracotte03 grace a son ESSID trouvé précéde>
 +
 +
 +
    aireplay-ng -9 -e cracotte03 -a 04:DA:D2:9C:50:50
 +
 +
Puis, un recupere le bssid et enfin
 +
 +
    airodump-ng -c 4 --bssid 04:DA:D2:9C:50:52 -w output wlan0mon
 +
 +
On utilise ensuite :
 +
 +
    aircrack-ng output-01.cap pour recupérer le mot de passe !
 +
 +
notre mot de passe, trouvé en 4:09m est 55:55:55:55:5A:BC:04:CB:A4:44:44:44:44
 +
 +
 +
Il reste à cracker la clef WPA.
 +
Il faut créer un dictionnaire avec tous les mots de 8 caractères où chaque caractère est un chiffre. J'ai d'abord réalisé un fichier c le faisant, mais l'utilitaire crunch permet de réaliser cela plus simplement.
 +
La suite n'a pas encore été réalisée,
 +
 +
 +
==Realisations==
 +
===Sécurisation des données===
 +
On commence par créer les trois volumes :
 +
    lvcreate -L1G -n Kasteel-secu1 storage
 +
    lvcreate -L1G -n Kasteel-secu2 storage
 +
    lvcreate -L1G -n Kasteel-secu3 storage
 +
 +
On les ajoute ensuite à la configuration de la machine virtuelle en ajoutant à Kasteel.cfg :
 +
    'phy:/dev/storage/Kasteel-secu1,xvda5,w',
 +
    'phy:/dev/storage/Kasteel-secu2,xvda6,w',
 +
    'phy:/dev/storage/Kasteel-secu3,xvda7,w'
 +
 +
 +
Ensuite, on redémarre la machine puis on utilise mdam pour créer le raid :
 +
 +
    mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/xvda5 /dev/xvda6 /dev/xvda7
 +
 +
Nous formatons /dev/md0 avec mkfs.ext4
 +
 +
Nous utilisons ensuite :
 +
    mdadm --monitor --daemonise /dev/md0
 +
 +
afin que le volume soit monté lorsque la machine virtuelle démarre.
 +
 +
Nous ajoutons enfin :
 +
    /dev/md0 /media/raid ext4 defaults 0 1
 +
à notre fstab.
 +
 +
Il est alors possible d'écrire :
 +
    mount -a
 +
 +
===Chiffrement de données===
 +
 +
On commence par installer lvm2 et cryptsetup sur le eeePc. Pour avoir internet, il faut brancher le eeePc sur une zabeth.
 +
 +
On branche la clef USB dans le eeePc et on utilise lsblk pour trouver son nom : sda.
 +
 +
On formate la clef :
 +
 +
    mkfs.ext4 /dev/sda
 +
 +
Nous initialisons ensuite la clef au format LUKS grâce à :
 +
 +
    cryptsetup luksFormat /dev/sda
 +
Nous utilisons le mot de passe pasglop
 +
 +
Puis nous formatons la partition cryptée , avec un volume nommé encrypted :
 +
    cryptsetup luksOpen /dev/sdc encrypted
 +
    mkfs.ext4 /dev/mapper/encrypted
 +
 +
Nous montons alors la partition :
 +
 +
    mkdir /mnt/encrypter
 +
    mount -t ext4 /dev/mapper/encrypted /mnt/encrypter
 +
On ajoute un fichier texte dans /mnt/encrypter.
 +
 +
Nous démontons la clef avec umount et cryptsetup luksClose, puis nous la branchons sur un autre pc pour tenter d'accéder aux fichiers.
 +
Sans connaitre le mot de passe, pas moyen d'accéder aux fichiers, c'est bien ce que nous voulons !
 +
 +
==Service Web==
 +
 +
===DNS===
 +
 +
Nous avons aussi réservé le nom de domaine kasteel.site sur gandi.net , et configuré la redirection vers notre serveur DNS local.
 +
 +
Puis bind a été configuré.
 +
 +
 +
===DNSSEC===
 +
 +
Nous avons acheté un certificat sur gandi.
 +
 +
dnssec-enable yes; dans les configurations.
 +
 +
    dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE kasteel.site
 +
    dnssec-keygen -a RSASHA1 -b 1024 -n ZONE kasteel.site
 +
    dnssec-signzone -o kasteel.site -k kasteel.site-ksk ../db.kasteel.site kasteel.site-zsk
 +
 +
dans named.conf.local, on remplace le file par "/etc/bind/db.kasteel.site.signed"
 +
 +
Manipulation faite dans gandi pour confirmer notre configuration.
 +
 +
===HTTPS===
 +
 +
Puis, nous avons généré les deux clefs grâce à openssl en suivant le tutoriel sur : https://docs.gandi.net/en/ssl/common_operations/csr.html
 +
 +
On installe Apache2, le mod ssl : "a2enmod ssl" , et on le configure pour utiliser HTTPS :
 +
 +
    <VirtualHost *:443>
 +
        ServerAdmin webmaster@localhost
 +
        DocumentRoot /var/www/html
 +
        ErrorLog ${APACHE_LOG_DIR}/error.log
 +
        CustomLog ${APACHE_LOG_DIR}/access.log combined
 +
        SSLEngine on
 +
        SSLCertificateFile /etc/apache2/kasteel.site.crt
 +
        SSLCertificateKeyFile /keys/myserver.key
 +
        #SSLCertificateChainFile /etc/apache2/kasteel.site.crt
 +
    </VirtualHost>
 +
 +
=ASR=
 +
==Mise en place de ansible==
 +
 +
 +
 +
Nous débutons ce tp en lisant le sujet : [[https://github.com/thomas-maurice/polytech-asr-lab]]
 +
Nous générons une clef ssh :
 +
    ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "axel.chemin@polytech-lille.net" -P ''
 +
Cela nous permet de générer une clef ssh sans mot de passe qui sera utilse pour lier notre VM à ansible.
 +
Notre Machine virtuelle est sur chassiron, avec le nom pra-03.
 +
 +
Nous modifions le fichier /etc/network/interfaces afin de pouvoir nous connecter en ssh à notre VM:
 +
    # The primary network interface
 +
    auto eth0
 +
    iface eth0 inet static
 +
    address 172.26.145.103
 +
    netmask 255.255.255.0
 +
    gateway 172.26.188.254
 +
 +
Nous continuons le tp, et nous nous y connectons ( à notre VM ) et copions la clef ssh dans :
 +
    /root/.ssh/authorized_keys
 +
 +
 +
Revenons sur notre machine zabeth où nous avons cloné le repo depuis github. Nous modifions le fichier inventory pour y mettre l'adresse IP de notre VM :
 +
    pra-03 ansible_ssh_host="172.26.145.103"
 +
Nous créons aussi le fichier host_vars/pra-03.yaml qui contiendra nos variables probablement nécessaires plus tard. Notons que pra-03 match le nom de notre machine dans inventory
 +
 +
Nous créons ensuite un environnement python et l'activons :
 +
 +
    python3 -m venv ~/env-ansible
 +
    . ~/env-ansible/bin/activate
 +
Puis, nous installons les packages grâce au gestionnaire de paquets python :
 +
    pip3 install -U setuptools wheel
 +
    pip3 install -U ansible
 +
 +
Il a été nécessaire de updrage pip au préalable.
 +
Nous pouvons ensuite lancer le playbook avec la commande :
 +
    ansible-playbook -v -i inventory polytech.yaml
 +
 +
Nous trouvons une erreur, il faut au préalable installer python sur la machine pra-03 !
 +
    apt-get install python3
 +
 +
( Rq : pour utiliser ansible, il faut : pouvoir se connecter en ssh dessus ET avoir python d'installé dessus)
 +
 +
Et nous recommençons la commande précédente.
 +
 +
Celle fois, le playbook semble faire ce qu'il faut !
 +
 +
==Ajout d'un rôle==
 +
Nous ajoutons dans group_vars/all notre clef ssh publique créée précédemment afin de permettre à ansible d'accéder à notre VM en ssh.
 +
    -name: achemin@gperson
 +
    key: SSH_KEY_DONT_WANT_TO_COPY_IT
 +
 +
Nous ajoutons ensuite le fichier roles/ssh_key/tasks/main.yml pout y mettre notre tâche d'ajout des clefs ssh directement dans ~/.ssh/authorized_keys. Il y a deux étapes :
 +
 +
- Créer le fichier root/.ssh/authorized_keys s'il n'existe pas
 +
- Utiliser un template pour mettre nos clefs ( la nôtre et celle de Thomas )
 +
 +
Voici le fichier roles/ssh_key/tasks/main.yml :
 +
    - name: "check ssh present"
 +
      file:
 +
        path:  "/root/.ssh/authorized_keys"
 +
        state: touch
 +
        mode: "0600"
 +
      become: yes
 +
    - name: "update ssh authorized"
 +
      template:
 +
        src: ssh.j2
 +
        dest: "/root/.ssh/authorized_keys"
 +
        owner: root
 +
        group: root
 +
        mode: "0600"
 +
      become: yes
 +
 +
 +
Et le fichier polytech.yml mis à jour afin d'appeler notre rôle ssh_key:
 +
 +
    ---
 +
    - hosts: all
 +
      roles:
 +
        - role: base
 +
          tags: base
 +
        - role: ssh_key
 +
          tags: ssh_key
 +
 +
 +
Et enfin le template qui sera utilisé pour remplacer le fichier root/.ssh/authorized/keys sur notre VM :
 +
    {% for key in ssh_keys %}
 +
    {{ key.key }}
 +
    {% endfor %}
 +
En testant en utilisant :
 +
        ansible-playbook -v -i inventory polytech.yaml
 +
Et cela met bien à jour les clefs sur notre VM !
 +
 +
 +
==Docker==
 +
Pour utiliser ansible-galaxy, il faut exporter le proxy :
 +
    export http_proxy="http://proxy.plil.fr:3128"
 +
    export https_proxy="https://proxy.plil.fr:3128"
 +
Puis s'assurer d'être toujours dans l'environnement ansible créé précédemment ( réactiver si nécessaire) et lancer la commande :
 +
    ansible-galaxy install geerlingguy.docker
 +
 +
Cela est fait afin d'installer docker !
 +
==Installation de consul==
 +
On doit ensuite créer un utilisateur et un groupe consul, pour cela on ajoute un rôle appelé consul, où le fichier role/consul/tasks/main.yml est défini comme suit :
 +
    - name: "consul user"
 +
      user:
 +
        append: yes
 +
        name: "consul"
 +
        uid: "666"
 +
      become: yes
 +
    - name: "Change consul groupe id"
 +
      group:
 +
        name: "consul"
 +
        gid: "666"
 +
 +
On ajoute aussi le rôle consul dans polytech.yaml.
 +
 +
On ajoute ensuite le fichier de configuration /etc/consul/basic_config.json demandé dans le sujet :
 +
    {
 +
      "datacenter": "polytech",
 +
      "data_dir": "/var/lib/consul",
 +
      "log_level": "INFO",
 +
      "node_name": "<your node name>",
 +
      "server": true
 +
    }
 +
 +
Pour ce faire, on ajoute des tâches à notre rôle consul dans  role/consul/tasks/main.yml :
 +
 +
    - name: "presence of /etc/consul"
 +
      file:
 +
        path: "/etc/consul"
 +
        state: directory
 +
        mode: 700
 +
        owner: consul
 +
        group: consul
 +
      become: yes
 +
    - name: "presence of /var/lib/consul"
 +
      file:
 +
        path: "/var/lib/consul"
 +
        state: directory
 +
        mode: 700
 +
        owner: consul
 +
        group: consul
 +
      become: yes
 +
    - name: "presence of /etc/consul/basic_config.json"
 +
      file:
 +
        path: "/etc/consul/basic_config.json"
 +
        state: touch
 +
        mode: 700
 +
        owner: consul
 +
        group: consul
 +
      become: yes
 +
    - name: "copy config"
 +
      copy:
 +
        src: "static_files/basic_config.json"
 +
        dest: "/etc/consul/basic_config.json"
 +
        mode: 644
 +
        owner: consul
 +
        group: consul
 +
      become: yes
 +
 +
Nous ajoutons aussi un dossier static_files dans le rôle consul qui contient le fichier basic_config.json qui contient la configuration montrée précédemment, qui sera installée par ansible.
 +
 +
Nous relançons ansible de la même manière que les deux fois précédentes : Nous obtenons bien le résultat voulu, le dossier est créé sur la VM et le fichier de configuration est présent.
 +
 +
 +
On veut ensuite lancer docker. On modifie donc le fichier role/consul/tasks/main.yml comme suit :
 +
 +
    - name: "Run a 2048 in order to test"
 +
      community.docker.docker_container:
 +
        name: "acontainer"
 +
        image: "alexwhen/docker-2048"
 +
 +
 +
On modifie aussi polytech.yml qui a maintenant l'allure comme suit :
 +
 +
    ---
 +
    - hosts: all
 +
      roles:
 +
        - role: base
 +
          tags: base
 +
        - role: ssh_key
 +
          tags: ssh_key
 +
        - geerlingguy.pip
 +
        - geerlingguy.docker
 +
        - role: consul
 +
          tags: consul
 +
 +
 +
On installe aussi sur notre vm docker et resuest :
 +
    pip install docker
 +
    pip install requests
 +
 +
 +
Il est aussi nécessaire de gérer un problème de pull de l'image docker ( qui timeout) malgré le proxy de l'école configuré.

Version actuelle datée du 15 janvier 2022 à 14:42

PRA

Ceci est la contribution du groupe G3 ( numéroté groupe 2 ) aux travaux pratiques de réseau de cette 5ème Année. Le groupe est constitué de Axel Chemin et de Guillaume PERSON.


Table d'adressage

Dans la première séance, toute la promotion s'est divisée en groupes qui se sont attachés à une tâche en particulier. Nous nous sommes pour notre part attelés à la partie adressage, avec les groupes 0, 5, 6, 8,9 et 10. Nous avons déterminé les tables d'adressage des VLAN ainsi que des adresses IP du VLAN 42 ( qui est le VLAN que nous avons choisi pour être celui associé aux machines virtuelles).

Le résultat de cette réflexion peut être trouvé ici : [1]



Configuration en SR-52

Dans un second temps, il a fallu configurer les trous routeurs situés en E-304, E-306 et SR-52. L'équipe 0 et nous-mêmes sommes allés configurer le routeur situé en SR-52.

Voici ce qui a été fait et qui a causé le dérèglement de la plateforme.

Commandes rentrées :


   enable 
   configure
   interface Gigabitethernet 0/18 (ou Gi0/18)
   switchport mode access
   switchport access vlan 531 // permet de déplacer l’interface Gi0/18 sur le vlan 531


// config adresse ipv4 :

   interface vlan 531
   ip address 192.168.222.43 255.255.255.248


//config adresse ipv6

   interface vlan 531
   ipv6 address 2001:660:4401:60b0::3/64
   ipv6 unicast-routing

//done

//interconnexion

   router ospf 1 
   ipv4 router-id 192.168.222.43
   summary-address 193.48.57.176 255.255.255.240
   summary-address ??
   summary-adress  
   redistribute  connected subnets
   redistribute static subnets route-map ospf
   network 192.168.222.32 0.0.0.7 area 10
   network 192.168.222.40 0.0.0.7 area 20
   default-information originate

//done

//filtre pour ospf

   route ospf 1

summary-address 10.0.0.0 255.0.0.0 not-advertise

//done



Enfin, nous avons tenté de configurer le router avec la fibre. Nous devons aussi configurer le cas d'interconnexion pour l'ipv6.

Gestion de la machine virtuelle

Pour cette séance nous créons la machine virtuelle sur Capbreton

Il faut d'abord se connecter en root (mot de passe habituel) sur Capbreton.

Pour utiliser le miroir Debian de l'école :

   export http_proxy=http://proxy.plil.fr:3128

En utilisant Xen pour créer notre image :

   xen-create-image --hostname=Kasteel --ip=193.48.57.178 --gateway=193.48.57.190 --netmask=255.255.255.224 --dir=/usr/local/xen --password=pasglop dist=debian

Les volumes logiques pour les répertoires home et var doivent être créés :

   lvcreate -L10G -n KasteelHome storage
   lvcreate -L10G -n KasteelVar storage

On peut vérifier le statut des volumes :

   vgdisplay
   lvdisplay [path]

Et vérifier qu'ils soient bien en ext4 :

   file -Ls /dev/storage/
   mkfs.ext4 Kasteel


dans : nano /etc/xen/Kasteel.cfg

root = '/dev/xvda2 ro' disk = [

                 'file:/usr/local/xen/domains/Kasteel/disk.img,xvda2,w',
                 'file:/usr/local/xen/domains/Kasteel/swap.img,xvda1,w',
                 'phy:/dev/storage/KasteelHome,xvda3,w'
                 'phy:/dev/storage/KasteelVar,xvda4,w'
             ]


   vif         = [ 'ip=193.48.57.178 ,mac=00:16:3E:88:65:42 ,bridge=IMA5sc' ]


Et on lance la machine pour s'y connecter.

   xen create -c /etc/xen/Kasteel.cfg


on configure SSH, déjà lancé, mais il faut permettre root de s'y connecter : /etc/ssh/sshd.config => PermitRootLogin yes

et on redémarre le service :

   service ssh restart

On installe installe Apache2 et on acitve le ssh en root dans /etc/ssh.

On monte ensuite /home et /var

On commence par créer les dossiers :

   mkdir /mnt/xvda3
   mkdir /mnt/xvda4

Puis :

   mount /dev/xvda3 /mnt/xvda3
   mount /dev/xvda4 /mnt/xvda4

Ensuite, on déplace le contenu de /var dans xvda4 :

   mv /var/* /mnt/xvda4

Alors, on ajoute les deux lignes dans le /etc/fstab :

   /dev/xvda3 /home ext4 defaults 0 2
   /dev/xvda4 /var ext4 defaults 0 2

On peut enfin taper :

   mount -a

On peut alors voir avec lsblk que nos /home et /var existent !

VRRP : redondance de routeur, choix du meilleur routeur OSPF : les routeurs s'échangent leurs routes

Tests d'intrusion

Recherche de failles du système

Nous recherchons des failles systèmes sur le ee. lsb_release -a

 on est en Devuan 2.1


Honey à descendre

L'ensemble de la rédaction se trouve dans cette archive protégée avec mot de passe .

MAJ 15/01/2022 : le mot de passe est "ilestlechef"

Crackage de clefs wifi

    airmon-ng start wlan0mon

cela affiche toutes les cracottes ( les pts wifi) ensuite on ecoute les trames wifi dela cracotte choisie ( la 03) pour cela, on utilise :

   airodump-ng --encrypt wep wlan0mon

on a son adresse MAC : 04:DA:D2:9C:50:52


on va ensuite récupérer le BSSID associé à notre cracotte03 grace a son ESSID trouvé précéde>


   aireplay-ng -9 -e cracotte03 -a 04:DA:D2:9C:50:50

Puis, un recupere le bssid et enfin

   airodump-ng -c 4 --bssid 04:DA:D2:9C:50:52 -w output wlan0mon

On utilise ensuite :

   aircrack-ng output-01.cap pour recupérer le mot de passe !

notre mot de passe, trouvé en 4:09m est 55:55:55:55:5A:BC:04:CB:A4:44:44:44:44


Il reste à cracker la clef WPA. Il faut créer un dictionnaire avec tous les mots de 8 caractères où chaque caractère est un chiffre. J'ai d'abord réalisé un fichier c le faisant, mais l'utilitaire crunch permet de réaliser cela plus simplement. La suite n'a pas encore été réalisée,


Realisations

Sécurisation des données

On commence par créer les trois volumes :

   lvcreate -L1G -n Kasteel-secu1 storage
   lvcreate -L1G -n Kasteel-secu2 storage
   lvcreate -L1G -n Kasteel-secu3 storage

On les ajoute ensuite à la configuration de la machine virtuelle en ajoutant à Kasteel.cfg :

   'phy:/dev/storage/Kasteel-secu1,xvda5,w',
   'phy:/dev/storage/Kasteel-secu2,xvda6,w',
   'phy:/dev/storage/Kasteel-secu3,xvda7,w'


Ensuite, on redémarre la machine puis on utilise mdam pour créer le raid :

   mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/xvda5 /dev/xvda6 /dev/xvda7

Nous formatons /dev/md0 avec mkfs.ext4

Nous utilisons ensuite :

   mdadm --monitor --daemonise /dev/md0

afin que le volume soit monté lorsque la machine virtuelle démarre.

Nous ajoutons enfin :

   /dev/md0 /media/raid ext4 defaults 0 1 

à notre fstab.

Il est alors possible d'écrire :

   mount -a

Chiffrement de données

On commence par installer lvm2 et cryptsetup sur le eeePc. Pour avoir internet, il faut brancher le eeePc sur une zabeth.

On branche la clef USB dans le eeePc et on utilise lsblk pour trouver son nom : sda.

On formate la clef :

   mkfs.ext4 /dev/sda

Nous initialisons ensuite la clef au format LUKS grâce à :

   cryptsetup luksFormat /dev/sda

Nous utilisons le mot de passe pasglop

Puis nous formatons la partition cryptée , avec un volume nommé encrypted :

   cryptsetup luksOpen /dev/sdc encrypted 
   mkfs.ext4 /dev/mapper/encrypted 

Nous montons alors la partition :

   mkdir /mnt/encrypter
   mount -t ext4 /dev/mapper/encrypted /mnt/encrypter

On ajoute un fichier texte dans /mnt/encrypter.

Nous démontons la clef avec umount et cryptsetup luksClose, puis nous la branchons sur un autre pc pour tenter d'accéder aux fichiers. Sans connaitre le mot de passe, pas moyen d'accéder aux fichiers, c'est bien ce que nous voulons !

Service Web

DNS

Nous avons aussi réservé le nom de domaine kasteel.site sur gandi.net , et configuré la redirection vers notre serveur DNS local.

Puis bind a été configuré.


DNSSEC

Nous avons acheté un certificat sur gandi.

dnssec-enable yes; dans les configurations.

   dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE kasteel.site
   dnssec-keygen -a RSASHA1 -b 1024 -n ZONE kasteel.site
   dnssec-signzone -o kasteel.site -k kasteel.site-ksk ../db.kasteel.site kasteel.site-zsk

dans named.conf.local, on remplace le file par "/etc/bind/db.kasteel.site.signed"

Manipulation faite dans gandi pour confirmer notre configuration.

HTTPS

Puis, nous avons généré les deux clefs grâce à openssl en suivant le tutoriel sur : https://docs.gandi.net/en/ssl/common_operations/csr.html

On installe Apache2, le mod ssl : "a2enmod ssl" , et on le configure pour utiliser HTTPS :

   <VirtualHost *:443>
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/html
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
       SSLEngine on
       SSLCertificateFile /etc/apache2/kasteel.site.crt
       SSLCertificateKeyFile /keys/myserver.key
       #SSLCertificateChainFile /etc/apache2/kasteel.site.crt
   </VirtualHost>

ASR

Mise en place de ansible

Nous débutons ce tp en lisant le sujet : [[2]] Nous générons une clef ssh :

   ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "axel.chemin@polytech-lille.net" -P 

Cela nous permet de générer une clef ssh sans mot de passe qui sera utilse pour lier notre VM à ansible. Notre Machine virtuelle est sur chassiron, avec le nom pra-03.

Nous modifions le fichier /etc/network/interfaces afin de pouvoir nous connecter en ssh à notre VM:

   # The primary network interface
   auto eth0
   iface eth0 inet static
   address 172.26.145.103
   netmask 255.255.255.0
   gateway 172.26.188.254

Nous continuons le tp, et nous nous y connectons ( à notre VM ) et copions la clef ssh dans :

   /root/.ssh/authorized_keys


Revenons sur notre machine zabeth où nous avons cloné le repo depuis github. Nous modifions le fichier inventory pour y mettre l'adresse IP de notre VM :

   pra-03 ansible_ssh_host="172.26.145.103"

Nous créons aussi le fichier host_vars/pra-03.yaml qui contiendra nos variables probablement nécessaires plus tard. Notons que pra-03 match le nom de notre machine dans inventory

Nous créons ensuite un environnement python et l'activons :

   python3 -m venv ~/env-ansible
   . ~/env-ansible/bin/activate

Puis, nous installons les packages grâce au gestionnaire de paquets python :

   pip3 install -U setuptools wheel
   pip3 install -U ansible

Il a été nécessaire de updrage pip au préalable. Nous pouvons ensuite lancer le playbook avec la commande :

   ansible-playbook -v -i inventory polytech.yaml

Nous trouvons une erreur, il faut au préalable installer python sur la machine pra-03 !

   apt-get install python3

( Rq : pour utiliser ansible, il faut : pouvoir se connecter en ssh dessus ET avoir python d'installé dessus)

Et nous recommençons la commande précédente.

Celle fois, le playbook semble faire ce qu'il faut !

Ajout d'un rôle

Nous ajoutons dans group_vars/all notre clef ssh publique créée précédemment afin de permettre à ansible d'accéder à notre VM en ssh.

   -name: achemin@gperson 
    key: SSH_KEY_DONT_WANT_TO_COPY_IT

Nous ajoutons ensuite le fichier roles/ssh_key/tasks/main.yml pout y mettre notre tâche d'ajout des clefs ssh directement dans ~/.ssh/authorized_keys. Il y a deux étapes :

- Créer le fichier root/.ssh/authorized_keys s'il n'existe pas - Utiliser un template pour mettre nos clefs ( la nôtre et celle de Thomas )

Voici le fichier roles/ssh_key/tasks/main.yml :

   - name: "check ssh present"
     file:
       path:  "/root/.ssh/authorized_keys"
       state: touch
       mode: "0600"
     become: yes
   - name: "update ssh authorized"
     template:
       src: ssh.j2
       dest: "/root/.ssh/authorized_keys"
       owner: root
       group: root
       mode: "0600"
     become: yes


Et le fichier polytech.yml mis à jour afin d'appeler notre rôle ssh_key:

   ---
   - hosts: all
     roles:
       - role: base
         tags: base
       - role: ssh_key
         tags: ssh_key


Et enfin le template qui sera utilisé pour remplacer le fichier root/.ssh/authorized/keys sur notre VM :

   {% for key in ssh_keys %}
   Modèle:Key.key
   {% endfor %}

En testant en utilisant :

       ansible-playbook -v -i inventory polytech.yaml

Et cela met bien à jour les clefs sur notre VM !


Docker

Pour utiliser ansible-galaxy, il faut exporter le proxy :

   export http_proxy="http://proxy.plil.fr:3128"
   export https_proxy="https://proxy.plil.fr:3128"

Puis s'assurer d'être toujours dans l'environnement ansible créé précédemment ( réactiver si nécessaire) et lancer la commande :

   ansible-galaxy install geerlingguy.docker

Cela est fait afin d'installer docker !

Installation de consul

On doit ensuite créer un utilisateur et un groupe consul, pour cela on ajoute un rôle appelé consul, où le fichier role/consul/tasks/main.yml est défini comme suit :

   - name: "consul user"
     user:
       append: yes
       name: "consul"
       uid: "666"
     become: yes
   - name: "Change consul groupe id"
     group:
       name: "consul"
       gid: "666"

On ajoute aussi le rôle consul dans polytech.yaml.

On ajoute ensuite le fichier de configuration /etc/consul/basic_config.json demandé dans le sujet :

   {
     "datacenter": "polytech",
     "data_dir": "/var/lib/consul",
     "log_level": "INFO",
     "node_name": "<your node name>",
     "server": true
   }

Pour ce faire, on ajoute des tâches à notre rôle consul dans role/consul/tasks/main.yml :

   - name: "presence of /etc/consul"
     file:
       path: "/etc/consul"
       state: directory
       mode: 700
       owner: consul
       group: consul
     become: yes
   - name: "presence of /var/lib/consul"
     file:
       path: "/var/lib/consul"
       state: directory
       mode: 700
       owner: consul
       group: consul
     become: yes
   - name: "presence of /etc/consul/basic_config.json"
     file:
       path: "/etc/consul/basic_config.json"
       state: touch
       mode: 700
       owner: consul
       group: consul
     become: yes
   - name: "copy config"
     copy:
       src: "static_files/basic_config.json"
       dest: "/etc/consul/basic_config.json"
       mode: 644
       owner: consul
       group: consul
     become: yes

Nous ajoutons aussi un dossier static_files dans le rôle consul qui contient le fichier basic_config.json qui contient la configuration montrée précédemment, qui sera installée par ansible.

Nous relançons ansible de la même manière que les deux fois précédentes : Nous obtenons bien le résultat voulu, le dossier est créé sur la VM et le fichier de configuration est présent.


On veut ensuite lancer docker. On modifie donc le fichier role/consul/tasks/main.yml comme suit :

   - name: "Run a 2048 in order to test"
     community.docker.docker_container:
       name: "acontainer"
       image: "alexwhen/docker-2048"


On modifie aussi polytech.yml qui a maintenant l'allure comme suit :

   ---
   - hosts: all
     roles:
       - role: base
         tags: base
       - role: ssh_key
         tags: ssh_key
       - geerlingguy.pip
       - geerlingguy.docker
       - role: consul
         tags: consul


On installe aussi sur notre vm docker et resuest :

   pip install docker
   pip install requests


Il est aussi nécessaire de gérer un problème de pull de l'image docker ( qui timeout) malgré le proxy de l'école configuré.