-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Créer une plateforme interne d'entreprise intégrant :
- Cloud privé (Nextcloud)
- Serveur web (NGINX)
- Annuaire (OpenLDAP)
- Interface d'accès centralisé
- Services réseau essentiels (DHCP, SSH)
| Machine | Nom | Services |
|---|---|---|
| VM1 | srv-main |
NGINX, Nextcloud, OpenLDAP, SSH, DHCP |
| VM2 | srv-db |
MariaDB |
- Sous-réseau privé :
192.168.10.0/24 -
srv-main:192.168.10.105 -
srv-db:192.168.10.106
- Séparation base de données sur une VM dédiée
- Certificat SSL (auto-signé en développement, Let's Encrypt en production)
- Utilisation d'un annuaire centralisé (OpenLDAP)
- Sécurisation des communications inter-VM
- Pare-feu avec règles restrictives sur chaque VM
- Service DHCP centralisé pour attribution d'adresses IP dynamiques
- Accès SSH sécurisé avec authentification par clé
Cette machine héberge les services principaux de la plateforme intranet.
- 1. Configuration de la VM
- 2. Accès et Sécurité
- 3. Partitionnement du disque
- 4. Objectif de la VM
- 5. Services installés
- 6. Étapes de déploiement
- 7. Configuration des services
- 8. Maintenance et dépannage
- 9. Captures et Documentation
| Paramètre | Valeur |
|---|---|
| Hyperviseur | VMware Workstation Pro |
| Type de réseau | NAT (port forwarding) |
| Nombre de cœurs CPU | 2 |
| Mémoire RAM | 2048 Mo (2 Go) |
| Contrôleur I/O | LSI Logic SAS |
| Type de disque | SCSI |
| Format de stockage | Fichier unique |
| Taille du disque | 32 Go |
| Démarrage | GRUB sur /dev/sda
|
| Utilisateur/Service | Identifiant | Mot de passe/Méthode |
|---|---|---|
| Superutilisateur Linux | root |
root (À changer en production) |
| Nextcloud (admin) | admin |
admin (À changer en production) |
| LDAP (admin) | admin |
admin (À changer en production) |
| Utilisateur standard | john |
john (À changer en production) |
| Connexion MariaDB (depuis Nextcloud) | nextclouduser |
next (À changer en production) |
| SSH | admin |
Authentification par clé |
🔒 Recommandations de sécurité mises en place :
- Gestionnaire de mots de passe sécurisé (Bitwarden)
- Désactivation de
rooten SSH et activation de l'authentification par clé - Pare-feu UFW configuré avec des règles restrictives
- Communication chiffrée entre services (SSL/TLS)
- Mots de passe complexes avec rotation périodique
- Mise à jour automatique des paquets de sécurité
Méthode utilisée : Assisté avec LVM disque entier.
| Partition | Taille | Système de fichiers | Point de montage |
|---|---|---|---|
/ |
~32 Go | ext4 | Système principal |
Cette machine virtuelle héberge un serveur intranet pour simuler un environnement réseau d'entreprise.
- Serveur web avec NGINX
- Cloud personnel avec Nextcloud
- Gestion des utilisateurs via LDAP
- Serveur DHCP pour l'attribution dynamique d'adresses IP
- Accès sécurisé via SSH
- Mode NAT pour interconnexion entre VM (cf. schéma réseau)
| Service | Statut | Port | URL d'accès |
|---|---|---|---|
| NGINX | ✅ installé | 80, 443 | http://192.168.10.105, https://192.168.10.105 |
| Nextcloud | ✅ installé | 443 | https://192.168.10.105/ |
| OpenLDAP | ✅ installé | 389, 636 | ldap://192.168.10.105 |
| SSH | ✅ installé | 22 | ssh://192.168.10.105 |
| DHCP | ✅ installé | 67/68 (UDP) | - |
| Pare-feu (UFW) | ✅ configuré | - | - |
-
Création de la VM sous Debian 12
- Installation de Debian 12 avec interface GNOME
- Configuration des ressources (CPU, RAM, disque)
- Partitionnement (LVM assisté)
-
Configuration du réseau en NAT avec redirection de ports

-
Installation et configuration de NGINX
sudo apt install nginx sudo systemctl start nginx sudo systemctl enable nginx -
Installation de Nextcloud
# Installation des dépendances sudo apt install nginx mariadb-server php8.2-fpm \ php8.2-mysql php8.2-gd php8.2-json php8.2-curl \ php8.2-mbstring php8.2-intl php8.2-xml php8.2-zip \ php8.2-bz2 php8.2-imagick wget unzip # Téléchargement et installation de Nextcloud wget https://download.nextcloud.com/server/releases/nextcloud-31.0.4.1.zip unzip nextcloud-31.0.4.1.zip sudo mv nextcloud /var/www/ sudo chown -R www-data:www-data /var/www/nextcloud/ sudo chmod -R 755 /var/www/nextcloud/
-
Configuration des fichiers partagés Nextcloud
# Ajout d'un dossier à partager et rafraîchissement /var/nextcloud-data/admin/files sudo -u www-data php /var/www/nextcloud/occ files:scan --path="admin/files"
-
Installation et configuration de LDAP
# Installation des paquets LDAP sudo apt install slapd ldap-utils php-ldap # Configuration initiale du serveur LDAP sudo dpkg-reconfigure slapd # Redémarrage du service PHP-FPM sudo systemctl restart php8.2-fpm
-
Installation et configuration du serveur DHCP
# Installation du serveur DHCP sudo apt install isc-dhcp-server # Configuration de l'interface d'écoute sudo nano /etc/default/isc-dhcp-server # Ajouter: INTERFACESv4="ens33" # Configuration du service DHCP sudo nano /etc/dhcp/dhcpd.conf # Redémarrage du service DHCP sudo systemctl restart isc-dhcp-server sudo systemctl enable isc-dhcp-server
-
Configuration de SSH
# Installation si nécessaire sudo apt install openssh-server # Configuration sécurisée sudo nano /etc/ssh/sshd_config # Génération des clés SSH pour l'authentification ssh-keygen -t rsa -b 4096 # Redémarrage du service SSH sudo systemctl restart ssh
-
Configuration du pare-feu UFW
# Installation du pare-feu sudo apt install ufw # Configuration des règles de base sudo ufw default deny incoming sudo ufw default allow outgoing # Ouverture des ports nécessaires sudo ufw allow 22/tcp # SSH sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS sudo ufw allow 389/tcp # LDAP sudo ufw allow 636/tcp # LDAPS sudo ufw allow 67/udp # DHCP sudo ufw allow 68/udp # DHCP sudo ufw allow from 192.168.10.106 to any port 3306 # MariaDB depuis srv-db # Activation du pare-feu sudo ufw enable # Vérification des règles sudo ufw status verbose
-
Création d'un utilisateur LDAP
Fichier/var/lib/ldif/exemple.ldif:
dn: uid=testuser,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
cn: Test User
sn: User
uid: testuser
uidNumber: 10001
gidNumber: 100
homeDirectory: /home/testuser
loginShell: /bin/bash
userPassword: test123
Ajout de l'utilisateur dans LDAP :
ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f testuser.ldif- Configuration SSL pour HTTPS
# Création d'un certificat SSL auto-signé
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/nextcloud.key \
-out /etc/ssl/certs/nextcloud.crt \
-subj "/C=FR/ST=France/L=Paris/O=Nextcloud/CN=192.168.10.105"Fichier /etc/nginx/sites-available/nextcloud:
# Redirection HTTP vers HTTPS
server {
listen 80;
server_name nextcloud.example.com;
return 301 https://$host$request_uri;
}
# Serveur HTTPS sécurisé avec HSTS
server {
listen 443 ssl http2;
server_name nextcloud.example.com;
root /var/www/nextcloud;
index index.php index.html /index.php$request_uri;
# Certificats SSL
ssl_certificate /etc/ssl/certs/nextcloud.crt;
ssl_certificate_key /etc/ssl/private/nextcloud.key;
# Ajout de l'en-tête HSTS pour renforcer la sécurité (HTTP Strict Transport Security)
add_header Strict-Transport-Security "max-age=15552000; includeSubDomains; preload" always;
access_log /var/log/nginx/nextcloud.access.log;
error_log /var/log/nginx/nextcloud.error.log;
# Configuration de base du site
location / {
try_files $uri $uri/ /index.php?$args;
}
# Redirige les requêtes vers /manual pour éviter les boucles de redirection
location ^~ /manual {
return 404;
}
# Configuration pour PHP
location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|.+\.php)(?:$|/) {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
limit_except GET POST OPTIONS PROPFIND {
deny all;
}
}
# Sécurisation contre l'accès aux fichiers .htaccess
location ~ /\.ht {
deny all;
}
# Configuration WebDAV
location /remote.php/dav/ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root/remote.php;
fastcgi_param PATH_INFO /dav;
}
# Empêcher l'accès aux fichiers de configuration sensibles
location ~* \.(db|sql|tar|gz|zip|rar|tar.gz|log|bak|old)$ {
deny all;
}
}
# Types MIME manquants
types {
application/javascript mjs;
text/css css;
application/json json;
application/xml xml;
image/png png;
image/jpeg jpeg;
application/font-woff2 woff2;
}Fichier /var/www/nextcloud/config/config.php:
<?php
$CONFIG = array (
'instanceid' => 'oczwvd2ulbxe',
'passwordsalt' => 'oVpwW+6Fzqh5SV0A5/YRuzrKFEQgt7',
'secret' => '11t5rroAnzHlaHKVDUz415CBc/+KCb8eqfQneQ0qPcwfBXpo',
'trusted_domains' =>
array (
0 => 'localhost',
1 => '127.0.0.1',
2 => '192.168.10.105',
3 => 'nextcloud.example.com',
),
'datadirectory' => '/var/nextcloud-data',
'dbtype' => 'mysql',
'version' => '31.0.4.1',
'overwrite.cli.url' => 'https://nextcloud.example.com',
'dbname' => 'nextcloud',
'dbhost' => '192.168.10.106',
'dbport' => '',
'dbtableprefix' => 'oc_',
'mysql.utf8mb4' => true,
'dbuser' => 'nextclouduser',
'dbpassword' => 'next',
'installed' => true,
'ldapProviderFactory' => 'OCA\\User_LDAP\\LDAPProviderFactory',
'maintenance' => false,
'maintenance_window_start' => 3,
);Fichier /etc/default/isc-dhcp-server:
# Sur quelle interface le serveur DHCP doit écouter
INTERFACESv4="ens33"
INTERFACESv6=""Fichier /etc/dhcp/dhcpd.conf:
# Configuration globale
option domain-name "nextcloud.example.com";
option domain-name-servers 192.168.10.105, 8.8.8.8;
option routers 192.168.10.2;
default-lease-time 86400;
max-lease-time 172800;
# Configuration du sous-réseau
subnet 192.168.10.0 netmask 255.255.255.0 {
option broadcast-address 192.168.10.255;
option subnet-mask 255.255.255.0;
}
# Réservations d'adresses IP fixes
host vm-db {
hardware ethernet 00:0c:29:0e:5d:44;
fixed-address 192.168.10.106;
} Fichier /etc/ssh/sshd_config:
# Configuration SSH sécurisée
Port 22
AddressFamily inet
ListenAddress 0.0.0.0
# Authentification
LoginGraceTime 30
PermitRootLogin no
StrictModes yes
MaxAuthTries 3
MaxSessions 3
# Options d'authentification
PubkeyAuthentication no
PasswordAuthentication yes
PermitEmptyPasswords no
ChallengeResponseAuthentication no
# Autres options de sécurité
X11Forwarding no
PrintMotd no
UsePAM yes
AllowTcpForwarding no
AllowAgentForwarding no
PermitUserEnvironment no
# Logging
SyslogFacility AUTH
LogLevel INFOProblèmes de connectivité:
# Vérification de la connectivité vers la base de données
telnet 192.168.10.106 3306
# Vérification des règles de pare-feu
sudo ufw status
# Vérification de l'état des services
systemctl status nginx php8.2-fpm slapd isc-dhcp-serverProblèmes avec Nextcloud:
# Vérification des logs
tail -f /var/log/nginx/nextcloud.error.log
# Vérification de la configuration
sudo -u www-data php /var/www/nextcloud/occ status
sudo -u www-data php /var/www/nextcloud/occ maintenance:repairip --br a
ping google.com
systemctl status php8.2-fpm
systemctl status nginx
sudo ufw status verbose
systemctl status isc-dhcp-server

Cette machine héberge les bases de données pour la plateforme intranet.
- 1. Configuration de la VM
- 2. Accès et Sécurité
- 3. Partitionnement du disque
- 4. Objectif de la VM
- 5. Services installés
- 6. Étapes de déploiement
- 7. Maintenance et dépannage
- 8. Captures et Documentation
| Paramètre | Valeur |
|---|---|
| Hyperviseur | VMware Workstation Pro |
| Type de réseau | NAT |
| Nombre de cœurs CPU | 2 |
| Mémoire RAM | 2048 Mo (2 Go) |
| Contrôleur I/O | LSI Logic SAS |
| Type de disque | SCSI |
| Format de stockage | Fichier unique |
| Taille du disque | 20 Go |
| Interface | GNOME |
| Démarrage | GRUB sur /dev/sda
|
| Utilisateur/Service | Identifiant | Mot de passe |
|---|---|---|
| Superutilisateur Linux | root |
root (À changer en production) |
| Utilisateur standard | alice |
alice (À changer en production) |
| MariaDB (admin) | admin |
admin (À changer en production) |
| MariaDB (nextcloud) | nextclouduser |
next (À changer en production) |
🔒 Recommandations de sécurité mises en place :
- Gestionnaire de mots de passe sécurisé
- Désactivation de l'accès direct à MariaDB depuis l'externe sauf pour
srv-main - Pare-feu UFW configuré pour restreindre l'accès aux ports
- Mise à jour automatique des paquets de sécurité
Méthode utilisée : Assisté avec LVM, /home.
| Partition | Taille | Système de fichiers | Point de montage |
|---|---|---|---|
/ |
15 Go | ext4 | Système |
/home |
5 Go | ext4 | Données utilisateurs |
Cette machine virtuelle héberge une base de données MariaDB dédiée, séparée du serveur principal pour :
- Améliorer la sécurité par isolation des services
- Optimiser les performances de la base de données
- Faciliter la gestion et les sauvegardes indépendantes
- Permettre la mise à l'échelle horizontale
- Réduire le risque de point unique de défaillance
| Service | Statut | Port | Détails |
|---|---|---|---|
| MariaDB | ✅ installé | 3306 | Base de données pour Nextcloud |
| Pare-feu (UFW) | ✅ configuré | - | Restriction d'accès |
-
Création de la VM sous Debian
- Installation de Debian avec interface GNOME
- Configuration des ressources (CPU, RAM, disque)
- Partitionnement logique avec LVM
-
Installation de MariaDB
# Installation de MariaDB sudo apt install mariadb-server # Sécurisation de l'installation sudo mysql_secure_installation # Configuration pour l'accès distant sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf # Modifier la ligne bind-address = 127.0.0.1 en bind-address = 0.0.0.0 # Redémarrage du service sudo systemctl restart mariadb
-
Configuration du pare-feu UFW
# Installation de UFW sudo apt install ufw # Configuration des règles de base sudo ufw default deny incoming sudo ufw default allow outgoing # Ouverture des ports nécessaires - uniquement MariaDB pour srv-main sudo ufw allow from 192.168.10.105 to any port 3306 # Activation du pare-feu sudo ufw enable # Vérification des règles sudo ufw status verbose
-
Création de la base de données et des utilisateurs pour Nextcloud
# Connexion à MariaDB sudo mysql -u root -p # Création de la base de données CREATE DATABASE nextcloud; # Création d'un utilisateur avec accès distant CREATE USER 'nextclouduser'@'%' IDENTIFIED BY 'next'; GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'%'; # Création d'un utilisateur administrateur CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES; EXIT;
# Restauration de toutes les bases
mysql -u admin -padmin < /var/backups/mariadb/mariadb-all-YYYY-MM-DD.sql
# Restauration de la base Nextcloud uniquement
mysql -u admin -padmin nextcloud < /var/backups/mariadb/nextcloud-YYYY-MM-DD.sql# Optimisation de toutes les tables
mysqlcheck -o --all-databases -u admin -padmin
# Analyse des tables
mysqlcheck -a --all-databases -u admin -padminProblèmes de connectivité:
# Vérification de l'état du service
systemctl status mariadb
# Vérification des connexions actives
netstat -tlpn | grep mysql
# Vérification du pare-feu
sudo ufw status
# Test de connexion depuis srv-main
mysql -h 192.168.10.106 -u nextclouduser -pnext -e "SHOW DATABASES;"Problèmes de performance:
# Surveillance des requêtes lentes
tail -f /var/log/mysql/mariadb-slow.log
# Vérification de l'utilisation des ressources
topsystemctl status mariadb
mysql -u admin -padmin -e "SHOW DATABASES;"
mysql -h 192.168.10.106 -u nextclouduser -pnext -e "SHOW TABLES FROM nextcloud;"
Pour améliorer l'infrastructure, voici les prochaines étapes envisagées:
-
Haute disponibilité:
- Mise en place d'un cluster MariaDB avec réplication
- Configuration de Nextcloud en mode cluster
-
Sécurité renforcée:
- Déploiement de certificats SSL validés
- Implémentation de l'authentification 2FA
- Audit de sécurité régulier
-
Performances:
- Optimisation des caches Nextcloud
- Migration vers NVMe pour les bases de données
-
Monitoring:
- Déploiement de Prometheus/Grafana
- Alertes automatisées