Présentation du projet
Ce site est un projet de démonstration réalisé par RX-TECHPRO pour illustrer concrètement les compétences en administration serveur Linux. Il s'agit d'un site vitrine fictif — la Clinique Lumière — déployé sur un vrai serveur VPS en production, avec une configuration identique à ce qui serait mis en place pour un client réel.
L'objectif de cette documentation est de détailler chaque couche de configuration utilisée : sécurité réseau, serveur web, base de données, monitoring et backup. Chaque choix technique est expliqué et justifié.
Nom de domaine & DNS
Le nom de domaine rx-techpro.com a été acheté sur Namecheap.
Deux sous-domaines sont configurés : rx-techpro.com pour le site principal
et demo.rx-techpro.com pour ce site de démonstration.
La configuration DNS consiste à créer des enregistrements A qui pointent chaque domaine vers l'adresse IP publique du VPS. Sans cet enregistrement, aucun visiteur ne peut trouver le serveur depuis internet.
# Enregistrement principal @ A 157.xxx.xxx.xxx # Sous-domaine www www A 157.xxx.xxx.xxx # Sous-domaine démo demo A 157.xxx.xxx.xxx
Accès SSH sécurisé
SSH est le protocole qui permet d'administrer le serveur à distance depuis un terminal. Par défaut, SSH écoute sur le port 22 — un port connu de tous les bots qui scannent internet en permanence à la recherche de serveurs vulnérables.
Sur ce serveur, SSH a été déplacé sur le port 2222. Ce simple changement élimine la quasi-totalité des tentatives de connexion automatisées, car les bots ciblent le port 22 par défaut et ne testent pas les ports non standards.
L'authentification par mot de passe est désactivée. Seule l'authentification par clé cryptographique ed25519 est acceptée. Une clé ed25519 est mathématiquement impossible à deviner — même avec des milliards de tentatives par seconde, il faudrait des millions d'années pour la trouver par force brute.
Port 2222 PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
Pare-feu UFW
UFW (Uncomplicated Firewall) est le pare-feu configuré sur ce serveur. Son rôle est simple : bloquer tout trafic entrant par défaut, et n'autoriser que les ports strictement nécessaires au fonctionnement du serveur.
Trois ports sont ouverts uniquement : 2222 pour l'administration SSH, 80 pour le trafic HTTP (redirigé automatiquement vers HTTPS), et 443 pour le trafic HTTPS sécurisé. Tout autre port est bloqué — base de données, services internes, etc.
Fail2ban
Fail2ban surveille les logs du serveur en temps réel. Dès qu'une adresse IP échoue plusieurs fois à se connecter en SSH, Fail2ban la bannit automatiquement en ajoutant une règle de blocage dans UFW pour une durée configurable.
Ce mécanisme est indispensable car internet est constamment scanné par des bots qui testent des millions de combinaisons identifiant/mot de passe chaque jour. Sans Fail2ban, ces tentatives continuent indéfiniment.
Certificat SSL & HTTPS
Le certificat SSL est ce qui permet au cadenas vert d'apparaître dans le navigateur et au site d'être accessible en HTTPS. Sans certificat SSL, toutes les données échangées entre le visiteur et le serveur transitent en clair sur internet — lisibles par n'importe qui.
Le certificat utilisé ici est fourni gratuitement par Let's Encrypt via l'outil Certbot. Il est valide 90 jours et se renouvelle automatiquement via une tâche cron — aucune intervention manuelle n'est nécessaire.
Un seul certificat couvre les deux domaines : rx-techpro.com et demo.rx-techpro.com. Le trafic HTTP (port 80) est automatiquement redirigé vers HTTPS (port 443) — un visiteur qui tape l'adresse sans "https://" est redirigé sans s'en rendre compte.
VirtualHost Apache
Apache est le serveur web installé sur ce VPS. Son rôle est de recevoir les requêtes HTTP/HTTPS des visiteurs et de leur renvoyer les pages du site. Activer Apache ne suffit pas — sans VirtualHost, aucun site ne peut s'afficher.
Un VirtualHost est un fichier de configuration dans /etc/apache2/sites-available/
qui dit à Apache : "pour ce nom de domaine, sers les fichiers qui se trouvent dans ce dossier".
C'est ce qui permet d'héberger plusieurs sites sur un seul serveur.
Le VirtualHost configuré ici inclut plusieurs couches de sécurité directement dans la configuration Apache :
# Headers de sécurité HTTP Header always set X-Content-Type-Options "nosniff" Header always set X-Frame-Options "SAMEORIGIN" Header always set X-XSS-Protection "1; mode=block" Header always set Referrer-Policy "strict-origin-when-cross-origin" Header always set Strict-Transport-Security "max-age=31536000" Header always set Content-Security-Policy "default-src 'self'..." # Cache navigateur ExpiresActive On ExpiresByType image/png "access plus 1 month" ExpiresByType text/css "access plus 1 month" # Blocage des fichiers sensibles FilesMatch "(\.env|\.git|wp-config\.php)" Require all denied
Permissions fichiers & dossiers
Sous Linux, chaque fichier et dossier a des permissions qui définissent qui peut lire, modifier ou exécuter ce fichier. Ces permissions sont représentées par des chiffres : 7 = lire + écrire + exécuter, 5 = lire + exécuter, 0 = aucun accès.
Les trois chiffres correspondent à trois niveaux : le propriétaire, le groupe, et les autres (tout le monde).
# Dossiers chmod 750 /var/www/demo.rx-tech/ # Fichiers chmod 640 /var/www/demo.rx-tech/fichier.php # Propriétaire Apache chown -R www-data:www-data /var/www/demo.rx-tech/
Configuration PHP.ini
PHP est le langage utilisé par WordPress et la majorité des sites dynamiques.
Le fichier php.ini contrôle le comportement de PHP sur le serveur.
Par défaut, certaines options sont activées et peuvent représenter des risques de sécurité.
# Masquer la version PHP expose_php = Off # Désactiver l'affichage des erreurs display_errors = Off log_errors = On # Limiter les uploads upload_max_filesize = 10M post_max_size = 12M # Limiter l'exécution max_execution_time = 30 memory_limit = 256M
MySQL — Base de données
La base de données stocke tout le contenu du site WordPress : articles, pages, utilisateurs, options de configuration. Elle est gérée par MySQL 8.0.
Plutôt que de donner tous les droits à un seul utilisateur administrateur, un utilisateur dédié est créé pour chaque site avec uniquement les privilèges nécessaires à son fonctionnement.
# Créer la base avec encodage UTF-8 CREATE DATABASE clinique_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # Créer un utilisateur dédié CREATE USER 'clinique_user'@'localhost' IDENTIFIED BY 'mot_de_passe_fort'; # Privilèges minimaux uniquement GRANT SELECT, INSERT, UPDATE, DELETE ON clinique_db.* TO 'clinique_user'@'localhost';
Monitoring & Alertes email
Un serveur sans monitoring est un serveur aveugle. Le monitoring surveille en permanence l'état du serveur et envoie une alerte email dès qu'un seuil critique est atteint ou qu'un service tombe.
Un script bash personnalisé rxtech-monitor.sh vérifie régulièrement :
l'utilisation du CPU, de la RAM, de l'espace disque,
et l'état des services critiques (Apache, MySQL, Fail2ban).
Si un seuil est dépassé ou qu'un service est arrêté, une alerte est envoyée par email.
Backup automatique
Le backup est la dernière ligne de défense. En cas de piratage, de fausse manipulation ou de panne matérielle, un backup récent permet de restaurer le site en quelques minutes. Sans backup, la perte de données est définitive.
Un script bash backup-system.sh effectue automatiquement une sauvegarde complète
des fichiers du site et de la base de données. Les backups sont compressés en archives
.tar.gz et uploadés vers Google Drive via l'outil rclone.
Une rotation automatique supprime les anciens backups pour éviter la saturation du disque.
WordPress — Hardening
WordPress est le CMS le plus utilisé au monde — et donc le plus ciblé par les attaquants. Une installation WordPress par défaut comporte plusieurs vulnérabilités facilement exploitables si elle n'est pas correctement configurée.
# Préfixe de tables personnalisé $table_prefix = 'rxtech_'; # Désactiver l'éditeur de fichiers define('DISALLOW_FILE_EDIT', true); # Désactiver WP-Cron natif define('DISABLE_WP_CRON', true); # Limiter les révisions define('WP_POST_REVISIONS', 3);
L'URL de connexion WordPress par défaut /wp-admin est connue de tous les bots.
Elle a été remplacée par une URL personnalisée configurée via Kadence Security,
rendant la page de connexion invisible aux scanners automatiques.
WordPress — Extensions installées
Seules 4 extensions sont installées sur ce site — le strict minimum nécessaire. Chaque plugin supplémentaire est une surface d'attaque potentielle et ralentit le site.
Kadence Security Basic — Sécurité WordPress. Gère la protection contre le brute force, l'authentification à deux facteurs (2FA), l'URL de connexion personnalisée, et la surveillance de l'intégrité des fichiers.
UpdraftPlus — Backup et restauration WordPress. Sauvegarde automatiquement la base de données et les fichiers WordPress vers Google Drive.
WP Super Cache — Cache WordPress. Génère des fichiers HTML statiques à partir des pages WordPress dynamiques, ce qui améliore considérablement la vitesse d'affichage.
Yoast SEO — Référencement naturel. Permet de configurer les métadonnées, générer le sitemap XML et optimiser le contenu pour les moteurs de recherche.
Démo vs Production
Récapitulatif des différences entre ce site de démonstration et une configuration de production réelle pour un client.
| Composant | Démonstration | Production réelle |
|---|---|---|
| Serveur mail | Mailtrap (sandbox) | Postfix / SMTP réel |
| Formulaires | Non fonctionnels | Fonctionnels avec vrai SMTP |
| Stockage backup | Google Drive | Hetzner Storage Box / S3 |
| Cache | WP Super Cache | WP Super Cache / Redis |
| SEO | Yoast non configuré | Yoast configuré + sitemap |
| Domaine | demo.rx-techpro.com | Domaine du client |
| Fail2ban jails | SSH uniquement | SSH + Apache + WordPress |
| Alertes email | Mailtrap inbox | Email client en temps réel |