Académique Documents
Professionnel Documents
Culture Documents
Introduction
_Le firewall est configur sous forme de script et une succession de rgles iptables et
ip6tables
_Ensuite on applique la stratgie globale sur les 3 tables INPUT, FORWARD et OUTPUT.
_On bloque tout le trafic sur les tables INPUT et FORWARD et on autorise le trafic sur la table
OUTPUT. Donc le serveur communique vers lextrieur sans problme mais rien ne rentre.
_Donc on doit tout faire en double. Et surtout en double !!! Chaque rgle, chaque stratgie
sera crite deux fois pour chaque type dIP.
Car on peut construire le meilleur Firewall, sil ne tient pas compte dIPV6, nimporte qui
avec une IP en v6 passera compltement travers toutes les rgles dfinies en IPV4 !
Table NAT (Network Address Translation) : Table utilise pour la translation d'adresse
ou la translation de port.
Il a 2 types de chanes# : PREROUTING qui permet de spcifier l'arrive du pare-
feu et la chane POSTROUTING qui permet de spcifier la sortie du pare-feu . Il
existe 3 targets (ou cibles) : DNAT*, SNAT* et MASQUERADE*.
Table FILTER : C'est la table par dfaut lorsque l'on en spcifie pas.
Cette table contient toutes les rgles de filtrage, il existe 3 types de chanes : FORWARD
pour les paquets passant par le pare-feu, INPUT pour les paquets entrant et OUTPUT
pour les paquets sortants. Les cibles disponibles sont : ACCEPT, DENY, DROP, REJECT
Table Mangle : C'est la table qui contient les rgles pour la modification de paquets.
Dans le cas ou les options iptables du noyau ont t compiles en modules, il est ncessaire
de charger ces modules avant de pouvoir utiliser iptables :
# modprobe ip_tables
# modprobe ip_nat_ftp
# modprobe ip_nat_irc
# modprobe iptable_filter
# modprobe iptable_mangle
# modprobe iptable_nat
Si on a besoin de pouvoir rediriger (forward) les paquets IP arrivant sur un interface rseau
(connecte par exemple Internet) vers une autre interface rseau (connecte par exemple
au rseau local), il sera ncessaire, dans la plupart des cas, d'excuter cette commande :
# Les IPs
IPPoste1=xx.xx.xx.xx
IPPoste2=xx.xx.xx.xx
# raw : C'est l'endroit o le traage de connexion prend place pour les paquets
gnrs # localement. Vous pouvez marquer les connexions pour qu'elles ne
soient pas traces par # exemple.
$IP6T -t filter -F
$IP6T -t filter -X
# Il n'y a pas de NAT en IPV6
#$IP6T -t nat -F
#$IP6T -t nat -X
$IP6T -t mangle -F
$IP6T -t mangle -X
# Loopback
$IPT -t filter -A INPUT -i lo -j ACCEPT
$IPT -t filter -A OUTPUT -o lo -j ACCEPT
#
$IP6T -t filter -A INPUT -i lo -j ACCEPT
$IP6T -t filter -A OUTPUT -o lo -j ACCEPT
# DNS:53
# /!\ Il faut autoriser le DNS AVANT de dclarer des hosts sinon
pas de rsolution de nom possible
$IPT -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
$IPT -t filter -A INPUT -p udp --dport 53 -j ACCEPT
#
$IP6T -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
$IP6T -t filter -A INPUT -p udp --dport 53 -j ACCEPT
#
echo "firewall started [OK]"
}
$IP6T -t filter -F
$IP6T -t filter -X
#$IP6T -t nat -F
#$IP6T -t nat -X
$IP6T -t mangle -F
$IP6T -t mangle -X
# remet la stratgie
$IPT -t filter -P INPUT ACCEPT
$IPT -t filter -P OUTPUT ACCEPT
$IPT -t filter -P FORWARD ACCEPT
#
$IP6T -t filter -P INPUT ACCEPT
$IP6T -t filter -P OUTPUT ACCEPT
$IP6T -t filter -P FORWARD ACCEPT
#
echo "firewall stopped [OK]"
}
case "$1" in
start)
do_start
# quitte sans erreur
exit 0
;;
stop)
do_stop
# quitte sans erreur
exit 0
;;
restart)
do_stop
do_start
# quitte sans erreur
exit 0
;;
status)
do_status
# quitte sans erreurs
exit 0
;;
*)
# Si on ne tape ni "start" ni "stop"... on affiche une
erreur
echo "Usage: /etc/init.d/firewall
{start|stop|restart|status}"
# quitte le script avec un etat "en erreur"
exit 1
;;
esac
chmod +x /etc/init.d/firewall
Pour autoriser le ssh, il faut prciser le port 22; pour autoriser l'irc, le port 6667 (ou celui
que vous utilisez pour vous connecter votre serveur); pour le smtp (envoi d'emails), le
port 25; pour le pop3 (rception d'emails), le port 110; pour le imap (rception d'emails),
les ports 143 et 220 (imap3) ; pour le cvs, le port 2401 ; pour le https, le port 443. De
manire gnrale, le numros de port se trouvent dans /etc/services.
Pour le ftp c'est un peu plus complexe. D'abord, il faut charger le module :
ip_conntrack_ftp (c'est lui qui suit - track en anglais - les connexions ftp) et, si
vous natez (en utilisant le masquerading par exemple) vos connexions ftp vers
d'autres postes le module : ip_nat_ftp :
modprobe ip_conntrack_ftp
# ventuellement : modprobe ip_nat_ftp
Cela pour que la connexion puisse s'tablir. Ensuite (et c'est la qu'on a besoin de
ip_conntrack_ftp) :
Pour que serveur puisse tablir la connexion pour les donnes (en mode actif). Et
enfin :
Application faire
Pour cet exemple, le pare-feu aura la connexion Internet (interface eth2) et disposera de
2 pattes sur des rseaux privs (eth0 et eth1) :
il fait office de proxy sur le port 3128 pour un rseau qui aura ainsi un accs internet
et une DMZ* ("zone dmilitarise") sur laquelle il y a un ensemble de serveurs
disponibles de l'extrieur dont un serveur web qui a pour adresse 192.168.1.2
coutant sur le port 80 en TCP.