Monter son serveur WEB
Rédigé par Xavier - -
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.

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.
Mais pour éviter que les attaques et agressions soient "trop simples" nous pouvons changer le port SSH, qui est 22 par défaut:
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:
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:
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.
Au passage installez aussi les paquets php5:
La librairie GD permet de traiter des images, créer des miniatures notamment. Activez le support du cgi dans lighttpd puis relancez-le:
# /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:
Puis les permissions en 750:
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":
Puis recopiez les lignes suivantes:
## 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:
Puis lancez-le pour tester:
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:
# 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.
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.
Et faites-le ressembler à ça:
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:
Et modifiez run_daemon="false" par "run_daemon="true"
Lancez-le ensuite:
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:
Et en dessous les paramètres se référant à 127.0.0.1 ajoutez:
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.