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"