CESI: Sécurité entreprise, maquette + support OK

This commit is contained in:
wpetit 2018-02-04 18:27:46 +01:00
parent 56066ac24f
commit e4cad32252
7 changed files with 153 additions and 35 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 81 KiB

View File

@ -19,7 +19,7 @@ William Petit - S.C.O.P. Cadoles
## Topologie d'exemple
![center 100%](./img/intranettopologie.png?)
![center 100%](./img/intranettopologie.png)
---
@ -238,6 +238,20 @@ chmod go-w <uid> <uid>/.ssh
chmod 600 <uid>/.ssh/authorized_keys
chown <uid> $HOME/.ssh/authorized_keys
```
---
## Exercice
### Objectif
Créer un compte utilisateur accessible en SSH pour un de vos collègues. L'authentification par mot de passe doit être désactivée (uniquement clé SSH) et le mot de passe du compte doit être expiré.
### Consignes
1. Créer un compte utilisateur
2. Marquer son mot de passe comme étant expiré
3. Déployer la clé SSH publique de votre collègue sur ce compte utilisateur
4. Vérifier que celui ci arrive à se connecter
---
@ -336,7 +350,7 @@ Ressouces:
## NIDS
Un NIDS ou **Network Intrusion Detection System** est un système informatique dont l'objectif est de detecter les comportements anormaux, souvent synonymes d'intrusions, **sur un réseau**.
Un NIDS ou **Network Intrusion Detection System** est un système informatique dont l'objectif est de détecter les comportements anormaux, souvent synonymes d'intrusions, **sur un réseau**.
Pour ce faire, il analyse les trames transitant sur le réseau et applique des règles de classification permettant de déclencher automatiquement des actions d'alertes ou préventives.
@ -344,7 +358,7 @@ Pour ce faire, il analyse les trames transitant sur le réseau et applique des r
## HIDS
Un HIDS ou **Host Intrusion Detection System** est un système informatique dont l'objectif est de detecter les comportements anormaux, souvent synonymes d'intrusions, **sur une machine**.
Un HIDS ou **Host Intrusion Detection System** est un système informatique dont l'objectif est de détecter les comportements anormaux, souvent synonymes d'intrusions, **sur une machine**.
Les HIDS peuvent utiliser des sources d'informations très variables en fonction de leur spécialisation: droits sur le système de fichiers, cycle de vie des processus s'exécutant sur le système, règles de pare-feu, fichiers de journalisation...
@ -399,6 +413,15 @@ Configurer fail2ban pour bannir les IP à l'origine de tentatives de connexion
---
## Aller plus loin
### Détection des intrusions réseau
- [Snort](https://www.snort.org/)
- [Suricata](https://suricata-ids.org/)
---
## Supervision de l'infrastructure
### Les facteurs d'une bonne métrique
@ -427,7 +450,7 @@ https://prometheus.io/download/#prometheus
---
## Instrumentation de l'application
## Instrumentation de l'infrastructure
### Modèle de données
### Les différents types de métriques
@ -572,8 +595,14 @@ https://prometheus.io/download/#alertmanager
## Exercice
- Sur une des machines virtuelles de la zone "Intranet", installer l'exporteur de métriques [`Node Exporter`](https://github.com/prometheus/node_exporter/) et créer un nouveau service [`systemd`](https://doc.ubuntu-fr.org/creer_un_service_avec_systemd) pour celui ci.
- Mettre en place une règle d'alerte sur votre instance Prometheus locale afin de prévenir le remplissage du disque de votre serveur via la fonction [`predict_linear()`](https://prometheus.io/docs/prometheus/latest/querying/functions/#predict_linear()) (par exemple 4 heures ?)
### Objectif
Prédire le remplissage d'un disque sur une machine de l'infrastructure.
### Consignes
1. Sur une des machines virtuelles de la zone "Intranet", installer l'exporteur de métriques [`Node Exporter`](https://github.com/prometheus/node_exporter/) et créer un nouveau service [`systemd`](https://doc.ubuntu-fr.org/creer_un_service_avec_systemd) pour celui ci.
2. Mettre en place une règle d'alerte sur votre instance Prometheus afin de prévenir le remplissage du disque de votre serveur via la fonction [`predict_linear()`](https://prometheus.io/docs/prometheus/latest/querying/functions/#predict_linear())
**Ressources**
@ -581,16 +610,31 @@ https://prometheus.io/download/#alertmanager
---
## Aller plus loin
### Prometheus
- [Listes des "exporters" disponibles pour Prometheus](https://prometheus.io/docs/instrumenting/exporters/)
- [Créer des tableaux de bord avec Grafana et les métriques Prometheus](https://prometheus.io/docs/visualization/grafana/)
### Autres systèmes de supervision
- [Monit](https://mmonit.com/monit/)
- [Nagios](https://www.nagios.org/)
- [Munin](http://munin-monitoring.org/)
- [Sensu](https://sensuapp.org/)
---
## Politique de sauvegarde
### La règle générale "3-2-1"
### Règle générale "3-2-1"
### Exemple d'outil: rsnapshot
---
## La règle générale "3-2-1"
- **3 sauvegardes au total** (minimum)
- **3 sauvegardes distinctes au minimum**
- **2 sauvegardes locales** sur des **supports physiques différents**
- **1 sauvegarde distante** dans un centre de données éloigné du secteur géographique de la société
@ -662,26 +706,24 @@ rsync -av \
```
---
## Exercice
### Objectif
Mettre en place la sauvegarde du poste `workstation-developer-linux` via le serveur `intranet-backup`
### Consignes
1. Créer un utilisateur dédié à la sauvegarde sur la machine `workstation-developer-linux`
2. Créer une clé SSH sur la machine `intranet-backup` et la déployer sur la machine `workstation-developer-linux`
3. Configurer `rsnapshot` sur la machine `intranet-backup` pour qu'il sauvegarde le répertoire `/home/developer`
---
## Aller plus loin
### Détection des intrusions réseau
- [Snort](https://www.snort.org/)
- [Suricata](https://suricata-ids.org/)
### Supervision
- [Nagios](https://www.nagios.org/)
- [Monit](https://mmonit.com/monit/)
### Centralisation et analyse des journaux
- [La suite ELK](https://www.elastic.co/fr/products)
- [Munin](http://munin-monitoring.org/)
### Sauvegarde
- [Bareos](https://www.bareos.org/en/)
- [Bareos - Système de sauvegarde avancé](https://www.bareos.org/en/)
- [duplicity - Sauvegardes chiffrées via rsync](http://duplicity.nongnu.org/)
---
@ -696,6 +738,7 @@ rsync -av \
### Cryptographie à clé publique/privée
### GPG
### SSL/TLS
---
@ -830,17 +873,89 @@ Les utilisateurs de GPG verront alors votre clé comme révoquée.
## Exercice
- Générer votre propre clé GPG pour votre adresse courriel.
- Faire signer votre clé par au moins 1 de vos collègues dans la salle
- Configurer votre client courriel pour qu'il utilise votre clé GPG
- Exemple: [Thunderbird - Plugin Enigmail](https://www.enigmail.net/index.php/en/)
### Objectif
- Rechercher et récupérer la clé associée à l'adresse wpetit@cadoles.com
- Envoyer un courriel chiffré et signé par votre clé à wpetit@cadoles.com
Créer votre propre paire de clés GPG et envoyer un courriel chiffré et signé.
### Consignes
1. Générer votre propre clé GPG pour votre adresse courriel.
2. Faire signer votre clé par au moins 1 de vos collègues dans la salle
3. Configurer votre client courriel pour qu'il utilise votre clé GPG . Exemple: [Thunderbird - Plugin Enigmail](https://www.enigmail.net/index.php/en/)
4. Rechercher et récupérer la clé associée à l'adresse wpetit@cadoles.com
5. Envoyer un courriel chiffré et signé par votre clé à wpetit@cadoles.com
---
## Créer une clé GPG
## SSL/TLS
---
## Générer un certificat autosigné
```bash
openssl req \
-x509 \
-newkey rsa:4096 \
-keyout key.pem \
-out cert.pem \
-days 365 \
-nodes
```
---
## Utilisation du certificat avec Apache2
```apache
# /etc/apache2/sites-enabled/my-site.conf
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.example.com
Redirect / https://secure.example.com/
</VirtualHost>
<VirtualHost _default_:443>
ServerName secure.example.com
DocumentRoot /var/www/html
SSLEngine On
SSLCertificateFile /path/to/cert.pem
SSLCertificateKeyFile /path/to/key.pem
# etc...
</VirtualHost>
```
---
## Tester la configuration TLS/SSL
Avec le projet [TestSSL](https://testssl.sh/)
```bash
# Récupération du script
wget -O- https://testssl.sh/ > testssl.sh
# Rendre exécutable le script
chmod +x ./testssl.sh
# Tester une URL
./testssl.sh <URL>
```
---
## Exercice
### Objectif
Configurer l'application Wordpress pour qu'elle soient utilisable en HTTPS
### Consignes
1. Générer un certificat autosigné
2. Configurer le service Apache2 sur la machine `extranet-wordpress` afin qu'elle écoute sur le port 443 (HTTPS) et que le serveur utilise votre certificat
3. Mettre en place une redirection pour que les utilisateurs soient redirigés automatiquement vers l'adresse en HTTPS
---

View File

@ -64,7 +64,7 @@ Vagrant.configure("2") do |config|
config.vm.define "workstation-developer-linux" do |workstation|
workstation.vm.box = "ubuntu/xenial64"
workstation.vm.hostname = "developer-ws1"
workstation.vm.hostname = "developer-workstation"
workstation.vm.network "private_network", ip: "192.168.201.10", virtualbox_intnet: "developer", auto_config: false
workstation.vm.provision :shell, path: "provisioning/workstation/configure_desktop.sh"
workstation.vm.provision :reload

View File

@ -2,5 +2,5 @@
set -xe
ACCOUNT_PASSWORD='$6$gMhMIYtz$tIY5w9xjFOJYgtrP2QY0TYfTPm8NQTh0JXaAL7O3TaJ8fAo8AmARaTwKFZgnUVMZKzMOnQOUVRtMtBKkYIS/U1' // passwd: developer
ACCOUNT_PASSWORD='$6$gMhMIYtz$tIY5w9xjFOJYgtrP2QY0TYfTPm8NQTh0JXaAL7O3TaJ8fAo8AmARaTwKFZgnUVMZKzMOnQOUVRtMtBKkYIS/U1' # passwd: developer
useradd -m -p "$ACCOUNT_PASSWORD" -s /bin/bash developer

View File

@ -43,6 +43,9 @@ ufw route allow in on $DEVELOPER_IFACE out on $MGMT_IFACE to any port 443 from $
ufw route allow in on $DEVELOPER_IFACE out on $EXTRANET_IFACE to any from $DEVELOPER_NETWORK\
comment "DEVELOPER -> * EXTRANET"
ufw route allow in on $DEVELOPER_IFACE out on $INTRANET_IFACE to any from $DEVELOPER_NETWORK\
comment "DEVELOPER -> * INTRANET"
# On autorise les connexions depuis la machine intranet-supervision vers
# la machine extranet-wordpress sur le port 9117
ufw route allow in on $INTRANET_IFACE out on $EXTRANET_IFACE to 192.168.202.10 port 9117 from 192.168.203.20\