#!/bin/sh ############################################################################### # 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=eth1 ; # Interface rseau interne LAN_IP=192.168.1.2 ; # Adresse rseau interne LAN_NETWORK=192.168.1.0/24 ; # Rseau interne LAN_BROADCAST=192.168.1.255 ; # Adresse de broadcast interne # Paramtrage de la connexion Internet (WAN = Wild Area Network = Rseau Large) WAN_INTERFACE=eth0 ; # Interface rseau externe (Internet) WAN_IP=81.56.144.163 ; # Adresse rseau externe (Internet) WAN_NETWORK=0.0.0.0/0 ; # 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 #PF_IP=192.168.1.0 ; # Adresse IP du serveur sur le LAN PORT_TCP_SIMPSON=5900,5901,5902,5222,1863 #PORT_UDP_SIMPSON=27990,34912 EMULEPORT=34909 EMULEUDP=27990 EMULEUDP2=`expr $EMULEPORT + 3` EMULEHOST=192.168.1.10 # 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 "+ Activation du NAT" echo 1 > /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 connexion 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 ############################################################################### echo "+ Rgles pour Internet ($WAN_INTERFACE - $WAN_IP - $WAN_NETWORK)" iptables -t filter -A INPUT -i $WAN_INTERFACE -p icmp -j DROP 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 -d $WAN_IP -p tcp -m multiport --dports 80,22,25 -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 ############################################################################### echo "+ Rgles pour le port forwarding" iptables -t filter -A FORWARD -i $WAN_INTERFACE -o $LAN_INTERFACE -s $WAN_NETWORK -d $LAN_NETWORK -p tcp -m multiport --dports $PORT_TCP_SIMPSON -m state --state ! INVALID -j ACCEPT iptables -t filter -A FORWARD -i $LAN_INTERFACE -o $WAN_INTERFACE -s $LAN_NETWORK -d $WAN_NETWORK -p tcp -m multiport --sports $PORT_TCP_SIMPSON -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i $EXTIF -o $INTIF -p tcp --dport $EMULEPORT -d $EMULEHOST -j ACCEPT iptables -A FORWARD -i $EXTIF -o $INTIF -p udp --dport $EMULEUDP -d $EMULEHOST -j ACCEPT iptables -A FORWARD -i $EXTIF -o $INTIF -p udp --dport $EMULEUDP2 -d $EMULEHOST -j ACCEPT #iptables -t filter -A FORWARD -i $WAN_INTERFACE -o $LAN_INTERFACE -s $WAN_NETWORK -d $LAN_NETWORK -p udp -m multiport --dports $PORT_UDP_SIMPSON -m state --state ! INVALID -j ACCEPT #iptables -t filter -A FORWARD -i $LAN_INTERFACE -o $WAN_INTERFACE -s $LAN_NETWORK -d $WAN_NETWORK -p udp -m multiport --sports $PORT_UDP_SIMPSON -m state --state ESTABLISHED,RELATED -j ACCEPT #Port TCP iptables -t nat -A PREROUTING -i $WAN_INTERFACE -p tcp --destination-port $EMULEPORT -j DNAT --to-destination $EMULEHOST:$EMULEPORT iptables -t nat -A PREROUTING -i $WAN_INTERFACE -p udp --destination-port $EMULEUDP -j DNAT --to-destination $EMULEHOST:$EMULEUDP iptables -t nat -A PREROUTING -i $WAN_INTERFACE -p udp --destination-port $EMULEUDP2 -j DNAT --to-destination $EMULEHOST:$EMULEUDP2 iptables -t nat -A PREROUTING -i $WAN_INTERFACE -s $WAN_NETWORK -d $WAN_IP -p tcp -m multiport --dports $PORT_TCP_SIMPSON -j DNAT --to-destination 192.168.1.10 iptables -t nat -A POSTROUTING -o $LAN_INTERFACE -s $WAN_NETWORK -d 192.168.1.10 -p tcp -m multiport --dports $PORT_TCP_SIMPSON -j SNAT --to-source $LAN_IP iptables -t nat -A PREROUTING -i $LAN_INTERFACE -s $LAN_NETWORK -p tcp --dport 80 -j REDIRECT --to-port 3128 #Port UDP #iptables -t nat -A PREROUTING -i $WAN_INTERFACE -s $WAN_NETWORK -d $WAN_IP -p udp -m multiport --dport $PORT_UDP_SIMPSON -j DNAT --to-destination 192.168.1.10 #iptables -t nat -A POSTROUTING -o $LAN_INTERFACE -s $WAN_NETWORK -d 192.168.1.10 -p udp -m multiport --dport $PORT_UDP_SIMPSON -j SNAT --to-source $LAN_IP ############################################################################### # Rgles pour l'IP masquerading ############################################################################### 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 SNAT --to $WAN_IP iptables -t nat -A POSTROUTING -o $WAN_INTERFACE -s $LAN_NETWORK -d $WAN_NETWORK -p all -j MASQUERADE echo "+ On optimise la taille des paquets" iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS -o $WAN_INTERFACE --clamp-mss-to-pmtu ############################################################################### # 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}-filter-inp iptables -t filter -A FORWARD -p all -j LOG --log-prefix ${LOG_PREFIX}-filter-for iptables -t filter -A OUTPUT -p all -j LOG --log-prefix ${LOG_PREFIX}-filter-out # iptables -t nat -A PREROUTING -p all -j LOG --log-prefix ${LOG_PREFIX}-nat-pre # iptables -t nat -A OUTPUT -p all -j LOG --log-prefix ${LOG_PREFIX}-nat-out # iptables -t nat -A POSTROUTING -p all -j LOG --log-prefix ${LOG_PREFIX}-nat-post ;; 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}-filter-inp iptables -t filter -A FORWARD -p all -j ULOG --ulog-prefix ${LOG_PREFIX}-filter-for iptables -t filter -A OUTPUT -p all -j ULOG --ulog-prefix ${LOG_PREFIX}-filter-out # iptables -t nat -A PREROUTING -p all -j ULOG --ulog-prefix ${LOG_PREFIX}-nat-pre # iptables -t nat -A OUTPUT -p all -j ULOG --ulog-prefix ${LOG_PREFIX}-nat-out # iptables -t nat -A POSTROUTING -p all -j ULOG --ulog-prefix ${LOG_PREFIX}-nat-pos ;; 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'"