le boxon de Lex

[ Tutoriel ] Mettre en place un serveur dédié

Mettre en place et administrer un serveur dédié demande de la débrouillardise. C'est très enrichissant, mais il faut y passer un peu de temps. Je donne les grandes étapes et des pointeurs. Prenez le temps de lire les différents liens.

Il y a de multiples raisons pour lesquelles on peut vouloir un serveur dédié. Je vais documenter ici la mise en place d'un tel serveur pour héberger des vidéos. Un serveur dédié est une machine que l'on loue chez un hébergeur web, et que l'on va administrer à distance (via une connexion SSH). La majorité des gens utilisent leur ordinateur (et tablettes, et smartphones) via une interface graphique. Pour ce qui est d'un serveur à distance, vous le ferez via de la ligne de commande. Autant illustrer ça d'emblée avec une capture d'écran (qui n'est pas de moi)...

ext - mettre en place un serveur dedie - 2

Location du serveur

Personnellement, j'utilise Kimsufi.
C'est une filiale de OVH. Les serveurs y sont moins chers qu'ailleurs, les prix bas s'expliquant par un support moindre (ce sera plus compliqué si vous avez besoin d'aide). Vous avez aussi d'autres hébergeurs, n'hésitez pas à vous renseigner. Un serveur dédié, c'est une bonne occasion pour apprendre, mais il faut être prêt à y passer un peu de temps.

Dans notre cas, ce qu'il nous faut, c'est de l'espace disque. Le CPU et la mémoire sont moins importants : nous utiliserons un serveur Nginx, moins gourmand que d'autres solutions. On va dire que 1 To (1000 Go) est un minimum. 2 To, c'est bien. Pas besoin de plus.

ext - mettre en place un serveur dedie - 1

Si l'on prend les offres du mois de novembre, le serveur avec 2 To nous coûterait moins de 10 € par mois, avec trafic illimité. Pas de censure ou de suppression impromptue de la part d'un acteur comme Youtube ou Mediafire. Et une durée de rétention qui ne dépend que de vous : vous supprimez les fichiers quand vous le voulez, idéal pour des archives. Une fois l'offre choisie, vous vous inscrivez, vous choisissez votre type de système (je vous conseille Linux - Debian, CentOS, voire Ubuntu), vous renseignez vos informations bancaires (on peut en général payer via Paypal) et sous deux jours (souvent moins), vous allez recevoir par e-mail des informations de connexion : l'adresse IP de votre serveur, un nom d'utilisateur et un mot de passe. Le tout vous permettra de vous connecter sur l'administration de ce serveur, sur lequel le système désiré aura été pré-installé. Dans ce tutoriel, j'utilise Debian.

Première connexion au serveur

Si vous êtes déjà sous Linux ou Mac, il vous suffit d'ouvrir un terminal système, et de taper la commande ssh <nom d'utilisateur>@<addresse ip>. Le mot de passe vous sera demandé juste après.

Si vous êtes sous Windows, je vous recommande d'installer Putty.
Une fois installé, lancez-le. Dans l'interface d'accueil, indiquez l'emplacement de la machine et cliquez sur le bouton Open.

ext - mettre en place un serveur dedie - 3

Une nouvelle fenêtre s'ouvre. Fournissez le nom d'utilisateur, tapez Entrée, puis donnez votre mot de passe. Vous voilà connecté à la machine.

Configuration du serveur

La première chose à faire est de sécuriser votre serveur.
Il existe plusieurs articles en ligne sur ce sujet. Je vous invite à lire ceux qui suivent...

* https://docs.ovh.com/fr/dedicated/securiser-un-serveur-dedie/
* https://www.alsacreations.com/tuto/lire/622-Securite-firewall-iptables.html
* https://openclassrooms.com/fr/courses/1197906-securiser-son-serveur-linux

Ils disent tous à peu près la même chose, même si certains détails varient. Lisez-le plusieurs fois avant de vous lancer, même si c'est obscur au début. Sans remettre toutes les étapes qui y sont décrites, je vais vous expliquer le principe des actions à entreprendre.

1. Premièrement, modifier le port SSH.
Par défaut, le protocole SSH est associé au port 22. Un pirate tentera donc sa chance dés le début sur ce port. Mettez une autre valeur, par exemple entre 10000 et 20000. Notez bien la valeur quelque part.

2. Ensuite, désactivez l'accès SSH pour l'utilisateur root.
C'est lui l'administrateur de la machine, il a tous les droits. Si l'on autorise cet utilisateur à se connecter, un pirate peut tenter une attaque en force brute pour trouver le mot de passe et devenir maître de la machine. Donc, on interdit la connexion root en SSH. De plus, on créé un deuxième utilisateur, sans droit d'administration, qui lui, a le droit de se connecter en SSH. Mettez un mot de passe assez long, que vous noterez quelque part. C'est par cet utilisateur que vous vous connecterez la prochaine fois.

3. Modifiez le mot de passe de l'utilisateur root.
Notez-le bien. Et ne mettez pas un truc trop simple !

4. Installez fail2ban.
Ce logiciel empêche les attaques de type force brute pour essayer de trouver le mot de passe de votre utilisateur. Force brute, cela signifie que l'on tente toutes les combinaisons possibles. Avec un utilisateur autre que root (il faut deviner son son nom d'abord), un mot de passe complexe, un port SSH non-standard (qu'il faut trouver), et fail2ban, vous réduisez grandement les risques d'être piraté.

5. Vous pouvez aussi installer Rkhunter.
Cet utilitaire va vérifier votre système, à la recherche de certains programmes nocifs.

6. Installez et configurez un pare-feu.
Sur Linux, c'est iptables. Comme cela est expliqué dans les articles, il est possible de mettre les règles iptables dans un fichier (/etc/init.d/firewall), qui est chargé à chaque démarrage. Je vous mets le contenu du mon fichier à moi ici (seul le port SSH diffère).

#!/bin/sh 
### BEGIN INIT INFO
# Provides:          custom firewall
# Required-Start:    $remote_fs $syslog $network
# Required-Stop:     $remote_fs $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Configure IpTables
# Description:       Defines the rules for the firewall.
### END INIT INFO
 
# Reset the rules
iptables -t filter -F 
iptables -t filter -X 
 
# Block all the traffic
iptables -t filter -P INPUT DROP 
iptables -t filter -P FORWARD DROP 
iptables -t filter -P OUTPUT DROP 
 
# Keep already established connections and localhost
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
iptables -t filter -A INPUT -i lo -j ACCEPT 
iptables -t filter -A OUTPUT -o lo -j ACCEPT 
 
# ICMP (Ping)
iptables -t filter -A INPUT -p icmp -j ACCEPT 
iptables -t filter -A OUTPUT -p icmp -j ACCEPT 
 
# SSH
iptables -t filter -A INPUT -p tcp --dport 19287 -j ACCEPT 
iptables -t filter -A OUTPUT -p tcp --dport 19287 -j ACCEPT 

# FTP (outgoing for APT)
iptables -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPT 
 
# DNS
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT 
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT 
iptables -t filter -A INPUT -p tcp --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

# NTP (server clock) 
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT

# Limit DoS
iptables -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT

# Basic protection against port scanning
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

Petite parenthèse : il est possible aussi de sécuriser la connexion au serveur avec une clé SSH. C'est généralement ce que les véritables administrateurs système font. Mais si vous le faîtes, seule la machine avec la clé pourra se connecter dessus. Je ne documente pas cette partie, mais je vous informe que c'est possible. Si j'écris un article sur le montage d'un deuxième serveur (de secours), j'expliquerai certainement ça. Sans clé, il vous faudra entrer et un nom d'utilisateur, et un mot de passe. Par comparaison, avec une clé, il vous faut juste un nom d'utilisateur, et la clé sur votre machine. Seule votre machine pourrait se connecter au serveur distant. Fin de la parenthèse.

N'hésitez pas à relancer la machine à la fin, avec la commande reboot.

Reconnexion au serveur

Une fois que tout cela est fait, la sécurisation est terminée.
Vous avez dû être déconnecté lors du redémarrage. Relancez une connexion. A tout hasard, vous pouvez tenter avec l'utilisateur root : cela devrait échouer (sinon, c'est que vous n'avez pas bien fait la sécurisation). Je redonne les commandes de connexion ici. Sur Linux ou Mac, c'est ssh -p <le port que vous avez choisi> <nom d'utilisateur>@<addresse ip>. Le mot de passe vous sera demandé après.

Avec Putty, mentionnez les mêmes informations.
Une fois rentrées, mettez un nom dans le champs Saved Sessions, et appuyez sur le bouton Save. Lorsque vous voudrez vous reconnecter, il suffira de sélectionner le nom, d'appuyer sur le bouton Load, puis de finir par Open.

ext - mettre en place un serveur dedie - 4

Si la sécurisation a bien été faite, vous devriez être connecté, en tant qu'utilisateur normal. Pour basculer en administrateur, tapez la commande su, puis indiquez le mot de passe de l'utilisateur root. Vous aurez besoin d'être administrateur pour la suite.

En cas de problème

La sécurisation est la première chose à faire sur votre serveur.
Si quelque chose se passe mal, vous pouvez vous connecter sur l'interface de Kimsufi, et réinitialiser votre serveur. Il vous suffit ensuite de tout recommencer. Dans la mesure où tout est effacé et réinstallé lors de la réinitialisation, il vaut mieux faire ça avant d'avoir mis des fichiers sur le serveur !

Installation du serveur web

Vous avez sécurisé votre machine, c'est bien.
Il faut maintenant installer un serveur web, c'est à dire le logiciel qui va permettre aux autres de télécharger vos fichiers. Créez un répertoire fichier : mkdir -p www/fichiers

Installez maintenant nginx : apt-get update && apt-get upgrade && apt-get install nginx
Normalement, il faudrait mettre à jour la configuration du pare-feu. Si vous utilisez le fichier que j'ai donné plus haut, cette configuration est déjà là (le port 80, est déjà ouvert). Il vous faut maintenant configurer Nginx. Voilà le fichier de configuration que j'utilise.

user www-data;
worker_processes 2;
pid /var/run/nginx.pid;

events {
	worker_connections 768;
	# multi_accept on;
}

http {
	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;
	# server_tokens off;

	# server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;
	gzip_disable "msie6";

	##
	# Limit connections
	##

	# Limit the number of connections per single IP
	limit_conn_zone $binary_remote_addr zone=one:10m;

	# Limit the number of requests for a given session
	limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=3r/s;
	
	# Create a variable to get the file name
	map $request_uri $the_filename {
		~.*/(?[^/?]*)$ $captured_the_filename;
	}

	##
	# Server
	##
	server {
		listen 80 default_server;
		server_name ADRESSE_IP_A_REMPLACER videos.toto.fr;
		root /home/toto/www;
		error_page 503 http://toto.fr/videos/$the_filename/oops;
		index index.html;

		location / {
			rewrite ^ http://toto.fr/videos;
		}

		location /fichiers/ {			
			default_type application/octet-stream;
			limit_conn one 1;
			limit_rate_after 270m;
			limit_rate 600k;
			proxy_max_temp_file_size 1924m;
			valid_referers none blocked www.toto.fr toto.fr;
			if ($invalid_referer) {
				rewrite ^ http://toto.fr/videos/vol;
			}	
		}
	}
}

Ce n'est pas exactement mon fichier.
Je l'ai simplifié pour l'exemple. Remplacez l'adresse IP par celle de votre serveur. Si vous avez en plus un nom de domaine, vous pouvez le rajouter dedans (il suffit de remplacer toto.fr par votre site).

J'ai rajouté en plus quelques contraintes : téléchargement d'un fichier à vitesse maximale jusqu'à 270 Mo, limitation du débit à 600 Ko/seconde au-delà, taille maximale des fichiers fixée à 1924 Mo, validation du referrer (si quelqu'un essaye de poster un lien vers le serveur depuis un autre site, le téléchargement échouera), et une connexion active par utilisateur (une personne ne peut pas télécharger deux fichiers en même temps). Toutes ces règles visent à une répartition équitable de la bande passante, de sorte à ce que chacun puisse télécharger dans de bonnes conditions. Après, à vous d'ajuster ces règles en fonction de vos besoins.

La liste des options pour Nginx sont documentées sur le site du projet.

Vous pouvez mettre ce contenu dans le fichier "/etc/nginx/nginx.conf".
Utilisez sudo nano /etc/nginx/nginx.conf pour l'écrire, ce sera plus simple. Puis utilisez les touches Ctrl et O pour sauvegarder le contenu du fichier. Et Ctrl + X pour le fermer. Redémarrez ensuite le serveur : sudo service nginx restart. Normalement, tout devrait être bon. Faîtes un test : echo "Ceci est un test." >> www/fichiers/test.txt Puis allez dans votre navigateur internet, à l'adresse http://<ip-du-serveur>/fichiers/test.txt. Vous devriez voir le contenu du fichier.

Envoi des fichiers

Votre serveur a été sécurisé et Nginx est opérationnel.
Vous pouvez maintenant mettre en ligne vos fichiers. Sous Linux et Mac, vous devez pouvoir utiliser la commande scp.

Sous Windows, je vous recommande le logiciel WinSCP. Il propose une interface graphique, similaire à celle d'un logiciel FTP. Remplissez les informations de connexion, et bénéficiez d'une interface graphique pour mettre en ligne vos fichiers.

Mise à jour

Pensez régulièrement à mettre à jour votre serveur.
Il suffit de vous connecter dessus en ligne de commande, et de taper sudo apt-get update && sudo apt-get upgrade.

Précaution

Vous allez uploader des vidéos sur ce serveur.
Mais ce serveur peut tout à fait tomber en panne. Veillez toujours à conserver des sauvegardes chez vous. Il est aussi possible de mettre en place un deuxième serveur de secours. Je détaillerai peut-être ça dans un autre article.



Aucune Réponse

N'hésitez pas à laisser un commentaire grâce au formulaire ci-dessous.
Avant de m'informer qu'un lien « videos.le-boxon-de-lex.fr » est mort, merci de vérifier que vous ne téléchargez qu'une vidéo à la fois.

Laisser une réponse