# Aaron PESCASIO
Pour m'entrainer avec Linux, j'ai décidé de créer ce script qui préparera et sécurisera un VPS tout neuf (que je loue chez OVH). Grâce aux snapshots, j'ai été en mesure de tester l'exécution du script plusieurs fois et de revenir à chaque fois à un VPS tout neuf, ce qui m'a permis d'effectuer des tests en toute sécurité.
vps_prep.sh:
#!/bin/bash # 1. Script pour préparer et sécuriser un VPS # Prérequis: -VPS sous Linux, -Connexion SSH, -Accès 'root' # Après avoir connecté sur le VPS avec ssh, je me connecte avec le compte 'root' : 'sudo su' # Je mets à jour la liste des paquets apt update # Je mets à jour des paquets à proprement parler apt upgrade -y # J'installe tous les paquets que j'aurai besoin pour sécuriser mon VPS et l'utiliser pour héberger mon site web apt install -y wget ufw fail2ban nginx # (fail2ban je laisse la config par défaut) # Je modifie le mot de passe de mon compte 'root' echo "Entrez un nouveau mot de passe pour le compte 'root'" passwd # Je mets à jour le timezone de mon VPS timedatectl set-timezone Europe/Paris # Je mets à jour mon .bashrc (ce que j'ai ajouté: mes raccourcis, mes modifications concernant la commande history pour qu'ils affichent la date à coté de la commande executé) cd ~ mv /etc/bash.bashrc /etc/bash.bashrc.backup wget -O /etc/bash.bashrc https://raw.githubusercontent.com/ApecioU/configfiles/main/bash.bashrc source /etc/bash.bashrc # Je modifie le port d'écoute SSH par défaut while true; do read -p "Enter a number between 49152 and 65535: " port if [[ "$port" -ge 49152 && "$port" -le 65535 ]]; then # Pour plus de sécurité, utilisez un numéro entre 49152 et 65535. echo "Valid port: $port" break else echo "Invalid port. Please enter a number between 49152 and 65535." fi done sed -i "s/^#Port 22/Port $port/" /etc/ssh/sshd_config # N'oubliez pas que vous devrez indiquer le nouveau port à chaque demande de connexion SSH à votre serveur, par exemple : # ssh nomdutilisateur@IPv4_de_votre_VPS -p NouveauPort # Je désactive la connexion 'root' dans la config SSH sed -i 's/^#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config # Après 120s d'inactivité, déconnecte l'user sed -i 's/^#ClientAliveInterval 0/ClientAliveInterval 120/' /etc/ssh/sshd_config # Je définis une variable pour la création d'un compte perso read -p "Entrez un identifiant pour la création d'un compte perso : " perso # Je modifie la config ssh pour définir le nom d'utilisateurs qui peuvent utiliser ssh ; tous les autres utilisants sont bloqué echo "AllowUsers $perso" | sudo tee -a /etc/ssh/sshd_config # Je redémarre le service pour que cela s'applique systemctl restart sshd # Avant d'activer le firewall ufw, j'autorise la connexion SSH sur le port que j'ai selectionné ufw allow $port/tcp && ufw allow 'Nginx Full' # Cette commande permet la connexion SSH et HTTP+S sur les port selectionné et pour tous les autres ports : c'est bloqué :) # Régler le 'Invalid argument' de NGINX à première installation mkdir /etc/systemd/system/nginx.service.d printf "[Service]\nExecStartPost=/bin/sleep 0.1\n" > /etc/systemd/system/nginx.service.d/override.conf systemctl daemon-reload systemctl restart nginx # Maintenant on peut activer le pare feu après avoir autorisé le nouveau port SSH ufw enable # Je crée un compte perso et je l'ajoute dans le groupe 'sudo' sudo useradd -m -s /bin/bash -G sudo $perso && echo "Entrez un mot de passe pour $perso" && passwd $perso && sudo usermod -c "$perso" $perso # Je me connecte avec mon compte perso su $perso