Tutoriel : Sécuriser un VPS avec SSH, nftables, Fail2ban, et Sysctl sur Debian 13 (Bonus : WireGuard)
Table des matières
- Introduction
- Configuration de l'accès SSH
- Mise en place de nftables
- Protection avec Fail2ban
- Optimisation des paramètres système avec Sysctl
- Bonus : Configuration de WireGuard
- Vérifications et bonnes pratiques
- Conclusion
1. Introduction
Introduction
Dans le monde numérique d'aujourd'hui, la sécurité des serveurs privés virtuels (VPS) est plus cruciale que jamais. Un VPS mal configuré ou insuffisamment sécurisé peut devenir la cible de cyberattaques, compromettant ainsi vos données et celles de vos utilisateurs. Ce tutoriel a pour objectif de vous guider à travers le processus de sécurisation d'un VPS sous Debian 13 en utilisant des outils et des technologies modernes tels que SSH, nftables, Fail2Ban, sysctl, et un bonus sur WireGuard pour établir des connexions VPN sécurisées.
Importance de la sécurité sur un VPS
La sécurité sur un VPS ne se limite pas à la protection des données, elle est essentielle pour garantir la disponibilité et l'intégrité des services que vous fournissez. Voici quelques raisons pour lesquelles il est impératif de sécuriser votre VPS :
- Protection contre les attaques externes : Les VPS sont souvent ciblés par des attaques DDoS, des tentatives de piratage ou des malwares. Une configuration adéquate réduit considérablement le risque d'intrusion.
- Confidentialité des données : Une mauvaise sécurité peut entraîner des fuites de données sensibles. Une sécurité solide garantit que vos données et celles de vos utilisateurs restent privées.
- Confiance des utilisateurs : Les utilisateurs font confiance aux services qui respectent la sécurité. En garantissant un environnement sûr, vous renforcez la crédibilité de votre service.
Aperçu des technologies abordées
Ce tutoriel couvre plusieurs technologies essentielles pour sécuriser votre VPS :
- SSH (Secure Shell) : Permet de se connecter à votre serveur de manière sécurisée. Nous allons configurer SSH pour le rendre plus résistant aux attaques.
- nftables : Outil de filtrage de paquets qui remplace iptables pour gérer les pare-feu de manière efficace et moderne.
- Fail2Ban : Un outil qui surveille les journaux et bloque les adresses IP suspectes afin de prévenir les tentatives de connexion brutale.
- Sysctl : Utilisé pour modifier certains paramètres du noyau de Linux, nous allons l'ajuster pour renforcer la sécurité du système.
- WireGuard : Un VPN moderne et rapide qui permet de créer des tunnels sécurisés pour vos connexions réseau.
Prérequis avant de commencer
Avant de plonger dans le tutoriel, assurez-vous de disposer des éléments suivants :
- Accès root ou sudo : Vous devez avoir des privilèges d'administrateur sur votre VPS pour appliquer les configurations et installer les logiciels nécessaires.
- Debian 13 installé : Ce tutoriel est spécifiquement conçu pour Debian 13. Assurez-vous que votre système est à jour :
sudo apt update && sudo apt upgrade -y
- Connexion SSH : Assurez-vous d'avoir un accès SSH à votre VPS. Par défaut, il écoute sur le port 22.
- Connaissances de base en ligne de commande : Familiarisez-vous avec l'utilisation de la ligne de commande, car toutes les configurations seront effectuées via le terminal.
Vérification
Après avoir passé en revue ces prérequis, il est essentiel de vérifier que votre système est correctement configuré avant de commencer les étapes de sécurisation. Exécutez les commandes suivantes pour confirmer que votre système est à jour et que le service SSH fonctionne :
# Vérifier si SSH est actif
sudo systemctl status ssh
# Vérifier les mises à jour disponibles
sudo apt update
Si tout est en ordre, vous êtes prêt à commencer la sécurisation de votre VPS. Les sections suivantes vous guideront pas à pas à travers chaque étape nécessaire pour renforcer la sécurité de votre serveur.
2. Configuration de l'accès SSH
Configuration de l'accès SSH
Dans cette section, nous allons configurer SSH pour garantir un accès sécurisé à votre VPS. SSH (Secure Shell) est un protocole de communication sécurisé qui permet de se connecter à distance à un serveur. Nous allons aborder plusieurs aspects de la configuration, notamment l'installation du serveur SSH, la modification des paramètres de sécurité, et les tests de connexion.
Installation du serveur SSH
Pour commencer, nous devons installer le serveur OpenSSH, qui fournit le service SSH sur les systèmes basés sur Debian. Exécutez la commande suivante pour installer le paquet :
sudo apt update
sudo apt install openssh-server
Après l'installation, le service SSH devrait démarrer automatiquement. Vous pouvez vérifier son statut avec la commande :
sudo systemctl status ssh
Modification du port par défaut
Par défaut, SSH écoute sur le port 22. Pour des raisons de sécurité, il est recommandé de changer ce port. Cela peut aider à réduire le nombre d'attaques automatisées. Modifions le port dans le fichier de configuration sshd_config.
Ouvrez le fichier de configuration avec un éditeur de texte, par exemple nano :
sudo nano /etc/ssh/sshd_config
Recherchez la ligne contenant #Port 22 et modifiez-la comme suit (choisissez un port non utilisé, par exemple 2222) :
Port 2222
Enregistrez et fermez le fichier (Ctrl + O, Entrée, puis Ctrl + X).
Désactivation de l'accès root
Pour des raisons de sécurité, il est conseillé de désactiver l'accès SSH direct au compte root. Cela limite les risques en cas de compromission. Dans le même fichier de configuration sshd_config, recherchez la ligne :
#PermitRootLogin prohibit-password
Et modifiez-la comme suit :
PermitRootLogin no
Utilisation des clés SSH
L'utilisation de clés SSH améliore considérablement la sécurité par rapport aux mots de passe. Voici comment configurer les clés SSH :
Génération de la clé SSH sur votre machine locale :
Exécutez la commande suivante sur votre machine locale (pas sur le serveur) :
ssh-keygen -t rsa -b 4096 -C "votre_email@example.com"
Suivez les instructions pour enregistrer la clé. Par défaut, elle sera enregistrée dans ~/.ssh/id_rsa et la clé publique dans ~/.ssh/id_rsa.pub.
Copie de la clé publique sur le serveur :
Utilisez la commande suivante pour copier votre clé publique sur le serveur :
ssh-copy-id -i ~/.ssh/id_rsa.pub utilisateur@adresse_ip_du_serveur -p 2222
Remplacez utilisateur par votre nom d'utilisateur sur le serveur et adresse_ip_du_serveur par l'adresse IP de votre VPS.
Configuration des paramètres de sécurité dans sshd_config
Nous allons maintenant configurer d'autres paramètres de sécurité dans le fichier sshd_config. Voici quelques recommandations :
Ouvrez à nouveau le fichier :
sudo nano /etc/ssh/sshd_config
Ajoutez ou modifiez les lignes suivantes :
# Désactiver la négociation des protocoles obsolètes
Protocol 2
# Limiter les utilisateurs autorisés à se connecter
AllowUsers utilisateur
# Inactiver les authentifications par mot de passe
PasswordAuthentication no
# Limiter le nombre de tentatives de connexion
MaxAuthTries 3
# Activer le pare-feu pour limiter les adresses IP autorisées
# (à configurer dans nftables, en dehors de cette section)
Enregistrez et fermez le fichier.
Tests de connexion sécurisée
Après avoir apporté ces modifications, redémarrez le service SSH pour appliquer les nouvelles configurations :
sudo systemctl restart ssh
Pour tester la connexion, ouvrez un terminal et exécutez la commande suivante :
ssh -p 2222 utilisateur@adresse_ip_du_serveur
Si tout est bien configuré, vous devriez être en mesure de vous connecter sans mot de passe, en utilisant votre clé SSH.
Notes de sécurité
- Maintenez votre système à jour : Exécutez régulièrement
sudo apt update && sudo apt upgrade.
- Surveillez les logs : Consultez les logs SSH avec
sudo journalctl -u ssh pour détecter toute activité suspecte.
- Utilisez un pare-feu : Assurez-vous que votre pare-feu (comme
nftables ou ufw) est correctement configuré pour autoriser uniquement le port SSH que vous avez choisi.
Vérification
Pour vérifier que votre configuration fonctionne correctement :
- Déconnectez-vous du serveur.
- Essayez de vous reconnecter avec la commande SSH en utilisant le nouveau port.
- Testez l'accès avec un utilisateur non autorisé pour vérifier que l'accès est bien restreint.
En suivant ces étapes, vous aurez sécurisé l'accès SSH à votre VPS, réduisant ainsi les risques de compromission.
3. Mise en place de nftables
Mise en place de nftables
Dans cette section, nous allons configurer nftables pour gérer le pare-feu de votre VPS. nftables est un outil puissant et flexible pour la gestion des règles de pare-feu sous Linux. Nous allons aborder l'installation, la compréhension de sa syntaxe, la création de règles de base, et la vérification des règles appliquées.
Installation de nftables
Avant de commencer, vérifions si nftables est installé sur votre système. Ouvrez un terminal et exécutez la commande suivante :
sudo apt update
sudo apt install nftables
Cette commande met à jour la liste des paquets disponibles et installe nftables. Pour vérifier que l'installation a réussi, exécutez :
nft --version
Vous devriez voir la version de nftables installée sur votre système.
Comprendre la syntaxe de nftables
nftables utilise une syntaxe basée sur des déclarations qui permettent de définir des tables, des chaînes et des règles. Voici un aperçu des éléments clés :
- Table : Un conteneur pour les chaînes et les règles. Chaque table peut être de type
filter, nat, etc.
- Chaîne : Définit le type de trafic à filtrer (par exemple, entrée, sortie, forward).
- Règle : Une condition qui définit ce qu'il faut faire avec le trafic (accepter, bloquer, etc.).
Voici un exemple de structure de base :
nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0; }
nft add rule inet filter input ip saddr 192.168.1.0/24 accept
Création d'une configuration de base
Nous allons créer une configuration de base pour notre pare-feu. Commencez par créer une table et une chaîne pour gérer le trafic entrant.
Fichier de configuration
Créez un fichier de configuration pour nftables :
sudo nano /etc/nftables.conf
Ajoutez le contenu suivant :
#!/usr/sbin/nft -f
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
# Autoriser le trafic local
iif "lo" accept
# Autoriser le trafic SSH
tcp dport 22 accept
# Autoriser les connexions établies et relatives
ct state established,related accept
# Bloquer tout le reste
reject with icmpx type admin-prohibited
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
Explications
- table inet filter : Crée une table de filtrage.
- chain input : Chaîne pour le trafic entrant avec une politique par défaut de rejet (
policy drop).
- iif "lo" accept : Accepte le trafic sur l'interface de boucle locale.
- tcp dport 22 accept : Autorise le trafic SSH sur le port 22.
- ct state established,related accept : Autorise les connexions établies.
- reject with icmpx type admin-prohibited : Rejette tout autre trafic avec un message ICMP.
Règles pour autoriser le trafic SSH
Nous avons déjà ajouté une règle pour autoriser le trafic SSH dans notre fichier de configuration. Assurez-vous que le port SSH (22) est bien configuré selon vos besoins, surtout si vous utilisez un autre port.
Bloquer le trafic indésirable
Le blocage du trafic indésirable est géré par la politique par défaut de la chaîne d'entrée (policy drop). Cela signifie que tout le trafic qui ne correspond pas aux règles définies sera rejeté.
Sauvegarde et restauration des règles
Pour sauvegarder les règles de votre pare-feu, vous pouvez utiliser la commande suivante :
sudo nft list ruleset > /etc/nftables-backup.conf
Pour restaurer les règles à partir de ce fichier, utilisez :
sudo nft -f /etc/nftables-backup.conf
Vérification des règles appliquées
Pour vérifier les règles appliquées et vous assurer que votre configuration fonctionne comme prévu, utilisez la commande suivante :
sudo nft list ruleset
Cette commande affichera l'ensemble des règles actuellement actives dans nftables. Vérifiez que les règles que vous avez créées apparaissent correctement.
Notes de sécurité
- Assurez-vous que votre VPS est configuré pour ne pas autoriser l'accès SSH à partir d'adresses IP non autorisées.
- Pensez à configurer des règles supplémentaires pour d'autres services si vous en avez besoin.
- Vérifiez régulièrement vos règles de pare-feu et ajustez-les en fonction des besoins de sécurité de votre VPS.
Avec ces étapes, vous avez mis en place une configuration de pare-feu de base avec nftables pour sécuriser votre VPS. Vous êtes maintenant prêt à continuer avec d'autres éléments de votre tutoriel.
4. Protection avec Fail2ban
Protection avec Fail2ban
Fail2ban est un outil de sécurité qui surveille les journaux du système à la recherche de tentatives de connexion non autorisées et qui peut bannir les adresses IP suspectes. Dans cette section, nous allons vous guider à travers l'installation et la configuration de Fail2ban pour protéger votre serveur VPS contre les attaques par force brute via SSH.
Installation de Fail2ban
Pour installer Fail2ban sur votre système Debian 13, exécutez les commandes suivantes :
sudo apt update
sudo apt install fail2ban
Cette commande met à jour la liste des paquets disponibles et installe Fail2ban. Une fois l'installation terminée, Fail2ban démarre automatiquement. Vous pouvez vérifier son statut en utilisant la commande suivante :
sudo systemctl status fail2ban
Configuration des filtres pour SSH
Fail2ban utilise des filtres pour analyser les logs et déterminer si une adresse IP doit être bannie. La configuration par défaut inclut déjà un filtre pour SSH, mais il est souvent préférable de le personnaliser.
Accédez à la configuration de Fail2ban :
Le fichier principal de configuration de Fail2ban est jail.conf, mais il est conseillé de créer un fichier de configuration local pour éviter que vos modifications ne soient écrasées lors des mises à jour.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Modifiez le fichier jail.local :
Ouvrez le fichier avec votre éditeur de texte préféré :
sudo nano /etc/fail2ban/jail.local
Dans ce fichier, recherchez la section [sshd] et activez-la en vous assurant que les lignes suivantes sont présentes :
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
enabled: active le filtre pour SSH.
port: spécifie le port SSH (par défaut 22).
filter: définit le filtre à utiliser (ici, le filtre SSH).
logpath: chemin vers le fichier log à surveiller.
maxretry: nombre de tentatives de connexion autorisées avant le bannissement.
bantime: durée du bannissement en secondes (ici, 1 heure).
Création de règles personnalisées
Pour des besoins spécifiques, vous pouvez créer des règles personnalisées. Par exemple, pour bannir les adresses IP après 3 tentatives et les bannir pour 24 heures :
Ajoutez une nouvelle section dans jail.local :
[my-custom-ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
Configuration des notifications par email
Fail2ban peut envoyer des notifications par email lorsqu'une adresse IP est bannie. Pour cela, vous devez configurer les paramètres d'email.
Modifiez le fichier de configuration jail.local :
Ajoutez les lignes suivantes :
destemail = votre_email@exemple.com
sendername = Fail2Ban
action = %(action_mwl)s
destemail: indique l'adresse email à laquelle les notifications seront envoyées.
sendername: le nom de l'expéditeur des notifications.
action: spécifie l'action à effectuer, ici nous utilisons %(action_mwl)s pour inclure un rapport complet avec les logs.
Configurez les paramètres SMTP :
Ouvrez le fichier /etc/fail2ban/jail.local et ajoutez ou modifiez les paramètres suivants :
mta = sendmail
Assurez-vous d'avoir un serveur d'envoi de mail configuré, tel que postfix ou msmtp.
Vérification de l'état de Fail2ban
Pour vérifier l'état de Fail2ban et voir quelles adresses IP sont actuellement bannies, utilisez la commande suivante :
sudo fail2ban-client status sshd
Cette commande affichera l'état du filtre SSH, y compris les adresses IP bannies et le nombre de tentatives échouées.
Tests de protection
Pour tester que Fail2ban fonctionne correctement, vous pouvez simuler des tentatives de connexion échouées :
Ouvrez une autre session SSH ou utilisez un autre périphérique pour essayer de vous connecter à votre serveur :
ssh -l votre_nom_utilisateur votre_adresse_ip -p 22
Entrez un mot de passe incorrect plusieurs fois :
Après avoir dépassé le nombre de tentatives autorisé (5 dans notre configuration), utilisez la commande suivante pour vérifier que votre adresse IP a été bannie :
sudo fail2ban-client status sshd
Notes de sécurité
- Mettez régulièrement à jour Fail2ban et votre système Debian pour garantir que vous disposez des dernières corrections de sécurité.
- Personnalisez vos paramètres de bannissement en fonction de votre usage. Par exemple, si vous utilisez un VPN, vous pouvez augmenter
maxretry pour éviter de vous faire bannir par erreur.
- Pensez à surveiller vos journaux d'accès pour détecter toute activité suspecte, même après avoir configuré Fail2ban.
Vérification finale
Pour confirmer que Fail2ban est actif et fonctionne comme prévu, exécutez :
sudo systemctl restart fail2ban
sudo systemctl status fail2ban
Vous devriez voir que le service est actif et en cours d'exécution. Testez à nouveau les tentatives de connexion pour vous assurer que les adresses IP sont correctement bannies.
En suivant ces étapes, vous aurez mis en place une protection efficace contre les tentatives de connexion non autorisées sur votre serveur VPS.
5. Optimisation des paramètres système avec Sysctl
Optimisation des paramètres système avec Sysctl
Introduction à Sysctl et son importance
Sysctl est un outil puissant utilisé pour modifier les paramètres du noyau Linux à la volée, sans nécessiter un redémarrage du système. Il permet d'ajuster divers aspects du fonctionnement du noyau, notamment la sécurité, la gestion de la mémoire, et le réseau. Pour un VPS sécurisé, il est crucial de configurer Sysctl afin de renforcer la sécurité et d'optimiser les performances de votre serveur.
Modification des paramètres de sécurité
Un des premiers aspects à considérer lors de la configuration de Sysctl est l'ajustement des paramètres de sécurité du réseau. Voici quelques paramètres importants à configurer :
Activation de la protection des routes inverses
La protection des routes inverses (Reverse Path Filtering) permet de vérifier que les paquets entrants proviennent de la bonne interface réseau. Cela peut aider à prévenir certaines attaques par usurpation d’adresse IP.
sudo sysctl -w net.ipv4.conf.all.rp_filter=1
sudo sysctl -w net.ipv4.conf.default.rp_filter=1
Pour rendre ces changements permanents, ajoutez les lignes suivantes dans le fichier /etc/sysctl.conf :
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
Désactivation de la redirection IP
Il est également recommandé de désactiver la redirection IP pour éviter que votre serveur ne soit utilisé comme un routeur non autorisé.
sudo sysctl -w net.ipv4.ip_forward=0
Ajoutez cette ligne à /etc/sysctl.conf pour la rendre permanente :
net.ipv4.ip_forward = 0
Configuration des protections contre les attaques DDoS
Pour protéger votre VPS contre les attaques DDoS, vous pouvez configurer plusieurs paramètres liés à la gestion des connexions.
Limitation du nombre de connexions simultanées
Il est important de limiter le nombre de connexions simultanées pour chaque adresse IP.
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=2048
sudo sysctl -w net.ipv4.tcp_syn_retries=3
Modifiez /etc/sysctl.conf pour que ces paramètres soient appliqués au démarrage :
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_syn_retries = 3
Activer la protection SYN
La protection SYN est essentielle pour lutter contre les attaques de type SYN flood. Vous pouvez activer cette protection avec les commandes suivantes :
sudo sysctl -w net.ipv4.tcp_syncookies=1
Ajoutez cette ligne dans /etc/sysctl.conf :
net.ipv4.tcp_syncookies = 1
Sauvegarde et chargement des paramètres Sysctl
Une fois que vous avez défini tous vos paramètres, il est important de sauvegarder ces configurations. Utilisez la commande suivante pour sauvegarder vos paramètres actuels :
sudo sysctl -a > /etc/sysctl.conf.bak
Pour charger les nouveaux paramètres que vous avez ajoutés au fichier /etc/sysctl.conf, utilisez la commande :
sudo sysctl -p
Vérification des paramètres appliqués
Après avoir appliqué vos configurations, il est crucial de vérifier que les paramètres sont bien en place. Vous pouvez utiliser la commande suivante pour afficher les paramètres que vous avez modifiés :
sudo sysctl -a | grep net.ipv4
Cela affichera tous les paramètres de la pile IP, vous permettant de confirmer que vos modifications ont été appliquées correctement.
Notes de sécurité
- Assurez-vous de tester chaque paramètre après modification pour éviter de bloquer des connexions légitimes.
- Considérez la mise en place de notifications pour surveiller les tentatives d'accès non autorisées.
- Restez informé sur les meilleures pratiques de sécurité et mettez régulièrement à jour vos configurations.
En suivant ces étapes et en ajustant les paramètres de votre système avec Sysctl, vous contribuez à renforcer la sécurité et à améliorer les performances de votre VPS.
6. Bonus : Configuration de WireGuard
Bonus : Configuration de WireGuard
WireGuard est un protocole VPN moderne qui offre des performances élevées et une facilité de configuration. Dans cette section, nous allons détailler les étapes nécessaires pour installer et configurer WireGuard sur votre VPS afin d'assurer une connexion VPN sécurisée.
Installation de WireGuard
Pour commencer, nous devons installer WireGuard sur notre serveur Debian 13. Exécutons les commandes suivantes :
sudo apt update
sudo apt install wireguard
Cette commande met à jour la liste des paquets disponibles et installe WireGuard ainsi que ses dépendances.
Génération des clés privées et publiques
WireGuard utilise des clés cryptographiques pour sécuriser les connexions. Nous allons générer une paire de clés (privée et publique) pour le serveur.
- Créez un répertoire pour stocker les clés :
mkdir -p ~/wireguard
cd ~/wireguard
- Générez la clé privée :
wg genkey | tee privatekey | wg pubkey > publickey
privatekey contiendra la clé privée du serveur.
publickey contiendra la clé publique correspondant à la clé privée.
Pour consulter les clés générées, utilisez les commandes suivantes :
cat privatekey
cat publickey
Configuration du serveur WireGuard
Nous allons maintenant configurer le serveur WireGuard en créant un fichier de configuration.
- Créez le fichier de configuration du serveur :
sudo nano /etc/wireguard/wg0.conf
- Ajoutez le contenu suivant dans le fichier :
[Interface]
PrivateKey = <votre_clé_privée>
Address = 10.0.0.1/24
ListenPort = 51820
SaveConfig = true
[Peer]
PublicKey = <clé_publique_du_client>
AllowedIPs = 10.0.0.2/32
Remplacez <votre_clé_privée> par le contenu du fichier privatekey.
Address définit l'adresse IP du serveur dans le réseau VPN.
ListenPort est le port sur lequel WireGuard écoutera les connexions.
Dans la section [Peer], remplacez <clé_publique_du_client> par la clé publique du client que nous allons ajouter plus tard.
Activez l'IP forwarding :
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Ajout de clients WireGuard
Pour ajouter un client, nous devons également générer une paire de clés pour celui-ci.
- Connectez-vous au client et répétez le processus de génération de clés :
wg genkey | tee privatekey | wg pubkey > publickey
- Notez la clé publique du client, puis retournez sur le serveur pour modifier le fichier de configuration
wg0.conf :
sudo nano /etc/wireguard/wg0.conf
- Ajoutez la section suivante pour le client :
[Peer]
PublicKey = <clé_publique_du_client>
AllowedIPs = 10.0.0.2/32
Remplacez <clé_publique_du_client> par la clé publique que vous avez générée sur le client.
- Démarrez le serveur WireGuard :
sudo wg-quick up wg0
- Pour vérifier que le serveur fonctionne, utilisez la commande suivante :
sudo wg show
Test de la connexion VPN
Pour tester la connexion VPN, connectez-vous au client et exécutez la commande suivante :
sudo wg-quick up wg0
Assurez-vous que le fichier de configuration du client est correctement configuré :
[Interface]
PrivateKey = <votre_clé_privée_du_client>
Address = 10.0.0.2/24
[Peer]
PublicKey = <clé_publique_du_serveur>
Endpoint = <adresse_ip_du_serveur>:51820
AllowedIPs = 0.0.0.0/0
Testez la connexion en exécutant une commande ping vers l'adresse IP du serveur :
ping 10.0.0.1
Meilleures pratiques de sécurité pour WireGuard
- Utilisez des clés de 256 bits : Assurez-vous que vos clés sont générées avec une taille de 256 bits pour une sécurité optimale.
- Mettez à jour régulièrement : Gardez WireGuard et votre système Debian à jour pour bénéficier des dernières améliorations de sécurité.
- Limitez les adresses IP autorisées : Dans la section
[Peer], spécifiez uniquement les adresses IP nécessaires pour limiter l'accès.
- Utilisez un pare-feu : Configurez
nftables pour restreindre l'accès uniquement aux ports nécessaires (comme 51820).
- Surveillez les connexions : Utilisez des outils de surveillance pour garder un œil sur les connexions VPN et détecter toute activité suspecte.
Vérification
Pour vérifier que votre configuration fonctionne correctement :
- Assurez-vous que le service WireGuard est actif :
sudo systemctl status wg-quick@wg0
- Vérifiez que les clés sont correctes et que les clients peuvent se connecter sans problème.
- Testez l'accès à Internet via le VPN pour vous assurer que tout fonctionne comme prévu.
Avec cette configuration, vous avez maintenant un VPN WireGuard opérationnel et sécurisé sur votre VPS !
7. Vérifications et bonnes pratiques
## Vérifications et bonnes pratiques
Maintenir la sécurité de votre VPS après sa configuration est essentiel pour protéger vos données et vos services. Cette section vous fournira des conseils pratiques et des étapes à suivre pour assurer la sécurité continue de votre serveur.
### Surveillance des journaux système et de sécurité
La surveillance des journaux est cruciale pour détecter tout comportement anormal ou toute tentative d'intrusion. Vous pouvez utiliser des outils comme `logwatch` ou `fail2ban` pour automatiser la surveillance.
#### Installation de `logwatch`
```bash
sudo apt update
sudo apt install logwatch
Configuration de logwatch
Les fichiers de configuration se trouvent dans /usr/share/logwatch/default.conf/ et /etc/logwatch/conf/. Vous pouvez personnaliser le fichier /etc/logwatch/conf/logwatch.conf pour définir la période de rapport et le type de journaux à surveiller.
Exemple de configuration :
# /etc/logwatch/conf/logwatch.conf
MailTo = votre_email@example.com
Range = yesterday
Detail = High
Consultation des journaux
Pour consulter les journaux système et de sécurité, utilisez les commandes suivantes :
# Pour les journaux système
journalctl -xe
# Pour les journaux d'authentification
sudo cat /var/log/auth.log
Mises à jour régulières du système et des services
Il est crucial de maintenir votre système à jour pour corriger les failles de sécurité. Utilisez les commandes suivantes pour mettre à jour votre système Debian :
# Mise à jour de la liste des paquets
sudo apt update
# Mise à jour des paquets installés
sudo apt upgrade -y
# Pour une mise à jour complète (y compris les paquets obsolètes)
sudo apt full-upgrade -y
# Suppression des paquets inutilisés
sudo apt autoremove -y
Gestion des utilisateurs et des permissions
Assurez-vous de gérer les utilisateurs et les permissions de manière rigoureuse. Créez des utilisateurs spécifiques pour chaque service et limitez leurs droits.
Création d'un nouvel utilisateur
# Création d'un utilisateur
sudo adduser nom_utilisateur
# Ajout à un groupe spécifique (ex : sudo)
sudo usermod -aG sudo nom_utilisateur
Gestion des permissions
Utilisez chmod et chown pour contrôler les permissions des fichiers et répertoires. Par exemple, pour donner des permissions d'écriture uniquement au propriétaire :
sudo chmod 700 /chemin/vers/le/fichier
Plan de sauvegarde régulier
Un plan de sauvegarde est essentiel pour protéger vos données. Vous pouvez utiliser rsync pour automatiser ce processus.
Exemple de script de sauvegarde
Créez un script de sauvegarde simple :
#!/bin/bash
# Script de sauvegarde
SOURCE="/chemin/vers/vos/données"
DESTINATION="/chemin/vers/le/dossier/de/sauvegarde"
# Commande rsync
rsync -av --delete $SOURCE $DESTINATION
N'oubliez pas de donner les droits d'exécution au script :
chmod +x /chemin/vers/le/script_de_sauvegarde.sh
Configurez une tâche cron pour exécuter le script régulièrement :
# Ouvrir l'éditeur de cron
crontab -e
# Ajouter la ligne suivante pour une sauvegarde quotidienne à 2h du matin
0 2 * * * /chemin/vers/le/script_de_sauvegarde.sh
Ressources supplémentaires pour aller plus loin
Pour approfondir vos connaissances et renforcer la sécurité de votre VPS, consultez les ressources suivantes :
Notes de sécurité
- Ne jamais utiliser le compte root pour des tâches quotidiennes.
- Évitez d’installer des logiciels non vérifiés ou non nécessaires.
- Utilisez des mots de passe forts et envisagez d'utiliser une solution d'authentification à deux facteurs (2FA).
Vérification
Après avoir appliqué ces bonnes pratiques, effectuez une vérification de sécurité de votre VPS :
Vérifiez que les mises à jour sont appliquées.
sudo apt update && sudo apt upgrade
Confirmez que fail2ban est actif et fonctionne.
sudo systemctl status fail2ban
Vérifiez les logs pour toute activité suspecte.
sudo cat /var/log/auth.log | grep 'Failed'
Assurez-vous que votre plan de sauvegarde fonctionne.
ls -l /chemin/vers/le/dossier/de/sauvegarde
En suivant ces conseils, vous renforcerez la sécurité de votre VPS et réduirez les risques d'intrusion ou de perte de données.
---
## 8. Conclusion
# Conclusion
Dans ce tutoriel, nous avons exploré en profondeur les différentes étapes nécessaires pour sécuriser un VPS sous Debian 13 en utilisant SSH, nftables, fail2ban, et sysctl. En bonus, nous avons également intégré WireGuard pour établir un VPN sécurisé. Voici un récapitulatif des étapes réalisées, des outils utilisés et des bonnes pratiques à suivre pour garantir la sécurité de votre serveur.
### Récapitulatif des outils et configurations
1. **SSH** : Nous avons configuré le service SSH pour renforcer la sécurité en modifiant le port par défaut, en désactivant l'accès root, et en utilisant des clés SSH pour l'authentification.
```bash
sudo nano /etc/ssh/sshd_config
Modifications apportées :
Port 2222
PermitRootLogin no
PasswordAuthentication no
Après ces modifications, nous avons redémarré le service SSH :
sudo systemctl restart ssh
nftables : Nous avons mis en place un pare-feu avec nftables pour contrôler le trafic entrant et sortant de manière précise.
Installation de nftables :
sudo apt install nftables
Configuration de base :
sudo nano /etc/nftables.conf
Exemple de configuration :
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
iif "lo" accept
ct state established,related accept
tcp dport 2222 accept
ip saddr 192.168.1.0/24 accept
# Autoriser les pings
ip protocol icmp accept
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
Activation de la configuration :
sudo nft -f /etc/nftables.conf
fail2ban : Pour protéger notre serveur contre les tentatives de connexion non autorisées, nous avons installé et configuré fail2ban.
Installation :
sudo apt install fail2ban
Configuration de base :
sudo nano /etc/fail2ban/jail.local
Exemple de configuration :
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 600
Redémarrage de fail2ban pour appliquer les changements :
sudo systemctl restart fail2ban
sysctl : Pour optimiser la sécurité du noyau, nous avons configuré sysctl afin de limiter les attaques réseau.
Modifications :
sudo nano /etc/sysctl.conf
Ajouts recommandés :
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
Application des nouvelles configurations :
sudo sysctl -p
WireGuard (Bonus) : Enfin, nous avons installé WireGuard pour créer un VPN sécurisé.
Installation :
sudo apt install wireguard
Configuration d'un serveur WireGuard :
sudo nano /etc/wireguard/wg0.conf
Exemple de configuration :
[Interface]
PrivateKey = <clé_privée_du_serveur>
Address = 10.0.0.1/24
ListenPort = 51820
[Peer]
PublicKey = <clé_publique_du_client>
AllowedIPs = 10.0.0.2/32
Activation de WireGuard :
sudo wg-quick up wg0
Importance de la vigilance continue en matière de sécurité
La sécurité est un processus continu et non un état final. Il est impératif de rester vigilant face aux nouvelles menaces et vulnérabilités. Voici quelques bonnes pratiques à suivre :
Mettez à jour régulièrement votre système et vos logiciels :
sudo apt update && sudo apt upgrade
Surveillez les journaux de votre système :
Utilisez des commandes comme tail -f /var/log/auth.log pour détecter rapidement des activités suspectes.
Effectuez des sauvegardes régulières : Assurez-vous de disposer de sauvegardes à jour de vos données et de vos configurations.
Appliquez le principe du moindre privilège : Ne donnez que les droits nécessaires aux utilisateurs et services.
Vérification
Pour vous assurer que votre configuration est correcte et sécurisée, voici quelques vérifications à effectuer :
Vérifiez que le service SSH écoute sur le bon port :
sudo netstat -tuln | grep 2222
Vérifiez les règles de votre pare-feu :
sudo nft list ruleset
Vérifiez l'état de fail2ban :
sudo fail2ban-client status
Vérifiez que WireGuard fonctionne :
sudo wg
En suivant ces étapes et en appliquant les bonnes pratiques de sécurité, vous vous assurez que votre VPS reste sécurisé contre les menaces potentielles. Merci d'avoir suivi ce tutoriel, et n'hésitez pas à approfondir vos connaissances sur la sécurité des systèmes !
Récapitulatif - Les points clés à retenir
- Sécurisation SSH : Utilisation de clés SSH au lieu de mots de passe, changement du port par défaut et désactivation de l'accès root.
- Configuration de nftables : Mise en place de règles de filtrage pour contrôler le trafic entrant et sortant, et protection contre les attaques.
- Instalation de Fail2Ban : Surveillance des journaux pour bloquer les adresses IP suspectes après plusieurs échecs de connexion.
- Optimisation avec sysctl : Ajustement des paramètres du noyau pour améliorer la sécurité et les performances du serveur.
- Bonus WireGuard : Configuration d'un VPN léger et sécurisé pour un accès distant chiffré.
Vérification finale - Commandes pour vérifier que tout fonctionne
Vérifier le statut de SSH :
systemctl status ssh
Vérifier les règles nftables :
nft list ruleset
Vérifier le statut de Fail2Ban :
fail2ban-client status
Vérifier les paramètres sysctl :
sysctl -a | grep net
Tester la connexion WireGuard :
wg show
Dépannage - Problèmes courants et solutions
Impossible de se connecter via SSH :
- Vérifiez que le service SSH est actif et que le port configuré est ouvert dans nftables.
Fail2Ban bloque des adresses IP légitimes :
- Consultez le journal de Fail2Ban pour identifier les raisons des bans et ajustez les règles si nécessaire.
Règles nftables ne fonctionnent pas comme prévu :
- Utilisez
nft list ruleset pour vérifier que les règles sont bien appliquées et ordonnées correctement.
Problèmes de performance avec sysctl :
- Testez différents paramètres et surveillez l'impact sur les performances. Retirez les modifications non nécessaires.
Pour aller plus loin - Ressources et améliorations possibles
Documentation officielle :
Outils de surveillance :
- Considérez l'installation d'outils comme
htop, iftop ou glances pour monitorer l'utilisation des ressources.
Automatisation des sauvegardes :
- Mettez en place un système de sauvegarde régulier avec
rsync ou borgbackup.
Mise en place d'une authentification à deux facteurs (2FA) :
- Intégrez des solutions comme Google Authenticator pour renforcer la sécurité des connexions SSH.
Explorez d'autres VPN :
- Si WireGuard ne répond pas entièrement à vos besoins, envisagez d'étudier OpenVPN ou d'autres solutions de VPN.