mercredi 5 septembre 2012

Mon HomeServer

Salut,
Comment vas-tu?

Bon ce week-end j'ai réinstallé mon serveur je vais donc te rédiger un petit billet sur la réinstallation. Attention ce billet est technique. Il s'adresse à des utilisateurs avertis et plus particulièrement de Linux.
Il sera découpé en plusieurs chapitres qui en faite seront plusieurs billets pour faciliter l'accès direct au sujet qui t’intéresse.



Pour commencer une petite présentation

Etant un bon geek et aimant comprendre ce que j'utilise, je ne me rabat pas forcément sur les solutions les plus simples, je vais plutôt m'orienter sur des solutions avec une bonne communauté et répondant au plus à mon besoin. Je vais également choisir des services avec une configuration complète quitte à devoir utiliser des clients pas vraiment ergonomique. Ah oui le fait d'avoir une belle interface graphique n'est pas non plus important pour moi.
Donc pour résumer, je choisis des services qui collent à mes besoins et qui ont pleins d'options, même si elles sont moches.

Installation de l'OS

Avant tout il faut avoir un serveur. Un serveur c'est un PC étudié pour tourner 24h/24. Je ne vais pas te parler du matériel mais plutôt du système d'exploitation (ou OS). En effet il faut un Operating System robuste et stable avec de fréquentes mises à jours de sécurité.
Par habitude j'utilise une distribution Debian et toujours la dernière versions afin de ne pas avoir de problèmes et de bénéficier des dernières mises à jours de sécurité.
Cependant le service principale de ce serveur étant Plex j'ai rapidement regardé si Debian était bien supporté, et il s'avère que non. J'ai donc cette fois-ci installé un serveur sous Ubuntu 12.04 LTS Server en version 64 bits car mon serveur est pourvu de 4Go de RAM et que je risque de l'étendre par la suite. J'ai donc pris un (Une?) Ubuntu car Plex est disponible dans les dépôts (si tu ne sais pas ce que c'est tu peux faire une impasse sur ce tuto ou alors te renseigner sur google ou wikipedia) ce qui va grandement me faciliter la vie par la suite. De plus Ubuntu étant de plus en plus utilisé et très lié à Debian je ne serai pas perdu dans les configurations et l'arborescence. La communauté étant également très importante si je rencontre des problèmes les solutions devraient être accessibles rapidement..
J'ai donc téléchargé l'ISO puis l'ai gravé sur un CD. Enfin j'ai inséré ce CD dans mon serveur et configuré le BIOS pour démarrer dessus.
Pour la suite de l'installation je fais vite car c'est quand même très intuitif et dépend de chaque besoin. J'ai choisi la langue française, avec un clavier Latin-9 (pour la prise en charge des accent et du signe €).  Je n'ai pas installé d'interface graphique ni rien d'autre (juste un système de base sans fioriture).

Partitionnement des disques

Pour ce qui est du partitionnement des disques là il faut que tu fasse celons ton bon vouloir. Pour ma part j'ai un disque système avec 3 partitions (disque de 160Go). 10Go de Swap (il faut prendre en règle général le double de la RAM disponible). En faisant ca je prend le risque de devoir ré-installer tout mon système en cas de crash ou au moindre problème, et donc de devoir réinstaller et reconfigurer tous mes logiciels. Cela n'a que peu d'importance pour moi car dès qu'un service demande plus de 15 minutes de configuration, je le virtualise et n'ai donc pas besoin de le réinstallé.
Avant de détaillé plus mon partitionnement je t'invites à lire cette introduction au LVM. Car je n'ai pas la place de t'expliquer en détails. Pour faire simple:
un PV (Physical Volume) est un disque dur,
un VG (Virtual Group) est une grappe de disques dur,
et un LV (Logical Volume) est une partition sur cette grappe.

Si tu as la flemme de lire l'intro du lien précédent disons que plusieurs PV forment un (ou plusieurs) VG et que le VG se comporte comme un disque dur sur lequel ont crée des partitions ici appelé LV.

Pour revenir à mon partitionnement mes disques durs (2x1To et 1x2To) sont tous configurés en LVM. Tous dans le même  Virtual Group (VG) avec un Logical Volume (LV) de 2,25To pour ma partition de Donnée. Je garde actuellement d'autres LV qui étaient utilisé dans ma précédente installation. A terme (une fois que je serai sure d'avoir récupéré toutes les informations qu'elles contiennent) elles seront toutes supprimé afin de libérer cet espace disque.
Pour chaque VM installé je créer un nouveau LV. Donc pour ne pas me retrouver bloqué sans pouvoir créer d'autres VM, le reste de l'espace est ajouté au VG mais non alloué. Au besoin je me crée un nouveau LV sur lequel j'installe ma VM..
J'utilise le LVM car il me permet d'ajouter très facilement des disques dur sans avoir à changer quoi que ce soit à mon système. L'inconvénient est que si 1 de ces disques dur vient à décéder je perds toutes mes données ainsi que mes VMs.
Heureusement que je sauvegarde toutes mes données importantes ainsi que les fichiers de configurations sur un autre système :-p. Allez comme je suis sympa, tu trouvera tout ca très bientôt dans un billet sur les sauvegardes.

Voilà une petite vue d'ensemble de mon partitionnement:

Partitionnement des 4 disques physique:

/dev/sda : 160 Go
/dev/sda110 GoSwap
/dev/sda5100 Go/
/dev/sda650 Go/home
/dev/sdb : 1 To
/dev/sdb11 To/dev/myvg
/dev/sdc : 2 To
/dev/sdc12 To/dev/myvg
/dev/sdd : 1 To
/dev/sdd1100 MoInutilisé car résidu de l'ancienne installation
/dev/sdd21 To/dev/myvg


Partitionnement du LVM:

myvg4 To
/dev/myvg/racine10 GoRésidu de l'ancienne installation. Elles seront bientôt supprimé. Dès que je serais sur que plus aucun fichier n'est utile.
/dev/myvg/var5 Go
/dev/myvg/swap3 Go
/dev/myvg/home10 Go
/dev/myvg/donnee2,25 To
/dev/myvg/SVN30 Go
/dev/myvg/OwnCloud50 Go

Configuration réseau

Une fois les disques partitionné comme voulu et le système installé. La première tâche est de configurer le réseau. Sous Debian et Ubuntu le fichier à modifier est: /etc/network/interfaces. Dans la mesure où j'utilise plusieurs VM sur mon serveurs j'aime bien avoir 1 carte réseau dédié aux VM et 1 dédié au serveur physique. Je vais donc créer un bridge (ou pont en français) de manière à pouvoir accéder à mes VMs depuis le réseau local. J'ai également une troisième interface qui est réservé aux VMs nécessitant un accès depuis Internet (c'est en quelques sorte ma DMZ). Mon fichier de configuration est le suivant. Penses bien sure à l'adapter à ton réseau.

auto lo
iface lo inet loopback
#eth0 Interface principale, Port ethernet sur la carte mère. Accès normal au réseau
auto eth0
iface eth0 inet static
address 192.168.0.250
netmask 255.255.255.0
broadcast 192.168.0.255
network 192.168.0.0
gateway 192.168.0.254
allow-hotplug
################
# Bridge #
################
#br0 Interface secondaire, Carte ethernet du haut. Accès au réseau pour les VMs
auto br0
iface br0 inet static
address 192.168.0.1
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.254
bridge_ports eth1
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off
#br1 Interface tertiaire, Carte ethernet du bas. Accès internet pour les VMs "DMZ"
auto br1
iface br1 inet static
address 192.168.251.1
network 192.168.251.0
netmask 255.255.255.0
broadcast 192.168.251.255
gateway 192.168.0.254
bridge_ports eth2
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off


Après avoir fait les changement qui te correspondent penses à redémarrer ton/tes interface(s):
/etc/init.d/networking restart
Pour pouvoir installer des paquets ou accéder à internet depuis ton serveur il va te falloir configurer le serveur DNS. pour ce faire il faut modifier le fichier: /etc/resolv.conf et y mettre:

nameserver 192.168.0.254
Où 192.168.0.254 correspond à l'adresse de ton routeur ou à l'adresse des serveurs DNS de ton FAI ou encore aux DNS google (8.8.8.8), openDNS, ....
Pour mettre plusieurs DNS il faut mettre plusieurs lignes "nameserver"

Configuration SSH


L'étape suivante est la configuration du SSH. Afin de pouvoir te connecter à ton serveur à distance il te faut configurer un serveur SSH. Cela va te permettre entre autre de débrancher clavier/souris/écran de ton serveur et donc le ranger plus facilement sans qu'il gène.

Attention: Avant de débrancher définitivement tous ça il te faut vérifier dans le BIOS que l'option d'arrêt en cas d'erreur est bien réglé sur "Off" ou "Halt but keyboard" sans quoi ton serveur ne redémarrera plus si il n'a pas un clavier branché dessus.

Pré-requis

Installation du serveur ssh
apt-get update && apt-get install openssh-server

Configuration

Tu vas maintenant vérifier la configuration de ton serveur SSH. Le fichier de conf est le suivant: /etc/ssh/sshd_config et contient au moins les lignes suivantes:
Port 22 #Numéro du port pour se connecter au serveur. Par défaut: 22
#ListenAddress 0.0.0.0
#Commenté par défaut. Liste les adresses acceptant les connections SSH (utile si il a plusieurs interfaces réseau mais que 1 seul doit permettre la connexion). Pour en mettre plusieurs il faut les séparer par des virgules.
Protocol 2
#version du protocole utilisé
HostKey /etc/ssh/ssh_host_rsa_key
#Adresse des clés pour l'authentification par clé. J'en parle plus bas
HostKey /etc/ssh/ssh_host_dsa_key #Adresse des clés pour l'authentification par clé. J'en parle plus bas
HostKey /etc/ssh/ssh_host_ecdsa_key #Adresse des clés pour l'authentification par clé. J'en parle plus bas
LoginGraceTime 120 #Période pendant laquelle le serveur attend le mot de passe avant de fermer la connexion
PermitRootLogin yes #Permet d'autoriser ou d'interdire la connexion direct en tant que root. Il peut être intéressant de mettre ce paramètre à "no" ainsi pour toute intervention majeur une élévation de privilège sera nécessaire.
RSAAuthentication yes #Permet l'authentification par clé RSA
PubkeyAuthentication yes # Permet l'authentification par clé en plus du mot de passe
#AuthorizedKeysFile     %h/.ssh/authorized_keys #Commenté par défaut. Spécifie où sont stocké les clé publiques des clients autorisés. J'en parle plus bas
X11Forwarding yes #Permet ou non l'affichage d'interface graphique via SSH
PrintLastLog yes 
#Affiche un message avec la dernière date et lieu de connexion en SSH au serveur
 Je n'ai pas copié mon fichier de configuration, j'ai uniquement expliqué les points important que tu peux être amené à changer.
Une fois tout cela correctement configuré, si tu veux pouvoir accéder à ton serveur depuis internet tu dois rediriger les requêtes sur le port 22. Je te conseille cependant d'utiliser un port publique autre car le port 22 est bien connu et peu attirer l'attention de personnes malveillantes (bot).

Echange de clé

Il est possible d’autoriser les connexions à ton serveur sans passer par une demande de mot de passe. Cela va utiliser un échange de clé. Sur le poste client tu génère une clé SSL que tu copies dans le fichier %h/.ssh/authorized_keys (cf ton fichier de configuration de sshd). Il te seras alors possible de te connecter sur ton serveur plus facilement. L'avantage c'est que si le PC client est sécurisé (tu es le seul à avoir un accès et tu ne laisse pas traîner ta clé publique) cette connexion est plus sécurisé car elle ne s'appuie pas sur un mot de passe. Il est possible de compléter cet échange de clé par un mot de passe afin de renforcer encore la sécurité (dans ce cas pour te connecter il te faut être sur un PC autorisé et connaitre le mot de passe). Il est également possible de protéger la clé du client par un mot de passe. Il faudra alors "déverrouiller" la clé du client avant de pouvoir l'utiliser et se connecter au serveur.
Donc pour simplifier:
Tu génère une clé sur ton PC (exemple pour Linux mais il est possible de faire de même sous Windows):
ssh-keygen -t dsa -N "youpi"
-t défini le type de clé. Dans l'ordre de sécurité, rsa v1 < rsa v2 < dsa. Ici je choisi donc une clé DSA qui est la plus sécurisé.
-N défini la passphrase. C'est le mot de passe qui sera demandé afin de "déverrouiller" (en faites déchiffrer) cette clé. Si tu oublie la passphrase la clé devient donc inutile. Tu peux enlever cette option ainsi aucun mot de passe ne sera demandé. Mais si elle tombe entre de mauvaises mains ton serveur y tombera également.
Dans les retours de cette commande est signifié où sont stocké tes clés. Habituellement ~/.ssh/ (tu peux changer cet endroit avec l'option -f).
Dans ce dossier tu trouveras plusieurs fichiers:
id_rsa = Ce fichier est strictement privée. Il ne doit pas être communiqué et ne doit pas quitter ce PC.
id_rsa.pub = Ce fichier est ta clé privée. C'est lui qui doit être copié sur le serveur (on verra plus tard)
known_hosts = ce fichier contient les identifiants des serveurs auxquels tu t'es déjà connecté. Ainsi si le serveur change tu ne pourras plus t'y connecter sans supprimer la ligne correspondante dans ce fichier. Attention: Si le serveur change cela peut vouloir dire que sa sécurité est compromise donc il n'est peut-être pas très malin de te connecter à ce serveur.

Et maintenant il ne te reste plus qu'à copier le contenu de ~/.ssh/id_rsa.pub de ton client vers le fichier: ~/.ssh/authorized_keys de ton serveur. Et te voila maintenant capable de te connecter en SSH de façon plus sécurisé.

Final

Tu as maintenant un serveur opérationnel que tu peux placer dans un coin de ta maison relié au réseau et sans clavier, ni écran. Tu peux également t'y connecter et ajouter des services.

Tu as déjà eu droit à la mise en place d'un remplaçant à Dropbox, Drive et autres systèmes de Cloud Storage. Très bientôt tu verras fleurir des tutos sur comment occuper ce serveur. Je te réserve notamment les articles suivants:

  • Comment sécuriser mon HomeServer simplement.
  • Installer une plate-forme de virtualisation
  • Sauvegarder ses données et ses fichiers de configuration.
  • Installer ton MediaCenter.
  • Installer un serveur VPN.


Et bien d'autres choses pas toujours sympa-sympa.



So enjoy!

Aucun commentaire: