Overblog
Suivre ce blog Administration + Créer mon blog

Bienvenue sur le blog de Dominique Informatique.

Vous trouverez ici des infos sur la sécurité informatique et les outils de sécurisation des réseaux.
Bonne visite a vous.

Recherche

23 février 2006 4 23 /02 /février /2006 08:00
Les internautes américains sont victimes de nouveaux virus qui se jouent des sécurités mises en oeuvre par les banques.
Les pirates doivent réagir face aux défenses mises en place par les banques pour protéger les accès de leurs clientèles.

Les chevaux de troie de dernière génération infecte le navigateur Internet (une barre d'outils indésirable ?), puis il attends que l'internaute se connecte et s'authentifie sur le site de sa banque. A ce moment-la, le virus se déclenche et profite de la connexion ouverte pour vider les comptes bancaires de sa victime.

En Europe, les pirates préférent les vieilles méthodes. En france, ce sont 200 000 € qui ont été piraté sur les comptes bancaires d'internautes mal protégé. En Italie, la police a arrêté 70 personnes soupconnées de piraterie informatique.

Il y a de fortes chances pour que ces nouveaux chevaux de troie traversent l'atlantique d'ici la fin de l'année.
Partager cet article
Repost0
15 juillet 2005 5 15 /07 /juillet /2005 00:00
Iptables / Netfilter

0) Introduction

Cette page a pour but d'expliquer la structure d'une règle Iptables.
Une bonne connaissance de TCP/IP est requise pour comprendre la suite de ce document.
Ce document n'explique pas toutes les fonctions d'Iptables, il ne donne que les principales nescessaires à la mise en place
d'un parefeu (firewall) avec la translation d'adresse IP (NAT)

1) Fonctions de Netfilter.

D'après le manuel, Iptable permet de mettre en place, maintenir et inspecter des règles de filtrage de paquet dans le noyau Linux.
Iptables nous permet de controler les paquets IP transitant par une machine Linux. On peut décider si un paquet IP peut passer ou pas
en fonction de critères paramétrables (les règles de filtrage). Ce controle permet aussi de rediriger les paquets vers une autre destination,
de suivre les connexions TCP/IP et bien d'autre choses.

2) Commandes iptables.

iptables -A chaine règle  : ajoute une règle à la chaine
iptables -D chaine règle  : efface la règle dans la chaine
iptables -F chaine  : efface toutes les règles de la chaine

3) Structure des régles Iptables.

iptables  ( table )  ( chaine )  ( Parametres de correspondance )  ( cible )

La règle ci-dessus présente les éléments typiques. La table indique les actions possibles avec le paquet IP.
La chaine indique a quel moment l'on controle le paquet. Les paramètres de correspondance sont testés
contre le paquet IP pour déterminer si la règle doit lui être appliqué ou pas, exemple : teste de l'adresse
source du paquet IP. La cible indique l'action a effectuer sur le paquet si les paramètres de correspondances
sont vérifiés.

4) Elements d'Iptables.

les chaines :  
  • INPUT  : le paquet entre dans la machine.
  • PREROUTING  : le paquet est entré, et il va être routé.
  • FORWARD  : le paquet est routé.
  • POSTROUTING  : le paquet a été routé mais n'est pas encore sorti.
  • OUTPUT  : le paquet sort de la machine.
les tables :  
  • filter : (table par defaut) Cette table est utilisé pour filtrer les paquets, il est possible d'utiliser les chaines INPUT, FORWARD, OUTPUT
  • nat : Cette table est utilisé lorsque un paquet crée un nouvelle connexion, il est possible d'utiliser les chaines PREROUTING, POSTROUTING, OUTPUT
Les paramètres de correspondances :

[!] signifie qu'il est possible d'inverser le test en ajoutant le caractère ! dans la ligne de paramètre.

  • -s [!] source (adresse IP)  : teste l'adresse source du paquet IP
  • -d [!] destination (adresse IP)  : teste l'adresse destination du paquet IP
  • -i [!] interface  (nom d'interface)  : teste l'interface d'entrée du paquet, valable pour les chaines INPUT, PREROUTING, FORWARD.
  • -o [!] interface (nom d'interface)  : teste l'interface de sortie du paquet, valable pour les chaines FORWARD, POSTROUTING, OUTPUT

Extentions de correspondance

Les extentions sont des modules additionnels d'iptables. Ils sont chargés implicitement ou avec l'option -m.

  • -m --state état-de-connexion  : Ce module permet de tester l'état de la connexion TCP/IP
  • -p tcp  : Ce module permet de tester les indicateurs du protocole TCP.
-p tcp --sport [!] port[:port]  : teste le ou un interval de port source du paquet IP.
-p tcp --dport [!] port[:port] : teste le ou un interval de port destination du paquet IP
  • -p udp  : Ce module permet de tester les indicateurs du protocol UDP
-p udp --sport [!] port[:port]  : teste le ou un interval de port source du paquet IP.
-p udp --dport [!] port[:port]  : teste le ou un interval de port destination du paquet IP


Les Cibles

La cible indique l'action a effectuer sur le paquet si les paramètres de correspondances sont vérifiés.

-j ACCEPT  : signifie que le paquet est autorisé à passer.
-j DROP  : signifie que le paquet est détruit.

Extentions de cible

-j DNAT --to-destination adresse-IP:port  : Cette cible modifie l'adresse de destination:port du paquet IP par celle fourni. Cette cible permet de rendre accessible depuis Internet, un serveur dans un réseau privé.

ex : iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.1:80  -> cette règle redirige les paquets à destination du port 80 (http) entrant sur l'interface ppp0 (modem connecté a internet), vers le serveur web à l'adresse 192.168.0.1

-j SNAT --to-source adresse-IP  : Cette cible modifie l'adresse IP source du paquet IP par celle fourni. Cette cible permet de camoufler un réseau derrière une adresse IP. Si vous connectez votre réseau privé à Internet, assurez vous d'avoir une adresse IP fixe pour utiliser la cible SNAT.

ex  : iptables -t nat -A POSTROUTING -o ppp0 -j SNAT --to-source 162.230.10.25  

-j MASQUERADE  : Cette cible est utilisé pour connecter un réseau privé à Internet. A utiliser dans le cadre où votre adresse IP vous est fourni dynamiquement par votre FAI.

ex : iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

5)  Divers autres

Activation du routage par le noyau Linux :
Permet au noyau Linux de faire transiter les paquets entres ses interfaces réseaux.
echo 1 > /proc/sys/net/ipv4/ip_forward

Partager cet article
Repost0
7 juillet 2005 4 07 /07 /juillet /2005 00:00
#!/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
Partager cet article
Repost0
7 juillet 2005 4 07 /07 /juillet /2005 00:00

#!/bin/sh

# script /etc/firewall.sh

# Firewall NAT du TP réseau hétérogène
# Réseau Internet / DMZ / routeur
# Dominique Chambelant
# dchambelant@free.fr

# Definition des élèments du reseau

# Interface connectée au reseau interne
INTINF=eth0
# Interface connectée au reseau DMZ
DMZINF=eth1
# Interface connectée au reseau Internet
EXTINF=eth2
# Adresse IP du routeur connecté au reseau interne
ROUTEUR=192.168.20.1
# Adresse IP du routeur connecté au réseau externe
GATEWAY=192.168.0.3
# Adresse IP du reseau LAN
ip_LAN=192.168.30.0
netmask_LAN=255.255.255.0
# Adresse IP du reseau DMZ
ip_DMZ=192.168.10.0
netmask_DMZ=255.255.255.0
ip_WEBSVR=192.168.10.2
ip_SMTP=192.168.10.2
ip_PROXY=192.168.20.1
ip_DNS1=192.168.0.3
ip_DNS2=192.168.0.3

# Adresse IP publique des serveurs
# Ces adresses sont affectés à l'interface WAN du firewall
ipw_WEBSERV=192.168.0.250
# Interface Internet et boucle locale
# WAN=`/usr/local/sbin/eaglectrl -i` # Utilisé avec un modem Sagem 800
LOOP=127.0.0.1

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

        echo "Démarrage du firewall..."


# Définition de la table de routage
route add -net $ip_LAN netmask $netmask_LAN gw $ROUTEUR dev $INTINF
route add -net $ip_DMZ netmask $netmask_DMZ dev $DMZINF
route add default gw $GATEWAY

# Control du traffic avec l'algorythme Token Bucket Filter
tc qdisc add dev $INTINF root tbf rate 100mbit latency 0.1ms burst 1540
tc qdisc add dev $DMZINF root tbf rate 100mbit latency 0.1ms burst 1540
tc qdisc add dev $DMZINF root tbf rate 100mbit latency 0.1ms burst 1540

# Activation du forwarding dans le noyau
# Obligatoire pour que le noyau transmette les paquets
echo 1 > /proc/sys/net/ipv4/ip_forward

# Activation de l'IP dynamique
# Obligatoire dans le cas d'IP attribué dynamiquement
echo 1 > /proc/sys/net/ipv4/ip_dynaddr

# Activation de l'anti-spoofing

# Alors la, on va travailler avec le routage
# pour empêcher les attaques de type spoofing
# l'activation de la vérification de l'adresse source
# à chaque lancement est une bonne solution.

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 terminée"
else
  echo "Probléme 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
  # Démarrage d'un shell root pour maintenance
  /sbin/sulogin $CONSOLE
fi

# pas de icmp
# le firewall doit rester discret
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

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

modprobe ip_tables

# on va charger les modules supplémentaires pour
# gérer 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 possibilité de loguer ce qui se passe.

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

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

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

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

# Pour éviter les problèmes, on va tout accepter sur
# la machine en local (interface lo).
# Je déconseille 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 préparation est
# terminée, passons aux choses sérieuses

# Transfer des connexions http entrantes vers le serveur Web public
iptables -t nat -A PREROUTING -d $ipw_WEBSVR -p tcp --dport 80 -j DNAT --to-destination $ip_WEBSVR:80

# Configuration des filtres
# ---
# Autorise la connection au serveur DNS1 et DNS2
# serveur DNS1 LAN / DNS1
iptables -A INPUT -i $INTINF -d $ip_DNS1 -p udp --dport 53 -j LOG_ACCEPT
iptables -A INPUT -i $EXTINF -s $ip_DNS1 -p udp --dport 53 -j LOG_ACCEPT
iptables -A FORWARD -i $INTINF -d $EXTINF -d $ip_DNS1 -p udp --sport 53 -j ACCEPT
iptables -A FORWARD -i $EXTINF -s $ip_DNS1 -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -i $INTINF -s $ip_DNS1 -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -i $EXTINF -d $ip_DNS1 -p udp --sport 53 -j ACCEPT
echo "DNS1        [OK]"
# serveur DNS2
iptables -A INPUT -i $INTINF -d $ip_DNS2 -m state --state NEW,ESTABLISHED -p tcp --dport 53 -j LOG_ACCEPT
iptables -A INPUT -i $EXTINF -s $ip_DNS2 -m state --state ESTABLISHED -p tcp --dport 53 -j LOG_ACCEPT
iptables -A FORWARD -i $INTINF -d $EXTINF -d $ip_DNS2 -m state --state NEW,ESTABLISHED -p tcp --sport 53 -j ACCEPT
iptables -A FORWARD -i $EXTINF -s $ip_DNS2 -m state --state ESTABLISHED -p tcp --sport 53 -j ACCEPT
iptables -A OUTPUT -i $INTINF -s $ip_DNS2 -m state --state ESTABLISHED -p tcp --sport 53 -j ACCEPT
iptables -A OUTPUT -i $EXTINF -d $ip_DNS2 -m state --state NEW,ESTABLISHED -p tcp --sport 53 -j ACCEPT
echo "DNS2        [OK]"

# ---
# Autorise le proxy a se connecter sur le Web (http)
iptables -A INPUT -i $INTINF -s $ip_PROXY -m state --state NEW,ESTABLISHED -p tcp --dport 80 -j LOG_ACCEPT
iptables -A INPUT -i $EXTINF -d $ip_PROXY -m state --state ESTABLISHED -p tcp --dport 80 -j LOG_ACCEPT
iptables -A FORWARD -i $INTINF -d $EXTINF -s $ip_PROXY -m state --state NEW,ESTABLISHED -p tcp --sport 80 -j ACCEPT
iptables -A FORWARD -i $EXTINF -d $ip_PROXY -m state --state ESTABLISHED -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -i $INTINF -d $ip_PROXY -m state --state ESTABLISHED -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -i $EXTINF -s $ip_PROXY -m state --state NEW,ESTABLISHED -p tcp --sport 80 -j ACCEPT
echo "http  PROXY/Internet        [OK]"

# ---
# Autorise le proxy a ce connecter sur la DMZ (http)
iptables -A INPUT -i $INTINF -s $ip_PROXY -m state --state NEW,ESTABLISHED -p tcp --dport 80 -j LOG_ACCEPT
iptables -A INPUT -i $DMZINF -d $ip_PROXY -m state --state ESTABLISHED -p tcp --dport 80 -j LOG_ACCEPT
iptables -A FORWARD -i $INTINF -d $DMZINF -s $ip_PROXY -m state --state NEW,ESTABLISHED -p tcp --sport 80 -j ACCEPT
iptables -A FORWARD -i $DMZINF -d $ip_PROXY -m state --state ESTABLISHED -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -i $INTINF -d $ip_PROXY -m state --state ESTABLISHED -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -i $DMZINF -s $ip_PROXY -m state --state NEW,ESTABLISHED -p tcp --sport 80 -j ACCEPT
echo "http  PROXY/DMZ        [OK]"

# ---
# Autorise le proxy a se connecter sur les serveurs FTP
# Connexion de Controle
iptables -A INPUT -i $INTINF -s $ip_PROXY -m state --state NEW,ESTABLISHED -p tcp --dport 21 -j LOG_ACCEPT
iptables -A INPUT -i $EXTINF -d $ip_PROXY -m state --state ESTABLISHED -p tcp --dport 21 -j LOG_ACCEPT
iptables -A FORWARD -i $INTINF -d $EXTINF -s $ip_PROXY -m state --state NEW,ESTABLISHED -p tcp --sport 21 -j ACCEPT
iptables -A FORWARD -i $EXTINF -d $ip_PROXY -m state --state ESTABLISHED -p tcp --sport 21 -j ACCEPT
iptables -A OUTPUT -i $INTINF -d $ip_PROXY -m state --state ESTABLISHED -p tcp --sport 21 -j ACCEPT
iptables -A OUTPUT -i $EXTINF -s $ip_PROXY -m state --state NEW,ESTABLISHED -p tcp --sport 21 -j ACCEPT
echo "FTP    (21)    [OK]"
# Connexion de Données
iptables -A INPUT -i $INTINF -s $ip_PROXY -m state --state NEW,ESTABLISHED -p tcp --dport 20 -j LOG_ACCEPT
iptables -A INPUT -i $EXTINF -d $ip_PROXY -m state --state ESTABLISHED -p tcp --dport 20 -j LOG_ACCEPT
iptables -A FORWARD -i $INTINF -d $EXTINF -s $ip_PROXY -m state --state NEW,ESTABLISHED -p tcp --sport 20 -j ACCEPT
iptables -A FORWARD -i $EXTINF -d $ip_PROXY -m state --state ESTABLISHED -p tcp --sport 20 -j ACCEPT
iptables -A OUTPUT -i $INTINF -d $ip_PROXY -m state --state ESTABLISHED -p tcp --sport 20 -j ACCEPT
iptables -A OUTPUT -i $EXTINF -s $ip_PROXY -m state --state NEW,ESTABLISHED -p tcp --sport 20 -j ACCEPT
echo "FTP    (20)    [OK]"

# ---
# Autorise le SSH sur l'interface interne, la DMZ,
# le transfert LAN - DMZ   et enregistre
# l'établissement de connexion
iptables -A INPUT -i $INTINF -m state --state NEW,ESTABLISHED -p tcp --dport 22 -j LOG_ACCEPT
iptables -A INPUT -i $DMZINF -m state --state ESTABLISHED -p tcp --dport 22 -j LOG_ACCEPT
iptables -A FORWARD -i $INTINF -d $DMZINF -m state --state NEW,ESTABLISHED -p tcp --sport 22 -j ACCEPT
iptables -A FORWARD -d $INTINF -i $DMZINF -m state --state ESTABLISHED -p tcp --sport 22 -j ACCEPT
iptables -A OUTPUT -i $INTINF -m state --state ESTABLISHED -p tcp --sport 22 -j ACCEPT
iptables -A OUTPUT -i $DMZINF -m state --state NEW,ESTABLISHED -p tcp --sport 22 -j ACCEPT
echo "SSH            [ OK ]"

# ---
#  Autorise le SMTP entre le LAN et la DMZ
iptables -A INPUT -i $INTINF -m state --state NEW,ESTABLISHED -p tcp --dport 25 -j LOG_ACCEPT
iptables -A INPUT -i $DMZINF -d $ip_SMTP -m state --state ESTABLISHED -p tcp --dport 25 -j LOG_ACCEPT
iptables -A FORWARD -i $INTINF -d $DMZINF -m state --state NEW,ESTABLISHED -p tcp --sport 25 -j ACCEPT
iptables -A FORWARD -d $INTINF -i $DMZINF -s $ip_SMTP -m state --state ESTABLISHED -p tcp --sport 25 -j ACCEPT
iptables -A OUTPUT -i $INTINF -m state --state ESTABLISHED -p tcp --sport 25 -j ACCEPT
iptables -A OUTPUT -i $DMZINF -s $ip_SMTP -m state --state NEW,ESTABLISHED -p tcp --sport 25 -j ACCEPT
echo "SMTP    Lan/DMZ    [OK]"

# ---
# Autorise le SMTP entre la DMZ et l'Internet
iptables -A INPUT -i $DMZINF -m state --state NEW,ESTABLISHED -p tcp --dport 25 -j LOG_ACCEPT
iptables -A INPUT -i $EXTINF -d $ip_SMTP -m state --state NEW,ESTABLISHED -p tcp --dport 25 -j LOG_ACCEPT
iptables -A FORWARD -i $DMZINF -d $EXTINF -m state --state NEW,ESTABLISHED -p tcp --sport 25 -j ACCEPT
iptables -A FORWARD -d $EXTINF -i $DMZINF -s $ip_SMTP -m state --state NEW,ESTABLISHED -p tcp --sport 25 -j ACCEPT
iptables -A OUTPUT -i $EXTINF -m state --state NEW,ESTABLISHED -p tcp --sport 25 -j ACCEPT
iptables -A OUTPUT -i $DMZINF -s $ip_SMTP -m state --state NEW,ESTABLISHED -p tcp --sport 25 -j ACCEPT
echo "SMTP    DMZ/INTERNET    [OK]"

# ---
# Autorise le POP3 en le LAN et la DMZ
iptables -A INPUT -i $INTINF -m state --state NEW,ESTABLISHED -p tcp --dport 110 -j LOG_ACCEPT
iptables -A INPUT -i $DMZINF -d $ip_SMTP -m state --state ESTABLISHED -p tcp --dport 110 -j LOG_ACCEPT
iptables -A FORWARD -i $INTINF -d $DMZINF -m state --state NEW,ESTABLISHED -p tcp --sport 110 -j ACCEPT
iptables -A FORWARD -d $INTINF -i $DMZINF -s $ip_SMTP -m state --state ESTABLISHED -p tcp --sport 110 -j ACCEPT
iptables -A OUTPUT -i $INTINF -m state --state ESTABLISHED -p tcp --sport 110 -j ACCEPT
iptables -A OUTPUT -i $DMZINF -s $ip_SMTP -m state --state NEW,ESTABLISHED -p tcp --sport 110 -j ACCEPT
echo "POP3    Lan/DMZ    [OK]"

# ---
# Autorise les connexions entrantes vers la DMZ (http)
iptables -A INPUT -i $DMZINF -m state --state ESTABLISHED -p tcp --dport 80 -j LOG_ACCEPT
iptables -A INPUT -i $EXTINF -d $ip_WEBSVR -m state --state NEW,ESTABLISHED -p tcp --dport 80 -j LOG_ACCEPT
iptables -A FORWARD -i $DMZINF -d $EXTINF -m state --state ESTABLISHED -p tcp --sport 80 -j ACCEPT
iptables -A FORWARD -d $EXTINF -i $DMZINF -s $ip_WEBSVR -m state --state NEW,ESTABLISHED -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -i $EXTINF -s $ip_WEBSVR -m state --state ESTABLISHED -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -i $DMZINF -d $ip_WEBSVR -m state --state NEW,ESTABLISHED -p tcp --sport 80 -j ACCEPT
echo "http    DMZ/INTERNET    [OK]"

#
echo "Tunnels VPN        [ OK ]"
#$IPT -A INPUT -i $WAN -p udp --dport 5000 -j ACCEPT
#
#
#
echo "Mauvais paquets        [ Rejet ]"
iptables -A INPUT -i $EXTINF -s $LOOP -j DROP
iptables -A FORWARD -i $EXTINF -s $LOOP -j DROP
iptables -A INPUT -i $EXTINF -d $LOOP -j DROP
iptables -A FORWARD -i $EXTINF -d $LOOP -j DROP
iptables -A INPUT -i $INTINF -s $LOOP -j DROP
iptables -A INPUT -i $INTINF -d $LOOP -j DROP
iptables -A INPUT -i $EXTINF -j DROP
iptables -A FORWARD -i $INTINF -d $LOOP -j DROP
#
#
iptables -A FORWARD -i $EXTINF -s 192.168.0.0/16 -j DROP
iptables -A FORWARD -i $EXTINF -s 172.16.0.0/12 -j DROP
iptables -A FORWARD -i $EXTINF -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i $EXTINF -s 192.168.0.0/16 -j DROP
iptables -A INPUT -i $EXTINF -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i $EXTINF -s 10.0.0.0/8 -j DROP
#

# Maintenant il ne reste plus grand chose à faire !

# Il faut permettre à l'ensemble du LAN de dialoguer sur internet
# avec la même adresse IP sinon, bien évidemment ça ne marchera pas
# Une petite règle de NAT avec un -j MASQUERADE suffira
# (masquerade = dialoguer avec l'adresse IP publique sur firewall)

iptables -t nat -A POSTROUTING -s $ip_LAN -j MASQUERADE

# Il faut également que le serveur web de la DMZ soit masqueradé
# sinon, le serveur dialoguera sur internet avec son IP privée

iptables -t nat -A POSTROUTING -s $ip_DMZ -j MASQUERADE

# Toutes les règles qui n'ont pas passé les
# règles du firewall seront refusées et loguées...

iptables -A FORWARD -j LOG_DROP
iptables -A INPUT -j LOG_DROP
iptables -A OUTPUT -j LOG_DROP

# Fin de la configuration du parefeu
echo " [Termine]"
echo " Le parefeu est prêt"

}

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 désactivé!"
}

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
Partager cet article
Repost0
5 juillet 2005 2 05 /07 /juillet /2005 00:00

Préambule

Le contexte :
Une entreprise possédant un réseau informatique à été scindée en deux entreprises distinctes Alpha et Beta, ces entreprises sont maintenues par un administrateur unique.
Les deux PDG se sont mis d'accord pour faire intervenir un prestataire externe pour faire un audit sécurité et proposer une solution afin de palier les éventuels hackings externes et internes.

D'autres contraintes ont renforcées la difficulté de l'exercice :
- Les réseaux de la société Alpha et de la société Beta doivent être dissociés le plus possible (aucune données n'est commune).
- L'administrateur doit pouvoir se connecter à tous les postes, soit en mode texte, soit en mode graphique depuis son poste ou les postes clients.
- Les accès de type msn messenger ou P2P doivent être impossibles.
- La listes des sites consultés par poste doit être consignée dans un fichier.
- La direction de la société Alpha souhaite que le courrier reçu soit centralisé sur un serveur, puis controlé (virus) avant d'être distribué à chaque destinataire.
- La société Alpha héberge un serveur accessible depuis l'Internet.

Solution

Le cloisonnement des réseaux :
La solution apporté à ces deux sociétés à été de cloisonner les différents réseaux. La société Alpha dispose de son propre réseau informatique avec un adressage IP propre, de même pour la société Beta et l’administrateur. Un routeur parefeu à quatre ports assure l’aiguillage entre la société alpha, beta et l’administrateur. La quatrième interface réseau du routeur sera
connecté à un second routeur parefeu, lui-même connecté à l’Internet.


Les deux parefeu (ROUTEUR et PAREFEU NAT) sont des machines Linux. Nous utilisons les fonctionnalités du noyau pour le routage des paquets IP entre les réseaux.
Le routage n’est pas dynamique. Il faut ajouter des routes statiques, elles indiqueront à chaque routeur quel routeur (gateway) contacter pour envoyer le paquet à destination.
 Pour contrôler les paquets IP transitant sur le ROUTEUR ou le PAREFEU NAT, on utilise Netfilter/Iptables.
Pour enregistrer une trace des connexions web des utilisateurs, on les oblige a utiliser un proxy. Celui-ci est installé sur ROUTEUR.
Le PAREFEU NAT utilise la technologie NAT (Network Adress Translation) pour masquer les connexions du réseau interne vers Internet. Seule le serveur Internet est accessible depuis l’Internet.

 Les fichiers de configuration de Netfiler sont présenté en détails dans les articles suivants.
Partager cet article
Repost0

Articles RÉCents

Liens