Exemples de configurations

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

1 Introduction

Iptables n'étant pas très intuitif, et les exemples quasiments indispensable pour monter sa configuration, voici quelques exemples allant du plus simple au plus complexe.

2 Exemple 1

#!/bin/sh
################################################ 
#                                              #
#  Script de Firewall de base                  #
#                                              #
################################################
 
#############
# Variables #
############
    IPTABLES=/sbin/iptables
    IF_EXT=eth0
    IP_SSH=xx.xx.xx.xx
 
 
###################
# Vide les tables #
##################
   ${IPTABLES} -t mangle -F
   ${IPTABLES} -t nat -F
   ${IPTABLES} -F
   ${IPTABLES} -t mangle -X
   ${IPTABLES} -t nat -X
   ${IPTABLES} -X
   ${IPTABLES} -Z
 
 
#####################
# Regles par defaut #
####################
  ## ignore_echo_broadcasts, TCP Syncookies, ip_forward
   echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
 
  ## Police par defaut
   ${IPTABLES} -P INPUT DROP
   ${IPTABLES} -P OUTPUT DROP
   ${IPTABLES} -P FORWARD DROP
 
  ## Loopback accepte
   ${IPTABLES} -A FORWARD -i lo -o lo -j ACCEPT
   ${IPTABLES} -A INPUT -i lo -j ACCEPT
   ${IPTABLES} -A OUTPUT -o lo -j ACCEPT
 
  ## REJECT les fausses connex pretendues s'initialiser et sans syn
   ${IPTABLES} -A INPUT -p tcp ! --syn -m state --state NEW,INVALID -j REJECT
 
 
####################
# Regles speciales #
###################
### Creation des chaines
    ${IPTABLES} -N SPOOFED
    ${IPTABLES} -N SERVICES
 
### Interdit les paquets spoofés
    ${IPTABLES} -A SPOOFED -s 127.0.0.0/8 -j DROP
    ${IPTABLES} -A SPOOFED -s 169.254.0.0/12 -j DROP
    ${IPTABLES} -A SPOOFED -s 172.16.0.0/12 -j DROP
    ${IPTABLES} -A SPOOFED -s 192.168.0.0/16 -j DROP
    ${IPTABLES} -A SPOOFED -s 10.0.0.0/8 -j DROP
 
### INPUT autorisés
    ### ICMP
	## Ping (*)
        ${IPTABLES} -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
    ### TCP
	## SSH (*)
	${IPTABLES} -A SERVICES -p tcp -d ${IP_SSH} --dport 22 -j ACCEPT
   ## MAIL (*)
	${IPTABLES} -A SERVICES -p tcp -d ${IP_SSH} --dport 25 -j ACCEPT
 
 
#################################
# Ports ouverts sur le firewall #
################################
    ${IPTABLES} -A OUTPUT -j ACCEPT
    ${IPTABLES} -A INPUT -m state --state ESTABLISH,RELATED -j ACCEPT
    ${IPTABLES} -A INPUT -j SPOOFED
    ${IPTABLES} -A INPUT -i ${IF_EXT} -j SERVICES

3 Exemple 2

#!/bin/bash
echo Setting firewall rules...
 
###### Debut Initialisation ######
 
# Interdire toute connexion entrante
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
echo - Interdire toute connexion entrante : [OK]
 
# Interdire toute connexion sortante
iptables -t filter -P OUTPUT DROP
echo - Interdire toute connexion sortante : [OK]
 
# Vider les tables actuelles
iptables -t filter -F
iptables -t filter -X
echo - Vidage : [OK]
 
# Autoriser SSH
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
echo - Autoriser SSH : [OK]
 
# Ne pas casser les connexions etablies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
echo - Ne pas casser les connexions établies : [OK]
 
###### Fin Inialisation ######
 
##### Debut Regles ######
 
# Autoriser les requetes DNS, FTP, HTTP, NTP
iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
echo - Autoriser les requetes DNS, FTP, HTTP, NTP : [OK]
 
# Autoriser loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
echo - Autoriser loopback : [OK]
 
# Autoriser ping
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT
echo - Autoriser ping : [OK]
 
# HTTP
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 8443 -j ACCEPT
echo - Autoriser serveur Apache : [OK]
 
# FTP
modprobe ip_conntrack_ftp
iptables -t filter -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
echo - Autoriser serveur FTP : [OK]
 
# Mail
iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
echo - Autoriser serveur Mail : [OK]
 
###### Fin Regles ######
 
echo Firewall mis a jour avec succes !

4 Exemple 3

# description: Regles de pare-feu avec masquerading
# probe : true
#
### BEGIN INIT INFO
# Provides: firewall_passerelle
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 3 5
# Default-Stop:
# Description: Regles de pare-feu avec masquerading (configurable)
### END INIT INFO
 
####################################################################
# INTRODUCTION
####################################################################
 
## Make sure we are root
if [ ! "`id 2>&1 | egrep 'uid=0' | cut -d '(' -f1`" = "uid=0" ]; then
        echo "Ce script doit etre lance par l'utilisateur 'root'"
        exit 1 ## On sort du script
fi
 
# Si l'utilitaire iptables n'est pas installe on sort en erreur
# Attention, le chemin de l'utilitaire IPTABLES peut varier d'un
# syst?me ?  l'autre
IPT="/sbin/iptables"
[ -x ${IPT} ] || {
        echo "Impossible de trouver le chemin pour iptables"
        exit 1
        }
 
# Interface connexion internet
# Cette variable est obligatoire
OUT="ppp0"
 
# Si la ligne suivante est mise en commentaire, la machine
# n'est pas configuree en mode passerelle et fait uniquement
# office de parefeu
IN="eth0"  # interface reseau prive si applicable
 
# Decommentez la ligne suivante pour activer le filtrage par
# protocole dans le cas d'une utilisation en mode passerelle
#FILTRAGE="-p tcp -m multiport --destination-port 6667,5190"
 
# regardons comment nous avons ete appele
case "$1" in
        start)
                ;;
        stop)
                ${IPT} -t filter -F
                ${IPT} -t nat    -F
                ${IPT} -t filter -X
                ${IPT} -t filter -Z
                ${IPT} -t filter -P INPUT       ACCEPT
                ${IPT} -t filter -P OUTPUT      ACCEPT
                ${IPT} -t filter -P FORWARD     ACCEPT
                /bin/echo "0" > /proc/sys/net/ipv4/ip_forward
                exit 0
                ;;
        restart)
                $0 stop
                $0 start
                ;;
        *)
                echo "Usage: $0 {start|stop|restart}"
                exit 1
esac
 
# On charge les modules
modprobe ip_tables
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
modprobe ip_conntrack_h323
 
# On vide toutes les regles et les chaines
${IPT} -t filter -F
${IPT} -t nat    -F
${IPT} -t filter -X
${IPT} -t filter -Z
 
# On configure le comportement par defaut (Policy)
${IPT} -P INPUT DROP
${IPT} -P OUTPUT DROP
${IPT} -P FORWARD DROP
 
####################################################################
# Flags pour le kernel
####################################################################
 
# On active la protection TCP SYN Cookie (demandes de
# connexion repetes)
#/bin/echo "1" > /proc/sys/net/ipv4/tcp_syncookies
 
# On ignore la reponse au ping
#/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
 
# On desactive la reponse aux broadcasts ICMP
/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
 
# Don't accept source routed packets. Attackers can use source
# routing to generate traffic pretending to be from inside your
# network, but which is routed back along the path which it came,
# namely outside, so attackers can compromise your network.
# Source routing is rarely used for legetimate purposes.
/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
 
# Disable ICMP Redirect Acceptance
/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
 
# Enable bad error message protection
/bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
 
# Pour eviter l'IP SPOOFING, on check l'adresse source sur toutes
# les interfaces - peut poser des soucis en cas de routage
# asymetrique (les paquets ne prennent pas le meme chemin a l'aller
# qu'au retour)
for interface in /proc/sys/net/ipv4/conf/*/rp_filter; do
        /bin/echo "1" > ${interface}
done
 
# Log Spoofed Packets, Source Routed Packets, Redirect Packets
for interface in /proc/sys/net/ipv4/conf/*/log_martians; do
        /bin/echo "1" > ${interface}
done
# Dans le cas d'une adresse IP dynamique
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
 
# On active le routage des paquets IP
# C'est la commande principale autorisant la fonction passerelle
if [ ${IN} ]; then
        /bin/echo "1" > /proc/sys/net/ipv4/ip_forward
else
        /bin/echo "0" > /proc/sys/net/ipv4/ip_forward
fi
 
####################################################################
# Regles
####################################################################
 
# Trafic illimite sur l'adresse de loopback
${IPT} -A INPUT  -i lo -j ACCEPT
${IPT} -A OUTPUT -o lo -j ACCEPT
 
# Trafic illimite sur les autres interfaces Ethernet
# On evite de toucher a l'interface du reseau public
# (connecte a Internet)
for interface in /proc/sys/net/ipv4/conf/eth*; do
        VAL=`echo ${interface} | cut -c 25-`
        if [ ${VAL} != ${OUT} ]; then
                ${IPT} -A INPUT  -i ${VAL} -j ACCEPT
                ${IPT} -A OUTPUT -o ${VAL} -j ACCEPT
        fi
done
 
# proxy transparent : regle de redirection vers le proxy
# on considere que eth0 est l'interface du reseau prive
# et que 3128 est le port du serveur proxy-cache
#${IPT} -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j REDIRECT --to-port 3128
 
# Si la fonction passerelle est activee
if [ ${IN} ]; then
 
        # On accepte de forwarder les paquets sur l'interface interne
        ${IPT} -A FORWARD -i ${IN} ${FILTRAGE} -j ACCEPT
        ${IPT} -A FORWARD -o ${IN} -j ACCEPT
 
        # On active le masquerading pour le trafic en provenance du
        # sous-reseau prive (Dans le cas d'une adresse IP fixe, il vaut
        # mieux utilise SNAT)
        ${IPT} -t nat -A POSTROUTING -o ${OUT} -j MASQUERADE
 
fi
 
# On accepte les connexions sortantes en provenance du
# sous-reseau prive
${IPT} -A OUTPUT -o ${OUT} -j ACCEPT
 
#
# Ajout de regles pour autoriser certains ports
# Decommentez les lignes qui vous interesse
#
 
## Acces simultane a un serveur web et FTP
#${IPT} -A INPUT -i ${OUT} -p tcp -m state --state NEW -m multiport --destination-port 80,20,21 -j ACCEPT
 
## Acces uniquement a un serveur web
#${IPT} -A INPUT -i ${OUT} -p tcp -m state --state NEW --destination-port 80 -j ACCEPT
 
## gtk-gnutella
#${IPT} -A INPUT -i ${OUT} -p tcp -m state --state NEW --destination-port 23934 -j ACCEPT
#${IPT} -A INPUT -i ${OUT} -p udp -m state --state NEW --destination-port 23934 -j ACCEPT
 
## SSH
${IPT} -A INPUT -i ${OUT} -p tcp --destination-port 22 -j ACCEPT
 
## HTTP
${IPT} -A INPUT -i ${OUT} -p tcp --destination-port 80 -j ACCEPT
 
# Mldonkey
${IPT} -A INPUT -i ${OUT} -p tcp --destination-port 6666 -j ACCEPT
${IPT} -A INPUT -i ${OUT} -p tcp --destination-port 6682 -j ACCEPT
${IPT} -A INPUT -i ${OUT} -p tcp --destination-port 8155 -j ACCEPT
 
## Jabber transfert de fichiers
#${IPT} -A INPUT -i ${OUT} -p udp --destination-port 8010 -j ACCEPT
 
#
# Fin de l'ajout de regles
#
 
# On accepte les connexions rentrantes deja etablies
${IPT} -A INPUT -i ${OUT} -m state --state ESTABLISHED,RELATED -j ACCEPT
 
# Si la fonction passerelle est activee
if [ ${IN} ]; then
 
        # Trace des paquets refuses sur la chaine FORWARD
        ${IPT} -N LOG_FWD
        ${IPT} -A LOG_FWD  -j LOG --log-level info --log-ip-options --log-prefix "Pare-feu FWD:"
        ${IPT} -A LOG_FWD  -j DROP
 
        # On logue les paquets refuses sur la chaine FORWARD
        ${IPT} -A FORWARD -j LOG_FWD
 
fi
 
# On initialise la trace pour les paquets refuses en entree sur
# l'interface externe
${IPT} -N LOG_EXT
${IPT} -A LOG_EXT  -j LOG --log-level info --log-ip-options --log-prefix "Pare-feu IN:"
${IPT} -A LOG_EXT  -j DROP
 
# On logue les paquets refuses en entree sur l'interface externe
${IPT} -A INPUT -i ${OUT} -j LOG_EXT
 
exit 0

5 Exemple 4

#!/bin/bash
 
###################################################
## ARCHITECTURE POUR UN FIREWALL A 4 INTERFACES  ##
##						 ##
##		   INTERNET			 ##
##		      | 			 ##
##	DMZ--------FIREWALL--------ZONE SERVEURS ##
##		      |				 ##
##		     LAN			 ##
##						 ##
###################################################
 
###################################################
## MODULES IPTABLES NECESSAIRES			 ##
###################################################
MODULES_IPTABLES="ip_tables \
                  ipt_string \
		  ip_conntrack \
                  ip_conntrack_ftp \
		  ip_nat_ftp"			# Modules iptables charges au demarrage
INTERNET="ppp0" 				# Device Internet (plusieurs devices possibles)
INTERNET_NAT="ppp0"                             # Device Internet utilise pour le NAT (1 seul device possible)
DMZ=""   	        			# Device DMZ (IP publiques, serveurs accessible depuis internet)
ZONE_SERVEURS="eth2"				# Device SMZ (IP privees, serveurs accessible en interne)
LAN="eth1 eth3"					# Device intranet (plusieurs devices possibles)
 
PAQUETS_ICMP_AUTHORISES="0 3 4 5 8 11 12"	# Paquets ICMP authorises a circuler entres les differents reseaux 
PING_FLOOD="1/s"				# Nombre de PING authorises par seconde
LOG_FLOOD="1/s"
 
PROTOCOLES_AUTHORISES="47"			# Protocoles authorises a circuler via le firewall
 
MASQ_LAN="YES"                                  # Masquerade le Lan
MASQ_DMZ="NO"                                   # Masquerade la DMZ
MASQ_ZONE_SERVEURS="YES"                        # Masquerade la zone serveurs
 
PORTS_TCP_INTERNET_AUTHORISES="53"		# Ports TCP du firewall accessible de l'internet
PORTS_UDP_INTERNET_AUTHORISES="53"		# Ports UDP du firewall accessible de l'internet
PORTS_TCP_DMZ_AUTHORISES=""			# Ports TCP du firewall accessible de la DMZ
PORTS_UDP_DMZ_AUTHORISES=""			# Ports UDP du firewall accessible de la DMZ
PORTS_TCP_ZONE_SERVEURS_AUTHORISES="53 113"	# Ports TCP du firewall accessible de la zone serveurs
PORTS_UDP_ZONE_SERVEURS_AUTHORISES="53 113"	# Ports UDP du firewall accessible de la zone serveurs
PORTS_TCP_LAN_AUTHORISES="53 113 22"		# Ports TCP du firewall accessible du LAN
PORTS_UDP_LAN_AUTHORISES="53 113 22"		# Ports UDP du firewall accessible du LAN
 
PORTS_TCP_SORTIE_REFUSES="6346 \
			  7777 \
			  8888 \
			  6699 \
			  6000"                 # Ports TCP interdit en sortie du firewall
PORTS_UDP_SORTIE_REFUSES="6346 \
			  7777 \
			  8888 \
			  6699 \
			  6000"                 # Ports UDP interdit en sortie du firewall
 
RESEAUX_LAN="192.168.10.0/24 \
	     192.168.30.0/24"  			# Reseaux composants le LAN
RESEAUX_DMZ=""                                  # Reseaux composants la DMZ
RESEAUX_ZONE_SERVEURS="192.168.50.0/24"         # Reseaux composants la zone serveurs
 
NAT_TCP_NET=" 80.13.192.105:80>192.168.50.100:8080 "  # NAT => IP_FIREWALL:PORT_FIREWALL>IP_INTERNE:PORT_INTERNE
NAT_UDP_NET=""  				# NAT => IP_FIREWALL:PORT_FIREWALL>IP_INTERNE:PORT_INTERNE
 
MOTS_CLES="root admin"                          # Mots cles a loguer
 
MOTS_CLES_INTERDITS="mp3>192.168.10.117 \
		     MP3>192.168.10.117 \
		     ogg>192.168.10.117 \
		     OGG>192.168.10.117"       	# Mots cles interdit de passage ;-) MOT_CLE>IP_DESTINATAIRE
IP_INTERDITES=" 66.28.48.0/24 \
		66.28.49.0/24"			# Adresses interdites d'entree
 
###################################################
## VARIABLES PROPRES AU SCRIPT (NE PAS EDITER)   ## 
###################################################
 
IPTABLES=`which iptables`
MODPROBE=`which modprobe`
VERT="\033[32m"
JAUNE="\033[33m"
GRAS="\033[1m"
NORMAL="\033[m"
ROUGE="\033[31m"
 
 
###################################################
## VERIFICATION DE LA PRESENCE DE IPTABLES	 ##
###################################################
 
echo -en "${GRAS}Verification de la presence de IPTABLES :${NORMAL}"
if [ -z ${IPTABLES} ] ;then
    echo -e "\t\t${ROUGE}FAILED${NORMAL}\n"	
    exit 1
else
    echo -e "\t\t${VERT}OK${NORMAL}"
fi
 
 
###################################################
## VERIFICATION DE LA PRESENCE DE MODPROBE	 ##
###################################################
 
echo -en "${GRAS}Verification de la presence de MODPROBE :${NORMAL}"
if [ -z ${MODPROBE} ] ;then
    echo -e "\t\t${ROUGE}FAILED${NORMAL}\n"	
    exit 1
else
    echo -e "\t\t${VERT}OK${NORMAL}\n"
fi
 
 
###################################################
## CHARGEMENT DES MODULES PROPRES A IPTABLES	 ##
###################################################
 
for module in ${MODULES_IPTABLES} ;do
    echo -e "${GRAS}Chargement du module ${module} :${NORMAL}\t\t\t${VERT}OK${NORMAL}"
    ${MODPROBE} ${module} 	
done
echo -e "\n"
 
###################################################
## CONFIGURATION DE BASE DU FIREWALL GRACE AU	 ##
## SYSTEME DE FICHIER /proc			 ##
###################################################
 
###################################################
## ACTIVATION DE L'IP FORWARDING (routage)	 ##
###################################################
 
echo -en "${GRAS}${JAUNE}Activation de l'ip forwarding :${NORMAL}"
if [ -e /proc/sys/net/ipv4/ip_forward ] ; then
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo -e "\t\t\t\t${VERT}OK${NORMAL}"
else
    echo -e "\t\t\t\t${ROUGE}FAILED${NORMAL}\n"
    exit 1
fi
 
###################################################
## Protection contre les SYN FLOOD               ##
###################################################
 
echo -en "${GRAS}${JAUNE}Protection contre les SYN/FLOOD :${NORMAL}"
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then
    echo 1 > /proc/sys/net/ipv4/tcp_syncookies
    echo -e "\t\t\t${VERT}OK${NORMAL}"
else
    echo -e "\t\t\t${ROUGE}FAILED${NORMAL}"
fi
 
###################################################
## Defragmente les paquets avant des les reenvoyer#
## Utile pour le masquerading                    ##
###################################################
 
echo -en "${GRAS}${JAUNE}Refragmentation des paquets :${NORMAL}"
if [ -e /proc/sys/net/ipv4/ip_always_defrag ] ; then
    echo 1 > /proc/sys/net/ipv4/ip_always_defrag
    echo -e "\t\t\t\t${VERT}OK${NORMAL}"
else
    echo -e "\t\t\t\t${ROUGE}FAILED${NORMAL}"
fi
 
###################################################
## Permet de ne pas repondre aux paquets ICMP    ##
## emis sur le broadcast                         ##
###################################################
 
echo -en "${GRAS}${JAUNE}Insensibilite aux paquets ICMP emis sur le brodcast :${NORMAL}"
if [ -e /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts ] ; then
    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
    echo -e "\t${VERT}OK${NORMAL}"
else
    echo -e "\t${ROUGE}FAILED${NORMAL}"
fi
 
###################################################
## Permet d'ignorer les erreurs ICMP provenant   ##
## des hotes du reseau reagissant mal aux trames ##
## envoyees vers ce qu'ils percoivent comme      ##
## l'addresse de diffusion                       ##
###################################################
 
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then
    echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
fi
 
###################################################
## Reverse Path Filtering                        ##
## Permet de ne router que les paquets appartenant#
## a nos reseaux                                 ##
###################################################
 
echo -e "${GRAS}${JAUNE}Activation du Reverse Path Filtering :${NORMAL}\t\t\t${VERT}OK${NORMAL}\n"
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
    echo 1 > $f
done
 
 
###################################################
## EFFACEMENT DES ANCIENNES REGLES		 ## 
###################################################
 
echo -en "${GRAS}${JAUNE}Effacement des anciennes regles :${NORMAL}"
${IPTABLES} -t filter -F INPUT
${IPTABLES} -t filter -F OUTPUT
${IPTABLES} -t filter -F FORWARD
${IPTABLES} -t nat    -F PREROUTING
${IPTABLES} -t nat    -F OUTPUT
${IPTABLES} -t nat    -F POSTROUTING
${IPTABLES} -t mangle -F PREROUTING
${IPTABLES} -t mangle -F OUTPUT
echo -e "\t\t\t${VERT}OK${NORMAL}"
 
###################################################
## REMISE A ZERO DES CHAINES			 ##
###################################################
 
echo -en "${GRAS}${JAUNE}Remise a zero des chaines :${NORMAL}"
${IPTABLES} -t filter -Z
${IPTABLES} -t nat    -Z
${IPTABLES} -t mangle -Z
echo -e "\t\t\t\t${VERT}OK${NORMAL}"
 
###################################################
## MISE EN PLACE DE LA POLITIQUE PAR DEFAUT	 ##
###################################################
 
echo -en "${GRAS}${JAUNE}Mise en place de la polique par defaut :${NORMAL}"
${IPTABLES} -t filter -P INPUT   DROP
${IPTABLES} -t filter -P OUTPUT  ACCEPT
${IPTABLES} -t filter -P FORWARD DROP
echo -e "\t\t${VERT}OK${NORMAL}\n"
 
###################################################
## MOTS CLES A LOGUER                            ##
###################################################
 
if [ "${MOTS_CLES}" != "" ] ;then
    echo -ne "${GRAS}${JAUNE}Activation du systeme de logs par mots cles :${NORMAL}"
    for mot in ${MOTS_CLES} ;do
	${IPTABLES} -A INPUT -m string --string "${mot}" -j LOG --log-level info --log-prefix "${mot} : "
	${IPTABLES} -A FORWARD -m string --string "${mot}" -j LOG --log-level info --log-prefix "${mot} : "
    done
    echo -e "\t\t${VERT}OK${NORMAL}"
fi
 
###################################################
## Interdiction d'entree de certaines adresses	 ##
## via le firewall en tcp et en udp		 ##
###################################################
 
if [ "${IP_INTERDITES}" != "" ] ;then
    echo -e "${GRAS}${JAUNE}Interdiction d'entree de certaines adresses :${NORMAL}\t\t${VERT}OK${NORMAL}"
 
    for adr in ${IP_INTERDITES} ;do
	${IPTABLES} -t filter -A FORWARD -p tcp -s ${adr} -j DROP
	${IPTABLES} -t filter -A FORWARD -p udp -s ${adr} -j DROP
    done
fi
 
###################################################
## Interdiction de sortie de certains ports via	 ##
## le firewall en tcp  				 ##
###################################################
 
if [ "${PORTS_TCP_SORTIE_REFUSES}" != "" ] ;then
    echo -e "${GRAS}${JAUNE}Interdiction de sortie de certains ports TCP :${NORMAL}\t\t${VERT}OK${NORMAL}"
 
    for port_no in ${PORTS_TCP_SORTIE_REFUSES} ;do
	${IPTABLES} -t filter -A FORWARD -p tcp --dport ${port_no} -j DROP
	${IPTABLES} -t filter -A OUTPUT -p tcp -o ${INTERNET} --dport ${port_no} -j DROP
    done
fi
 
###################################################
## Interdiction de sortie de certains ports via	 ##
## le firewall en udp  				 ##
###################################################
 
if [ "${PORTS_TCP_SORTIE_REFUSES}" != "" ] ;then
    echo -e "${GRAS}${JAUNE}Interdiction de sortie de certains ports UDP :${NORMAL}\t\t${VERT}OK${NORMAL}"
 
    for port_no in ${PORTS_TCP_SORTIE_REFUSES} ;do
	${IPTABLES} -t filter -A FORWARD -p udp --dport ${port_no} -j DROP
	${IPTABLES} -t filter -A OUTPUT -p udp -o ${INTERNET} --dport ${port_no} -j DROP
    done
fi
###################################################
## Interdiction de passage de certains mots cles ##
###################################################
 
if [ "${MOTS_CLES_INTERDITS}" != "" ] ;then
    echo -e "${GRAS}${JAUNE}Interdiction de passage de certains mots cles :${NORMAL}\t\t${VERT}OK${NORMAL}"
 
    for mot_cles in ${MOTS_CLES_INTERDITS} ;do
	mot=`echo ${mot_cles} | sed 's/>.*//g'`
	ip=`echo ${mot_cles} | sed 's/.*>//g'`
 
	${IPTABLES} -A INPUT -m string --string "${mot}" -d ${ip} -j DROP
	${IPTABLES} -A FORWARD -m string --string "${mot}" -d ${ip} -j DROP
    done
fi
 
###################################################
## Autorisation des paquets ICMP		 ## 
###################################################
 
if [ "${PAQUETS_ICMP_AUTHORISES}" != ""  ] ;then
    echo -e "${GRAS}${JAUNE}Authorisation de certains paquets ICMP :${NORMAL}\t\t${VERT}OK${NORMAL}"
 
    for icmp_no in ${PAQUETS_ICMP_AUTHORISES} ;do
	${IPTABLES} -t filter -A INPUT   -p icmp --icmp-type ${icmp_no} -m limit --limit ${PING_FLOOD} -j ACCEPT
	${IPTABLES} -t filter -A FORWARD -p icmp --icmp-type ${icmp_no} -m limit --limit ${PING_FLOOD} -j ACCEPT
	${IPTABLES} -t filter -A OUTPUT  -p icmp --icmp-type ${icmp_no} -m limit --limit ${PING_FLOOD} -j ACCEPT
    done
fi
 
 
###################################################
## Autorise certains protocoles a circuler	 ##
###################################################
 
if [ "${PROTOCOLES_AUTHORISES}" != ""  ] ;then
    echo -e "${GRAS}${JAUNE}Authorisation de certains protocoles :${NORMAL}\t\t\t${VERT}OK${NORMAL}"
 
    for protocole_no in ${PROTOCOLES_AUTHORISES} ;do
	${IPTABLES} -t filter -A INPUT   -p ${protocole_no} -j ACCEPT
	${IPTABLES} -t filter -A FORWARD -p ${protocole_no} -j ACCEPT
    done
fi
 
 
###################################################
## Autorise les connections deja etablie avant le##
## lancement de ce script                        ##
###################################################
 
echo -e "${GRAS}${JAUNE}Autorisation des connections deja etablies :${NORMAL}\t\t${VERT}OK${NORMAL}"
${IPTABLES} -t filter -A INPUT   -m state --state ESTABLISHED,RELATED -j ACCEPT
${IPTABLES} -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
${IPTABLES} -t filter -A OUTPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
 
 
###################################################
## Autorise les connections LocalHost            ##
###################################################
 
echo -e "${GRAS}${JAUNE}Autorisation des connections propres au localhost :${NORMAL}\t${VERT}OK${NORMAL}"
${IPTABLES} -t filter -A INPUT   -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
${IPTABLES} -t filter -A FORWARD -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
${IPTABLES} -t filter -A OUTPUT  -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
 
###################################################
## Autorisation des connections TCP sur le	 ##
## device internet				 ##
###################################################
 
if [ "${INTERNET}" != "" ] ;then
    for internet_device in ${INTERNET} ;do
	if [ "${PORTS_TCP_INTERNET_AUTHORISES}" != "" ] ;then
	    echo -e "${GRAS}${JAUNE}Connections TCP sur l'interface internet ${internet_device}:${NORMAL}\t\t${VERT}OK${NORMAL}"
 
	    for port_no in ${PORTS_TCP_INTERNET_AUTHORISES} ;do
		${IPTABLES} -t filter -A INPUT -p tcp -i ${internet_device} --dport ${port_no} -j ACCEPT
 
		if [ "0${port_no}" == "021" ] ;then
		    ${IPTABLES} -t filter -A INPUT -p tcp -i ${internet_device} --sport 20 --dport 1024:65535 ! --syn -j ACCEPT
		fi
	    done
	fi
    done
fi
 
 
###################################################
## Autorisation des connections UDP sur le	 ##
## device internet				 ##
###################################################
 
if [ "${INTERNET}" != "" ] ;then
    for internet_device in ${INTERNET} ;do
	if [ "${PORTS_UDP_INTERNET_AUTHORISES}" != "" ] ;then
	    echo -e "${GRAS}${JAUNE}Connections UDP sur l'interface internet ${internet_device}:${NORMAL}\t\t${VERT}OK${NORMAL}"
 
	    for port_no in ${PORTS_UDP_INTERNET_AUTHORISES} ;do
		${IPTABLES} -t filter -A INPUT -p udp -i ${internet_device} --dport ${port_no} -j ACCEPT
	    done
	fi
    done
fi
 
 
###################################################
## Autorisation des connections TCP sur le	 ##
## device DMZ					 ##
###################################################
 
if [ "${DMZ}" != "" ] ;then
    for dmz_device in ${DMZ} ;do
	if [ "${PORTS_TCP_DMZ_AUTHORISES}" != "" ] ;then
	    echo -e "${GRAS}${JAUNE}Connections TCP sur l'interface DMZ ${dmz_device}:${NORMAL}\t\t${VERT}OK${NORMAL}"
 
	    for port_no in ${PORTS_TCP_DMZ_AUTHORISES} ;do
		${IPTABLES} -t filter -A INPUT -p tcp -i ${dmz_device} --dport ${port_no} -j ACCEPT
 
		if [ "0${port_no}" == "021" ] ;then
		    ${IPTABLES} -t filter -A INPUT -p tcp -i ${dmz_device} --sport 20 --dport 1024:65535 ! --syn -j ACCEPT
		fi
	    done
	fi
    done
fi
 
###################################################
## Autorisation des connections UDP sur le	 ##
## device DMZ					 ##
###################################################
 
if [ "${DMZ}" != "" ] ;then
    for dmz_device in ${DMZ} ;do
	if [ "${PORTS_UDP_DMZ_AUTHORISES}" != "" ] ;then
	    echo -e "${GRAS}${JAUNE}Connections UDP sur l'interface DMZ ${dmz_device}:${NORMAL}\t\t${VERT}OK${NORMAL}"
 
	    for port_no in ${PORTS_UDP_DMZ_AUTHORISES} ;do
		${IPTABLES} -t filter -A INPUT -p udp -i ${dmz_device} --dport ${port_no} -j ACCEPT
	    done
	fi
    done
fi
 
 
###################################################
## Autorisation des connections TCP sur le	 ##
## device de la zone serveurs			 ##
###################################################
 
if [ "${ZONE_SERVEURS}" != "" ] ;then
    for zone_serveurs_device in ${ZONE_SERVEURS} ;do
	if [ "${PORTS_TCP_ZONE_SERVEURS_AUTHORISES}" != "" ] ;then
	    echo -e "${GRAS}${JAUNE}Connections TCP sur l'interface zone serveurs ${zone_serveurs_device}:${NORMAL}\t${VERT}OK${NORMAL}"
 
	    for port_no in ${PORTS_TCP_ZONE_SERVEURS_AUTHORISES} ;do
		${IPTABLES} -t filter -A INPUT -p tcp -i ${zone_serveurs_device} --dport ${port_no} -j ACCEPT
 
		if [ "0${port_no}" == "021" ] ;then
		    ${IPTABLES} -t filter -A INPUT -p tcp -i ${zone_serveurs_device} --sport 20 --dport 1024:65535 ! --syn -j ACCEPT
		fi
	    done
	fi
    done
fi
 
###################################################
## Autorisation des connections UDP sur le	 ##
## device de la zone serveurs			 ##
###################################################
 
if [ "${ZONE_SERVEURS}" != "" ] ;then
    for zone_serveurs_device in ${ZONE_SERVEURS} ;do
	if [ "${PORTS_UDP_ZONE_SERVEURS_AUTHORISES}" != "" ] ;then
	    echo -e "${GRAS}${JAUNE}Connections UDP sur l'interface zone serveurs ${zone_serveurs_device}:${NORMAL}\t${VERT}OK${NORMAL}"
 
	    for port_no in ${PORTS_UDP_ZONE_SERVEURS_AUTHORISES} ;do
		${IPTABLES} -t filter -A INPUT -p udp -i ${zone_serveurs_device} --dport ${port_no} -j ACCEPT
	    done
	fi
    done
fi
 
###################################################
## Autorisation des connections TCP sur le	 ##
## device du LAN				 ##
###################################################
 
if [ "${LAN}" != "" ] ;then
    for lan_device in ${LAN} ;do
	if [ "${PORTS_TCP_LAN_AUTHORISES}" != "" ] ;then
	    echo -e "${GRAS}${JAUNE}Connections TCP sur l'interface LAN ${lan_device}:${NORMAL}\t\t${VERT}OK${NORMAL}"
 
	    for port_no in ${PORTS_TCP_LAN_AUTHORISES} ;do
		${IPTABLES} -t filter -A INPUT -p tcp -i ${lan_device} --dport ${port_no} -j ACCEPT
 
		if [ "0${port_no}" == "021" ] ;then
		    ${IPTABLES} -t filter -A INPUT -p tcp -i ${lan_device} --sport 20 --dport 1024:65535 ! --syn -j ACCEPT
		fi
	    done
	fi
    done
fi
 
 
###################################################
## Autorisation des connections UDP sur le	 ##
## device du LAN				 ##
###################################################
 
if [ "${LAN}" != "" ] ;then
    for lan_device in ${LAN} ;do
	if [ "${PORTS_UDP_LAN_AUTHORISES}" != "" ] ;then
	    echo -e "${GRAS}${JAUNE}Connections UDP sur l'interface LAN ${lan_device}:${NORMAL}\t\t${VERT}OK${NORMAL}"
 
	    for port_no in ${PORTS_UDP_LAN_AUTHORISES} ;do
		${IPTABLES} -t filter -A INPUT -p udp -i ${lan_device} --dport ${port_no} -j ACCEPT
	    done
	fi
    done
fi
echo -e ""
 
 
###################################################
## Masquerade le LAN                             ##
###################################################
 
if [ "${MASQ_LAN}" = "YES" -o "${MASQ_LAN}" = "yes" ] ;then
    echo -e "${GRAS}${JAUNE}Activation du Masquerading pour le LAN :${NORMAL}\t\t${VERT}OK${NORMAL}"
 
    for reseau in ${RESEAUX_LAN} ;do
	${IPTABLES} -t nat -A POSTROUTING -s ${reseau} -o ${INTERNET} -j MASQUERADE
	${IPTABLES} -t filter -A FORWARD -s ${reseau} -j ACCEPT
    done
fi
 
 
###################################################
## Masquerade la DMZ                             ##
###################################################
 
if [ "${MASQ_DMZ}" = "YES" -o "${MASQ_DMZ}" = "yes" ] ;then
    echo -e "${GRAS}${JAUNE}Activation du Masquerading pour la DMZ :${NORMAL}\t\t${VERT}OK${NORMAL}"
 
    for reseau in ${RESEAUX_DMZ} ;do
	${IPTABLES} -t nat -A POSTROUTING -s ${reseau} -o ${INTERNET} -j MASQUERADE
	${IPTABLES} -t filter -A FORWARD -s ${reseau} -j ACCEPT
    done
fi
 
###################################################
## Masquerade la zone serveurs                   ##
###################################################
 
if [ "${MASQ_ZONE_SERVEURS}" = "YES" -o "${MASQ_ZONE_SERVEURS}" = "yes" ] ;then
    echo -e "${GRAS}${JAUNE}Activation du Masquerading pour la zone serveurs :${NORMAL}\t${VERT}OK${NORMAL}"
 
    for reseau in ${RESEAUX_ZONE_SERVEURS} ;do
	${IPTABLES} -t nat -A POSTROUTING -s ${reseau} -o ${INTERNET} -j MASQUERADE
	${IPTABLES} -t filter -A FORWARD -s ${reseau} -j ACCEPT
    done
fi
 
 
###################################################
## Activation du NAT en TCP                      ##
###################################################
 
if [ "${NAT_TCP_NET}" != "" ] ;then
    echo -e "${GRAS}${JAUNE}Activation du TCP network address translation :${NORMAL}\t\t${VERT}OK${NORMAL}"
 
    for translation in ${NAT_TCP_NET} ;do
	srcport=`echo ${translation} | sed 's/>.*//g'|cut -d : -f 2`
	srchost=`echo ${translation} | sed 's/:.*//g'`
	desthost=`echo ${translation} | sed 's/.*>//g'| cut -d : -f 1`
	destport=`echo ${translation} | sed 's/.*://g'`
 
	${IPTABLES} -t nat -A PREROUTING -p tcp -i ${INTERNET_NAT} -d ${srchost} --dport ${srcport} -j DNAT --to ${desthost}:${destport}
	${IPTABLES} -A FORWARD -p tcp -i ${INTERNET_NAT} -d ${desthost} --dport ${destport} -j ACCEPT
    done
fi
 
 
###################################################
## Activation du NAT en UDP                      ##
###################################################
 
if [ "${NAT_UDP_NET}" != "" ] ;then
    echo -e "${GRAS}${JAUNE}Activation du UDP network address translation :${NORMAL}\t\t${VERT}OK${NORMAL}"
 
    for translation in ${NAT_UDP_NET} ;do
	srcport=`echo ${translation} | sed 's/>.*//g'|cut -d : -f 2`
	srchost=`echo ${translation} | sed 's/:.*//g'`
	desthost=`echo ${translation} | sed 's/.*>//g'| cut -d : -f 1`
	destport=`echo ${translation} | sed 's/.*://g'`
 
	${IPTABLES} -t nat -A PREROUTING -p udp -i ${INTERNET_NAT} -d ${srchost} --dport ${srcport} -j DNAT --to ${desthost}:${destport}
	${IPTABLES} -A FORWARD -p udp -i ${INTERNET_NAT} -d ${desthost} --dport ${destport} -j ACCEPT
    done
fi
 
###################################################
## FUCK nimda and codered :)                     ##
###################################################
 
echo -e "${GRAS}${JAUNE}Protection contre Nimda et codered :${NORMAL}\t\t\t${VERT}OK${NORMAL}"
${IPTABLES} -I INPUT -j DROP -m string -p tcp -s 0.0.0.0/0 --string "c+dir"
${IPTABLES} -I INPUT -j DROP -m string -p tcp -s 0.0.0.0/0 --string "c+tftp"
${IPTABLES} -I INPUT -j DROP -m string -p tcp -s 0.0.0.0/0 --string "cmd.exe"
${IPTABLES} -I INPUT -j DROP -m string -p tcp -s 0.0.0.0/0 --string "default.ida"
${IPTABLES} -I FORWARD -j DROP -m string -p tcp -s 0.0.0.0/0 --string "c+dir"
${IPTABLES} -I FORWARD -j DROP -m string -p tcp -s 0.0.0.0/0 --string "c+tftp"
${IPTABLES} -I FORWARD -j DROP -m string -p tcp -s 0.0.0.0/0 --string "cmd.exe"
${IPTABLES} -I FORWARD -j DROP -m string -p tcp -s 0.0.0.0/0 --string "default.ida"
 
 
###################################################
## Activation des logs                           ##
###################################################
 
echo -ne "${GRAS}${JAUNE}Activation du systeme de logs :${NORMAL}"
${IPTABLES} -t filter -A INPUT -p tcp -m limit --limit ${LOG_FLOOD} -j LOG --log-level info --log-prefix "INPUT TCP DROPPED : "
${IPTABLES} -t filter -A INPUT -p udp -m limit --limit ${LOG_FLOOD} -j LOG --log-level info --log-prefix "INPUT UDP DROPPED : "
${IPTABLES} -t filter -A INPUT -p icmp -m limit --limit ${LOG_FLOOD} -j LOG --log-level info --log-prefix "INPUT ICMP DROPPED : "
${IPTABLES} -t filter -A INPUT -f -m limit --limit ${LOG_FLOOD} -j LOG --log-level info --log-prefix "INPUT FRAGMENT DROPPED : "
${IPTABLES} -t filter -A INPUT -p all -m limit --limit ${LOG_FLOOD} -j LOG --log-level info --log-prefix "INPUT PROTOCOL DROPPED : "
 
${IPTABLES} -t filter -A FORWARD -p tcp -m limit --limit ${LOG_FLOOD} -j LOG --log-level info --log-prefix "FORWARD TCP DROPPED : "
${IPTABLES} -t filter -A FORWARD -p udp -m limit --limit ${LOG_FLOOD} -j LOG --log-level info --log-prefix "FORWARD UDP DROPPED : "
${IPTABLES} -t filter -A FORWARD -p icmp -m limit --limit ${LOG_FLOOD} -j LOG --log-level info --log-prefix "FORWARD ICMP DROPPED : "
${IPTABLES} -t filter -A FORWARD -f -m limit --limit ${LOG_FLOOD} -j LOG --log-level info --log-prefix "FORWARD FRAGMENT DROPPED : "
${IPTABLES} -t filter -A FORWARD -p all -m limit --limit ${LOG_FLOOD} -j LOG --log-level info --log-prefix "FORWARD PROTOCOL DROPPED : "
echo -e "\t\t\t\t${VERT}OK${NORMAL}"

6 Exemple 5

#!/bin/bash
 
#-------------------------------------------------------------------------
# Essentials
#-------------------------------------------------------------------------
 
IPTABLES='/sbin/iptables';
modprobe nf_conntrack_ftp
 
#-------------------------------------------------------------------------
# Physical and virtual interfaces definitions
#-------------------------------------------------------------------------
 
# Interfaces
wan_if="eth0";
vpn_if="tap0";
 
#-------------------------------------------------------------------------
# Networks definitions
#-------------------------------------------------------------------------
 
# Networks
wan_ip="x.x.x.x";
lan_net="192.168.90.0/24";
vpn_net="192.168.20.0/24";
 
# IPs
ed_ip="192.168.90.1";
banzai_ip="192.168.90.2";
 
#-------------------------------------------------------------------------
# Global Rules input / output / forward
#-------------------------------------------------------------------------
 
# Flushing tables
$IPTABLES -F
$IPTABLES -X
$IPTABLES -t nat -F
 
# Define default policy
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
 
$IPTABLES -A INPUT -j ACCEPT -d $lan_net;
$IPTABLES -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
 
#-------------------------------------------------------------------------
# Allow masquerading for VE
#-------------------------------------------------------------------------
 
# Activating masquerade to get Internet from VE
$IPTABLES -t nat -A POSTROUTING -o $wan_if -s $lan_net -j MASQUERADE
 
# Activating masquerade to get VPN access from VE
$IPTABLES -t nat -A POSTROUTING -o tap0 -j MASQUERADE
 
#-------------------------------------------------------------------------
# Allow ports on CT
#-------------------------------------------------------------------------
 
# Allow ICMP
$IPTABLES -A INPUT -j ACCEPT -p icmp
 
# SSH access
$IPTABLES -A INPUT -j ACCEPT -p tcp --dport 22
 
#-------------------------------------------------------------------------
# Redirections for incoming connections (wan)
#-------------------------------------------------------------------------
 
# HTTP access
$IPTABLES -t nat -A PREROUTING -p tcp --dport 80 -d $wan_ip -j DNAT --to-destination $ed_ip:80
 
# HTTPS access
$IPTABLES -t nat -A PREROUTING -p tcp --dport 443 -d $wan_ip -j DNAT --to-destination $ed_ip:443

7 Exemple 6

#!/bin/bash
clear
echo "############################## Regles Firewall ###################################"
# Activation du routage
echo 1 > /proc/sys/net/ipv4/ip_forward
 
echo "Initialisation des regles"
 
# on purge toutes les regles
iptables -F
iptables -t nat -F
# On applique des politiques de bases
# on laisse le traffic en interne
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
# on empeche toute entree et sortie
iptables -t nat -P PREROUTING DROP 
iptables -t nat -P POSTROUTING DROP 
 
# Traffic en interne accepte
echo "Traffic interne"
iptables -t nat -I POSTROUTING -o lo -j ACCEPT
iptables -t nat -I PREROUTING -i lo -j ACCEPT
 
 
# Definition des cartes reseaux
WEB="ppp0"
DMZ="eth2"
COM="eth1"
STA="eth0"
PPP="ppp0"
 
# Definition des reseaux IP
NET_COM="10.0.0.0/8"
NET_STA="192.168.2.0/24"
NET_DMZ="172.16.1.0/24"
 
# Definition des serveurs pour la connexion externe vers les serveurs
REMOTE="192.168.2.8:81"
FICS="172.16.1.6/32"
EXC="172.16.1.3/32"
DC="172.16.1.1/32"
MAIL="172.16.1.3:25"
HTTP="172.16.1.4:80"
EMULE="172.16.1.4:5555"
RDP="172.16.1.4:3389"
PPTP="172.16.1.1"
VUE="192.168.2.8/32"
MAILWEB="172.16.1.3/32"
LINUX2="172.16.1.7/32"
LINUX="192.168.2.5/32"
YONI="192.168.2.62/32"
WIFI="192.168.2.7/32"
 
# Regles Communes
# ====================== >>>> On masquerade tous les reseaux vers le net
echo "Application des regles communes"
# Tout le traffic sortant vers Internet est masqueradÈ
iptables -t nat -I POSTROUTING -s $NET_STA -d $NET_DMZ -j MASQUERADE
 
# Squid doit toujours sortir vers les clients interne
 
iptables -t nat -I POSTROUTING -p tcp --sport 3128 -d $NET_STA -j ACCEPT
 
iptables -t nat -I POSTROUTING -o $WEB -j MASQUERADE
 
iptables -t nat -I POSTROUTING -o $COM -j MASQUERADE
 
iptables -t nat -A POSTROUTING -s $NET_STA -o $COM -j DROP
iptables -t nat -A POSTROUTING -s $NET_DMZ -o $COM -j DROP
 
 
iptables -I INPUT -i $WEB -m state --state ESTABLISHED -j ACCEPT
iptables -I OUTPUT -m state --state ESTABLISHED -j ACCEPT
 
iptables -I INPUT -i $COM -m state --state ESTABLISHED -j ACCEPT
 
# on laisse le routage std en interne
 
# ====================== >>>>  DHCP
echo "Autorisation du traffic de DHCP"
iptables -t nat -A PREROUTING -p udp --dport 67:68 -j ACCEPT
iptables -t nat -A POSTROUTING -p udp --sport 67:68 -j ACCEPT
 
echo "DNS Local vers SRV-DC"
iptables -t nat -A PREROUTING -p udp --sport 53 -i $DMZ -s "172.16.1.1/32" -j ACCEPT
iptables -t nat -A POSTROUTING -p udp --dport 53 -o $DMZ -d "172.16.1.1/32" -j ACCEPT
 
iptables -t nat -A PREROUTING -p tcp --sport 53 -i $DMZ -s "172.16.1.1/32" -j ACCEPT
iptables -t nat -A POSTROUTING -p tcp --dport 53 -o $DMZ -d "172.16.1.1/32" -j ACCEPT
 
# regles d'acces resaux a reseaux
# 1 --> DMZ
	echo "====================== >>>> Regles pour les machines commerciales"
	echo "Regles de la journee"
	echo "Acces en fonction des heures"
 
	iptables -t nat -I PREROUTING -i $DMZ -m time --timestart 08:45 --timestop 17:45 \
		--days Mon,Tue,Wed,Thu,Fri -p tcp -m multiport --ports 20,21,80,3128,1863,110,119,25,8080,9000 -j ACCEPT
 
	echo "Regles de la nuit"
	iptables -t nat -I PREROUTING -i $DMZ -m time --timestart 17:46 --timestop 23:59 \
		--days Mon,Tue,Wed,Thu -p tcp -j ACCEPT
        iptables -t nat -I PREROUTING -i $DMZ -m time --timestart 00:00 --timestop 08:44 \
               --days Mon,Tue,Wed,Thu,Fri -p tcp -j ACCEPT
 
	# Pas de limite le WE
	echo "Pas de limite le WE"
       iptables -t nat -I PREROUTING -i $DMZ -m time --timestart 17:46 --timestop 23:59 \
               --days Fri  -p tcp -j ACCEPT
       iptables -t nat -I PREROUTING -i $DMZ -m time --timestart 00:00 --timestop 23:59 \
               --days Sat,Sun  -p tcp -j ACCEPT
 
 
	iptables -t nat -I PREROUTING -i $DMZ -p udp --dport 53 -j ACCEPT
	#====>>>>>>>    Proxy transparent pour les comerciaux
	iptables -t nat -I PREROUTING -p tcp -i $DMZ --dport 80 -j REDIRECT --to-port 3128
	iptables -t nat -A PREROUTING -p tcp -i $DMZ --dport 443 -j ACCEPT 
#	iptables -t nat -A PREROUTING -p tcp -i $DMZ --dport 443 -j REDIRECT --to-port 3128
 
	echo "====================== >>>> Regles pour les salles de cours"
# 2 --> Salle <-> DMZ
#	A - FICS2
	echo "	Salle -> SRV-FICS2"
	iptables -t nat -A PREROUTING -p tcp -d $FICS -j ACCEPT
	iptables -t nat -A PREROUTING -p tcp --dport 80 -d $MAILWEB -j ACCEPT
	iptables -t nat -A POSTROUTING -s $NET_DMZ -d $NET_STA -j ACCEPT
# 3 --> Salle <-> Internet
#	A - HTTP
	echo "	Salle -> Internet avec Squid"
	iptables -t nat -A PREROUTING -p tcp -i $STA --dport 80 -j REDIRECT --to-port 3128
	iptables -t nat -A PREROUTING -p tcp -i $STA --dport 443 -j ACCEPT 
 
#	C - DNS
	iptables -t nat -A PREROUTING -p udp -i $STA --dport 53 -j ACCEPT
#	iptables -t nat -A PREROUTING -p tcp -i $STA --dport 53 -j ACCEPT
 
	echo "====================== >>>> Regles pour Internet vers le reseau interne"
# 5 --> Internet <--> DMZ
#	A - SMTP
		echo "	SMTP"
		iptables -t nat -I PREROUTING -i $WEB -p tcp --dport 25 -j DNAT --to-destination $MAIL
		iptables -t nat -I POSTROUTING -o $DMZ -d $EXC -p tcp --dport 25 -j ACCEPT
 
#	B - WEB
		echo "	WEB"
		iptables -t nat -A PREROUTING -i $WEB -p tcp --dport 80 -j DNAT --to-destination $HTTP
		iptables -t nat -A POSTROUTING -o $DMZ -d "172.16.1.4/32" -p tcp --dport 80 -j MASQUERADE
#	B' - EMULE
		iptables -t nat -A PREROUTING -i $WEB -p tcp --dport 5555 -j DNAT --to-destination $EMULE
		iptables -t nat -A POSTROUTING -o $DMZ -d "172.16.1.4/32" -p tcp --dport 5555 -j MASQUERADE
		iptables -t nat -A PREROUTING -i $WEB -p udp --dport 5555 -j DNAT --to-destination $HTTP
		iptables -t nat -A POSTROUTING -o $DMZ -d "172.16.1.4/32" -p udp --dport 5555 -j MASQUERADE
#	C - PPTP
		echo "	PPTP"
		iptables -t nat -A PREROUTING -i $WEB -p 47 -j DNAT --to-destination $PPTP 
		iptables -t nat -A POSTROUTING -o $DMZ -p 47 -j MASQUERADE
		iptables -t nat -A PREROUTING -i $WEB -p tcp --dport 1723 -j DNAT --to-destination $PPTP 
		iptables -t nat -A POSTROUTING -o $DMZ -p tcp --dport 1723 -j MASQUERADE
 
#	D - SSH depuis l'exterieur ou seulement pour les machines de l'interieur autorisees
		echo "	SSH depuis Internet"
		iptables -t nat -A PREROUTING -s 172.16.1.0/24 -p tcp --dport 22 -j ACCEPT
 
#       E - FTP
                echo "  FTP EST DESACTIVE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
                #iptables -t nat -A PREROUTING -i $WEB -p tcp --dport 20 -j DNAT --to-destination "172.16.1.4:20" 
                #iptables -t nat -A PREROUTING -i $WEB -p tcp --dport 21 -j DNAT --to-destination "172.16.1.4:21"
                #iptables -t nat -A POSTROUTING -o $DMZ -d "172.16.1.4/32" -p tcp --dport 21 -j MASQUERADE
 
                #iptables -t nat -A POSTROUTING -o $DMZ -d "172.16.1.4/32" -p tcp --dport 20 -j MASQUERADE
 
#	F - RDP
		echo "  RDP"
		iptables -t nat -A PREROUTING -i $WEB -p tcp --dport 3389 -j DNAT --to-destination $RDP
                iptables -t nat -A POSTROUTING -o $DMZ -d "172.16.1.4/32" -p tcp --dport 3389 -j MASQUERADE
#	G - SNMP
		echo "  SNMP"
		iptables -t nat -A POSTROUTING -p tcp --dport 161 -j ACCEPT
		iptables -t nat -A POSTROUTING -p udp --dport 161 -j ACCEPT
		iptables -t nat -A POSTROUTING -p udp --dport 162 -j ACCEPT
 
 
# 6 --> Acces Selon adresse MAC
	echo "====================== >>>> Regles speciales pour les internes"
	echo "	Yoni"
#	A - Yoni
		iptables -t nat -I PREROUTING -m mac --mac-source '00:00:F0:82:58:AF' -j ACCEPT
		iptables -t nat -I PREROUTING -m mac --mac-source '00:04:23:76:63:10' -j ACCEPT
 
#	A' - OlivierG
		iptables -t nat -I PREROUTING  -s 192.168.2.69/32 -m mac --mac-source '00:0d:60:75:b8:75' -j ACCEPT
		iptables -t nat -I PREROUTING  -s 192.168.2.39/32 -m mac --mac-source '00:0C:F1:43:14:05' -j ACCEPT
 
#	B - Olivier tout
	echo "	OlivierC"	
	iptables -t nat -I PREROUTING -s 192.168.2.63/32 -m mac --mac-source '00:90:F5:1E:51:A1' -j ACCEPT
	iptables -t nat -I PREROUTING -s 172.16.1.63/32 -m mac --mac-source '00:90:F5:1E:51:A1' -j ACCEPT
	# Wifi Olivier
	iptables -t nat -I PREROUTING -m mac --mac-source '00:A0:C5:B1:DD:15' -j ACCEPT
#	C - Steeve tout
	echo "	Steeve"
		iptables -t nat -I PREROUTING -s 192.168.2.64/32 -m mac --mac-source '00:08:02:04:fa:d7' -j ACCEPT
		iptables -t nat -I PREROUTING -m mac --mac-source '00:08:02:04:fa:d7' -j ACCEPT
#	D - Portable Compaq
	echo "	Portable Compaq"
		iptables -t nat -I PREROUTING -s 192.168.2.65/32 -m mac --mac-source '00:50:8B:FA:B9:5B' \
		-p tcp -m multiport --ports 443,110,25,119 -j ACCEPT
                iptables -t nat -I PREROUTING -s 192.168.2.65/32 -m mac --mac-source '00:50:8B:FA:B9:5B' \
                -p udp --dport 53 -j ACCEPT
                iptables -t nat -I PREROUTING -s 192.168.2.65/32 -m mac --mac-source '00:50:8B:FA:B9:5B' \
		-d $NET_DMZ -j ACCEPT
 
#	D' Portable Toshiba	            
	echo "	Portable Toshiba"
		iptables -t nat -I PREROUTING -s 192.168.2.67/32 -m mac --mac-source '00:01:02:E7:36:E3' \
                -p tcp -m multiport --ports 443,110,25,119 -j ACCEPT
		iptables -t nat -I PREROUTING -s 192.168.2.67/32 -m mac --mac-source '00:01:02:E7:36:E3' \
                -p udp --dport 53 -j ACCEPT
		iptables -t nat -I PREROUTING -s 192.168.2.67/32 -m mac --mac-source '00:01:02:E7:36:E3'  \
                -d $NET_DMZ -j ACCEPT
 
#	E - Serveur Vue
	echo "	 Serveur VUE"
	iptables -t nat -I PREROUTING -s $VUE -m mac --mac-source '00:0c:6e:c5:42:6c' -j ACCEPT 
	iptables -t nat -I PREROUTING -i $DMZ -d $VUE -j ACCEPT
#	F- Serveur Linux du RDC
	echo "  Serveur Linux"
	iptables -t nat -I PREROUTING -i $DMZ -d $LINUX -j ACCEPT
 
#	F - Quentin Portable
	echo "   Quentin"
		iptables -t nat -I PREROUTING -s 172.16.1.65/32 -m mac --mac-source '00:0b:db:a1:c2:a5' -j ACCEPT
		iptables -t nat -I PREROUTING -s 192.168.2.65/32 -m mac --mac-source '00:0b:db:a1:c2:a5' -j ACCEPT
		iptables -t nat -I PREROUTING -s 192.168.2.65/32 -m mac --mac-source '00:a0:c5:b1:da:f8' -j ACCEPT
 
#	F - Eva Portable
	echo "  Eva est punie"
		#iptables -t nat -I PREROUTING -m mac --mac-source '00:02:3f:13:bb:21' -j ACCEPT
 
#	G  - Lionel Portable
	echo "  Lionel"
		iptables -t nat -I PREROUTING \
		-m mac --mac-source '00:0D:60:2C:12:95' -j ACCEPT
 
#	H  - ROUTEUR WIFI
	echo "  ROUTEUR WIFI"
		iptables -t nat -I PREROUTING \
		-m mac --mac-source '00:0F:66:33:20:12' -j ACCEPT
echo "############################## FIN ==> Regles Firewall ###################################"
	iptables -t nat -I PREROUTING -s $LINUX -j ACCEPT 
	iptables -t nat -I PREROUTING -s $LINUX2 -j ACCEPT 
 
iptables -t nat -I PREROUTING -s 172.16.1.1/32 -j ACCEPT
iptables -t nat -I PREROUTING -s 172.16.1.2/32 -j ACCEPT
iptables -t nat -I PREROUTING -s 172.16.1.3/32 -j ACCEPT
iptables -t nat -I PREROUTING -s 172.16.1.4/32 -j ACCEPT
iptables -t nat -I PREROUTING -s 172.16.1.5/32 -j ACCEPT
iptables -t nat -I PREROUTING -s 192.168.2.95/32 -j ACCEPT