- Un projet Symfony 5/6 versionné avec "git" et hébergé (GitHub, GitLab...).
- Un VPS OVH et un nom de domaine.
Générez les clés SSH publique et privée sur votre poste local.
Vérifiez que votre répertoire $HOME contient un dossier .ssh. Si le dossier n’existe pas, créez-le :
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
Utilisez la commande suivante pour créer une clé RSA 4096 bits :
$ cd ~/.ssh
$ ssh-keygen -b 4096
L’utilisation de l’option -t avec cette commande vous permet de spécifier une autre méthode de chiffrement, par exemple :
$ ssh-keygen -t ecdsa -a 256
Donnez un nom à votre clé SSH ou laissez le nom par défaut id_rsa et ajoutez une passphrase pour plus de sécurité.
Ceci génère deux fichiers : nom_clé (clé privée), et nom_clé.pub (clé publique), dans le dossier .ssh.
Dans votre espace client OVH, accédez à votre compte en cliquant sur votre nom en haut à droite puis sur l'icône
Mes services située sous le titre Raccourcis ou directement sur la barre latérale à gauche.
Enfin, cliquez sur l'onglet Clés SSH.
Pour enregistrer une nouvelle clé SSH, cliquez sur le bouton Ajouter une clé SSH puis sur Dédié.
Affichez votre clé publique sur votre poste local :
$ cat ~/.ssh/nom_clé.pub
Copiez-collez le résulat sur OVH puis validez.
NOTE : Attention ! Ceci supprimera toutes les données sur votre serveur.
Dans le menu principal sur OVH, cliquez sur le lien Bare Metal Cloud, puis sur Serveurs privés virtuels dans la barre latérale à gauche et enfin sur le nom de votre VPS.
Dans la section Votre VPS, cliquez sur l'icône ... à droite de OS/Distribution puis sur Réinstaller mon VPS.
Sélectionnez la distribution que vous souhaitez installer (ici Ubuntu 20.04 LTS) puis sélectionnez la clé SSH précédemment ajouter sur votre compte. Cliquez ensuite sur le bouton Confirmer.
Par défaut, OVH créer pour vous un utilisateur avec des droits restreints ainsi qu'un mot de passe. Entrez la commande suivante pour vous connectez au VPS :
$ ssh nom_d_utilisateur@vps-xxxxxxxxx.ovh.net
NOTE : Si vous avez effectué une réinstallation et que vous vous étiez déjà connecté en SSH sur le serveur, supprimez la clé commençant par
vps-xxxxxxxxx.ovh.netsituée dans le fichier~/.ssh/known_hostsde votre poste local.
Lors de la première connexion, un message de confirmation va apparaître pour ajouter l'empreinte de l'hôte dans le fichier ~/.ssh/known_hosts
The authenticity of host 'vps-xxxxxxxxx.ovh.net (000.00.000.000)' can't be established.
ECDSA key fingerprint is SHA256:*****************************************.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Entrez yes puis appuyez sur ENTRÉE pour vous connecter.
Enfin, mettez à jour les dépendances de votre distribution (ici Ubuntu) puis effectuez un soft reboot de VPS :
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo reboot
NOTE : Si vous souhaitez effectuer un hard reboot, dans ce cas il faudra vous rendre sur la page de votre VPS sur OVH, dans la section
Votre VPS, cliquez sur l'icône...à droite deBootpuis surRedémarrer mon VPS.
Pour commencer, configurez le service SSH en changeant le port d’écoute. Il est défini sur le port 22 par défaut :
$ sudo nano /etc/ssh/sshd_config
Trouvez ensuite la ligne suivante :
#Port 22
NOTE : Pour Ubuntu 23.04 et versions ultérieures :
Décommentez et remplacez le numéro 22 par le numéro de port de votre choix. N’entrez pas de numéro de port déjà utilisé sur votre système. Pour des raisons de sécurité, utilisez un nombre compris entre 49152 et 65535.
Pour voir les ports utilisés :
$ netstat -nat | grep LISTEN
tcp 0 0 127.0.0.*:** 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.*:**** 0.0.0.0:* LISTEN
Enregistrez et quittez le fichier de configuration.
Redémarrez le service :
$ sudo systemctl restart sshd
Cela devrait suffire pour appliquer les modifications. Si jamais cela ne fonctionne pas, effectuez un soft reboot du VPS :
$ sudo reboot
N'oubliez pas que, désormais, vous devez indiquer le nouveau port chaque fois que vous demandez un connexion SSH à votre VPS, par exemple :
$ ssh nom_d_utilisateur@vps-xxxxxxxxx.ovh.net -p nouveau_port
Il est recommandé de modifier votre mot de passe utilisateur :
$ sudo passwd nom_d_utilisateur
New password: ******
Retype new password: ******
passwd: password updated successfully
NOTE : Les mots de passes ne sont pas affichés pour des raisons de sécurité.
Basculez ensuite vers l’utilisateur root et définissez votre mot de passe administrateur :
$ sudo su -
$ passwd
New password: ******
Retype new password: ******
passwd: password updated successfully
Effectuez un soft reboot pour appliquer les modifications :
$ sudo reboot
L’utilisateur root est créé par défaut sur les systèmes GNU/Linux. L’accès root signifie avoir le plus d’autorisations sur un système d’exploitation. Il n’est pas recommandé et même dangereux de laisser votre VPS accessible uniquement par le biais de l’accès root, car ce compte peut effectuer des opérations irréversiblement dommageables.
Il est recommandé de désactiver l’accès direct à l’utilisateur root via le protocole SSH. Si vous n'avez pas, n’oubliez pas de créer un autre utilisateur avec des droits restreints avant de suivre les étapes ci-dessous.
Modifiez le fichier de configuration SSH :
$ sudo nano /etc/ssh/sshd_config
Localisez la section suivante :
# Authentication:
#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
Décommentez la ligne PermitRootLogin et remplacez prohibit-password par no.
Enregistrez et quittez le fichier de configuration.
Redémarrez le service :
$ sudo systemctl restart sshd
Si vous avez besoin d'accéder à l'utilisateur root, utilisez la commande :
$ su root
Afin de résoudre les messages d'erreurs éventuels lors de la mise à jour des paquets, définissez la locale par défaut du VPS :
$ sudo dpkg-reconfigure locales
Dans la liste des locales qui s'affiche, sélectionnez en_US.UTF-8 UTF-8 grace aux flèches directionnelles et appuyez sur ENTRÉE. Sélectionnez ensuite en_US.UTF-8 pour appuyez à nouveau sur ENTRÉE pour valider.
Generating locales (this might take a while)...
en_US.UTF-8... done
Generation complete.
Entrez ensuite la commande suivante :
$ sudo localedef -i en_US -c -f UTF-8 en_US.UTF-8
Éditez le fichier /etc/default/locale :
$ sudo nano /etc/default/locale
Remplacez le contenu de ce dernier par le contenu suivant :
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANGUAGE=en_US.UTF-8
Sauvegardez et quittez l'édition puis effectuez un soft reboot du VPS :
$ sudo reboot
Pour libérer le port SSH par défaut :
$ sudo ufw allow ssh
Pour libérer uniquement les connexions entrantes du nouveau port (recommandé) :
$ sudo ufw allow nouveau_port/tcp
Activez le firewall :
$ sudo ufw enable
Pour afficher le statut et les règles du firewall :
$ sudo ufw status verbose
Pour supprimer une règle :
$ sudo ufw delete allow ssh
La mémoire partagée peut être utilisée lors d'une attaque contre un service en cours d'exécution.
Modifiez le fichier /etc/fstab pour ajouter une protection :
tmpfs /run/shm tmpfs defaults,noexec,nosuid 0 0
Fail2Ban est un framework de prévention contre les intrusions dont le but est de bloquer les adresses IP inconnues qui tentent de pénétrer dans votre système. Ce paquet est recommandé, voire indispensable, pour vous prémunir contre toute tentative de brute force sur vos services.
NOTE : Fail2Ban scanne les logs et interdit les adresses IP qui affichent des signes malveillants (trop d'échecs de mot de passe, mauvais nom d'utilisateur...) En général, Fail2Ban est utilisé pour mettre à jour les règles du pare-feu afin de rejeter les adresses IP pendant une durée donnée, bien que toute autre action arbitraire puisse également être configurée. D'autre part, Fail2Ban est livré avec des filtres pré-configurés pour différents services (apache, courrier, ftp, SSH, etc).
L’installation s’effectue avec la commande suivante :
$ sudo apt-get install fail2ban
Modifiez le fichier de configuration pour l’adapter à la vôtre. Avant toute modification, il est recommandé de faire une sauvegarde de ce fichier en entrant la commande suivante :
$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.backup
Apportez ensuite vos modifications sur le fichier :
$ sudo nano /etc/fail2ban/jail.conf
Si vous souhaitez recevoir des e-mails de Fail2Ban informant si des hôtes sont bannis, modifiez la ligne suivante par votre adresse e-mail.
destemail = monemail@exemple.fr
Modifiez également la ligne action = %(action_)s par :
action = %(action_mwl)s
Activez tous les services que vous souhaitez que Fail2Ban surveille en ajoutant enabled = true.
Si vous avez remplacé le port SSH par défaut, vous devez remplacer tous les port = ssh par port = nouveau_port.
[sshd]
enabled = true
#mode = normal
port = nouveau_port
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Vous pouvez également créer des filtres pour les différents services que vous souhaitez surveiller avec Fail2Ban et qui ne sont pas fournis par défaut en les plaçant dans le fichier suivant :
$ sudo nano /etc/fail2ban/jail.local
Une fois la configuration terminée, redémarrez le service à l’aide de cette commande :
$ sudo /etc/init.d/fail2ban restart