Overblog Tous les blogs Top blogs Technologie & Science Tous les blogs Technologie & Science
Editer l'article Suivre ce blog Administration + Créer mon blog
MENU

Réseau, système et sécurité informatique

Publicité

Architecture double parefeu - script IPtables du ROUTEUR

#!/bin/sh

# script /etc/firewall.sh

# Firewall 1 du TP reseau heterogene
# Reseau Internet / DMZ / routeur
# Dominique Chambelant
# dchambelant@free.fr

# Definition des elements du reseau

# Interface connectee au reseau ALPHA
ALPHAINF=eth1
# Interface connectee au reseau BETA
BETAINF=eth2
# Interface connectee au reseau ADM
ADMINF=eth3
# Interface connectee au reseau Intermediaire
INTINF=eth0
# Adresse IP du routeur connectee au reseau internet
PAREFEU=192.168.20.250
# Adresse IP du reseau LAN
ip_LAN=192.168.20.0
netmask_LAN=255.255.255.0
# Adresse IP du reseau ALPHA
ip_ALPHA=192.168.40.0
netmask_ALPHA=255.255.255.0
# Adresse IP du reseau BETA
ip_BETA=192.168.50.0
netmask_BETA=255.255.255.0
# Adresse IP du reseau ADM
ip_ADM=192.168.30.0
netmask_ADM=255.255.255.0
# Adresse IP du reseau DMZ
ip_BETA=192.168.10.0
netmask_DMZ=255.255.255.0
WEBSVR=192.168.10.2
FTPSVR1=192.168.10.2
FTPSVR2=192.168.10.3
# Adresse IP publique des serveurs
# Ces adresses sont affectes à l'interface WAN du firewall
ipw_WEBSERV=192.168.0.250
# boucle locale
LOOP=127.0.0.1


# -------------- Ne rien modifier au-dela de cette ligne ---------------------
# ------------------------------------------------------------------------
start() {

        echo "Demarrage du firewall..."


# IP forwarding et Routage

# Activation du transfert de paquet dans le noyau
echo 1 > /proc/sys/net/ipv4/ip_forward

# Routes statiques
route add -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.20.250
route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.20.250
route add default gw 192.168.20.250

# Activation de l'anti-spoofing

if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]
then
  echo -n "Activation de la protection contre l'IP spoofing..."    
  for filtre in /proc/sys/net/ipv4/conf/*/rp_filter
  do
    echo 1 > $filtre
  done
  echo "Activation terminee"
else
  echo "Probleme lors de l'activation de la protection IP spoofing, faites attention."
  echo "CONTROL-D pour quitter le shell et continuer le lancement du systÚme"
  echo
  # Demarrage d'un shell root
  /sbin/sulogin $CONSOLE
fi

# On va utiliser iptables. Si on l'a compile en module
# dans le kernel, il faut charger le module ip_tables

modprobe ip_tables

# on va charger les modules supplementaires pour
# gerer la translation d'adresse, l'IRC et le FTP

modprobe ip_nat_ftp
modprobe ip_nat_irc
modprobe iptable_filter
modprobe iptable_nat

# On va vider toutes les rÚgles, avant d'appliquer les nouvelles rÚgles de firewall

iptables -F
iptables -X

# On va rajouter 2 nouvelles chaînes.
# Ceci permettra d'ajouter des nouvelles cibles qui
# auront la possibilite de loguer ce qui se passe.

# On logue et on refuse le paquet,
# on rajoute un prefixe pour pouvoir
# s'y retrouver dans les logs
iptables -N LOG_DROP
iptables -A LOG_DROP -j LOG --log-prefix '[Routeur IPTABLES DROP] : '
iptables -A LOG_DROP -j DROP

# ici, on logue et on accepte le paquet,
# on rajoute un prefixe pour pouvoir
# s'y retrouver dans les logs
iptables -N LOG_ACCEPT
iptables -A LOG_ACCEPT -j LOG --log-prefix '[Routeur IPTABLES ACCEPT] : '
iptables -A LOG_ACCEPT -j ACCEPT

# On veut faire un firewall efficace,
# donc la politique a appliquer est de tout refuser par defaut
# et rajouter une a une les rÚgles que l'on autorise.
# l'option -P permet de definir la cible par defaut

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

# Pour eviter les problÚmes, on va tout accepter sur
# la machine en local (interface lo).
# Je deconseille de retirer cette rÚgle car
# ça pose pas mal de problÚmes et ça peut
# faire perdre la main sur la machine

iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Bon, la partie initialisation et preparation est
# terminee, passons aux choses serieuses

# Configuration des filtres
echo "Activation des filtres"
# ---
# Redirige le reseau ALPHA vers le proxy
echo "1"
iptables -t nat -A PREROUTING -i $ALPHAINF -p tcp --dport 80 -j DNAT --to-destination $ip_PROXY:3128
echo "http  ALPHA/PROXY        [OK]"

# ---
# Redirige le reseau BETA  vers le proxy
iptables -t nat -A PREROUTING -i $BETAINF -p tcp --dport 80 -j DNAT --to-destination $ip_PROXY:3128
echo "http  BETA/PROXY        [OK]"

# ---
# redirige le reseau ADM vers le proxy
iptables -t nat -A PREROUTING -i $ADMINF -p tcp --dport 80 -j DNAT --to-destination $ip_PROXY:3128
echo "http  ADM/PROXY        [OK]"

# ---
# Autorise le SSH
# Transfert entre ALPHA et BETA
iptables -A FORWARD -i $ALPHAINF -o $BETAINF -m state --state ESTABLISHED -p tcp --sport 22 -j ACCEPT
iptables -A FORWARD -o $ALPHAINF -i $BETAINF -m state --state NEW,ESTABLISHED -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i $ALPHAINF -o $BETAINF -m state --state NEW,ESTABLISHED -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -o $ALPHAINF -i $BETAINF -m state --state ESTABLISHED -p tcp --sport 22 -j ACCEPT
# Transfert entre ALPHA et ADM
iptables -A FORWARD -i $ALPHAINF -o $ADMINF -m state --state NEW,ESTABLISHED -p tcp --sport 22 -j ACCEPT
iptables -A FORWARD -o $ALPHAINF -i $ADMINF -m state --state NEW,ESTABLISHED -p tcp --dport 22 -j ACCEPT
# Transfert entre BETA et ADM
iptables -A FORWARD -i $BETAINF -o $ADMINF -m state --state ESTABLISHED -p tcp --sport 22 -j ACCEPT
iptables -A FORWARD -o $BETAINF -i $ADMINF -m state --state NEW,ESTABLISHED -p tcp --dport 22 -j ACCEPT
# Transfert entre ADM et INT
iptables -A FORWARD -i $ADMINF -o $INTINF -m state --state NEW,ESTABLISHED -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -o $ADMINF -i $INTINF -m state --state ESTABLISHED -p tcp --sport 22 -j ACCEPT
echo "SSH            [ OK ]"

# ---
# Autorise le SSH
# Transfert entre ALPHA et BETA
iptables -A FORWARD -i $ALPHAINF -o $BETAINF -m state --state ESTABLISHED -p tcp --sport 3389 -j ACCEPT
iptables -A FORWARD -o $ALPHAINF -i $BETAINF -m state --state NEW,ESTABLISHED -p tcp --dport 3389 -j ACCEPT
iptables -A FORWARD -i $ALPHAINF -o $BETAINF -m state --state NEW,ESTABLISHED -p tcp --dport 3389 -j ACCEPT
iptables -A FORWARD -o $ALPHAINF -i $BETAINF -m state --state ESTABLISHED -p tcp --sport 3389 -j ACCEPT
# Transfert entre ALPHA et ADM
iptables -A FORWARD -i $ALPHAINF -o $ADMINF -m state --state NEW,ESTABLISHED -p tcp --sport 3389 -j ACCEPT
iptables -A FORWARD -o $ALPHAINF -i $ADMINF -m state --state NEW,ESTABLISHED -p tcp --dport 3389 -j ACCEPT
# Transfert entre BETA et ADM
iptables -A FORWARD -i $BETAINF -o $ADMINF -m state --state ESTABLISHED -p tcp --sport 3389 -j ACCEPT
iptables -A FORWARD -o $BETAINF -i $ADMINF -m state --state NEW,ESTABLISHED -p tcp --dport 3389 -j ACCEPT
# Transfert entre ADM et INT
iptables -A FORWARD -i $ADMINF -o $INTINF -m state --state NEW,ESTABLISHED -p tcp --dport 3389 -j ACCEPT
iptables -A FORWARD -o $ADMINF -i $INTINF -m state --state ESTABLISHED -p tcp --sport 3389 -j ACCEPT
echo "Rdesktop            [ OK ]"

# ---
#  Autorise le DNS entre  ALPHA et la internet (dns)
iptables -A FORWARD -i $ALPHAINF -o $INTINF -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -o $ALPHAINF -i $INTINF -p udp --sport 53 -j ACCEPT
echo "DNS    ALPHA/DMZ    [OK]"

# ---
#  Autorise le DNS entre  BETA et la internet (dns)
iptables -A FORWARD -i $BETAINF -o $INTINF -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -o $BETAINF -i $INTINF -p udp --sport 53 -j ACCEPT
echo "DNS    BETA/DMZ    [OK]"

# ---
#  Autorise le DNS entre le ADM et la DMZ (smtp)
iptables -A FORWARD -i $ADMINF -o $INTINF -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -o $ADMINF -i $INTINF -p udp --sport 53 -j ACCEPT
echo "DNS    ADM/DMZ    [OK]"

# ---
#  Autorise le SMTP entre  ALPHA et la DMZ (smtp)
iptables -A FORWARD -i $ALPHAINF -o $INTINF -m state --state NEW,ESTABLISHED -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -o $ALPHAINF -i $INTINF -m state --state ESTABLISHED -p tcp --sport 25 -j ACCEPT
echo "SMTP    ALPHA/DMZ    [OK]"

# ---
#  Autorise le SMTP entre  BETA et la DMZ (smtp)
iptables -A FORWARD -i $BETAINF -o $INTINF -m state --state NEW,ESTABLISHED -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -o $BETAINF -i $INTINF -m state --state ESTABLISHED -p tcp --sport 25 -j ACCEPT
echo "SMTP    BETA/DMZ    [OK]"

# ---
#  Autorise le SMTP entre le ADM et la DMZ (smtp)
iptables -A FORWARD -i $ADMINF -o $INTINF -m state --state NEW,ESTABLISHED -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -o $ADMINF -i $INTINF -m state --state ESTABLISHED -p tcp --sport 25 -j ACCEPT
echo "SMTP    ADM/DMZ    [OK]"

# ---
# Autorise le POP3 entre ALPHA et la DMZ (pop3)
iptables -A FORWARD -i $ALPHAINF -o $INTINF -m state --state NEW,ESTABLISHED -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -o $ALPHAINF -i $INTINF -m state --state ESTABLISHED -p tcp --sport 110 -j ACCEPT
echo "POP3    ALPHA/DMZ    [OK]"

# ---
# Autorise le POP3 entre BETA et la DMZ (pop3)
iptables -A FORWARD -i $BETAINF -o $INTINF -m state --state NEW,ESTABLISHED -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -o $BETAINF -i $INTINF -m state --state ESTABLISHED -p tcp --sport 110 -j ACCEPT
echo "POP3    BETA/DMZ    [OK]"

# ---
# Autorise le POP3 entre ADM et la DMZ (pop3)
iptables -A FORWARD -i $ADMINF -o $INTINF -m state --state NEW,ESTABLISHED -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -o $ADMINF -i $INTINF -m state --state ESTABLISHED -p tcp --sport 110 -j ACCEPT
echo "POP3    ADM/DMZ    [OK]"

# ---
# Autorise le LOTUS entre ADM et la DMZ (lotusnotes)
iptables -A FORWARD -i $ADMINF -o $INTINF -m state --state NEW,ESTABLISHED -p tcp --dport 1352 -j ACCEPT
iptables -A FORWARD -o $ADMINF -i $INTINF -m state --state ESTABLISHED -p tcp --sport 1352 -j ACCEPT
echo "LOTUS     ADM/DMZ    [OK]"

# ---
#
echo "Mauvais paquets        [ Rejet ]"
iptables -A INPUT -i $ADMINF -s $LOOP -j DROP
iptables -A FORWARD -i $ADMINF -s $LOOP -j DROP
iptables -A INPUT -i $ADMINF -d $LOOP -j DROP
iptables -A FORWARD -i $ADMINF -d $LOOP -j DROP
iptables -A INPUT -i $ALPHAINF -s $LOOP -j DROP
iptables -A INPUT -i $ALPHAINF -d $LOOP -j DROP
iptables -A INPUT -i $ADMINF -j DROP
iptables -A FORWARD -i $ALPHAINF -d $LOOP -j DROP
#
#
iptables -A FORWARD -i $ADMINF -s 192.168.0.0/16 -j DROP
iptables -A FORWARD -i $ADMINF -s 172.16.0.0/12 -j DROP
iptables -A FORWARD -i $ADMINF -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i $ADMINF -s 192.168.0.0/16 -j DROP
iptables -A INPUT -i $ADMINF -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i $ADMINF -s 10.0.0.0/8 -j DROP
#

# Toutes les rÚgles qui n'ont pas passe les
# rÚgles du firewall seront refusees et loguees...

iptables -A FORWARD -j LOG_DROP

# Fin de la configuration du parefeu
echo " [Termine]"
echo " Le parefeu est pret"

}

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 desactive!"
}

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
Publicité
Retour à l'accueil
Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article