Skip to content
josh11226704 edited this page May 9, 2025 · 3 revisions

📚 Documentation d'Architecture - Projet Intranet Cloud Privé + Annuaire

Objectif du projet

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)

Répartition des services

Machine Nom Services
VM1 srv-main NGINX, Nextcloud, OpenLDAP, SSH, DHCP
VM2 srv-db MariaDB

Réseau

  • Sous-réseau privé : 192.168.10.0/24
  • srv-main: 192.168.10.105
  • srv-db: 192.168.10.106

Architecture

Bonnes pratiques implémentées

  • 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é

📘 VM1 : srv-main — Serveur Intranet Debian

Cette machine héberge les services principaux de la plateforme intranet.

📑 Sommaire

1. ⚙️ Configuration de la VM

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

2. 🔐 Accès et Sécurité

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 root en 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é

3. 💽 Partitionnement du disque

Méthode utilisée : Assisté avec LVM disque entier.

Partition Taille Système de fichiers Point de montage
/ ~32 Go ext4 Système principal

4. 🌐 Objectif de la VM

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)

5. 🧠 Services installés

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é - -

6. ✅ Étapes de déploiement

  1. Création de la VM sous Debian 12

    • Installation de Debian 12 avec interface GNOME
    • Configuration des ressources (CPU, RAM, disque)
    • Partitionnement (LVM assisté)
  2. Configuration du réseau en NAT avec redirection de ports
    Architecture

  3. Installation et configuration de NGINX

    sudo apt install nginx
    sudo systemctl start nginx
    sudo systemctl enable nginx
  4. 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/
  5. 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"
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  1. 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"

7. 📝 Configuration des services

Configuration NGINX pour Nextcloud

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;
}

Configuration de la connexion à la base de données distante

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,
);

Configuration du serveur DHCP

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;
} 

Configuration SSH

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 INFO

8. 🔧 Maintenance et dépannage

Dépannage courant

Problè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-server

Problè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:repair

9. 🖼️ Captures & Documentation

Vérification de la connectivité réseau

ip --br a  
ping google.com

Internet check

Vérification des services

systemctl status php8.2-fpm

Statut de PHP

systemctl status nginx

Statut de NGINX

Vérification du pare-feu UFW

sudo ufw status verbose

Statut de UFW

Vérification du service DHCP

systemctl status isc-dhcp-server

Statut du serveur DHCP

Interface Nextcloud

Interface Nextcloud


📗 VM2 : srv-db — Serveur de Base de Données

Cette machine héberge les bases de données pour la plateforme intranet.

📑 Sommaire

1. ⚙️ Configuration de la VM

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

2. 🔐 Accès et Sécurité

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é

3. 💽 Partitionnement du disque

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

4. 🌐 Objectif de la VM

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

5. 🧠 Services installés

Service Statut Port Détails
MariaDB ✅ installé 3306 Base de données pour Nextcloud
Pare-feu (UFW) ✅ configuré - Restriction d'accès

6. ✅ Étapes de déploiement

  1. Création de la VM sous Debian

    • Installation de Debian avec interface GNOME
    • Configuration des ressources (CPU, RAM, disque)
    • Partitionnement logique avec LVM
  2. 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
  3. 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
  4. 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;

7. 🔧 Maintenance et dépannage

Procédure de restauration

# 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 la base

# Optimisation de toutes les tables
mysqlcheck -o --all-databases -u admin -padmin

# Analyse des tables
mysqlcheck -a --all-databases -u admin -padmin

Dépannage courant

Problè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
top

8. 🖼️ Captures & Documentation

Vérification des services

systemctl status mariadb

Statut de MariaDB

Liste des bases de données

mysql -u admin -padmin -e "SHOW DATABASES;"

Bases de données

Test de connexion depuis srv-main

mysql -h 192.168.10.106 -u nextclouduser -pnext -e "SHOW TABLES FROM nextcloud;"

Test de connexion


📋 Annexes

Plans futurs

Pour améliorer l'infrastructure, voici les prochaines étapes envisagées:

  1. Haute disponibilité:

    • Mise en place d'un cluster MariaDB avec réplication
    • Configuration de Nextcloud en mode cluster
  2. Sécurité renforcée:

    • Déploiement de certificats SSL validés
    • Implémentation de l'authentification 2FA
    • Audit de sécurité régulier
  3. Performances:

    • Optimisation des caches Nextcloud
    • Migration vers NVMe pour les bases de données
  4. Monitoring:

    • Déploiement de Prometheus/Grafana
    • Alertes automatisées