Le Vendredi 6 Juin 2003 16:44, AMORE Rosaire a �crit :
> Salut
> J'ai le r�seau suivant :
> une passerelle que je voudrais utiliser comme firewall avec un lan juste
> derri�re sur eth0. Je n'ai pas de DMZ. Je me connecte par ppp0.
> Je voudrais tout DROPper sauf :
> - acc�s � Internet depuis ma passerelle ou mon lan
> - acc�s depuis n'importe o� par ssh.
> J'ai construit les r�gles suivantes en m'inspirant du iptables-Howto et
> du tutorial de lea.
> Ca marche depuis ma passerelle mais rien depuis mon lan (bien configur�,
> car, sans les r�gles iptables, j'arrive bien sur internet).
> =========================
> iptables -F INPUT
> iptables -F OUTPUT
> iptables -F FORWARD
> iptables -nL          # verif
> iptables -P INPUT ACCEPT
> iptables -P OUTPUT ACCEPT
> iptables -P FORWARD ACCEPT
> iptables -nL
> iptables -P INPUT DROP
> iptables -P OUTPUT DROP
> iptables -P FORWARD DROP
> iptables -nL
> iptables -A INPUT  -i lo -j ACCEPT
> iptables -A OUTPUT -o lo -j ACCEPT
> iptables -A INPUT  -i ppp0 --protocol tcp --source-port 53 -j ACCEPT
> iptables -A OUTPUT -o ppp0 --protocol tcp --destination-port 53 -j ACCEPT
> iptables -A INPUT  -i ppp0 --protocol udp --source-port 53 -j ACCEPT
> iptables -A OUTPUT -o ppp0 --protocol udp --destination-port 53 -j ACCEPT
> iptables -A INPUT  -i ppp0 --protocol tcp --source-port 80 -m state
> --state ESTABLISHED -j ACCEPT
> iptables -A OUTPUT -o ppp0 --protocol tcp --destination-port 80 -m state
> --state NEW,ESTABLISHED -j ACCEPT
> iptables -nL
> #iptables -A INPUT --protocol tcp --source-port 22 -m state --state
> NEW,ESTABLISHED -j ACCEPT
> iptables -A INPUT --protocol tcp --source-port 22 -j ACCEPT
> iptables -A POSTROUTING -t nat -o ppp0 -j MASQUERADE
> =========================
> Une id�e?
> Rosaire

Les r�gles INPUT et OUTPUT ne g�rent que les paquets entrants et sortants de 
la machine concern�e. Pour traiter les paquets en transit par le 'firewall' 
la r�gle concern�e est 'FORWARD'.
Cependant pour que cela fonctionne il activer le routage.

Voici un exemple de qui fonctionne en production:

# Path to IPTABLES executable
IPTABLES=/usr/sbin/iptables

# D�finition des interfaces
I_Ext=ppp0
I_Int=eth1

# D�finition des r�seaux
Res_Int=192.168.0.0/24
Res_Ext=0.0.0.0/24

# Adresses IP des serveurs
IP_Routeur=192.168.0.254
IP_Frw_Int=192.168.0.254
IP_Frw_Ext=`ifconfig $I_Ext | grep inet | cut -d : -f2 | cut -d ' ' -f1`

# D�finition des ports
Port_Dns=53
Port_Pop3=110
Port_Smtp=25
Port_Http=80
Port_Ssh=22

########################
# Configuration du noyau
########################
echo
echo "  -------------------------------------"
echo "  -- Application des r�gles du firewall"
echo "  -------------------------------------"

# --- Ignorer les messages ICMP bugg�s (RFC 1122)
# -----------------------------------------------
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ]; then
        echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
        echo "  - 1 - Ignorer les messages ICMP bugg�s                  [OK]"
else
        echo "  - 1 - Ignorer les messages ICMP bugg�s                  [FAILED]"
fi

# --- Activation de la redirection des paquets.
# ---------------------------------------------
if [ -e /proc/sys/net/ipv4/ip_forward ]; then
        echo "1" > /proc/sys/net/ipv4/ip_forward
        echo "  - 2 - Activation de l'IP Forwarding                     [OK]"
else
        echo "  - 2 - Activation de l'IP Forwarding                     [FAILED]"
fi

# --- Ne pas accepter les redirections ICMP.
# ------------------------------------------
# D�sactivation sur toutes les insterfaces.
# if [ -e /proc/sys/net/ipv4/conf/all/accept_redirects ]; then
#       echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
# fi
# D�sactivation seulement sur l'interface externe.
if [ -e /proc/sys/net/ipv4/conf/$I_Ext/accept_redirects ]; then
        echo "0" > /proc/sys/net/ipv4/conf/$I_Ext/accept_redirects
        echo "  - 3 - D�sactivation des redirections ICMP               [OK]"
else
        echo "  - 3 - D�sactivation des redirections ICMP               [FAILED]"
fi

# --- Log des packets avec des adresses impossibles dans le syst�mes de log.
# --------------------------------------------------------------------------
if [ -e /proc/sys/net/ipv4/conf/$I_Ext/log_martians ]; then
        echo "1" > /proc/sys/net/ipv4/conf/$I_Ext/log_martians
        echo "  - 4 - Log des adresses impossibles                      [OK]"
else
        echo "  - 4 - Log des adresses impossibles                      [FAILED]"
fi

# --- Ignore les requ�tes broadcast d'�cho ICMP.
# ----------------------------------------------
if [ -e /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts ]; then
        echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
        echo "  - 5 - Ignore les requ�tes broadcast d'�cho ICMP         [OK]"
else
        echo "  - 5 - Ignore les requ�tes broadcast d'�cho ICMP         [FAILED]"
fi

# --- V�rification de la provenance des paquets, et d�truit ceux venant d'une
# --- interface par laquelle il n'auraient pas du arriver (�vite le spoofing).
# ----------------------------------------------------------------------------
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
        for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
        echo "1" > $i;
        done
        echo "  - 6 - Activation des filtres contre le spoofing         [OK]"
else
        echo "  - 6 - Activation des filtres contre le spoofing         [FAILED]"
fi

# --- D�sactivation des packets de source de routage.
# ---------------------------------------------------
if [ -e /proc/sys/net/ipv4/conf/all/accept_source_route ]; then
        for i in /proc/sys/net/ipv4/conf/*/accept_source_route; do
                echo "0" > $i;
        done
        echo "  - 7 - D�sactivation des sources de routage              [OK]"
else
        echo "  - 7 - D�sactivation des sources de routage              [FAILED]"
fi

# --- Proctection contre le "SYN Flooding"
# ----------------------------------------
if [ -e /proc/sys/net/ipv4/tcp_syncookies ]; then
        echo "1" >/proc/sys/net/ipv4/tcp_syncookies
        echo "  - 9 - Protection contre le SYN Flooding                 [OK]"
else
        echo "  - 9 - Protection contre le SYN Flooding                 [FAILED]"
fi

########################
# Chargement des modules
########################

/sbin/modprobe ip_conntrack_ftp

######################################
# Configuration des r�gles de filtrage
######################################

# --- R�initialisation de 'NETFILTER' ---
# ---------------------------------------
# On vide les trois tables existantes
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
echo "  Les 3 tables existantes sont vide                               [OK]"

# On efface les cha�nes d�finies par l'utilisateur
$IPTABLES -X
echo "  Les cha�nes d�finies par l'utilsateur sont effac�es             [OK]"

# D�finition de la strat�gie (police) par d�faut (rien ne passe!) des cha�nes 
compil�es.
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
echo "  La strat�gie par d�faut est appliqu�e (rien ne passe!!!)        [OK]"

# --- Nouvelle cha�ne - Accepter les paquets ICMP
# -----------------------------------------------
$IPTABLES -N accepte-icmp
$IPTABLES -F accepte-icmp
$IPTABLES -A accepte-icmp -p icmp --icmp-type ping -j ACCEPT
$IPTABLES -A accepte-icmp -p icmp --icmp-type pong -j ACCEPT
echo "  D�finition d'une nouvelle cha�ne: 'accepte-icmp'                [OK]"

# --- Nouvelle cha�ne - V�rification des paquets
# ----------------------------------------------
$IPTABLES -N verification
$IPTABLES -F verification
# Supprime les paquets dont tous les drapeaux sont position�s ou nul
$IPTABLES -A verification -p tcp --tcp-flags ALL ALL -j DROP
$IPTABLES -A verification -p tcp --tcp-flags ALL NONE -j DROP
echo "  D�finition d'une nouvelle cha�ne: 'verification'                [OK]"

# --- Configuration de la cha�ne FORWARD
# --------------------------------------
# Tous ce qui vient du r�seau interne doit avoir une adresse de ce r�seau!
$IPTABLES -A FORWARD -i $I_Int -s ! $Res_Int -j DROP
# Les paquets relatifs � une connection �tablie peuvent passer
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
echo "  D�finition de la cha�ne 'FORWARD'                               [OK]"

# --- Paquets � destination du 'FIREWALL'.
# --- Nouvelles cha�nes - Paquets en entr�e sur les interfaces r�seaux.
# ---------------------------------------------------------------------
# Cr�ation des nouvelles cha�nes
$IPTABLES -N in-externe                          # Ajout d'une nouvelle r�gle
$IPTABLES -F in-externe                          # On efface son contenu
$IPTABLES -A in-externe -j LOG --log-level error --log-prefix "[in-externe]:"
$IPTABLES -A in-externe -j DROP

$IPTABLES -N in-interne
$IPTABLES -F in-interne
$IPTABLES -A in-interne -p icmp -s $Res_Int -j accepte-icmp
$IPTABLES -A in-interne -p tcp -s $Res_Int --dport $Port_Ssh -j ACCEPT
$IPTABLES -A in-interne -j LOG --log-level error --log-prefix "[in-interne]:"
$IPTABLES -A in-interne -j DROP
echo "  Cr�ation des nouvelles cha�nes d'entr�s de paquets              [OK]"

# Mise en place des nouvelles r�gles d'entr�e de paquets
$IPTABLES -A INPUT -i $I_Int -j in-interne
$IPTABLES -A INPUT -i $I_Ext -j in-externe
echo "  Mise en place des nouvelles r�gles d'entr�e de paquets          [OK]"

# --- Paquets au d�part du 'FIREWALL'.
# --- Nouvelles cha�nes - Paquets en sortie sur les interfaces r�seau.
# --------------------------------------------------------------------
# Cr�ation des nouvelles r�gles
$IPTABLES -N out-externe                         # Ajout d'une nouvelle r�gle
$IPTABLES -F out-externe                         # On efface son contenu
$IPTABLES -A out-externe -p icmp -j accepte-icmp
$IPTABLES -A out-externe -j LOG --log-level error --log-prefix 
"[out-externe]:"
$IPTABLES -A out-externe -j DROP
$IPTABLES -N out-interne
$IPTABLES -F out-interne
$IPTABLES -A out-interne -p icmp -d $Res_Int -j accepte-icmp
$IPTABLES -A out-interne -p tcp -d $Res_Int -m state --state 
ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A out-interne -j LOG --log-level error --log-prefix 
"[out-interne]:"
$IPTABLES -A out-interne -j DROP
echo "  Cr�ation des nouvelles r�gles de sortie de paquets              [OK]"

#Mise en place des nouvelles r�gles de sortie de paquets
$IPTABLES -A OUTPUT -o $I_Int -d $Res_Int -j out-interne
$IPTABLES -A OUTPUT -o $I_Ext -j out-externe
echo "  Application des nouvelles r�gles de sortie de paquets           [OK]"

# --- Redirection des paquets
# ---------------------------
# Cr�ation des nouvelles r�gles
$IPTABLES -N externe-interne
$IPTABLES -F externe-interne
$IPTABLES -A externe-interne -p icmp -j accepte-icmp
$IPTABLES -A externe-interne -p udp --sport $Port_Dns -d $Res_Int --dport \ 
$Port_Dns -j ACCEPT
$IPTABLES -A externe-interne -p tcp ! --syn --sport $Port_Dns -d $Res_Int \ 
--dport $Port_Dns -j ACCEPT
$IPTABLES -A externe-interne -p tcp ! --syn --sport $Port_Pop3 -d $Res_Int \
-j  ACCEPT
$IPTABLES -A externe-interne -j LOG --log-level error --log-prefix \ 
'[externe-interne]:'
$IPTABLES -A externe-interne -j DROP
echo "          R�gles Externe -> Interne                               [OK]"
$IPTABLES -N interne-externe
$IPTABLES -F interne-externe
$IPTABLES -A interne-externe -p icmp -j accepte-icmp
$IPTABLES -A interne-externe -p udp -s $Res_Int --dport $Port_Dns -j ACCEPT
$IPTABLES -A interne-externe -p tcp -s $Res_Int --dport $Port_Dns -j ACCEPT
$IPTABLES -A interne-externe -p tcp -s $Res_Int --dport $Port_Smtp -j ACCEPT
$IPTABLES -A interne-externe -p tcp -s $Res_Int --dport $Port_Pop3 -j ACCEPT
$IPTABLES -A interne-externe -p tcp -s $Res_Int --dport $Port_Http -j ACCEPT
$IPTABLES -A interne-externe -j LOG --log-level error --log-prefix \ 
'[interne-externe]:'
$IPTABLES -A interne-externe -j DROP
echo "          R�gles Interne -> Externe                                [OK]"
echo "  D�finition des nouvelle r�gles de redirection de paquets        [OK]"

# Mise en place des nouvelles r�gles de redirection
$IPTABLES -A FORWARD -i $I_Int -o $I_Ext -s $Res_Int -j interne-externe
$IPTABLES -A FORWARD -i $I_Ext -o $I_Int -d $Res_Int -j externe-interne
echo "  Mise en place des nouvelles r�gles de redirection de paquets    [OK]"

# --- Configuration de la translation de source
# --------------------------------------------
$IPTABLES -t nat -A POSTROUTING -o $I_Ext -j SNAT --to $IP_Frw_Ext
echo "  La translation de source est appliqu�e                          [OK]"

echo "  -----------------------------------------"
echo "  -- Fin d'pplication des r�gle du firewall"
echo "  -----------------------------------------"

Vous souhaitez acquerir votre Pack ou des Services MandrakeSoft?
Rendez-vous sur "http://www.mandrakestore.com";

Répondre à