#!/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
|