*Cube-Host– services cloud complets!

Sécurité Linux VPS : clés SSH, UFW et Fail2Ban

Linux VPS Security: SSH Keys, UFW, and Fail2Ban

Ce que nous faisons et pourquoi

  • Nous ne travaillons pas sous root – nous créons un administrateur avec sudo.
  • La connexion s’effectue exclusivement via une clé SSH, les mots de passe sont désactivés.
  • Nous activons UFW : « Tout est fermé, sauf ce qui est nécessaire. »
  • Nous installons Fail2Ban : il bloque les adresses IP lors de la sélection d’un mot de passe/d’une clé.

Utilisateurs et groupes administrateurs

Nous créons un utilisateur et l’ajoutons à sudo + au groupe SSH restrictif :

				
					sudo adduser admin
sudo usermod -aG sudo admin
sudo groupadd -f sshusers
sudo usermod -aG sshusers admin
id admin
				
			
Linux VPS

Clé SSH : générer et ajouter

En local (Windows/macOS/Linux) :

				
					ssh-keygen -t ed25519 -C "key-for-admin"
				
			

Sur le serveur en tant qu’administrateur root ou existant :

				
					sudo -u admin -H bash -lc 'mkdir -p ~/.ssh && chmod 700 ~/.ssh'
sudo -u admin -H bash -lc 'cat >> ~/.ssh/authorized_keys'   # insert content *.pub, затем Ctrl+D
sudo -u admin -H bash -lc 'chmod 600 ~/.ssh/authorized_keys'
				
			
Linux VPS

Important : seule la clé publique .pub est envoyée au serveur. La clé privée est stockée localement.

Renforcer SSH (désactiver les mots de passe et la connexion root)

Ouvrez /etc/ssh/sshd_config et indiquez les éléments suivants :

				
					PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowGroups sshusers
				
			

Redémarrer SSH :

				
					sudo systemctl restart sshd
				
			
Linux VPS

Vérifiez que les clés fonctionnent avant de désactiver les mots de passe, sinon vous perdrez l’accès.

UFW : « fermé par défaut »

				
					sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH        # port 22
sudo ufw allow 80,443/tcp     # if you need a website
sudo ufw enable
sudo ufw status numbered
				
			
Linux VPS

Avez-vous besoin de ports supplémentaires (par exemple 8080) ? Ajoutez une règle explicite : sudo ufw allow 8080/tcp.

Fail2Ban : installation et démarrage automatique

				
					sudo apt -y install fail2ban
sudo systemctl enable --now fail2ban
sudo systemctl status fail2ban --no-pager
				
			
Linux VPS

Configuration Fail2Ban : jail.local pour sshd

Créer/modifier

				
					/etc/fail2ban/jail.local:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
bantime.increment = true

[sshd]
enabled = true
port    = ssh
filter  = sshd
logpath = /var/log/auth.log
action  = %(action_mwl)s
				
			

Redémarrage :

				
					sudo systemctl restart fail2ban

				
			
Linux VPS

%(action_mwl)s envoie un e-mail (si la messagerie est configurée) + un journal et bloque également l’adresse IP.

Intégration de Fail2Ban avec UFW (alternative)

Créez un fichier

				
					/etc/fail2ban/jail.d/ufw-sshd.local:
[sshd]
enabled = true
action = ufw
maxretry = 5
findtime = 10m
bantime = 1h

				
			

Postuler :

				
					sudo systemctl restart fail2ban
				
			
Linux VPS

Vérification du fonctionnement et des protocoles

				
					sudo fail2ban-client status
sudo fail2ban-client status sshd
sudo tail -n 200 /var/log/fail2ban.log
sudo journalctl -u ssh --since "today"
sudo ufw status verbose

				
			
Linux VPS

Pour tester le verrouillage : effectuez 5 à 6 tentatives de connexion infructueuses à partir d’un autre nœud et vérifiez l’état de sshd : l’adresse IP apparaîtra dans la liste des adresses IP bloquées.

Bonus de sécurité (facultatif)

  • Modifiez le port SSH (ce n’est pas une mesure de sécurité, mais cela réduit le bruit du scanner) : port 2222 dans sshd_config + ufw allow 2222/tcp.
  • Limitez l’accès SFTP (chroot) pour le groupe.
  • Activez la 2FA pour SSH : libpam-google-authenticator + configuration de /etc/pam.d/sshd et sshd_config (AuthenticationMethods publickey,keyboard-interactive).
  • Limitez les tentatives Sudo : passwd -l root, sudo visudo avec timestamp_timeout=5.

Liste de contrôle de sécurité

  • La connexion par clé fonctionne, les mots de passe et la connexion root sont désactivés.
  • UFW : refuser les connexions entrantes/autoriser les connexions sortantes, seuls les ports nécessaires sont autorisés.
  • Fail2Ban protège sshd (et en option nginx/postfix/…) ; les protocoles sont vérifiés.
  • Un test de blocage est effectué, les règles et les accès sont documentés.