Configurer un serveur personnel sous Linux

By Laurent Soron

Pourquoi monter son serveur personnel? Il y’a autant de reponses que d’utilisateurs. Cet article prendra comme cas d’utilisation un petit groupe qui souhaite se partager des fichiers (photos, articles…) et des services (mail, backups).


Pourquoi monter son serveur personnel? Il y’a autant de reponses que d’utilisateurs. Cet article prendra comme cas d’utilisation un petit groupe qui souhaite se partager des fichiers (photos, articles…) et des services (mail, backups).L’installation du systeme d’exploitation, de la connection internet… ne seront pas traite en details. Il est acquis que l’utilisateur a des connaissances suffisantes en administration systeme et quelques connaissances de la distribution Debian Linux.Le groupe pourra utiliser un ‘ordinateur de recuperation’ (peu puissant), l’important est que cet ordinateur soit connecte en permanence a Internet.Cet article traitera de l’installation des modules suivants:

  • Serveur Web (Apache) avec support PHP
  • Base de donnees Mysql
  • Serveur de mail (Exim 3)
  • Serveur POP3 / IMAP4
  • Webmail
  • Recuperation de mails (Fetchmail) et regles de tri (Procmail)

Note: chacun des paquets installe propose une documentation situee dans la page de man (man <paquet>) ou dans /usr/share/doc/<paquet>

Les lignes de commande commencant par le caractere # necessitent que l’utilisateur courant soit root.
Celles commencant par le caractere $ peuvent etre utilisees par n’importe quel utilisateur.

Installation du systeme de base

Systeme d’exploitation

L’installation du systeme d’exploitation est deja tres bien traite sur Internet. Je vous renvois donc a ces documents:

Note: A ce stade, un systeme minimum Debian est suffisant. Les paquets necessaires pour chaque tache seront installes automatiquement avec leurs dependances.

Preparation des mises a jour

Voir mon autre article sur le sujet.

Configuration globale

Augmenter la taille du cache d’apt-get

Il est necessaire d’augmenter la taille du cache d’apt-get
Creer le fichier /etc/apt/apt.conf et inserer:

APT::Cache-Limit 25165824;

Coloriser les ecrans

Il est toujours agreable d’avoir differentes couleurs pour distinguer les repertoires des fichiers.

Ouvrir le fichier $HOME/.bashrc (par exemple /root/.bashrc) et enlever le # (signe de commentaire) devant les lignes

   export LS_OPTIONS='--color=auto'   eval `dircolors`

alias ls='ls $LS_OPTIONS'

alias ll='ls $LS_OPTIONS -l'

alias l='ls $LS_OPTIONS -lA'

Editeur de texte

Tous les systemes unix proposent l’utilitaire vi. Il est toutefois recommande d’installer son clone vim qui permet l’affichage en couleurs.
Neanmoins, la syntaxe de vi(m) peut derouter quelque peu l’apprenti administrateur. Dans ce cas, installer l’editeur nano
#apt-get install nano

Configuration a distance

Pour administrer le serveur a distance, il est fortement recommande d’installer le paquet ssh pour crypter les communications entre le serveur distant et l’ordinateur local.

#apt-get install ssh

L’administrateur se connectera au site en tapant ssh [login]@MySite.net (sous Linux).
Sous windows, on peut utiliser les outils opensource PuTTy et WinSCP

Options importantes:
Certaines options sont importantes pour securiser quelque peu le serveur. La configuration de SSH se fait dans le fichier /etc/ssh/ssh_config:
#vi /etc/ssh/ssh_config

        PermitRootLogin no        ServerKeyBits 1024

RSAAuthentication no

PubkeyAuthentication no

PermitEmptyPasswords no

PasswordGuesses 2

IgnoreRHosts yes

IgnoreRootRHosts yes

Apres avoir sauver la nouvelle configuration, il faut relancer le demon avec la commande:
#/etc/init.d/ssh restart

Litterature:

Serveur Web

Typiquement, chaque membre du groupe souhaitera creer son site web sous la forme d’un systeme de blog tel DotClear ou d’un CMS (Content Management system) tel Mambo.

Un tel serveur web necessite les composants suivants:

  • Apache pour le serveur Web proprement dit
  • Php4 pour interpreter les pages Web
  • Mysql comme base de donnees
  • Une interface pour g�er les tables dans Mysql, phpmyadmin

Installation

On peut installer ces elements en installant deux paquets seulements:
#apt-get install phpmyadmin mysql-server

Le paquet Exim (gestionnaire de mail) est ajoute au systeme. Choisissez l’option 5 (Pas de configuration) pour le configurer plus tard.

Apache:
-Le serveur Apache se configure avec le fichier /etc/apache/httpd.conf
-Pour relancer le serveur :

#apachectl restart

Mysql:
Par defaut, le compte administrateur de Mysql est root, pas de mot de passe. A changer d’urgence!

Pour changer le mot de passe de Mysql, taper la commande suivante:

#mysqladmin -u root password MyNewPassword

L’utilisateur root aura desormais le mot de passe MyNewPassword.

Configuration de PHP3

Modifier le fichier /etc/apache/httpd.conf avec vi (editeur de texte standard)
vi /etc/apache/httpd.conf

Ajouter index.php3 a la ligne DirectoryIndex pour avoir:

  <IfModule mod_dir.c>      DirectoryIndex index.html index.php index.php3 index.htm index.shtml index.cgi

</IfModule>

PHP:

PHP4 est capable d’interpreter les fichiers en php3. On indique donc a Apache d’utiliser le module php4 pour interpreter les scripts php3.
Modifier
“ AddType application/x-httpd-php .php “
pour obtenir:
“ AddType application/x-httpd-php .php .php3“

Sauver (ESC, :wq) puis relancer Apache (apachectl restart)

Pour tester votre installation, vous pouvez utiliser un systeme de blog comme DotClear ou d’un CMS tel Mambo http://www.spip.net/fr
.
L’installation d’un CMS consiste en general a copier les fichiers dans un repertoire du serveur web (par exemple /var/www/mambo) puis d’ouvrir la page par defaut pour lancer l’installation (http://localhost/mambo/index.php). La base de donnees sera automatiquement ajoutee dans Mysql. Si ce n’est pas le cas, utiliser http://localhost/phpmyadmin.

Redirection

Si le groupe souhaite tester differents CMS, il suffira d’installer chaque system dans un repertoire different et de creer une page par defaut qui redirigera les visiteurs sur le site par defaut.

Creer une page /var/www/index.html et inserer ce contenu:
<meta http-equiv="refresh" content="0;url=http://mysite.net/mambo/">

Dans cet exemple, le nom public du serveur web est mysite.net et le cms par defaut est installe dans le repertoire mambo.

Sites web personnels

Chaque utilisateur peut creer un repertoire $HOME/public_html et celui-ci sera accessible a http://mysite.net/~[User]
Par exemple le repertoire /home/lolo/public_html est accessible a l’adresse http://mysite.net/~lolo

Serveur Web securise(protocole https)

  • Installer le module libapache-mod-ssl au serveur Web Apache.#apt-get install libapache-mod-ssl
  • Creer le fichier /etc/apache/libsslconfig.conf et inserer le contenu suivant:
      Listen 443  Listen 80
    
    NameVirtualHost *  <VirtualHost *:443>
    
    ServerName arnest.net
    
    DocumentRoot /var/www/
    
    SSLEngine on
    
    SSLCertificateKeyFile /etc/apache/ssl.key/server.key
    
    SSLCertificateFile /etc/apache/ssl.crt/server.crt
    
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
    
    </VirtualHost>
    
    <VirtualHost *:80>
    
    ServerName arnest.net
    
    DocumentRoot /var/www/
    
    </VirtualHost>
  • Modifier le fichier de configuration d’Apache (/etc/apache/httpd.conf)
    #vi /etc/apache/httpd.confDans la partie LoadModules ajouter:LoadModule ssl_module /usr/lib/apache/1.3/mod_ssl.so

A la fin du fichier, ajouter la ligne

Include /etc/apache/libsslconfig.conf

  • Creer un certificat avec la commande mod-ssl-makecert (installe avec le paquet libapache-mod-ssl)
  • Step 2 : Generating X.509 Certificate signing request for CA [ca.csr] 1. Country Name : fr2. State or Province Name : Alsace3. Locality Name : Wissembourg4. Organization Name : Laurent Soron

    5. Organization Unit Name : arnest.net

    6. Common Name : Arnest CA

    7. Email Address : sslca@arnest.net

    8. Certificate Validity : 365 (days)

  • Step 3 : Certificate Version – 3
  • Step 5 : Generating X.509 Certificate signing request SERVER [server.csr] 1. Country Name : fr2. State or Province Name : Alsace3. Locality Name : Wissembourg4.Organization Name : Arnest

    5. Organization Unit Name : arnest.net

    6. Common Name : www.arnest.net

    7. Email Address : ssl@arnest.net

    8. Certificate Validity : 365 (days)

  • Step 6 : Certificate Version – 3
  • Step 7, 8 : si vous entrez une ‘passphrase’ a ce point, il faudra taper cette phrase a chaque fois qu’Apache sera demarre ou relance. (Recommendation: laisser vide)
  • Relancer Apache#apachectl restart

Il peut etre interessant d’installer la documentation de mod-ssl d’apache:
#apt-get install libapache-mod-ssl-doc

Le paquet libapache-mod-ssl-doc installe une documentation fournie qui se trouve dans /usr/share/doc/libapache-mod-ssl-doc/htm.
Pour pouvoir y acceder simplement, on creera un lien symbolique sur le serveur web.
#ln -s /usr/share/doc/libapache-mod-ssl-doc/html/ssldoc

Proteger par mot de passe l’acces a certains repertoires

Exemple: limiter les acces au repertoire http://mysite.net/temp
Ajouter dans /etc/apache/httpd.conf

  <Location /temp>      AuthType Basic

AuthName Temporary

AuthGroupFile /dev/null

AuthUserFile /etc/apache/apache_passwd

require valid-user

</Location>

Enregistrer les utilisateurs avec htpasswd ou utiliser un generateur de fichiers htpasswd tel http://www.euronet.nl/~arnow/htpasswd/

Litterature:

Serveur mail

A ce stade, il est important d’avoir un utilisateur par defaut. Par exemple, on ajoute au systeme un utilisateur lolo
#adduser lolo

Exim

Le serveur de mail Exim est deja installe, donc il n’y a qu’a le configurer.

Note: Exim est un MTA (Mail Transfer Agent), le programme charge d’envoyer les emails a l’exterieur. Mais il est aussi utilise comme MDA (Mail Delivery Agent) pour livrer les emails de l’exterieur aux utilisateurs sur la machine local.

La configuration du serveur de mail (envoi et reception des mails sur la machine) se fait grace au script Eximconfig
#eximconfig

-Choisir l’option 1. Internet Site
-’Visible’ mail name: mysite.net
-No second domain: [enter]
-No Relay: [enter], [enter]
-Les mails pour root seront envoye a l’utilisateur lolo: lolo

Le fichier /etc/email-adresses contient les adresses email “exterieures”

Note: /etc/aliases contient les alias pour les comptes (ex : laurent pointe sur lolo : tout mail envoye a laurent@mysite.net sera recu par l’utilisateur lolo sur mysite.net)

Les log d’Exim se situent dans /var/log/exim/mainlog

Il faudra associer le serveur MX de votre fournisseur de nom de domaine au serveur pour que les mails soient correctement rediriges sur cette machine.

Webmail

Il existe plusieurs choix: squirrelmail, ilohamail. Squirrelmail est un bon choix par defaut.

#apt-get install squirrelmail

POP3 / IMAP4 (port 443)

POP3: En utilisant ce protocole, l’utilisateur recupere en local tous ses mails.
Candidats: Qpopper ou popa3d

#apt-get install qpopper

L’administrateur peut choisir d’installer le paquet POP3s pour securiser la connection (port 995)

Imap4: En utilisant ce protocole, l’utilisateur gere ses mails directement sur le serveur. Les emails ne sont pas stocke sur l’ordinateur client.
Par defaut, les mails etant stockes dans /var/mail/[login], il est recommande d’utiliser le paquet UW-Imapd
#apt-get install uw-imapd

L’administrateur peut choisir d’installer le paquet uw-imapd-ssl pour securiser la connection (port 993)

Litterature: Receiving mail securely, part 5.6
http://www.linuxsecurity.com/resource_files/host_security/securing-debian-howto/ch-sec-services.en.html

Fetchmail / Procmail

Ces deux logiciels sont souvent utilise ensembles. Fetchmail recupere les mails par le protocole POP3 et procmail trie les mails dans les differents dossiers.

Je recommende la lecture de ces deux Howto:

Fetchmail

L’installation ne pose aucun probleme

#apt-get install fetchmail

Ensuite, chaque utilisateur doit creer un fichier $HOME/.fetchmailrc qui contiendra la configuration.

Pour chaque boite aux lettres que l’utilisateur souhaite relever, il faut inserer une ligne
poll [AutreServeur] with protocol pop3: user [Login_Distant] there has password [Password_Distant] is [Login_Local] here

ou

  • [AutreServeur] est le serveur POP3 du serveur distant (par exemple pop.laposte.net)
  • [Login_Distant] est le nom d’utilisateur sur le serveur distant
  • [Password_Distant] est le nom du mot de passe sur le serveur distant
  • [Login_Local] est le nom d’utilisateur en local

Verifier avec fetchmail -v

Lancer regulierement la commande.

On utilise le Cron, un petit daemon qui lance des commandes regulierement.

Sous le compte de l’utilisateur, on edite le cron avec la commande

$crontab -e

et on insere la ligne (tout sur une meme ligne!):

/120 * * * * /usr/bin/fetchmail -m "/usr/bin/procmail -f - "` >> /home/LocalUser/. fetchlog 2>&

L’editeur utilise les memes commandes que vi (sauvegarder et quitter avec la commande ESC :wq)

Si tout va bien le systeme indique:

crontab: installing new crontab

Note:

fetchmail -c: voir le nombre de messages sur le serveur

Recuperer les mails et les trier manuellement:

fetchmail -m /usr/bin/procmail >>/home/MyUser/.fetchlog 2>&1

Il est recommande de securiser le fichier

chmod 600 $HOME/.fetchmailrc

Litterature (lancer fethmail en daemon, securiser la connexion pop3, crypter le mot de passe…): http://www.crans.ens-cachan.fr/docs/mail-linux.html (fr)

Procmail

Howto: http://ernest.cheska.net/index.php?fichier=procmail&status=loaddocumentation

Installer le package
#apt-get install procmail

Ensuite, chaque utilisateur doit creer un fichier $HOME/.procmailrc qui contiendra la configuration.

  .procmailrc  SHELL=/bin/sh

MAILDIR=$HOME/mail

#DEFAULT=$HOME/mail/Default

DEFAULT=/var/mail/lolo

LOGFILE=$HOME/.log_procmail

VERBOSE=yes  #Humour dans la boite Humour

:0:

*^(From|Cc|To).*humour@(MySite|MySite2).net

Humour

#Tri des listes par rapport au sujet

:0:

*^Subject:.*[[]MyListe[]]

MyListe

:0:

*^To:.*@kde.org

Listes

.forward:

|/usr/bin/procmail

Litterature: http://www.linux-france.org/article/lgazette/issue-26/issue-26-4.html

Timo’s procmail tips and recipes: http://www.uwasa.fi/~ts/info/proctips.html

Filtrage de spam avec spamassassin

Voir le howto http://clx.anet.fr/spip/article.php3?id_article=116

#apt-get install spamassassin

Modifier .procmailrc

  :0fw  | spamassassin -P  :0:

* ^X-Spam-Status: Yes

spambox

“La premiere recipe consiste a passer tous les messages a la moulinette de Spamassassin, la seconde a mettre tous les messages considers comme eant du spam dans un fichier a part, en loccurence spambox.”

Serveur FTP

#apt-get install pure-ftpd

Galleries photos

Le paquet gallery est un gestionnaire de galleries d’images tres repandu.
#apt-get install gallery

Voir aussi Coppermine. Il utilise une base de donnees.

Statistiques

Le paquet Webalizer analyse les fichiers de log du serveur et cree un rapport en html avec des graphiques.

#apt-get install webalizer

Reference

Uptime

Installer le paquet ud

“UD (Uptime Daemon) tourne en arriere plan en comparant constamment la duree ecoulee depuis le dernier redemarrage de la machine avec vos 3 meilleurs records. Si le temps actuel depasse un record, il devient le nouveau record.”
(Source)

Le paquet ud maintiendra a jour une page html qui contiendra toutes les informations necessaires.

Divers

Changer le nom de la machine

La commande hostname -v modifie le nom du systeme jusqu’au prochain redemarrage

#hostname -v [New Name]

Pour modifier le nom de maniere permanente, il faut modifier les fichiers suivants:

  /etc/hostname  /etc/hosts

/etc/resolv.conf

Modifier le prompt

Editer le fichier $HOME/.bashrc

export PS1="[\u@\h:\W, \@, \d]> " #custom prompt options: root@mysite.net:etc,10:13am,Thu Mar 10]>

Monter un VPN

Faire passer un flux HTTP (ou autre) dans un tunnel SSH:
http://clx.anet.fr/spip/article.php3?id_article=131

Tester les mots de passe avec John le ripper

# apt-get install john
# john /etc/shadow

Il est possible de lancer un job qui teste les mots de passe:
john.cron install

(fichier de configuration a renseigner: /etc/john-mail.conf)

Les pages de man en html (Man2Html)

Il peut etre pratique de consulter les pages du man dans un navigateur plutot que dans une console texte. Installer l’utilitaire man2html:

#apt-get install man2html

et pointer la page
http://mysite.net/cgi-bin/man2html

Paquets harden-*

Ces paquets ne sont pas compatibles avec des programmes reputes pour leurs failles de securite Dans la pratique, si on souhaite desinstaller un paquet harden-*, tous les programmes listes doivent etre desinstalles.

#apt-get install harden-clients harden-servers harden-localflaws harden-tools

Serveurs particuliers

Serveur de Genealogie – Geneweb

Si le groupe s’interesse a la genealogie, le logiciel geneweb peut s’installer sur un serveur.

Site officiel: http://cristal.inria.fr/~ddr/GeneWeb/

Ce logiciel est package dans Debian:

#apt-get install geneweb

Pour acceder a l’interface de Geneweb, ouvrir l’adresse suivante dans un navigateur internet:
http://mysite.net:2317/

P2P – ML Donkey

#apt-get install mldonkey-server

Dans le compte un utilisateur, creer un repertoire ~/mldonkey, et lancer le serveur dans ce repertoire
./mldonkey/mlnet&

Au demarrage, mldonkey va creer toute une structure par defaut. Consulter l’aide pour savoir a quoi ils correspondent.

Ce paquet propose une interface web. Par defaut, seul le localhost peut acceder a cette interface. Pour laisser les autres ordinateurs du reseau local, on doit modifier le parametre allowed_ips dans le fichier ~/mldonkey/downloads.ini

allowed_ips = ["127.0.0.1";"192.168.2.255";]

Dans cet exemple, les adresses IP des ordinateurs du reseau local sont du type 192.168.2.XXX

Proxy – SQUID

Si tous les utilisateurs sont situes dans le meme reseau, il peut etre interessant de configurer le serveur pour enregistrer les pages frequemment consultees ou bloquer certains sites.

Serveur de fichiers pour clients windows – Samba

Samba est un outil capable de simuler un serveur Windows en tant que serveur de fichier (chacun y stocke ses fichiers) ou d’impression (le groupe partage une imprimante) voire un controleur de domaine. Les utilisateurs sous Windows pourront se connecter a cet ordinateur comme n’importe quel autre ordinateur.

Notes: les utilisateurs Samba doivent exister du le systeme Linux. Neanmoins, meme s’ils ont un mot de passe different pour Linux que pour Samba, ils auront les memes droits (acceder ou non a un repertoire)

Litterature:

Conclusion

Si le groupe a suivi cet article, il devrait beneficier d’un serveur proposant plusieurs services, et ouvert sur Internet.
Il est important de garder ce serveur a jour en lui appliquant les mises a jour de securite.

Sur un systeme Debian, on utilisera regulierement la commande (par exemple toutes les deux semaines)

#apt-get update ; apt-get upgrade

Lancer l’utilitaire nmap d’un autre ordinateur permet de scanner les ports et de lister les ports ouverts. Verifier que les ports ouverts sur le serveur correspondent a des services reelement utilises.


References

Guide de reference

Note: Ce document est sous license Creative-Common by-nc-sa

Mots-clefs : , , , , ,

Laisser un commentaire