#!/bin/sh # /etc/init.d/firewall # Script de configuration "netfilter/iptables" # # Exécuter : # update-rc.d firewall start 40 S . stop 89 0 6 . # (Lire les documents dans /usr/share/doc/iptables/) # # Ce script est pour une machine "isolé" qui possèdes des accès internet. # Il est basé sur la lecture de # http://olivieraj.free.fr/fr/linux/information/firewall/ # http://lea-linux.org/reseau/iptables.html # http://www.trustonme.net/didactels/112.html # # Remarque : les modules kernel nécessaires sont chargés automatiquement # par le kernel start() { echo "Démarrage du firewall..." ###################################### # Désactivation de IP forwarding echo 0 > /proc/sys/net/ipv4/ip_forward # Je ne veux pas de spoofing if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] then for filtre in /proc/sys/net/ipv4/conf/*/rp_filter do echo 1 > $filtre done fi # Je ne veux pas de icmp (donc bloque les pings) echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts ######################################### ######################################### # Initialisation de la tables filter et la politiques par défaut iptables -F iptables -X iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP # On va rajouter 2 nouvelles chaînes. # Ceci permettra d'ajouter des nouvelles cibles qui # auront la possibilité de loguer ce qui se passe. # Ici, on logue et on refuse le paquet, # on rajoute un préfixe pour pouvoir # s'y retrouver dans les logs iptables -N LOG_DROP iptables -A LOG_DROP -j ULOG --ulog-prefix='[IPTABLES DROP] :' iptables -A LOG_DROP -j DROP # Ici, on logue et on accepte le paquet, # on rajoute un préfixe pour pouvoir # s'y retrouver dans les logs iptables -N LOG_ACCEPT iptables -A LOG_ACCEPT -j ULOG --ulog-prefix='[IPTABLES ACCEPT] : ' iptables -A LOG_ACCEPT -j ACCEPT # Pas de filtrage sur l'interface "loopback" iptables -A OUTPUT -o lo -p all -j ACCEPT iptables -A INPUT -i lo -p all -j ACCEPT # Règles de connexion à Internet # Seul les connexions initialisés par la machine sont autorisées # C'est le suivit de connexion # Chargement des modules pour le suivit de connexion : #modprobe ip_conntrack #modprobe ip_conntrack_ftp #modprobe ip_conntrack_irc #ce chargement est devenue automatique par le kernel #je le laisse ici pour information # iptables -A OUTPUT -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # J'autorise deux PC l'accés à mon PC pour apache et ssh # Leur adresse IP ou hostname IP1=xxx.xxx.xxx.xxx IP2=xxx.xxx.xxx.xxx ## Serveur web # Pas de restriction : #iptables -A INPUT -p tcp --dport 80 -j LOG_ACCEPT # Restriction et aussi préciser l'interface ppp0 : #iptables -A INPUT -i ppp0 -s $IP1 -p tcp --sport 1024:65535 --dport 80 -m state --state NEW -j LOG_ACCEPT # Restriction : iptables -A INPUT -s $IP1 -p tcp --sport 1024:65535 --dport 80 -m state --state NEW -j LOG_ACCEPT iptables -A INPUT -s $IP2 -p tcp --sport 1024:65535 --dport 80 -m state --state NEW -j LOG_ACCEPT ## Serveur ssh # Pas de restriction : #iptables -A INPUT -p tcp --dport 22 -j LOG_ACCEPT # Restriction et aussi préciser l'interface ppp0 : #iptables -A INPUT -i ppp0 -s $IP1 -p tcp --sport 1024:65535 --dport 22 -j LOG_ACCEPT # Restriction : iptables -A INPUT -s $IP1 -p tcp --sport 1024:65535 --dport 22 -j LOG_ACCEPT iptables -A INPUT -s $IP2 -p tcp --sport 1024:65535 --dport 22 -j LOG_ACCEPT ## Pour pouvoir utiliser GnomeMeeting #iptables -A INPUT -p tcp --dport 30000:30010 -j ACCEPT #iptables -A INPUT -p tcp --dport 1720 -j ACCEPT #iptables -A INPUT -p udp --dport 5000:5003 -j ACCEPT ## Pour pouvoir utiliser mldonkey #EDONKEY_PORT=4662 #OVERNET_PORT=5865 #BITTORRENT_PORT=6882 #OPENNAP_PORT=9999 ## MLDonkey acting as Edonkey2000 client #iptables -A INPUT -p tcp -m tcp --dport $EDONKEY_PORT -j ACCEPT #iptables -A INPUT -p udp -m udp --dport $(($EDONKEY_PORT + 4)) -j ACCEPT ## MLDonkey acting as Overnet client #iptables -A INPUT -p tcp -m tcp --dport $OVERNET_PORT -j ACCEPT #iptables -A INPUT -p udp -m udp --dport $OVERNET_PORT -j ACCEPT ## MLDonkey acting as BitTorrent client #iptables -A INPUT -p tcp -m tcp --dport $BITTORRENT_PORT -j ACCEPT ## MLDonkey acting as OpenNap client #iptables -A INPUT -p tcp -m tcp --dport $OPENNAP_PORT -j ACCEPT # Toutes les règles qui n'ont pas passé les # règles du firewall seront refusées et loguées. iptables -A FORWARD -j LOG_DROP iptables -A INPUT -j LOG_DROP iptables -A OUTPUT -j LOG_DROP ############################################ ############################################# # Initialisation de la tables nat et la politiques par défaut iptables -t nat -F iptables -t nat -X iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT iptables -t nat -P POSTROUTING ACCEPT ################################################ echo "...firewall activé!" } stop() { iptables -F iptables -X iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -t nat -F iptables -t nat -X iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT echo "Firewall désactivé!" } restart() { stop sleep 2 start } case "$1" in 'start') start ;; 'stop') stop ;; 'restart') restart ;; 'status') iptables -L -n -v iptables -t -n -v nat -L ;; *) echo "Usage: /etc/init.d/firewall {start|stop|restart|status}" esac