J'explique (rapidement) ici comment j'ai mis en place mon petit serveur perso.
Ce serveur est un Mini PC IBM 8364:
Processeur : Pentium MMX (266MHz)
Ram : 2×128 Mo
DD : 10 Go
Mon pc ne possède ni lecteur CD, ni lecteur disquette. Par ailleurs, la carte mère ne permet pas le boot à partir de l'usb. Sur le PC, j'avais déjà Xubuntu 6.06 d'installer. J'ai donc utilisé Xubuntu pour installer Debian par netinstall. D'abord, j'ai modifié le boot de Xubuntu (/boot/grub/menu.list) en ajoutant les lignes suivantes :
title Lenny net install kernel (hd0,0)/boot/linux vga=791 priority=low initrd (hd0,0)/boot/initrd.gz -- boot
J'ai téléchargé linux et initrd.gz ici et les placé dans le dossier /boot/. Ensuite, j'ai redémarré le pc et booté avec Lenny net install. Après, il suffit de suivre les étapes (je ne les détaille pas ici).
Pour un serveur, il est préférable de lui donner une adresse IP fixe. Sur un serveur, on n'installe généralement pas d'interface graphique. Donc, tout se passe en ligne de commande. On édite le fichier /etc/network/interfaces :
# vim /etc/network/interfaces
Commenter ou enlever les lignes qui correspondent au DHCP :
allow-hotplug eth0 iface eth0 inet dhcp
Ensuite, on ajoute les lignes suivantes:
auto eth0 iface eth0 inet static address 192.168.1.20 network 192.168.1.0 netmask 255.255.255.0 broadcast 192.168.1.255 gateway 192.168.1.1
Ça mérite une petite explication.
auto eth0 : activation automatique de l'interface;
iface eth0 : configuration l'interface en statique;
address 192.168.1.20 : on met ici l'adresse IP fixe.
Pour accéder à distance à mon serveur, j'utilise ssh.
# apt-get install openssh-server
Ainsi, on peut accéder en console :
$ ssh login@adresseIP
Pour un transfert de beaucoup de fichier, on peut utiliser le protocole SFTP qui est basé sur ssh. On peut utiliser filezilla pour cela. On peut accéder au serveur à partir d'internet en redirigeant le port 22 vers le serveur au niveau du routeur.
Pour contrer des éventuelles attaques de type force-brute, il est vivement conseillé d'installer le paquet fail2ban :
# apt-get install fail2ban
D'ailleurs, il est vivement conseillé de ne pas autoriser de s'identifier par ssh en root. Pour cela, éditer le fichier /etc/ssh/sshd_config et modifier la ligne 20 comme suite :
PermitRootLogin no
Rsync (remote synchronization) est, comme son nom le présage, un logiciel de synchronisation de fichiers. Il est fréquemment utilisé pour la sauvegarde.
Rien de plus simple pour installer ce logiciel sous notre serveur :
# apt-get install rsync
Pour l'utiliser, vous avez deux possibilités :
rsync -av SRC USER@HOST_SERVEUR_DE_SAUVEGARDE:DEST
rsync -av USER@HOST:SRC DEST
Pour plus d'informations sur les options, regardez le man.
A chaque fois qu'on lance la sauvegarde, il faut rentrer le mot de passe. Pour éviter cela, on crée une clé SSH à partir de l'ordinateur qui lance la commande rsync :
ssh-keygen -t dsa -f rsync-key
Lorsqu'il demande de rentrer un mot de passe, laisser vide. Cela va générer deux fichiers (rsync-key et rsync-key.pub). Vérifier bien que vous êtes le seul à avoir le droit de lecteur sur le fichier rsync-key. Copier le fichier rsync-key.pub dans le dossier ~/.ssh/ de l'autre machine. Pour autoriser les connexions ssh avec cette clé, il faut l'indiquer dans le fichier ~/.ssh/authorized_keys. Créer ce fichier s'il n'existe pas :
$ touch ~/.ssh/authorized_keys $ chmod 600 ~/.ssh/authorized_keys
Et,
$ cat ~/.ssh/rsync-key.pub >> ~/.ssh/authorized_keys
Pour ne plus avoir à taper le mot de passer, ajouter l'option –rsh='ssh -i rsync-key' à la commande de rsync.
Netfilter est un module de Linux qui remplit les fonctions de pare-feu, de traduction d'adresse et d'historisation du trafic réseau. Et, Iptables est l'interface permettant de configurer Netfilter.
L'objectif est de bloquer par défaut tout le trafic entrant et ensuite d'autoriser au cas par cas le trafic pour les services qu'on souhaite (web, mail…). Pour cela, il faut créer des règles.
La commande suivante permet de visualiser les règles actuelles :
# iptables -L
Par défaut, tous les trafics est autorisés.
On crée un fichier qui va contenir les nouvelles règles (iptables.rules par exemple). Voilà un exemple de règles basiques :
*filter # Autoriser le trafic local et bloquer le trafic ne passant pas par l'interface lo0 -A INPUT -i lo -j ACCEPT -A INPUT -i ! lo -d 127.0.0.0/8 -j REJECT # Autoriser le trafic entrant d'une connexion déjà établie -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Autoriser tout le trafic sortant -A OUTPUT -j ACCEPT # Autoriser les connexions HTTP and HTTPS -A INPUT -p tcp --dport 80 -j ACCEPT -A INPUT -p tcp --dport 443 -j ACCEPT # Autoriser les connexions SSH -A INPUT -p tcp --dport 22 -j ACCEPT # Autoriser les requêtes ICMP (ping) -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT # Bloquer le reste du trafic -A INPUT -j REJECT -A FORWARD -j REJECT COMMIT
Pour activer ces nouvelles règles, il suffit de faire :
# iptables-restore < iptables.rules
Pour activer ces reègles au démarrage du serveur, il suffit de créer un script (nommé par exemple iptables-script) dans /etc/init.d/ dans le format est la suivante :
#!/bin/sh
case "$1" in
start|"")
# commandes lancees au démarrage
iptables-restore < /root/iptables.rules
;;
stop)
# à l'arret
exit 0
;;
*)
exit 3
;;
esac
Puis rendre le script exécutable :
chmod +x /etc/init.d/iptables-script
Enfin, pour que le script soit lancé au démarrage, il faut le rajouter aux runlevels avec la commande update-rc.d :
update-rc.d iptables-script defaults 99