#!/bin/sh ############################################################################### # Variables globales ############################################################################### # Parametrage du reseau local (LAN = Local Area Network) LAN_INTERFACE=tap0 ; # Interface reseau interne LAN_IP=192.168.1.1 ; # Adresse reseau interne LAN_NETWORK=192.168.1.0/24 ; # Reseau interne LAN_BROADCAST=192.168.1.255 ; # Adresse de broadcast interne # Parametrage de la connexion Internet (WAN = Wild Area Network = Reseau Large) WAN_INTERFACE=eth0 ; # Interface reseau externe (Internet) WAN_IP=192.168.0.69 ; # Adresse reseau externe (Internet) WAN_NETWORK=0.0.0.0/0 ; # Reseau externe (Internet) # REMARQUE: # Si vous utiliser une connexion par modem (RTC/RNIS/ADSL) pour vous connecter a Internet # utilisez les variables ci-dessous. Elle permettrons a ce script de detecter # 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"` ; # Recupere l'adresse reseau externe (Internet) #WAN_NETWORK=0.0.0.0/0 # Parametrage de l'IP masquerading # NAT=0 <=> Le NAT N'est PAS autorise # NAT=1 <=> Le NAT est autorise NAT=1 # Parametrage du port forwarding # PF=0 <=> Le port forwarding N'est PAS autorise # PF=1 <=> Le port forwarding est autorise 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 # Parametrage du LOG # LOG=LOG_IN <=> On log toutes les tentatives d'intrusions non autorisees # LOG=LOG_OUT <=> On log toutes les tentatives de sortie non autorisees # LOG=LOG_IN-OUT <=> On log toutes les tentatives d'entrees et sorties non autorisees # LOG=ULOG_IN <=> On log (avec ULOG) toutes les tentatives d'intrusions non autorisee # LOG=ULOG_OUT <=> On log (avec ULOG) toutes les tentatives de sorties non autorisees # LOG=ULOG_IN-OUT <=> On log (avec ULOG) toutes les tentatives d'entrees et sorties non autorisees # 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 defaut tout les echanges sont refuses) 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 defaut tout les echanges sont actives) 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 defaut tout les echanges sont actives) 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 ############################################################################### # Regles du localhost # On NE fait PAS de restriction aux adresses IP source / destination 127.0.0.0 ############################################################################### echo "+ Regles du localhost" iptables -t filter -A OUTPUT -o lo -p all -j ACCEPT iptables -t filter -A INPUT -i lo -p all -j ACCEPT ############################################################################### # Regles de conexion au reseau local # Tout est autorise ############################################################################### echo "+ Regles du reseau local ($LAN_INTERFACE - $LAN_IP - $LAN_NETWORK)" # Connexions firewall <-> reseau 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 reseau 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 ############################################################################### # Regles de connexion a Internet # Seul les connexions initialises par la machine sont autorisees # 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 "+ Regles 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 # HTTP iptables -t filter -A OUTPUT -o eth0 -s 0.0.0.0/0 -p tcp --dport 80 -j ACCEPT iptables -t filter -A INPUT -i eth0 -d 0.0.0.0/0 -p tcp --sport 80 -j ACCEPT # HTTPS iptables -t filter -A OUTPUT -o eth0 -s 0.0.0.0/0 -p tcp --dport 443 -j ACCEPT iptables -t filter -A INPUT -i eth0 -d 0.0.0.0/0 -p tcp --sport 443 -j ACCEPT # SSH iptables -t filter -A OUTPUT -o eth0 -s 0.0.0.0/0 -p tcp --dport 21 -j ACCEPT iptables -t filter -A INPUT -i eth0 -d 0.0.0.0/0 -p tcp --sport 21 -j ACCEPT # FTP iptables -t filter -A OUTPUT -o eth0 -s 0.0.0.0/0 -p tcp --dport 22 -j ACCEPT iptables -t filter -A INPUT -i eth0 -d 0.0.0.0/0 -p tcp --sport 22 -j ACCEPT # FTP-PASV iptables -t filter -A OUTPUT -o eth0 -s 0.0.0.0/0 -p tcp --dport 22000:22512 -j ACCEPT iptables -t filter -A INPUT -i eth0 -d 0.0.0.0/0 -p tcp --sport 22000:22512 -j ACCEPT ############################################################################### # Regles pour le port forwarding # Pour que le port forwarding soit active, il faut la variable "$PF" soit a "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 autorise" if [ "$NAT" == "0" ]; then echo 0 > /proc/sys/net/ipv4/ip_forward fi fi ############################################################################### # Regles pour l'IP masquerading # Pour que le IP masquerading soit active, il faut la variable "$NAT" soit a "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 autorise" echo 0 > /proc/sys/net/ipv4/ip_forward fi ############################################################################### # Regles 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'"