Jusqu'ici, j'utilisais uniquement des VPS Gandi ( comme par exemple ici ) . Assez chère, cette solution présente pas mal d'avantages dont une extrême souplesse de gestion de ressources sans avoir à se préoccuper de matériel, le tout bien sur avec une gestion très autonome de son OS et donc de son serveur.
Les services que j'héberge nécessitant jusqu'ici peu de disque, ça m'allait bien. Néanmoins , une galerie photo et un espace d'échange de partages et d'échange de fichier AjaXplorer vont assez certainement exiger plus d'espace dans les semaines et mois qui viennent. J'en profite donc pour tester les toutes dernières offres VPS d'OVH les Virtual Kimsufi (vKS). 10 E TTC pour 1 vCPU, 1Go de RAM et 50 Go de disque , c'est un profil qui correspond plutôt bien à la fois à mon budget et mon usage.
Allons y donc pour les étapes de préparation de base de cet hébergement dédié avant installation des services qui m'intéressent.
L'interface de gestion OVH
Avant tout, aller faire un tour dans la console d'administration. Ayant personnellement un abonnement internet j'ai OVH , je suis déjà habitué au manager ovh, très clair et simple à aborder :
La console générale d'accès au service

La partie dédiée à la gestion du serveur vKS:

Avec des fonctionnalités très classiques:
- Reboot
- Réinstallation ( Debian 6.0, CentOS 6.0 et Ubuntu 10.04 , 10.10 , 11.04 disponibles )
- Réinitialisation du mot de passe root
- Paramètres avancés permettant la saisie du reverse DNS et donc du nom de domaine à associer à l'IP du serveur.
Le vKS à la sauce Debian est livré avec un utilisateur root et un mot de passe envoyé par mail. Après commande en ligne le serveur est dispo en quelques minutes. En cas de réinstallation, 1 ou 2 minutes suffisent pour avoir un serveur neuf. Je le sais, j'ai testé X fois après de multiples erreurs de configuration de pare-feu et de serveur ssh se soldant par la perte de la connexion à distance au serveur...
Première connexion au serveur vKS :
ssh root@IP_DU_SERVEUR
et utiliser le mot de passe fourni par OVH
une fois connecté en root :
:~#apt-get update :~#apt-get upgrade
Ensuite on personnalise le mot de passe root :
:~# passwd root
On crée alors directement un utilisateur hors root :
:~# adduser sorrodje
Première opération de sécurité : installation de nano et modification de la configuration ssh.
:~# apt-get install nano
:~# nano /etc/ssh/sshd_config
On modifie le port d'écoute ( d'origine à 22 ) pour adopter un port personnalisé et on interdit les connexions en root:
# Package generated configuration file
# See the sshd_config(5) manpage for details
# What ports, IPs and protocols we listen for
Port 12345 ...
LoginGraceTime 120
PermitRootLogin no ...
NotaBene: Attention , avec le PermitRootLogin à no, on interdit à OVH d'utiliser leur connexion root sur notre machine. Cette possibilité est en effet prévue à l'installation (voir l'existence du fichier .ssh/authorized_keys2 dans le /home de root) afin qu'VH puisse intervenir sur la machine. A vous donc de voir si vous voulez laisser ou non cette possibilité. Si vous voulez laisser une possibilité à OVH de se connecter en root via ssh au vKS , il faut passer la direcive PermitRootLogin à "without-password" et non plus à "no" (et en plus laisser en écoute sur le port 22 je présume)
On redémarre le serveur ssh:
:~#service ssh restart
A partir de là , on peut se connecter en ssh avec l'utilisateur crée en s'authentifiant par mot de passe . On reviendra ensuite interdire l'accès via mot de passe une fois adoptée et implantée l'authentification par clés publiques/privées.
Sur notre PC Ubuntu/Debian, créer la clé si ce n'est pas déjà fait :
:~$ssh-keygen -t dsa
et laisser l'endroit d'enregistrement par défaut à savoir le répertoire caché dans le /home: ~/.ssh
Envoyer alors la clé ainsi générée sur le serveur. Si une clé avait été créée pour un précédent serveur, on peut la réutiliser sans en créer une nouvelle:
:~$ssh-copy-id -i ~/.ssh/id_dsa.pub "sorrodje@IP_DU_SERVEUR -p 12345"
Ne pas oublier d'utiliser le port ssh définit dans /etc/ssh/sshd_config et le nouvel utilisateur créé. La connection est OK via l'identification par clés et on peut interdire l'authentification par mot de passe:
:~#nano /etc/ssh/sshd_config
On décommente et on modifie la ligne dédiée du fichier:
... # Change to no to disable tunnelled clear text passwords PasswordAuthentication no ...
L'accès au serveur est donc maintenant réservé à l'utilisateur sorrodje via le port 12345 , seul détenteur d'une clé d'authentification pour se connecter.
Installation et configuration d'un parefeu.
Je pensais utiliser ufw mais cet outil simplifié pour configurer Iptables pose des soucis de compatibilité avec une Machine virtuelle openVZ (ce qui est le cas des vKS). Donc on passe par Iptables et un script:
:~#nano /etc/init.d/firewall
et on crée le contenu suivant:
#!/bin/sh
### BEGIN INIT INFO
# Provides: iptables
# Required-Start:
# Should-Start:
# Required-Stop:
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-description: iptables
# Description: Firewall
### END INIT INFO
### RAZ
iptables -t filter -F
iptables -t filter -X
### FERMETURE TOTALE PAR DEFAUT
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
### MAINTIEN DES CONNEXIONS EXISTANTES
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
### AUTORISATION DU LOOPBACK
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
### AUTORISATION DU PING
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT
### AUTORISATIONS LIEES AUX SERVICES
# SSH port 22
#iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
#iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
# SSH port 12345
iptables -t filter -A OUTPUT -p tcp --dport 12345 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 12345 -j ACCEPT
# DNS
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
# HTTP
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
# HTTPS
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
A noter la neutralisation des règles concernant le port 22 et l'ouverture du port 1234 pour le ssh et l'utilisation de règles pour les ports 80 et 443 en prévision de l'installatio d'un serveur http/https. pour chaque service nécessitant l'ouverture d'un port particulier, il faut donc rajouter les règles iptables correspondantes.
L'en tête est nécessaire pour l'incorporation correcte du script dans le système de démarrage.
#/etc/init.d/firewall
Pour une version plus "intelligente" et perfectionnée de ce genre de script le Wiki Debian-fr.org est votre ami.
Installation/configuration de fail2ban.
Fail2ban permet comme son nom l'indique de bannir pour une durée donnée ( par défaut 10 Mn ) les IPS qui font X erreurs (3 par défaut , 6 par défaut pour ssh) la connexion à tel ou tel service. Un serveur ssh fait assez classiquement l'objet de pas mal de tentatives d'intrusion d'où l'intérêt d'en protéger l'accès via fail2ban même si on évite déjà pas mal d'essais frauduleux en utilisant un autre port que le 22.
:~# apt-get install fail2ban
Puis il ne reste qu'à stipuler le port spécifique utilisé pour ssh en lieu et place du port par défaut. Après une installation fraîche, fail2ban est configuré pour surveiller uniquement le ssh , et bannir 10 mn les IP commettant 6 échecs consécutifs de connexion. Pour cela il faut éditer le fichier /etc/fail2ban/jail.conf et modifier la partie liée à ssh.
:~# nano /etc/fail2ban/jail.conf
...[ssh]
enabled = true
port = 12345
filter = sshd
logpath = /var/log/auth.log
maxretry = 6 ...
Et on obtient ainsi un cerbère de port ssh distribuant les coups de pied au derrière des intrus.
Ceinture et bretelles : portsentry ou comment se prémunir des sniffeurs de ports.
:~#apt-get install portsentry
Puis Au 13/03/2012: Paramétrage intégralement repris du wiki Debian : http://www.isalo.org/wiki.debian-fr/index.php?title=Portsentry
Modification du /etc/apt/sources.list
A la livraison on a ça:
deb http://ftp.debian.org/debian squeeze main contrib non-free
deb http://security.debian.org squeeze/updates main contrib non-free
Ce qui est bien mais il manque le dépôt ex-'volatile" devenu squeeze-updates. Ce dépôt contient des MAJ particulières pour des paquets nécessitant des MAJ très régulières comme par exemple l'antivirus ClamAV et ses bases de données. Ici je le rajoute dans la perspective d'utiliser clamAV pour surveiller les fichiers de mon Ajaxplorer
Il suffit d'éditer /etc/apt/sources.list avec par exemple nano et rajouter la ligne qui va bien:
deb http://ftp.debian.org/debian squeeze main contrib non-free
deb http://security.debian.org squeeze/updates main contrib non-free
deb ftp://ftp.fr.debian.org/debian/ squeeze-updates main contrib non-free
Il faudra bien penser ( Ceci est un EDIT du 21/03/2012...ahum...) d'ouvrir le port ftp dans les règles de parefeu... et donc rajouter les règles suivantes dans le fichier /etc/init.d/firewall :
# FTP
iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT
#iptables -t filter -A INPUT -p tcp --dport 21-j ACCEPT
puis faire appliquer le changement par :
#/etc/init.d/firewall
Je laisse la ligne INPUT commentée et donc inactive. Elle serait à décommenter/Activer en cas d'installation d'un serveur FTP sur la machine dotée de ce firewall.
Voilà une bonne base avant d'attaquer la mise en place des services proprement dit.
04/07/2012: Un exemple d'application ici avec l'installation de A à Z d'un petit serveur web sur un micro VKS généreusement offert par OVH pour les test de mise en production d'un nouveau data-center.
Quelques sources utilisées pour compléter/éclairer mon expérience personnelle :
46 commentaires
vendredi 23 mars 2012 à 16:27 kano a dit : #1
samedi 24 mars 2012 à 10:46 Sorrodje a dit : #2
samedi 24 mars 2012 à 13:45 kano a dit : #3
mercredi 28 mars 2012 à 11:58 Pat a dit : #4
mercredi 28 mars 2012 à 16:32 Sorrodje a dit : #5
jeudi 29 mars 2012 à 17:51 Momo a dit : #6
vendredi 30 mars 2012 à 10:53 sorrodje a dit : #7
vendredi 30 mars 2012 à 18:34 Pat a dit : #8
samedi 31 mars 2012 à 15:17 Aurelien a dit : #9
samedi 31 mars 2012 à 15:28 sorrodje a dit : #10
dimanche 01 avril 2012 à 14:53 xPopey a dit : #11
dimanche 01 avril 2012 à 15:22 xPopey a dit : #12
dimanche 01 avril 2012 à 16:24 Pat a dit : #13
dimanche 01 avril 2012 à 18:01 Ed a dit : #14
dimanche 01 avril 2012 à 21:11 sorrodje a dit : #15
dimanche 01 avril 2012 à 21:20 sorrodje a dit : #16
dimanche 01 avril 2012 à 21:27 ed a dit : #17
dimanche 01 avril 2012 à 22:00 sorrodje a dit : #18
dimanche 01 avril 2012 à 22:16 ed a dit : #19
dimanche 01 avril 2012 à 22:17 ed a dit : #20
dimanche 01 avril 2012 à 22:47 sorrodje a dit : #21
lundi 02 avril 2012 à 16:24 Pat a dit : #22
lundi 02 avril 2012 à 16:28 Pat a dit : #23
lundi 02 avril 2012 à 19:42 Bern a dit : #24
lundi 02 avril 2012 à 19:55 Bern a dit : #25
lundi 02 avril 2012 à 21:27 anon a dit : #26
mardi 03 avril 2012 à 14:42 Pat-trick a dit : #27
mardi 03 avril 2012 à 15:10 sorrodje a dit : #28
mardi 03 avril 2012 à 21:09 plopyplopa a dit : #29
mardi 03 avril 2012 à 22:29 sorrodje a dit : #30
mercredi 04 avril 2012 à 15:15 plopyplopa a dit : #31
vendredi 06 avril 2012 à 15:53 Escaflowne a dit : #32
jeudi 24 mai 2012 à 20:54 numero8 a dit : #33
vendredi 22 juin 2012 à 19:57 Ludo a dit : #34
lundi 25 juin 2012 à 11:48 Sorrodje a dit : #35
lundi 25 juin 2012 à 14:40 Ludo a dit : #36
lundi 25 juin 2012 à 17:47 Sorrodje a dit : #37
lundi 25 juin 2012 à 21:52 Sorrodje a dit : #38
vendredi 21 septembre 2012 à 17:49 Visier a dit : #39
dimanche 07 octobre 2012 à 20:13 fred a dit : #40
vendredi 23 novembre 2012 à 18:16 Matt a dit : #41
samedi 24 novembre 2012 à 15:09 Sorrodje a dit : #42
mardi 27 novembre 2012 à 14:14 bobi a dit : #43
mardi 22 janvier 2013 à 15:47 Rouche a dit : #44
mardi 22 janvier 2013 à 15:54 Sorrodje a dit : #45
mardi 22 janvier 2013 à 15:56 Rouche a dit : #46