#!/bin/sh -norc ############################################################################### # NOM: iptable-final-1.sh # # COMMENTAIRE : Synthse d'utilisation de ce qui a t vu dans le document # (chapitre III-10-3) # # Ce script fait partie du document : # "Firewall et scurit d'un rseau personnel sous Linux" # http://olivieraj.free.fr/fr/linux/information/firewall/ # # Auteur: Olivier ALLARD-JACQUIN (http://olivieraj.free.fr/) # Cr le : 2003/07/09 Dernire modification le : 2003/07/09 ############################################################################### ############################################################################### # Variables globales ############################################################################### # Paramtrage du rseau local (LAN = Local Area Network) LAN_INTERFACE=eth0 ; # Interface rseau interne LAN_IP=192.168.0.1 ; # Adresse rseau interne LAN_NETWORK=192.168.0.0/24 ; # Rseau interne LAN_BROADCAST=192.168.0.255 ; # Adresse de broadcast interne # Paramtrage de la connexion Internet (WAN = Wild Area Network = Rseau Large) WAN_INTERFACE=eth1 ; # Interface rseau externe (Internet) WAN_IP=10.0.0.1 ; # Adresse rseau externe (Internet) WAN_NETWORK=10.0.0.0/8 ; # Rseau externe (Internet) # REMARQUE: # Si vous utiliser une connexion par modem (RTC/RNIS/ADSL) pour vous connecter Internet # utilisez les variables ci-dessous. Elle permettrons ce script de dtecter # automatiquement votre adresse IP Internet #WAN_INTERFACE=ppp0 ; # Interface modem #WAN_IP=`/sbin/ifconfig | grep "P-t-P" | sed "s/^[: a-z]*\([.0-9]*\).*/\1/g"` ; # Rcupre l'adresse rseau externe (Internet) #WAN_NETWORK=0.0.0.0/0 # Paramtrage de l'IP masquerading # NAT=0 <=> Le NAT N'est PAS autoris # NAT=1 <=> Le NAT est autoris NAT=0 # Paramtrage du port forwarding # PF=0 <=> Le port forwarding N'est PAS autoris # PF=1 <=> Le port forwarding est autoris PF=0 PF_PROTO=tcp ; # Type de frame PF_PORT=80 ; # Port ouvert sur le WAN PF_IP=192.168.0.2 ; # Adresse IP du serveur sur le LAN # Paramtrage du LOG # LOG=LOG_IN <=> On log toutes les tentatives d'intrusions non autorises # LOG=LOG_OUT <=> On log toutes les tentatives de sortie non autorises # LOG=LOG_IN-OUT <=> On log toutes les tentatives d'entres et sorties non autorises # LOG=ULOG_IN <=> On log (avec ULOG) toutes les tentatives d'intrusions non autorise # LOG=ULOG_OUT <=> On log (avec ULOG) toutes les tentatives de sorties non autorises # LOG=ULOG_IN-OUT <=> On log (avec ULOG) toutes les tentatives d'entres et sorties non autorises # LOG=NONE <=> On ne log RIEN du tout LOG=ULOG_IN-OUT LOG_PREFIX=Netfilter ############################################################################### ############################################################################### # A PARTIR DE CE POINT, VOUS N'AVEZ PLUS BESOIN DE CONFIGURER CE SCRIPT!!! ############################################################################### ############################################################################### ############################################################################### # Initialisation de Netfilter ############################################################################### # Initialise la table Filter (par dfaut tout les changes sont refuss) echo "+ Initialisation de la table Filter" iptables -t filter -F iptables -t filter -X iptables -t filter -P INPUT DROP iptables -t filter -P FORWARD DROP iptables -t filter -P OUTPUT DROP # Initialise la table NAT (par dfaut tout les changes sont activs) echo "+ Initialisation de la table NAT" 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 # Initialise la table Mangle (par dfaut tout les changes sont activs) echo "+ Initialisation de la table Mangle" iptables -t mangle -F iptables -t mangle -X iptables -t mangle -P PREROUTING ACCEPT iptables -t mangle -P INPUT ACCEPT iptables -t mangle -P FORWARD ACCEPT iptables -t mangle -P OUTPUT ACCEPT iptables -t mangle -P POSTROUTING ACCEPT echo "+ Desactivation du NAT" echo 0 > /proc/sys/net/ipv4/ip_forward ############################################################################### # Rgles du localhost # On NE fait PAS de restriction aux adresses IP source / destination 127.0.0.0 ############################################################################### echo "+ Rgles du localhost" iptables -t filter -A OUTPUT -o lo -p all -j ACCEPT iptables -t filter -A INPUT -i lo -p all -j ACCEPT ############################################################################### # Rgles de conexion au reseau local # Tout est autoris ############################################################################### echo "+ Rgles du rseau local ($LAN_INTERFACE - $LAN_IP - $LAN_NETWORK)" # Connexions firewall <-> rseau iptables -t filter -A OUTPUT -o $LAN_INTERFACE -s $LAN_IP -d $LAN_NETWORK -p all -j ACCEPT iptables -t filter -A INPUT -i $LAN_INTERFACE -s $LAN_NETWORK -d $LAN_IP -p all -j ACCEPT # Connexions firewall <-> broadcast rseau iptables -t filter -A OUTPUT -o $LAN_INTERFACE -s $LAN_IP -d $LAN_BROADCAST -p all -j ACCEPT iptables -t filter -A INPUT -i $LAN_INTERFACE -s $LAN_BROADCAST -d $LAN_IP -p all -j ACCEPT ############################################################################### # Rgles de connexion Internet # Seul les connexions initialiss par la machine sont autorises # 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 echo "+ Rgles pour Internet ($WAN_INTERFACE - $WAN_IP - $WAN_NETWORK)" iptables -t filter -A OUTPUT -o $WAN_INTERFACE -s $WAN_IP -d $WAN_NETWORK -p all -m state --state ! INVALID -j ACCEPT iptables -t filter -A INPUT -i $WAN_INTERFACE -s $WAN_NETWORK -d $WAN_IP -p all -m state --state RELATED,ESTABLISHED -j ACCEPT ############################################################################### # Rgles pour le port forwarding # Pour que le port forwarding soit activ, il faut la variable "$PF" soit "1" ############################################################################### if [ "$PF" == "1" ]; then # Chargement des modules pour le port forwarding modprobe iptable_nat echo "+ Autorise le port forwardong de $WAN_IP:$PF_PORT -> $PF_IP:$PF_PORT" iptables -t filter -A FORWARD -i $WAN_INTERFACE -o $LAN_INTERFACE -s $WAN_NETWORK -d $LAN_NETWORK -p $PF_PROTO --dport $PF_PORT -m state --state ! INVALID -j ACCEPT iptables -t filter -A FORWARD -i $LAN_INTERFACE -o $WAN_INTERFACE -s $LAN_NETWORK -d $WAN_NETWORK -p $PF_PROTO --sport $PF_PORT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A PREROUTING -i $WAN_INTERFACE -s $WAN_NETWORK -d $WAN_IP -p $PF_PROTO --dport $PF_PORT -j DNAT --to-destination $PF_IP iptables -t nat -A POSTROUTING -o $LAN_INTERFACE -s $WAN_NETWORK -d $PF_IP -p $PF_PROTO --dport $PF_PORT -j SNAT --to-source $LAN_IP echo 1 > /proc/sys/net/ipv4/ip_forward else echo "+ Le port forwarding N'est PAS autoris" if [ "$NAT" == "0" ]; then echo 0 > /proc/sys/net/ipv4/ip_forward fi fi ############################################################################### # Rgles pour l'IP masquerading # Pour que le IP masquerading soit activ, il faut la variable "$NAT" soit "1" ############################################################################### if [ "$NAT" == "1" ]; then # Chargement des modules pour l'IP masquerading modprobe iptable_nat modprobe ip_nat_ftp modprobe ip_nat_irc echo "+ Autorise l'IP masquerading de $LAN_NETWORK -> $WAN_NETWORK" iptables -t filter -A FORWARD -i $LAN_INTERFACE -o $WAN_INTERFACE -s $LAN_NETWORK -d $WAN_NETWORK -p all -m state --state ! INVALID -j ACCEPT iptables -t filter -A FORWARD -i $WAN_INTERFACE -o $LAN_INTERFACE -s $WAN_NETWORK -d $LAN_NETWORK -p all -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A POSTROUTING -o $WAN_INTERFACE -s $LAN_NETWORK -d $WAN_NETWORK -p all -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward else echo "+ L'IP masquerading N'est PAS autoris" echo 0 > /proc/sys/net/ipv4/ip_forward fi ############################################################################### # Rgles pour le log ############################################################################### echo "+ Definition des logs ($LOG)" case "$LOG" in LOG_IN) iptables -t filter -A INPUT -p all -j LOG --log-prefix $LOG_PREFIX ;; LOG_OUT) iptables -t filter -A OUTPUT -p all -j LOG --log-prefix $LOG_PREFIX ;; LOG_IN-OUT) iptables -t filter -A INPUT -p all -j LOG --log-prefix $LOG_PREFIX iptables -t filter -A OUTPUT -p all -j LOG --log-prefix $LOG_PREFIX ;; ULOG_IN) iptables -t filter -A INPUT -p all -j ULOG --ulog-prefix $LOG_PREFIX ;; ULOG_OUT) iptables -t filter -A OUTPUT -p all -j ULOG --ulog-prefix $LOG_PREFIX ;; ULOG_IN-OUT) iptables -t filter -A INPUT -p all -j ULOG --ulog-prefix $LOG_PREFIX iptables -t filter -A OUTPUT -p all -j ULOG --ulog-prefix $LOG_PREFIX ;; esac echo "+ ------====== SCRIPT TERMINE! ======------" echo "+ Pour afficher votre configuration Netfilter, lancez:" echo " - 'iptables -L -n -v' pour la table 'Filter'" echo " - 'iptables -L -n -v -t nat' pour la table 'NAT'" echo " - 'iptables -L -n -v -t mangle' pour la table 'Mangle'"