Outils pour utilisateurs

Outils du site


configuration_d_un_vps

Configuration d'un VPS chez OVH

Je souhaitais depuis un moment réinitialisé un VPS inutilisé, tournant avec une Debian 7 - Wheezy. On réinitialise ou installe donc le VPS avec Debian 8 - Jessie.

Et ensuite? Quelles sont les étapes pour sécuriser un peu le serveur avant de mettre en place un site web?

SSH - Première connexion

La première chose à faire, une fois le VPS (ré)initialisé, c'est de se connecter en ssh pour créer un utilisateur et modifier la configuration ssh pour empêcher la connexion en root. On pourra également mettre en place des clés pour se connecter sans taper de mot de passe.

OVH envoie le mot de passe du serveur par mail à l'initialisation de celui-ci.

$ ssh root@IP.DU.SER.VEUR
root@IP.DU.SER.VEUR's password: 
root@vps12345:~# 

Changer le mot de passe root

Le mot de passe root de votre serveur a transité, en clair (!), dans un mail. Il faut le changer rapidement.

root@vps12345:~# passwd
Entrez le nouveau mot de passe UNIX : 
Retapez le nouveau mot de passe UNIX : 
passwd : le mot de passe a été mis à jour avec succès

Créer un nouvel utilisateur

Il faut créer un nouvel utilisateur pour exécuter les tâches courantes et surtout pour éviter de laisser la possibilité de se connecter via ssh avec l'utilisateur root.

root@vps89550:~# adduser nom-user
Ajout de l'utilisateur « nom-user » ...
Ajout du nouveau groupe « nom-user » (1000) ...
Ajout du nouvel utilisateur « nom-user » (1000) avec le groupe « simon » ...
Création du répertoire personnel « /home/nom-user »...
Copie des fichiers depuis « /etc/skel »...
Entrez le nouveau mot de passe UNIX : 
Retapez le nouveau mot de passe UNIX : 
passwd : le mot de passe a été mis à jour avec succès
Modification des informations relatives à l'utilisateur nom-user
Entrez la nouvelle valeur ou « Entrée » pour conserver la valeur proposée
	Nom complet []: nom-user
	N° de bureau []: 
	Téléphone professionnel []: 
	Téléphone personnel []: 
	Autre []: 
Cette information est-elle correcte ? [O/n]

Changer le hostname

# vim /etc/hostname

Je n'ai plus pu envoyer de mails depuis le serveur quand j'ai changé le hostname. J'ai remis celui d'origine en attendant de trouver une solution.

Changer le message d'accueil

# vim /etc/motd

Il y a moyen d'aller plus loin, de faire des messages dynamiques, etc. Pas encore creusé le sujet.

SSH - Modification de la configuration

Pour éviter une parties des attaques automatiques des scripts kiddies, il est possible de modifier le port de connexion de SSH. (C'est le port 22 par défaut.) On va aussi en profiter pour empêcher la connexion SSH avec le login root et l'autoriser avec l'utilisateur que l'on vient de créer. Quand je modifie un fichier de configuration, j'ai l'habitude de laisser mes initiales en commentaire.

Je précise que je n'utilise pas le port 2222, c'est un exemple.

# vim /etc/ssh/sshd_config
(...)
#SLF:
#Port22
Port 2222 #Vous pouvez choisir n'importe quel port non-utilisé.
(...)
#SLF:
#PermitRootLogin yes
PermitRootLogin no
(...)
#SLF:
AllowUsers nom-user
(...)

Une fois la modification du fichier de configuration sauvegardée, il faut redémarrer le service SSH :

root@vps12345:~# service ssh restart

On ne perd pas la connexion lors du redémarrage du service SSH. On garde donc cette fenêtre ouverte et on fait quelques tests pour vérifier que tout s'est bien passé.

On essaye de se connecter en root sur le port 22 :

$ ssh root@IP.DU.SER.VEUR
ssh: connect to host IP.DU.SER.VEUR port 22: Connection refused

On essaye sur le port qu'on a défini dans la configuration:

$ ssh root@IP.DU.SER.VEUR -p 2222
root@IP.DU.SER.VEUR's password: 
Permission denied, please try again.

On essaye enfin avec l'utilisateur qu'on a ajouté précédemment:

$ ssh nom-user@IP.DU.SER.VEUR -p 2222
nom-user@IP.DU.SER.VEUR's password: 
 
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
 
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Jan 26 16:20:19 2017 from ****************

SSH - Gestion des clés

$ ssh-copy-id nom-user@IP.DU.SER.VEUR -p 2222
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
nom-user@IP.DU.SER.VEUR's password: 
 
Number of key(s) added: 1
 
Now try logging into the machine, with:   "ssh 'nom-user@IP.DU.SER.VEUR -p 2222'"
and check to make sure that only the key(s) you wanted were added.

Mail

# apt-get install exim4
(...)
Les paquets supplémentaires suivants seront installés : 
  bsd-mailx cron exim4-base exim4-config exim4-daemon-light
  liblockfile-bin liblockfile1
(...)

Une fois l'installation terminée, il faut configurer exim4 :

# dpkg-reconfigure exim4-config

On peut finalement tester un envoi de mail simple:

$ echo "Mail envoyé le $(date)" | mail -s "Test envoi de mail depuis $HOST" mon@adresse.mail

Si vous ne recevez rien, pensez à vérifier vos spams et le dossier /var/mail/ sur votre serveur.

Iptables

J'ai repris le script de nicolargo pour gérer iptables. On commence par récupérer la dernière version:

$ wget --no-check-certificate https://raw.githubusercontent.com/nicolargo/debianpostinstall/master/firewall.sh

On modifie le script pour utiliser le port SSH défini plus haut et autoriser l'envoi de mail (port 25) :

$ vim /home/nom-user/firewall.sh
(...)
# Services that the system will offer to the network
TCP_SERVICES="2222 22" # SSH + TinyHoneypot (voir plus bas)
UDP_SERVICES=""
# Services the system will use from the network
REMOTE_TCP_SERVICES="80 443 25" # web browsing
REMOTE_UDP_SERVICES="53" # DNS
# Network that will be used for remote mgmt
# (if undefined, no rules will be setup)
# NETWORK_MGMT=192.168.0.0/24
# Port used for the SSH service, define this is you have setup a
# management network but remove it from TCP_SERVICES
SSH_PORT="2222"

On copie le fichier dans /etc/init.d/ en vue de le lancer automatiquement au démarrage. On le rend exécutable avec chmod.

# cp firewall.sh /etc/init.d/firewall.sh
# chmod +x /etc/init.d/firewall.sh

On peut le tester et essayer de se connecter depuis une autre fenêtre :

# service firewall.sh test
Test Firewall rules...Previous configuration will be restore in 30 seconds
Configuration as been restored

Le mettre au démarrage :

# update-rc.d firewall.sh defaults
# service firewall.sh status
● firewall.service - LSB: Start firewall daemon at boot time
   Loaded: loaded (/etc/init.d/firewall.sh)
   Active: inactive (dead)

Pour le démarrer :

# service firewall.sh start
# service firewall.sh status
● firewall.service - LSB: Start firewall daemon at boot time
   Loaded: loaded (/etc/init.d/firewall.sh)
   Active: active (exited) since jeu. 2017-01-26 21:27:26 CET; 3s ago
  Process: 12980 ExecStart=/etc/init.d/firewall.sh start (code=exited, status=0/SUCCESS)

Fail2Ban

L'outil fail2ban permet de bannir une adresse IP.

# apt-get install fail2ban

Tinyhoneypot

Comme je l'ai fait lors de l'installation de mon dernier serveur, on peut installe un honeypot pour piéger un peu les scripts kiddies et les banir ensuite via Fail2ban. J'ai décrit cette installation sur mon shaarli.

Détails de l'installation de Tinyhoneypot.

Backup

On touche un point très important. J'ai décidé de tester Obnam qui permet le chiffrement des sauvegardes.

Plus de détails dans l'article sur l'installation d'Obnam.

Vim

On peut faire une configuration minimale dans un premier temps afin d'avoir, par exemple, la coloration syntaxique. (Ce qui aide pas mal pour modifier les fichiers de configuration!) J'ai repris la configuration de base, déjà mise sur cet article de mon blog.

$ vim ~/.vimrc
" --- OPTIONS DE BASE
" Annule la compatibilité avec Vi
  set nocompatible
 
" Affichage
  set title        "Met à jour le titre de votre fenêtre ou de votre terminal
  set number       "Affiche le numéro des lignes
  set ruler        "Affiche la position actuelle du curseur
  set wrap         "Affiche les lignes trop longues sur plusieurs lignes
  set scrolloff=3  "Affiche un minimum de 3 lignes autour du curseur (pour le scroll)
 
" Recherche
  set ignorecase   "Ignore la case lors d'une recherche
  set smartcase    "Si une recherche contient une majuscule, réactive la sensibilité à la case
  set incsearch    "Surligne les résultats de recherche pendant la saisie
  set hlsearch     "Surligne les résultats de recherche
 
" Beep
  set noerrorbells "Empêche Vim de beeper
 
" Active le comportement habituel de la touche retour en arrière
  set backspace=indent,eol,start
 
" Cache les fichiers lors de l'ouverture d'autres fichiers
  set hidden
 
" Active les comportements spécifiques aux types de fichiers comme la syntaxe et l'indentation.
  filetype plugin indent on  
  syntax enable
 
" Gestion des tabulations (Ctrl + T pour avancer d'une colonne, Ctrl + d pour reculer)
  set sw=2
 
" Gestion du clipboard système
  set clipboard=unnamed
 
" Désactiver la touche Echap (Esc)
  :imap ;; Esc
  :map ;; Esc
configuration_d_un_vps.txt · Dernière modification: 2017/02/19 16:18 par simon