Page d'accueil

Installer un serveur libre et indépendant sous Debian

J'ai écrit ces pages pour aider les débutants qui voudraient, comme moi, créer un serveur indépendant sur une machine locale. Je conseille de suivre les pages dans l'ordre du sommaire, bien que les services soient plus ou moins indépendants les uns des autres.

Jeter un oeil

Trifouillages préalables

Matériel

Installer le système

J'ai installé le système GNU-Linux Debian Lenny à partir d'un CD netinstall. Il y a beaucoup de possibilités dans l'étape de partitionnement, par exemple utiliser 2 disques durs en mirroir (RAID 1 logiciel) pour une fiabilité des données accrue.

Note :

Le systeme Debian fonctionne avec le gestionnaire de paquets apt-get. Pour installer un programme, il faut executer la commande (avec l'utilisateur root):

   1 # apt-get install nom_du_paquet autre_paquet encore_un_logiciel ...

2 ou 3 notions en ligne de commande

Allez jeter un coup d'oeil ici

Sinon, voiçi quelques commandes utiles (voir indispensables)

   1 $### Se balader en console
   2 $# Où suis-je?
   3 $ pwd
   4 $# Lister le contenu du répertoire
   5 $ ls
   6 $# Changer de repertoire
   7 $ cd /vers/là/où/je/veux/aller
   8 $### Gestion de fichiers
   9 $# Afficher le contenu d'un fichier
  10 $ cat nom_du_fichier
  11 ## Éditer un fichier
  12 $ nano nom_du_fichier
  13 $ vi nom_du_fichier
  14 $### Système
  15 $# Afficher les programmes les plus gourmands
  16 $ top
  17 $ htop
  18 $### Disques durs, espace disque
  19 $# Afficher les disques et les montages
  20 $ df -h
  21 $# Afficher l'espace disque
  22 $ du -sh

Quelques trucs pratiques et sympas

Auto-complétion pour root

Permet au super-utilisateur root d'utiliser la touche "tab" afin de compléter automatiquement les commandes qu'il entre. Ça fait gagner un temps fou, à force!

Il faut ajouter une ligne dans le fichier .bashrc de root

/root/.bashrc

...
# Plein de trucs qu'on sait pas à quoi ils servent
...
# Bas du fichier

. /etc/bash_completion

Fortune et sl

J'ai envie de dire... L'étape la plus indispensable pour aller vers la voie du geekisme

   1 # apt-get install fortune fortunes-fr sl
   2 # fortune
   3 # sl

Administration par le réseau

Installation du serveur ssh

SSH (Secure SHell) est un protocole réseau qui permet de TOUT faire à distance, en étant relié uniquement par le cable réseau à la machine.

Je conseille de l'installer avant toute autre chose pour plusieurs raisons :

  1. C'est facile et rapide
  2. C'est indispensable à mon avis
  3. Ça permettra de tester le serveur efficacement

   1 # apt-get install openssh-server

That's it! Pour le tester :

   1 # ssh 127.0.0.1
   2 The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
   3 RSA key fingerprint is 74:ef:68:03:49:9d:90:26:47:94:11:3e:69:47:92:e7.
   4 Are you sure you want to continue connecting (yes/no)? yes
   5 Warning: Permanently added '127.0.0.1' (RSA) to the list of known hosts.
   6 root@127.0.0.1's password: 
   7 Linux marcel 2.6.26-2-486 #1 Wed Jan 26 23:35:57 UTC 2011 i686
   8 
   9 The programs included with the Debian GNU/Linux system are free software;
  10 the exact distribution terms for each program are described in the
  11 individual files in /usr/share/doc/*/copyright.
  12 
  13 Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
  14 permitted by applicable law.
  15 No mail.
  16 #

Sécurité et confort d'utilisation

Protéger le serveur avec fail2ban

fail2ban n'est pas indispensable, mais je l'ai installé pour des raisons de sécurité. Il sert à empêcher l'attaque dite "dictionnaire" ou "force brute" en bannissant pour un temps l'ip d'un utilisateur qui échoue à entrer le bon mot de passe 5 fois d'affilée (par défault).

   1 # apt-get install fail2ban

Pour le configurer, éditer le fichier /etc/fail2ban/jail.conf

Ne plus devoir entrer son mot de passe à chaque connexion

On peut configurer ssh pour permettre la connexion au serveur via des clefs RSA, au lieu de taper le mot de passe à chaque fois. Il faut créer une clef RSA sur la machine cliente (ordinateur avec lequel on travaille).

Le chemin par défault ~/.ssh/id_rsa fonctionne très bien. Il faut ensuite transférer la clef publique id_rsa.pub du client dans le fichier ~/.ssh/authorized_keys du serveur.

Voiçi les commandes, dans l'ordre. J'utilise ici l'adresse du serveur sur le réseau local : 192.168.1.2, il faut adapter cette IP a votre cas.

   1 $ ssh-keygen -t rsa
   2 $ scp .ssh/id_rsa.pub utilisateur_serveur@192.168.1.2:~/.ssh/nom.pub
   3 $ ssh utilisateur@192.168.1.2
   4 utilisateur@serveur:~$ cat .ssh/nom.pub >> .ssh/authorized_keys
   5 utilisateur@serveur:~$ exit
   6 #Test
   7 $ ssh utilisateur@192.168.1.2

Le réseau

Principe

Pour que le serveur fonctionne, il doit avoir une connection internet permanente. De plus, elle doit accepter les connexions entrantes, c'est-à-dire qu'on doit pouvoir l'appeller depuis internet.

En gros, les clients vont appeller le serveur depuis internet par son nom, et ce nom doit correspondre à une adresse ip qui doit pointer d'une manière ou d'une autre sur la machine hôte (notre serveur).

Pour mieux comprendre : Vidéo pour débutants ou le tuto du site du zéro

Réseau local

Le serveur doit être identifié sur le réseau local par une adresse IP fixe (contrairement à l'attibution dynamique d'IP par DHCP, souvent utilisée pour se connecter rapidement avec une box)

Avec Debian, pour avoir une IP fixe, il faut éditer le fichier /etc/network/interfaces comme suit :

# Boucle locale
auto lo
iface lo inet loopback

# Adresse ip statique
auto eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1

# Adresse ip dynamique (désactivée par la présence des # devant les lignes)
#auto eth0
#iface eth0 inet dhcp

Ce fichier définit la configuration des interfaces réseau de débian. Ici, On configure une ip locale statique : 192.168.1.2

Il faut vérifier que la box possède bien l'adresse 192.168.1.1

Sinon, on peut adapter notre ip, par exemple 192.168.0.2

Une petite astuce : le fichier /etc/resolv.conf contient des ip de serveurs DNS à rechercher. J'ai créé ce fichier pour aider mon système à passer par le DNS de la box :

nameserver 192.168.1.1

Ip Fixe

On peut déjà arriver depuis internet jusqu'à la maison en appelant l'IP fixe.

Ip Dynamique

L'Ip change tout le temps. Comment faire pour appeler le serveur si on ne connait pas son Ip? (Je rappelle que sur internet, le seul moyen d'appeller les autres est d'utiliser l'IP)

Nous allons goûter aux joies des "serveur de noms dynamiques", ou dynDNS.

Le principe : lorsque la box ou la machine connectée à internet change d'adresse IP (en général à chaque fois qu'elle redémarre), elle publie sa nouvelle adresse sur un site où l'on s'est enregistré au préalable.

Quand on veut contacter notre connexion, on appelle le site, qui lui est au courant de la dernière IP en date et qui nous la fournit. Du coup, on a l'IP, on est sauvés.

Pour la pratique, voir l'exemple avec une livebox (adaptable).

Box ou pas box?

Si le serveur est directement branché sur internet par modem, on peut déjà l'atteindre.

Si le serveur est connecté à une box (ou au modem) par réseau local (WIFI ou cable ethernet), c'est un peu plus complexe.

Voir l'exemple des redirections de la livebox ici (qui n'est plus en fonctionnement depuis que nous sommes passés à free, mais qui a rendu bien des services).

Service e-mail

Installation des logiciels

Voiçi la commande qui installe tous les programmes nécessaires au service mail :

   1 # apt-get install postfix procmail courier-imap courier-imap-ssl mailx

Configuration pour recevoir des mails

Postfix

On va configurer postfix pour qu'il reconnaisse les mails qui nous appartiennent et qu'il les transmette à procmail.

/etc/postfix/main.cf

# Variables
mydomain = chezmoi.com # à remplacer par le nom de domaine approprié

# Pour quels domaines récupère-t-on les mails?
mydestination = $myhostname, $mydomain, localhost.$mydomain, localhost

# Aliases locaux (plusieurs noms pour un utilisateur, ...)
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

# Logiciel à qui transmettre les mails à stocker
mailbox_command = procmail -a "$EXTENSION"

# Format de stockage des mails sur le serveur
home_mailbox = Maildir/
mailbox_size_limit = 0
recipient_delimiter = +

# Écouter sur quelle interface réseau?
inet_interfaces = all
inet_protocols = all 

Procmail

Par défault, les mails sont stockés dans /var/mail/nom_utilisateur au format mailbox. Nous allons changer pour avoir les mails au format maildir dans le dossier /home/nom_utilisateur/Maildir.

Il y aura un fichier de configuration de procmail par utilisateur : /home/nom_utilisateur/.procmailrc.

SHELL=/bin/bash
MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR
ORGMAIL=$MAILDIR
LOCKFILE=$HOME/lockfile.lock
DEFAULT=$HOME/Maildir/
JUNKMAIL=$HOME/Maildir/.junkmail/
TRASH=$HOME/Maildir/.Trash
#LOGFILE=/var/log/procmailrc.log
#VERBOSE=yes
#LOGABSTRACT=all

# Filtres à rajouter...

On va ensuite créer une "Boîte aux mails" pour chaque utilisateur :

   1 # cd /home/nom_utilisateur
   2 # maildirmake Maildir
   3 # maildirmake -f Sent Maildir
   4 # maildirmake -f Queue Maildir
   5 # maildirmake -f junkmail Maildir
   6 # maildirmake -f virus Maildir
   7 # maildirmake -f Drafts Maildir
   8 # maildirmake -f Trash Maildir
   9 # chown -R nom_utilisateur Maildir 

Courier-imap

Tout fonctionne automatiquement!

Je suggère tout de même de faire une modification dans le fichier /etc/courier/imapd : modifier la ligne "address"

address=127.0.0.1

Ça permet d'empêcher l'utilisation du protocole IMAP non-sécurisé depuis internet. En effet, le mot de passe utilisé pour se s'autentifier n'est pas crypté sur le réseau et pourrait être facilement intercepté. On utilisera IMAPS pour récupérer le courrier (les informations seront cryptées).

Configuration pour envoyer des mails

Échange de fichiers

Mise en ligne de fichiers (serveur ftp)

Avec proftpd

Ce service n'est plus actif sur md2t.eu : il posait trop de problèmes de sécurité.

Serveur WEB

Serveur web

Avec apache2, mysql, php5 et openssl

Listes de diffusion mail

Listes de diffusion

Avec Mailman

Web Radio

InstallServeur/WebRadio

Avec MPD et Icecast2

Serveur de gestion d'identités LDAP

InstallServeur/LDAP