Firefox
On ne peut pas imaginer tout ce qu'un pirate peut faire !

Sécurité :
CCCure.net
IXUS.NET
System Administration, Networking and Security
Linux Security
Security Focus

Firewall pour Linux :
Shorewall
Guarddog

Distributions sécurisées :
MandrakeSecurity Multi Network Firewall
IPCop.org
Un pare-feu pour un PC connecté à Internet
Je ne ferai pas un long discours sur NetFilter/iptables car il existe déjà de nombreuses ressources sur Internet. Je vous conseille donc de lire avec attention le site de Olivier Allard-Jacquin consacré à la sécurité d'un reseau personnel sous Linux ainsi que le site de Christian Caleca.

NetFilter/iptables n'est pas très facile d'accès pour le non-informaticien. Si vous ne souhaitez pas utiliser directement les règles iptables, vous pouvez utiliser un outil plus sophistiqué comme Shorewall ou Guarddog. Ces programmes sont en fait des interfaces à la commande iptables. Shorewall reste un outil de bas niveau puisqu'il faut manipuler des fichiers de configuration, alors que Guarddog est un peu plus évolué car il est livré avec une interface graphique.

À savoir : le pare-feu intégré au Paneau de Contrôle Mandrake s'appuie sur Shorewall. Il n'est pas compatible avec mon script puisque Shorewall installe ses propres règles iptables. Pour utiliser mon script il faudra s'assurer que le pare-feu intégré au Paneau de Contrôle Mandrake (menu Sécurité) est désactivé (par défaut il est désactivé).

De plus, si vous lancez mon script au démarrage du système comme indiqué ci-après, il n'est pas nécessaire d'activer le service iptables. Pour désactiver le service iptables, il suffit d'aller dans le Paneau de Contrôle Mandrake, Système, Services.


Le script
Si vous n'avez qu'un seul PC connecté à Internet, vous pouvez utiliser cet ensemble de règles iptables pour protéger votre PC des curieux et des mauvais plaisantins. Vous pouvez télécharger le script firewall-desktop.sh ou faire un copier/coller du bas de cette page. Vous devrez exécuter ce script sous root pour que le pare-feu soit actif. Ce script prend le nom de l'interface réseau en paramètre. Si aucun nom n'est fourni, eth0 est choisi.

Ce script fonctionne avec n'importe quelle distribution Linux dont le noyau intègre NetFilter (ie. versions 2.4 et 2.6 à ce jour).

Je vous conseille de copier ce script sous le répertoire /etc/rc.d et de modifier le fichier /etc/rc.d/rc.local pour qu'il le prenne en compte. Ainsi, le pare-feu sera actif dès le démarrage de votre PC.


La politique par défaut est d'interdire toute demande de connexion en provenance d'Internet. Pour télécharger avec BitTorrent ou rendre accessibles vos serveurs depuis Internet, il suffit de décommenter une ligne dans le script. Et n'oubliez pas de consulter les logs de votre machine pour connaître les tentatives d'intrusion. Just for fun ;-)

Au fait, n'oubliez pas d'activer le service syslog pour que les traces soient centralisées sous le répertoire /var/log. Je vous conseille aussi d'installer le paquetage logrotate et d'activer le service crond ou anacrond pour ne pas saturer votre disque avec les logs.

Le script est bien commenté, j'espère que vous le comprendrez sans problème.

Ah, oui, j'oubliais. Ce n'est pas parce que vous avez un pare-feu et que vous êtes sous Linux que vous pouvez faire n'importe quoi. En ouvrant un port, vous rendez votre système vulnérable si le logiciel serveur qui écoute ce port contient une faille. Pensez donc à mettre à jour votre système régulièrement. Et à fermer les ports qui ne sont plus utilisés.

Et n'ouvrez pas les pièces jointes envoyées par des inconnus. Les emails sont des nids à virus, chevaux de Troie et autres saloperies. Même des images ou des vidéogrammes peuvent être dangeureux.


#!/bin/sh
###################################################################################
# Configuration du pare-feu Netfilter pour une machine linux connectée a Internet #
###################################################################################
# 20041103 - firewall-desktop.sh
# Ce script doit être exécuté sous root.
# Il peut être lancé automatiquement au démarrage du PC. Pour cela, 
# copiez ce script sous le répertoire /etc/rc.d et ajoutez à la fin
# du fichier /etc/rc.d/rc.local la ligne suivante :
# sh ./firewall-desktop.sh _interface_
# Si vous modifiez le script, réexécutez-le sous root.
#
# 
# Cette machine peut être reliée au réseau via un modem analogique classique,
# un modem ADSL, une Freebox, ...
# Cette machine ne dispose que d'une connexion réseau définie par la variable NETIN.
# Dans le cas de la Freebox reliée en Ethernet, l'interface est normalement 'eth0'.
# Pour savoir quelle interface est utilisée, faites un "ifconfig" sous root.
# Vous devriez avoir 2 interfaces de listées. 'lo' pour l'interface locale ou 'loopback'
# et celle qui relie votre PC à internet : eth0 ou eth1 ou ppp0 ou ...
#
if [ "$1" == "" ]
then
NETIN=eth0
else
NETIN=$1
fi

#
# La stratégie est simple : 
# on interdit tout par défaut (cf. la politique par défaut à DROP)
# puis on autorise  ce qui nous intéresse :
# - l'interface locale (lo) à dialoguer avec elle-même (c'est la moindre des choses)
# - le trafic du PC vers internet
# - le trafic d'internet vers le PC pour les connexions initiées par le PC
# on interdit explicitement les paquets qui proviennent d'internet contenant 
# une adresse IP source non routable sur internet
# ensuite on ouvre les ports pour les services actifs sur notre PC et 
# qui doivent être visibles de l'exterieur (P2P, serveur Web, ...)
# enfin on reste poli en acceptant le ping et en refusant explicitement 
# les demandes de connexions non souhaitées
# sans oublier de les logguer (cf. /var/log/messages)

#
# NB : Cas du serveur X11
# Par défaut, le serveur X est à l'écoute sur le port TCP/6000. 
# On peut désactiver cette écoute en lançant le serveur X11 avec l'option '-nolisten tcp'
# (cf. fichier /etc/X11/xdm/Xservers sous Mandrakelinux) 
# Ajoutez "-nolisten tcp" à la ligne "/usr/X11R6/bin/X" ainsi :
# :0 local /bin/nice -n -10 /usr/X11R6/bin/X -nolisten tcp -deferglyphs 16
#
# ou bien on peut filtrer le port 6000 avec une règle Netfilter.
# Remarque : par défaut, le port 6000 est fermé en entrée avec ce script.
#
# Dans ces 2 cas, il sera impossible de faire du X à distance.
#


# A priori inutile car déjà chargés
#modprobe ip_tables
#modprobe iptable_filter
#modprobe ip_conntrack
#modprobe ip_nat_ftp
#modprobe ip_nat_irc
#modprobe iptable_mangle
#modprobe iptable_nat

#########################################################################
# On part sur des bases propres : on supprime toutes règles antérieures #
#########################################################################
# Supprime tous les filtres et les chaines existants
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X 

###################################################################
# Définition de la politique par défaut :                         #
#    on ignore tout (càd absortion des paquets sans y répondre)   #
# Puisqu'on ne dispose que d'une seule machine,                   #
#    on pourrait ne définir que la règle sur la chaîne INPUT      #
###################################################################
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -P INPUT DROP

# Autorise l'interface locale à dialoguer avec elle-même !
iptables -A OUTPUT -o lo -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT
iptables -A INPUT  -i lo -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT

# Libre d'aller vers l'extérieur
iptables -A OUTPUT -m state --state ! INVALID -j ACCEPT

# Autorise le trafic entrant sur des connexions ouvertes
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Ignore les paquets provenant de l'extérieur avec une adresse non routable sur Internet
iptables -A INPUT -i ${NETIN} -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i ${NETIN} -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i ${NETIN} -s 192.168.0.0/16 -j DROP
iptables -A INPUT -i ${NETIN} -s 127.0.0.0/8 -j DROP

###################################
# Ouverture de ports à la demande #
###################################

# BitTorrent 
# Cette règle autorise les clients BT à se connecter sur notre PC
# et ainsi profiter de notre bande passante montante ('upload')
# afin que notre client BT soit autorisé en retour à télécharger (principe de base du P2P)
#################################
# Pour faire du BitTorrent, activez la ligne suivante et redémarrez le script sous root.
# La plage 6881:6889 est la plage standard.
# Si vous utilisez une plage différente en lançant votre client BT,
# n'oubliez pas de la modifier ici aussi.
# Quelques infos supplémentaires sur le Club.
#iptables -A INPUT -m state --state NEW -p tcp --dport 6881:6889 -j ACCEPT

# Autorise les connexions entrantes sur un serveur local.
# Créer une ligne par protocole en changeant la valeur du paramètre --dport
# Exemple de valeurs possibles :
# http, https, ftp, ssh, smtp, 53, 8080, ...            
###########################################################################
# Si vous avez un serveur HTTP et que vous vouliez qu'il soit visible depuis l'extérieur, 
# activez la ligne suivante et redémarrez le script sous root.
#iptables -A INPUT -m state --state NEW -p tcp --dport http -j ACCEPT


###############################
# La section politesse et LOG #
###############################

# Pour autoriser le ping, ie. être visible d'internet
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# Par curiosité, on peut tracer les demandes de connexions en provenance de l'exterieur
# Traces disponibles dans le fichier /var/log/messages
iptables -A INPUT -m state --state NEW -j LOG

# Refuse explicitement les demandes de connexion
# en provenance de l'extérieur car la politique par défaut est d'ignorer (DROP)
iptables -A INPUT -m state --state NEW -j REJECT

# fin du script

.../...
Article écrit le 30 septembre 2004.
Dernières modifications le 8 janvier 2005.