Comment installer le firewall sous Debian avec une Dédibox V3
Par Mathieu Muller le jeudi, 23 septembre 2010, 23:36 - Web - Lien permanent
A l'occasion de la bascule de ma vieille dédibox V1 vers la V3 (plus petite, 25% moins rapide, mais qui coûte aussi la moitié du prix) j'ai décidé de faire un tutoriel noob friendly de l'installation de la machine, en tant que serveur web.
En plus, pour moi, ca me sert de pense-bête. Je vous avouerai que je cherche à chaque fois sur le net les même tutos, et au moins j'aurai une copie de la manip, ici, en Français.
La première étape du tutoriel vise à sécuriser la machine et a installer le firewall dessus. Sous linux, le firewall s'appelle "iptables" (et pas OpenOffice, n'en déplaise à Christine "Anéfé" Albanel).
On va commencer par mettre le fichier de configuration pour iptables dans le dossier /etc/ de linux, qui est le dossier où on met en général les configurations. Nous commençons donc par passer root en tapant "su" (oui c'est mal de "su" normalement on devrait "sudo"):
User@Host:~$ su
Mot de passe :
Host:/home/User#
Une fois cette étape réalisée, nous allons pouvoir écrire le fichier de configuration d'iptables. Je suis un peu psycho-rigide quand je fais des configurations, j'aime bien faire un dossier par logiciel, mais aussi travailler avec des liens symboliques (permettant d'avoir et de tester plusieurs configurations différentes).
Host:/home/User# mkdir /etc/iptables/
Host:/home/User# cd /etc/iptables/
Host:/etc/iptables#
On vérifie juste l'état d'accessibilité du dossier créé:
Host:/etc/iptables# ls -lart /etc/ | grep iptables
drwxr-xr-x 2 root root 4096 sep 24 01:30 iptables
Le dossier appartient à root, et est en read-only pour les autres utilisateurs. On aurait pu limiter l'accès en lecture pour les autres utilisateurs, mais étant donné qu'un simple NMAP sur la machine nous donnera pratiquement les même infos que la configuration iptables, je préfère le laisser en lecture seule.
Nous allons maintenant créer le fichier de configuration iptables, que nous allons nommer "iptables.conf.0":
Host:/etc/iptables# vim iptables.conf.0
Copiez collez le fichier de configuration suivant (les explications sont données directement dans le fichier de configuration):
# Iptables-save v1.4.2
*filter
# Par défaut, tout ce qui va rentrer dans la machine va être jeté à la poubelle
:INPUT DROP [22:2996]
# Tout ce qui est forwardé au réseau interne (NAT) est accepté.
# Cette règle n'est pas important dans notre cas, la Dédibox n'ayant pas de réseau derrière elle
:FORWARD ACCEPT [0:0]
# Par défaut, tout ce qui va sortir de la machine ne sera pas filtré
:OUTPUT ACCEPT [182:24609]
# Nous allons accepter tous les paquets provenant de l'interface loopback.
# Ces paquets étant interne à la machine, nous ne risquons rien.
-A INPUT -i lo -j ACCEPT
# Toutes les connections actives doivent être conservées
# C'est relativement important, sinon on se fait déconnecter du SSH lorsque la config se met en place
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# On accepte les communications entrantes sur le port SSH
# Sans cela, on ne pourrait plus se logguer sur la machine!
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
# Et on ouvre le port HTTP pour que le serveur web puisse recevoir les connexions de l'extérieur
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
COMMIT
Une fois ces opérations réalisées, on sécurise de suite la machine en effectuant la commande:
Host:/etc/iptables# iptables-restore < /etc/iptables/iptables.conf.0
On peut ensuite voir l'état du filtrage des paquets de la machine avec la commande iptables -L:
Host:/etc/iptables# iptables -L -v
Chain INPUT (policy DROP 3459 packets, 415K bytes)
pkts bytes target prot opt in out source destination
16256 1841K ACCEPT all -- lo any anywhere anywhere
74670 24M ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
4977 298K ACCEPT tcp -- eth0 any anywhere anywhere tcp dpt:ssh
232 13536 ACCEPT tcp -- eth0 any anywhere anywhere tcp dpt:www
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 95335 packets, 13M bytes)
pkts bytes target prot opt in out source destination
On voit la liste des règles de filtrage sur l'entrée de l'interface eth0 (carte réseau).
Il nous faut maintenant rajouter un lien symbolique vers notre fichier de configuration; ainsi si l'on veut changer de configuration, un jour, il nous suffira d'incrémenter le nombre du fichier iptables.conf.0, de tenter un iptables-restore avec; et si tout va bien changer le lien symbolique vers le nouveau fichier de configuration.
Host:/etc/iptables/ln -s iptables.conf.0 iptables.conf
On vérifie en vitesse les droits des fichiers (pour pas qu'un utilisateur mal intentionné modifie les règles de filtrage à l'insu de notre plein gré):
Host:/etc/iptables# ls -lart
total 12
-rw-r--r-- 1 root root 701 sep 24 01:30 iptables.conf.0
lrwxrwxrwx 1 root root 15 sep 24 01:30 iptables.conf -> iptables.conf.0
drwxr-xr-x 2 root root 4096 sep 24 01:30 .
drwxr-xr-x 65 root root 4096 sep 24 03:31 ..
Le fichier est seulement lisible par les utilisateurs, et accessible en écriture par le super-utilisateur. Tout va donc bien.
Il nous reste un problème: quand on démarre la machine, le fichier de configuration n'est pas chargé automatiquement. Sous Debian, il est conseillé d'installer un script qui va se charger d'effectuer le chargement du fichier de configuration iptables au montage de l'interface ethernet eth0 (plutôt que dans init.d).
Les scripts contenus dans /etc/network/if-up.d/ sont executés automatiquement au montage de l'interface réseau. Nous allons donc créer un nouveau script d'initialisation d'iptables à cet endroit:
Host:/etc/iptables# vim /etc/network/if-up.d/iptables
Et l'on met dans ce fichier le contenu suivant:
#!/bin/sh
iptables-restore < /etc/iptables/iptables.conf
Il ne nous reste plus qu'à rendre le fichier en question exécutable, grâce à la commande chmod:
/etc/network/if-up.d/ chmod 755 /etc/network/if-up.d/iptables
On vérifie que la commande a bien été prise en compte et que le fichier est bien exécutable:
Host:/etc/iptables# ls -lart /etc/network/if-up.d/
total 32
-rwxr-xr-x 1 root root 94 jan 20 2008 openntpd
-rwxr-xr-x 1 root root 4297 aoû 12 2008 mountnfs
-rwxr-xr-x 1 root root 755 jan 14 2009 openssh-server
-rwxr-xr-x 1 root root 289 jun 10 21:32 bind9
drwxr-xr-x 7 root root 4096 sep 24 01:18 ..
-rwxr-xr-x 1 root root 58 sep 24 01:32 iptables
drwxr-xr-x 2 root root 4096 sep 24 01:32 .
Le script est exécutable. Il ne nous reste plus qu'à rebooter pour vérifier que le script s'enclenche bien au démarrage de la machine:
Host:/etc/iptables# reboot
Une fois le reboot effectué, reconnectez vous à la machine. La commande iptables -L -v devrait afficher les mêmes règles que ci-dessus. Votre firewall est en place! La prochaine étape sera de sécuriser un peu plus l'accès SSH de la machine, et empêcher par exemple des gens de brute-forcer le mot de passe root.
Commentaires
Merci ! Ca m'a bcp aidé