Maniatux's Blog

Welcome to the internet

Monter son serveur WEB

Rédigé par Xavier - -

Avertissement : Cet article n'est pas propre, beaucoup trop de choses sont traitées en même temps et cela entraine des risques de confusion. De plus certains passages peuvent être obsolètes. Pour avoir des précisions n'hésitez pas à me contacter.

Voici un tutoriel expliquant de A à Z comment installer votre propre serveur WEB accessible depuis internet afin d'héberger vous-même votre site/blog.

serveur

Logiciels:

  • debian GNU/Linux
  • Lighttpd
  • OpenSSH
  • iptables

Niveau requis:

  • Savoir installer debian
  • Avoir déjà tapé quelques lignes de commandes
  • Savoir paramétrer votre routeur (freebox, livebox...)

Choix d'une machine

La première étape consiste naturellement à trouver sur quelle machine vous allez installer votre serveur! Sachez qu'une grosse puissance n'est pas nécessaire, au contraire. Beaucoup d'amateurs réalisent des serveurs avec du vieux matériel, par exemple du Pentium II...

Néanmoins l'inconvénient de ces machines est qu'elles consomment beaucoup d'électricité, donc elles sont idéales pour faire des essais mais si vous envisagez de les faire fonctionner 24h/24 il faudra investir dans du matériel plus économique. Je pense par exemple à un nettop, et on peut pousser le vice jusqu'a une carte mini-ITX comme les Alix1.d à base d'AMD Geode (ce que j'utilise) ou pourquoi pas du pico-ITX avec la Beagle Board (en ARM).

Installation de debian

Actuellement la version stable est la 5.0, appelée Lenny. Mais la prochaine, Squeeze, est déjà bien avancée et vous pouvez quasiment l'utiliser sans risques. Néanmoins il y a parfois des bugs à l'installation (c'est encore en testing) et dans mon cas il fut impossible de l'installer sur l'Alix1.d, le lecteur CD (en USB) étant mal reconnu. Je me suis donc rabattu sur Lenny.

Procédez donc à l'installation du système minimal, en configurant le partitionnement comme vous le sentez (avec de la swap quand même).

Bien avoir un accès direct à internet

Si vous passez par un routeur comme par exemple une freebox, votre machine n'accédera pas à internet directement. Cela pose problèmes pour réaliser un serveur. La solution consiste soit à désactiver le mode routeur, et dans ce cas vous récupérez l'IP publique sur votre machine, ou alors vous la placez en DMZ.

Pour cela tapez ifconfig sur votre machine pour avoir l'adresse MAC de votre carte réseau, puis dans votre routeur indiquez à cette adresse qu'elle doit toujours avoir la même IP. Puis définissez cette IP en DMZ. Voici par exemple ce que j'ai fait sur ma freebox:


Configuration routeur freebox.

Et voici les branchements réseau que j'utilise chez moi:


Mon réseau

La machine "support" est celle que j'utilise pour paramétrer le serveur (via SSH) ou simplement pour rechercher de la doc et faire les tests.

Lorsque ma carte réseau est détecté par la freebox (son adresse MAC est spécifiée en bas), on lui attribue l'adresse 192.168.0.16 et comme par hasard, au dessus, j'ai indiqué que cette IP doit être en DMZ :)

Serveur SSH

Un véritable serveur s'administre à distance, sans besoin d'avoir un écran ou clavier connecté. Nous pouvons utiliser SSH pour cela.

# apt-get install openssh-server

Mais pour éviter que les attaques et agressions soient "trop simples" nous pouvons changer le port SSH, qui est 22 par défaut:

# nano /etc/ssh/sshd_config

Puis au début vous trouverez une ligne "Port 22" il suffit de remplacer cette valeur par une que vous choisissez, par exemple 3444 (en espérant qu'il ne soit pas déjà pris). Relancez SSH en tapant:

# /etc/init.d/ssh restart

Pour vous connecter en SSH à distance, sur votre machine "SUPPORT" entrez la commande "ssh" suivie de l'utilisateur@adresseip puis de -p PORT. Dans notre cas la commande est:

$ ssh root@192.168.0.16 -p 3444

Il se peut que cela ne fonctionne pas à cause du firewall. Mais nous verrons plus loin comment le configurer.

Serveur web

La référence est Apache mais il existe une alternative plus légère et plus simple à utiliser: lighttpd.

# apt-get install lighttpd

Au passage installez aussi les paquets php5:

# apt-get install php5-cgi php5-gd

La librairie GD permet de traiter des images, créer des miniatures notamment. Activez le support du cgi dans lighttpd puis relancez-le:

# lighty-enable-mod fastcgi
# /etc/init.d/lighttpd force-reload

Si quelqu'un entre votre adresse IP publique dans son navigateur, il doit arriver sur une page générée par lighttpd. Dans le cas contraire il aura une page d'erreur.

Si vous entrez l'ip publique dans la navigateur de votre machine "SUPPORT", cela ne fonctionnera pas il faudra entrer l'ip locale (192.168.0.16). Mais si un de vos amis sur Jabber entre votre ip publique il devrait voir votre serveur. Si cela ne fonctionne pas, pas de panique nous allons paramétrer le firewall

Vos pages web devront être mises dans /var/www ou alors dans votre répertoire personnel puis public_html (voir cette page). Le propriétaire des fichiers doit être "www-data", ce qui se fait de la façon suivante:

# chown -R www-data:www-data DOSSIER

Puis les permissions en 750:

# chmod -R 750 DOSSIER

Vous pouvez maintenant afficher vos propres pages grâce à lighttpd.

Firewall

Sur debian squeeze et Ubuntu il est possible d'utiliser ufw qui est une interface à iptables. Mais sur lenny ufw n'est pas présent nous utiliserons donc le bon vieux iptables.

iptables fonctionne sous forme de commandes à entrer dans le bash et elles sont "oubliées" à chaque redémarrage. Il faut donc créer un script pour les relancer à chaque fois. Créons un fichier "iptables":

# nano iptables

Puis recopiez les lignes suivantes:

#!/bin/bash

## On réinitialise le firewall ##
iptables -F
iptables -t nat -F
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

## On accepte le loopback ##
iptables -A INPUT -i lo -j ACCEPT

## On accepte les connexions qui seront demandées par l'ordinateur ##
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

## On accepte la connexion en ssh ##
iptables -A INPUT -i eth0 -p tcp --dport 3444 -j ACCEPT

## On accepte la connexion à lighttpd (serveur web) ##
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT

## On rejette le reste ##
iptables -A INPUT -j DROP

Bien sûr adaptez ce script selon votre configuration, vérifiez que votre interface réseau s'appelle bien "eth0" et que vous avez bien mis le port "3444" pour OpenSSH. Rendez le script exécutable:

# chmod a+x iptables

Puis lancez-le pour tester:

# ./iptables

Vérifiez que vous pouvez vous connecter en SSH et accéder à votre serveur WEB. Si c'est bon, vous pouvez ajouter ce script aux services à lancer au démarrage:

# cp iptables /etc/init.d/
# update-rc.d iptables defaults

Et voilà, votre parefeu est maintenant configuré!

Avoir un nom de domaine

Actuellement le seul moyen d'accéder à votre machine à distance, c'est de taper son adresse IP ce qui n'est pas très pratique surtout si elle est dynamique. Le site DynDNS vous permet de souscrire gratuitement et rapidement à un nom de domaine. Choisissez-en un. Sur notre serveur nous allons ensuite utiliser le logiciel ddclient qui se connectera régulièrement à dyndns pour lui indiquer votre nouvelle adresse ip, et ce dernier pourra ensuite rediriger correctement votre nom de domaine.

# apt-get install ddclient

Répondez aux quelques questions posées. Si vous ignorez certaines réponses, ce n'est pas grave car nous allons affiner et corriger le fichier de configuration.

# nano /etc/ddclient.conf

Et faites-le ressembler à ça:

pid=/var/run/ddclient.pid
protocol=dyndns2
use=web
server=members.dyndns.org
login=LOGIN
password='PASSWORD'
VOTREURL

Ensuite nous allons demander à ddclient de fonctionner en tant que daemon, qui se lancera au démarrage:

# nano /etc/default/ddclient

Et modifiez run_daemon="false" par "run_daemon="true"

Lancez-le ensuite:

# /etc/init.d/ddclient start

Désormais si un de vos contacts Jabber entre l'adresse que vous avez créé, il sera redirigé vers votre serveur!

Mais sur votre ordinateur SUPPORT cela ne marchera pas. Pour y remédier il y a une astuce:

# nano /etc/hosts

Et en dessous les paramètres se référant à 127.0.0.1 ajoutez:

192.168.0.16 VOTREURL

En modifiant bien entendu l'ip que j'ai mis par celle de votre serveur sur le réseau local. Désormais, dans la machine SUPPORT en entrant votre URL vous serez correctement redirigé sur votre serveur.

Aller plus loin

Vous pouvez installer mysql-server si vous voulez disposer d'une base de données pour faire fonctionner des CMS ou des moteurs de blog comme dotclear ou wordpress. Mais attention une BDD consomme pas mal de ressources. Des CMS comme pluxml ne demandent pas de base de données.

On pourra aussi ajouter un serveur FTP pour charger vos pages web à distance, ou un serveur NFS en local. Cela fera peut-être l'objet d'un nouvel article.

Classé dans : Sysadmin - Mots clés : aucun