
Quand tu déploies un nouveau serveur, que ce soit un VPS fraîchement commandé ou une machine dédiée, il y a toujours cette routine un peu fastidieuse : mise à jour, SSH, pare-feu, surveillance, sécurité minimale… Bref, les bases pour ne pas laisser une machine exposée à moitié nue sur Internet.
Et pourtant, combien de fois on s’est retrouvé à refaire tout ça à la main — ou pire, à oublier un truc essentiel comme désactiver le root SSH ou installer fail2ban
?
La solution : un script de post-installation, simple et propre, qu’on exécute juste après l’installation du système, pour durcir et préparer son serveur à un usage en prod. Voici une version que j’utilise régulièrement, adaptée pour Debian 11/12 et Ubuntu 22.04+.
⚠️ Précautions avant de lancer
Ce script modifie des réglages système (SSH, pare-feu, sudo, etc.). Utilise-le sur une machine fraîche ou en environnement contrôlé.
Teste toujours dans une VM si tu n’es pas sûr.
📄 Le script complet
Crée un fichier postinstall.sh
:
#!/bin/bash
set -e
# --- Infos ---
SERVER_USER="admin"
SSH_PORT="2222"
# --- Mises à jour ---
echo "📦 Mise à jour du système..."
apt update && apt upgrade -y
# --- Paquets de base ---
echo "🔧 Installation des outils courants..."
apt install -y sudo curl wget htop git ufw fail2ban unattended-upgrades gnupg apt-transport-https ca-certificates lsb-release software-properties-common vim
# --- Création d'un utilisateur ---
echo "👤 Création de l'utilisateur : $SERVER_USER"
adduser --gecos "" $SERVER_USER
usermod -aG sudo $SERVER_USER
# --- Clé SSH (à personnaliser) ---
echo "🔑 Ajout de la clé SSH"
mkdir -p /home/$SERVER_USER/.ssh
chmod 700 /home/$SERVER_USER/.ssh
echo "COLLE_TA_CLÉ_PUBLIQUE_ICI" > /home/$SERVER_USER/.ssh/authorized_keys
chmod 600 /home/$SERVER_USER/.ssh/authorized_keys
chown -R $SERVER_USER:$SERVER_USER /home/$SERVER_USER/.ssh
# --- SSH sécurisé ---
echo "🔒 Sécurisation SSH..."
sed -i "s/#Port 22/Port $SSH_PORT/" /etc/ssh/sshd_config
sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/#ChallengeResponseAuthentication yes/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config
systemctl restart sshd
# --- Firewall ---
echo "🔥 Configuration du pare-feu..."
ufw default deny incoming
ufw default allow outgoing
ufw allow $SSH_PORT/tcp
ufw enable
# --- fail2ban ---
echo "🛡️ Configuration de fail2ban..."
cat >/etc/fail2ban/jail.local < -p $SSH_PORT"
🧪 Comment l’utiliser
- Remplace
COLLE_TA_CLÉ_PUBLIQUE_ICI
par ta vraie clé publique SSH (commence parssh-ed25519
oussh-rsa
). - Rends le script exécutable :
chmod +x postinstall.sh
- Lance-le en tant que
root
ou viasudo
:
sudo ./postinstall.sh
💡 Ce que tu gagnes
- Un utilisateur non-root avec accès sudo
- SSH durci avec port personnalisé et clés obligatoires
- Pare-feu UFW minimaliste mais efficace
fail2ban
pour les tentatives de brute force- Mises à jour automatiques pour les patchs de sécurité
- Moins d’oublis et plus de cohérence entre serveurs
À personnaliser selon ton usage
Tu peux bien sûr adapter ce script :
- Ajouter
Docker
,nginx
,zsh
,bashrc
custom… - Forcer le hostname
- Pré-configurer Prometheus Node Exporter ou CrowdSec
- Intégrer des clés spécifiques selon l’environnement (prod, staging…)
Et après ?
Une fois ce script exécuté, tu as une base propre et sécurisée. Tu peux ensuite t’occuper du reste : web, base de données, monitoring, déploiement, etc.
C’est pas la partie la plus fun, mais c’est celle qui t’évite des galères plus tard.