Ecran noir

Tutoriels, présentations et analyses sur Internet et les Logiciels Libres

Aller au contenu | Aller au menu | Aller à la recherche

mardi 7 avril 2009

Installation de Postfix sur Debian

Mon serveur personnel fait office de serveur de mail. Dans ce tutoriel nous allons voir quelles manipulations j'ai effectuées pour en arriver là. Afin d'avoir un serveur de mail réellement utilisable, il est nécessaire d'avoir un nom de domaine à soi (par exemple mondomaine.com). Il faut avoir dans son DNS un enregistrement correspondant à l'adresse IP de la machine hébergeant le serveur (par exemple mcsr.mondomaine.com) ainsi qu'un enregistrement MX pointant sur cette machine. Cela permet d'avoir des adresses email de la forme user@mondomaine.com.

J'ai choisi Postfix comme serveur de mail car il est largement utilisé et très bien documenté. En plus de Postfix on installera Procmail pour le traitement des mails reçus et Courier-IMAP pour l'accès aux mails depuis l'extérieur en IMAP.

Dans ce tutoriel les utilisateurs du serveur de mail sont les mêmes que les utilisateurs Unix. Il est possible de configurer Postfix pour gérer ses utilisateurs dans une base de données, mais ce n'est pas ce que nous ferons ici. Les mails de chaque utilisateur seront stockés dans le répertoire Maildir de leur répertoire home.

Installation des composants

Les composants sont installés sur Debian avec la commande apt-get :

apt-get install postfix courier-imap-ssl courier-imap procmail mailutils

Le paquet mailutils contient, comme son nom l'indique, des utilitaires en ligne de commande pour les mails. Par défaut sous Debian un serveur de mail est déjà installé. Il s'agit d'Exim. Il sera désinstallé automatiquement lors de l'installation de Postfix.

Lorsqu'on vous le demandera, choisissez de ne rien configurer pour Postfix. La configuration sera créée plus tard.

Configuration de Postfix

La configuration de Postfix se trouve dans le fichier /etc/postfix/main.cf. Ce fichier ne doit pas encore exister.
Créez tout d'abord un fichier /etc/mailname contenant votre nom de domaine (mondomaine.com).
Créez ensuite le fichier /etc/postfix/main.cf avec le contenu suivant :

# See /usr/share/postfix/main.cf.dist for a commented, more complete version

# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
mydestination = mcsr.mondomaine.com, mondomaine.com, localhost
# Si vous avez un fournisseur d'accès :
# relayhost = smtp.votrefai.tld
relayhost =
mynetworks = 192.168.0.0/24, 127.0.0.0/8, [::1]/128, [xxxx:xxxx:xxxx:xxxx::]/64
myhostname = mcsr.mondomaine.com
mydomain = mondomaine.com

# Tres important
#home_mailbox = Maildir/
mailbox_command = procmail -a "$EXTENSION"

unkown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases

mailbox_size_limit = 0
recipient_delimiter = +

inet_interfaces = all
inet_protocols = all

#smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination

Dans ce fichier, les lignes commençant par # sont des commentaires. Remplacez mondomaine.com et mcsr.mondomaine.com par votre nom de domaine et le nom de votre serveur.
Voici le détail des paramètres de ce fichier :

myorigin

Indique le domaine (la partie après @) qui apparaitra dans les mails envoyés directement depuis le serveur. C'est le cas par exemple pour certains mails automatiques envoyés en cas d'erreur. La valeur est ici renseignée dans le fichier /etc/mailname.

mydestination

Indique les domaines des mails que le serveur doit conserver. Lorsque Postfix reçoit un mail, il doit le conserver si ce mail est à destination d'un de ses utilisateurs ou le transférer vers un autre serveur si ce n'est pas le cas. Il utilise pour cela le domaine du mail.

mynetworks

Indique les adresses IP des machines clientes privilégiées. Par défaut ces machines sont les seules autorisées à envoyer des mails vers l'extérieur. Il est important de correctement valoriser ce paramètre pour ne pas faire de votre serveur un relais pour spams. J'ai utilisé ici la syntaxe permettant de spécifier une plage d'adresses IP : 192.168.0.0/24. Le /24 veut dire que les 24 premiers bits sont significatifs. Postfix acceptera donc les IPs allant de 192.168.0.0 à 192.168.0.255. Comme mon serveur fonctionne aussi en IPv6 j'ai ajouté les adresses IPv6 de mon réseau (remplacez les xxxx par les bonnes valeurs).

myhostname

Il s'agit du nom d'hôte complet du serveur.

mydomain

Le nom de domaine du serveur.

mailbox_command

Indique la commande à utiliser pour copier les mails reçus dans la boîte aux lettres. On utilise ici Procmail.

alias_maps

Indique la base de données à utiliser pour les alias. Les alias permettent de donner plusieurs adresses emails à un même utilisateur. Pour prendre en compte ces alias, il est nécessaire de lancer la commande suivante :

postalias /etc/aliases


Une fois la configuration créée, on peut redémarrer Postfix :

/etc/init.d/postfix restart

Création du dossier Maildir

Chaque utilisateur du serveur doit avoir un dossier Maildir permettant de stocker ses mails. On commence par créer ce dossier dans le répertoire /etc/skel qui sert de modèle lors de la création d'un nouvel utilisateur. On utilise pour cela la commande maildirmake qui crée le répertoire au format mail :

cd /etc/skel
maildirmake.courier Maildir &&  maildirmake.courier Maildir/.Sent &&  maildirmake.courier Maildir/.Trash && maildirmake.courier Maildir/.Drafts &&  maildirmake.courier Maildir/.Lists
chmod a+xr -R Maildir

Pour chaque utilisateur existant, on copie le répertoire Maildir vers le répertoire home (remplacez user par le nom d'utilisateur) :

cp -R /etc/skel/Maildir /home/user
chown -R user:user /home/user/Maildir

Les utilisateurs qui seront créés dans le futur disposeront automatiquement du répertoire Maildir.

Configuration de Procmail

Grâce au paramètre mailbox_command, nous avons demandé à Postfix d'utiliser Procmail pour gérer les mails reçus. Procmail est un utilitaire assez puissant qui permet de classer les mails en fonction de règles. Ces règles sont écrites pour chaque utilisateur dans le fichier .procmailrc du répertoire home. la syntaxe de ce fichier est un peu barbare et je ne vais pas expliquer ici toutes les possibilités. Vous pouvez vous référer à cet article pour plus de détails.
Le fichier .procmailrc est composé de recettes qui indiquent comment traiter les mails reçus. Une recette commence toujours par :0 et a le format suivant :

:0 [drapeaux] [ : [verrou_local] ]
<zéro ou plusieurs conditions (une par ligne)>
<exactement une ligne d'action>

Les conditions commencent par * et s'expriment en expressions régulières. A chaque mail reçu, la ligne d'action est exécutée si toutes les conditions sont remplies par le mail.
Nous allons créer dans /etc/skel le fichier .procmailrc modèle pour tout nouvel utilisateur :

MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/

:0:
$DEFAULT

En en-tête de fichier, nous avons défini des variables. Le fichier ne contient qu'une seule recette très simple qui copie chaque mail reçu dans le répertoire Maildir (la recette ne contient aucune condition donc tous les mails reçus seront traités par cette recette).
le : après :0 indique qu'il faut locker l'action pour ne pas que plusieurs mails soient copiés dans Maildir en même temps car cela pourrait corrompre le répertoire.
La ligne d'action contient juste le nom d'un répertoire. Pour Procmail cela veut dire de copier le mail dans ce répertoire.
Pour chaque utilisateur existant, on copie le fichier .procmailrc vers le répertoire home (remplacez user par le nom d'utilisateur) :

cp -R /etc/skel/.procmailrc /home/user
chown user:user /home/user/.procmailrc

Il n'est pas nécessaire de redémarrer Postfix car le fichier .procmailrc est relu à chaque fois.

Redirection

Pour certains utilisateur, on veut forwarder tous les mails reçu au lieu de les conserver sur le serveur. Dans ce cas on écrira le .procmailrc de cette manière :

MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/

:0
! user@gmail.com

Le ! indique à Procmail qu'il faut rediriger les mails reçus. Remplacez user@gmail.com par la bonne adresse email de redirection.

Spam

Dans ce tutoriel, je n'ai pas parlé du traitement des spams. Pourtant ce traitement est indispensable si l'on ne veut pas se retrouver submergé. En collaboration avec SpamAssassin, Procmail permet de filtrer les spams, j'y reviendrai prochainement dans un billet dédié.

Récupération des mails depuis un poste client

Il n'y a aucune configuration à faire pour courier-IMAP. Vous avez donc tout de suite accès en IMAP à votre boîte aux lettres.
Votre serveur est maintenant prêt à recevoir et envoyer des emails !

samedi 7 mars 2009

Installation d'Apache sur Debian

Dans ce tutoriel nous allons voir comment installer et configurer Apache afin d'héberger sur son serveur plusieurs sites web. En plus d'Apache, on installera la base de données MySQL et le moteur de page PHP afin d'avoir une vraie plateforme LAMP (Linux, Apache, PHP, MySQL) qui nous permettra de faire tourner des applications web toutes prêtes telles qu'un blog ou un webmail, mais aussi de créer ses propres applications web.

Installation des composants

L'installation des composants est très simple sous Debian. Avec l'utilisateur root on exécute :

apt-get install apache2 apache2-doc mysql-server php5 libapache2-mod-php5 php5-mysql

Un mot de passe root vous sera demandé pour la base MySQL. Attention il s'agit du root de MySQL qui est différent du root Linux.

Une fois l'installation terminée vous pouvez vérifier que les nouveaux services apache et mysql tournent bien :

netstat -nltp

Par défaut Apache écoute sur le port 80 et MySQL sur le port 3306.

Connectez-vous à MySQL (avec le root MySQL) pour vérifier que cela fonctionne :

mysql -u root -p
mysql> show databases;
mysql> exit

Configuration d'Apache

Tous les fichiers de configuration d'Apache se trouvent dans le répertoire /etc/apache2. On y trouve notamment :

  • Le fichier apache2.conf : fichier de configuration principal d'Apache
  • Le fichier ports.conf : configuration des ports d'écoute
  • Le répertoire conf.d : répertoire contenant divers fichiers de configuration
  • Le répertoire mods-availables : répertoire des modules disponibles (mais pas nécessairement activés)
  • Le répertoire mods-enabled : répertoire des modules activés (liens symboliques vers mods-availables)
  • Le répertoire sites-availables : répertoire des sites disponibles (mais pas nécessairement activés)
  • Le répertoire sites-enabled : répertoire des sites activés (liens symboliques vers sites-availables)

Pour activer un module (c'est-à-dire une fonctionnalité supplémentaire pour Apache) on utilise la commande a2enmod. Celle-ci va créer un lien symbolique dans le répertoire mods-enabled vers le fichier du module dans mods-available. Pour désactiver un module on utilise la commande a2dismod.

Pour créer un nouveau site, on crée la configuration associée dans le répertoire sites-availables et on l'active avec la commande a2ensite. Par défaut un seul site est disponible (fichier default), ce qui est suffisant si vous ne voulez gérer qu'un seul site. Sinon il faudra créer d'autres sites grâce aux hôtes virtuels.

A chaque fois que l'on modifie la configuration d'Apache, il faut le redémarrer :

/etc/init.d/apache2 restart

Activation de PHP

Normalement le module php pour Apache doit être activé par défaut suite à l'installation. Les fichiers php5.load et php5.conf doivent être présents dans mods-enabled. Si ce n'est pas le cas on utilise a2enmod :

a2enmod php5
/etc/init.d/apache2 restart

Les hôtes virtuels

Apache vous permet de gérer plusieurs sites sur un même serveur grâce au système d'hôtes virtuels. Supposons que vous ayez acheté un nom de domaine (mondomaine.com par exemple) et que vous vouliez héberger un blog à l'adresse blog.mondomaine.com, un site personnel à l'adresse user.mondomaine.com ainsi que le classique www.mondomaine.com. Avant de configurer Apache, vous devez configurer votre DNS pour que les noms des sites soient résolus en l'adresse IP de votre serveur.

Dans Apache, il est nécessaire d'activer la résolution des hôtes virtuels par nom dans le fichier /etc/apache/ports.conf. Normalement cela est déjà le cas par défaut :

NameVirtualHost *:80

Cette directive indique à Apache de résoudre les hôtes virtuels par nom pour les requêtes arrivant sur le port 80. Le caractère * signifie que cette résolution ne tient pas compte de l'adresse IP d'écoute.

Nous allons maintenant configurer les 3 sites. Pour chaque site il faut créer un fichier de configuration dans le répertoire site-availables. Il existe déjà un fichier default que nous allons utiliser pour www.mondomaine.com. Dans ce fichier le répertoire racine est paramétré comme étant /var/www. Nous allons le modifier pour mettre /var/www/default et préciser que ce site a pour nom www.mondomaine.com grâce à la directive ServerName. Au final le fichier default ressemble à cela :

<VirtualHost *:80>
	ServerName www.mondomaine.com
	DocumentRoot /var/www/default

	<Directory /var/www/default>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
		Order allow,deny
		allow from all
	</Directory>
...
</VirtualHost>

Dans la directive VirtualHost il est indispensable de préciser *:80 pour qu'Apache fasse le lien avec la directive NameVirtualHost.

Pour les 2 autres sites on crée 2 nouveaux fichiers blog et user (remplacez user par le nom de l'utilisateur) dans site-availables. Ces sites auront pour racine /var/www/blog et /home/user/public_html.
Le fichier blog contient :

<VirtualHost *:80>
	ServerName blog.mondomaine.com
	DocumentRoot /var/www/blog
	<Directory /var/www/blog>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
		Order allow,deny
		allow from all
	</Directory>
</VirtualHost>

Le fichier user contient :

<VirtualHost *:80>
	ServerName user.mondomaine.com
	DocumentRoot /home/user/public_html
	<Directory /home/user/public_html>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
		Order allow,deny
		allow from all
	</Directory>
</VirtualHost>

Il faut maintenant créer les répertoires racines des sites :

mkdir /var/www/default /var/www/blog /home/user/public_html

Dans chacun des répertoires on peut mettre, pour commencer, un fichier index.html contenant simplement le nom du site.

Il faut ensuite activer les nouveaux sites :

a2ensite blog user

Puis redémarrer Apache :

/etc/init.d/apache2 restart

Avec Firefox accédez à vos 3 sites et vérifier que cela fonctionne. Vous pouvez maintenant compléter les répertoires des sites avec du vrai contenu.

SSL

Nous allons maintenant activer le SSL dans Apache pour pouvoir y accéder par https. Il n'est pas possible d'utiliser simplement les hôtes virtuels par nom en SSL. Nous aurons donc un seul site accessible en https (www.mondomaine.com).

Le module ssl doit être activé :

a2enmod ssl

Vérifiez dans ports.conf qu'Apache écoute bien sur le port 443 :

<IfModule mod_ssl.c>
	Listen 443
</IfModule>

Pour fonctionner, le protocole https nécessite un certificat serveur. Nous allons utiliser openssl pour générer un certificat auto-signé :

openssl req -x509 -nodes -days 365 -newkey rsa:1024 -out /etc/apache2/server.crt -keyout /etc/apache2/server.key

Répondez aux questions posées en faisant attention au "Common Name". Sa valeur doit être l'adresse de votre site (www.mondomaine.com).

Le fichier de configuration du site SSL existe déjà. Il s'agit du fichier default-ssl dans site-availables. Modifiez-le comme le fichier default pour changer la racine du site en /var/www/default puis remplacer la référence au certificat avec celui que nous avons créé :

SSLCertificateFile /etc/apache2/server.crt
SSLCertificateKeyFile /etc/apache2/server.key

Activez alors le site SSL :

a2ensite default-ssl
/etc/init.d/apache2 restart

Vous pouvez maintenant tester que votre site est accessible en SSL. Attention : Le certificat que nous avons généré est auto-signé. Firefox devrait donc afficher une page d'alerte de sécurité et vous devrez ajouter une exception pour accéder à votre site. Pour avoir un "vrai" certificat, il faut passer par un organisme de certification qui vous le fournira moyennant paiement.

Sécurité

Voici quelques petits trucs qui permettent de cacher des informations qui pourraient aider une personne malveillante.

Les informations sur la version du serveur ne doivent pas être visibles. Dans le fichier /etc/apache/conf.d/security recherchez et modifiez les directives ServerTokens et ServerSignature pour avoir :

ServerTokens Prod

ServerSignature Off

Dans tous les fichiers de configuration des hôtes virtuels, pensez à utiliser l'option -Indexes qui empêche de voir la liste des fichiers d'un répertoire :

<Directory ...>
	Options -Indexes
</Direction>

Installation de Dotclear

Pour terminer ce tutoriel voici comment j'ai procédé à l'installation de Dotclear pour héberger mon blog.

Téléchargez la dernière version de Dotclear 2 sur http://fr.dotclear.org/ et décompressez l'archive dans le répertoire /var/www/blog. Vous obtiendrez un répertoire /var/www/blog/dotclear. Suivez les instructions pour une installation multiblogs dans la documentation. A côté du répertoire dotclear vous devriez donc avoir un répertoire pour votre blog (par exemple monblog).

D'après moi, il vaut mieux isoler l'application d'administration des blogs pour qu'elle ne soit accessible qu'en https. C'est plus sûr car cette application nécessite un mot de passe. Au final on accèdera au blog via l'url http://blog.mondomaine.com/monblog et pour l'administration on utilisera https://www.mondomaine.com/dotclear/admin.

Dans le fichier de configuration de l'hôte virtuel blog.mondomaine.com on ajoute :

<Location /dotclear>
	Order allow,deny
	deny from all
</Location>

Ceci permet d'interdire l'accès à l'administration de Dotclear par blog.mondomaine.com.

Pour rendre l'application d'administration accessible en https par www.mondomaine.com, on modifie la configuration du site SSL en ajoutant :

Alias /dotclear /var/www/blog/dotclear
<Directory /var/www/blog/dotclear>
	Options -Indexes FollowSymLinks MultiViews
	AllowOverride None
	Order allow,deny
	allow from all
</Directory>

mercredi 4 février 2009

Avoir un serveur personnel

Pourquoi installer un serveur à la maison ? Je vais essayer d'expliquer cela en quelques mots.

Définition

En informatique, on appelle généralement serveur un ordinateur connecté à Internet avec lequel on peut communiquer à n'importe quel moment : un serveur offre des services aux clients qui s'y connectent.
C'est le cas par exemple des serveurs de Google qui vous permettent d'effectuer une recherche quelque soit l'heure de la journée.

Les différents services

Un serveur peut rendre différents types de services. Les plus connus sont :

  • Le serveur web : il donne accès à un ou plusieurs sites web. Dans ce cas on se connecte au serveur avec un navigateur internet (Firefox, Internet Explorer, etc).
  • Le serveur de mail : il permet d'envoyer et de recevoir des emails. On s'y connecte avec un logiciel de messagerie (Thunderbird, Outlook, etc).
  • Le serveur de fichier : il permet de stocker des fichiers que l'on souhaite partager ou simplement sauvegarder.

Cette liste n'est bien sûr pas exhaustive. Pour qu'un serveur puisse rendre des services, il faut y installer des logiciels.

Utilité d'un serveur personnel

De nombreux serveurs dans le monde offrent les services que j'ai décrits plus haut. Mieux encore, il est possible d'utiliser certains de ces serveurs pour faire son site web, son blog ou gérer ces emails. Ainsi en souscrivant un abonnement à Free, vous obtenez gracieusement une adresse email (votrenom@free.fr) qui sera gérée par les serveurs de Free. De même si vous voulez créer votre blog, de nombreux sites vous proposent de l'héberger sur leurs serveurs.

En quelque sorte, ces hébergeurs vous donnent une partie de leurs serveurs pour gérér vos données. Et c'est bien là que ce situe le problème : vos données ne vous appartiennent plus ! Chaque mail que vous envoyez ou recevez passe par votre hébergeur qui peut en faire ce qu'il veut. C'est un peu comme si la poste pouvait ouvrir toutes vos lettres avant de les transmettre. Avec l'avènement d'Internet, il devient de plus en plus facile d'obtenir des informations sur n'importe qui et je pense qu'il faut s'armer pour protéger sa vie privée.
C'est de la paranoïa me direz vous. Eh bien demandez aux dissidents chinois arrêtés avec l'aide de Yahoo ce qu'ils en pensent.

De plus, rien ne dit que les services, gratuits pour la plupart, auxquels vous avez souscrit vont exister éternellement. Imaginez que l'hébergeur de votre blog, décide de supprimer son service de gestion de blog. Toutes vos données seront perdues. C'est arrivé récemment avec Google qui a décidé de supprimer certains de ses services jugés pas assez rentables.

Bref, faire administrer ses données par quelqu'un d'autre est certes pratique, mais cela pose des problèmes. C'est donc pour cela que j'ai décidé de me passer d'intermédaire et de tout faire moi-même. L'excellente conférence Internet libre ou Minitel 2.0 a aussi été un déclic qui m'a fait franchir le cap.
Disons également que le challenge technique est passionnant pour quelqu'un qui s'intéresse à l'informatique..

J'utiliserai principalement mon serveur comme serveur de mail et serveur web. Le blog que vous consultez y est hébergé.

Choix du serveur

Matériel

Comme on l'a vu, un serveur doit fonctionner 24h/24. On ne peut pas prévoir à quel moment un email va arriver ! Se pose alors la question de la consommation électrique, tant d'un point de vu financier que d'un point de vu écologique. En réalité, un serveur personnel n'a pas besoin d'une puissance phénoménale, loin de là. Les machines puissantes sont utiles pour les jeux ou pour des serveurs recevant des milliers de connexions, ce qui, disons-le modestement, ne sera pas le cas de ce blog !

Après quelques recherches sur Internet j'ai donc trouvé ce tout petit ordinateur ne consommant quasiment rien : le Microclient Senior.

Système d'exploitation

Pour qu'un serveur offre des services, l'ordinateur ne suffit pas. Il faut y installer des logiciels qui s'occuperont de ces services. Il faut donc commencer par installer un système d'exploitation sur la machine.
Si dans le monde des PC de bureau, Windows est la norme (hélas !), dans le monde des serveurs ce n'est pas le cas. Un grand nombre de logiciels serveurs fonctionnent sous Linux, y compris chez les plus grosses entreprises. Ayant déjà Linux sur mon PC de bureau, c'est tout naturellement que j'ai choisi Linux pour mon serveur. Je revendrai dans des billets plus techniques sur l'installation de Linux et des différents logiciels serveurs sur le Microclient.