CESI: Sécurité entreprise, maquette + support OK
This commit is contained in:
parent
13e4a95892
commit
10e0f69dba
Binary file not shown.
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 81 KiB |
|
@ -19,7 +19,7 @@ William Petit - S.C.O.P. Cadoles
|
||||||
|
|
||||||
## Topologie d'exemple
|
## 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
|
chmod 600 <uid>/.ssh/authorized_keys
|
||||||
chown <uid> $HOME/.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
|
## 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.
|
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
|
## 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...
|
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
|
## Supervision de l'infrastructure
|
||||||
|
|
||||||
### Les facteurs d'une bonne métrique
|
### 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
|
### Modèle de données
|
||||||
### Les différents types de métriques
|
### Les différents types de métriques
|
||||||
|
@ -572,8 +595,14 @@ https://prometheus.io/download/#alertmanager
|
||||||
|
|
||||||
## Exercice
|
## 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.
|
### Objectif
|
||||||
- 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 ?)
|
|
||||||
|
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**
|
**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
|
## Politique de sauvegarde
|
||||||
|
|
||||||
### La règle générale "3-2-1"
|
### Règle générale "3-2-1"
|
||||||
### Exemple d'outil: rsnapshot
|
### Exemple d'outil: rsnapshot
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## La règle générale "3-2-1"
|
## 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**
|
- **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é
|
- **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
|
## Aller plus loin
|
||||||
|
|
||||||
### Détection des intrusions réseau
|
- [Bareos - Système de sauvegarde avancé](https://www.bareos.org/en/)
|
||||||
|
- [duplicity - Sauvegardes chiffrées via rsync](http://duplicity.nongnu.org/)
|
||||||
- [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/)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -696,6 +738,7 @@ rsync -av \
|
||||||
|
|
||||||
### Cryptographie à clé publique/privée
|
### Cryptographie à clé publique/privée
|
||||||
### GPG
|
### GPG
|
||||||
|
### SSL/TLS
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -830,17 +873,89 @@ Les utilisateurs de GPG verront alors votre clé comme révoquée.
|
||||||
|
|
||||||
## Exercice
|
## Exercice
|
||||||
|
|
||||||
- Générer votre propre clé GPG pour votre adresse courriel.
|
### Objectif
|
||||||
- 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/)
|
|
||||||
|
|
||||||
- Rechercher et récupérer la clé associée à l'adresse wpetit@cadoles.com
|
Créer votre propre paire de clés GPG et envoyer un courriel chiffré et signé.
|
||||||
- Envoyer un courriel chiffré et signé par votre clé à wpetit@cadoles.com
|
|
||||||
|
### 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
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -64,7 +64,7 @@ Vagrant.configure("2") do |config|
|
||||||
|
|
||||||
config.vm.define "workstation-developer-linux" do |workstation|
|
config.vm.define "workstation-developer-linux" do |workstation|
|
||||||
workstation.vm.box = "ubuntu/xenial64"
|
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.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 :shell, path: "provisioning/workstation/configure_desktop.sh"
|
||||||
workstation.vm.provision :reload
|
workstation.vm.provision :reload
|
||||||
|
|
|
@ -2,5 +2,5 @@
|
||||||
|
|
||||||
set -xe
|
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
|
useradd -m -p "$ACCOUNT_PASSWORD" -s /bin/bash developer
|
||||||
|
|
|
@ -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\
|
ufw route allow in on $DEVELOPER_IFACE out on $EXTRANET_IFACE to any from $DEVELOPER_NETWORK\
|
||||||
comment "DEVELOPER -> * EXTRANET"
|
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
|
# On autorise les connexions depuis la machine intranet-supervision vers
|
||||||
# la machine extranet-wordpress sur le port 9117
|
# 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\
|
ufw route allow in on $INTRANET_IFACE out on $EXTRANET_IFACE to 192.168.202.10 port 9117 from 192.168.203.20\
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue