Vous êtes sur la page 1sur 8

TP scurit rseaux et systmes informatiques 3-me anne LART

Sance 1 : Installation et configuration dun firewall sur Linux

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

selon les besoins, on peut ventuellement charger les modules suivants :

# 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 :

# echo 1 > /proc/sys/net/ipv4/ip_forward

afin de l'indiquer au noyau.

ISTIC Borj Cedria AU 2017/2018


TP scurit rseaux et systmes informatiques 3-me anne LART

Cration et configuration dun Firewall


1. Crer un fichier nomm firewall et placer le dans le dossier /etc/init.d.
2. Maintenant modifier le contenu du fichier selon les renseignements ci-
dessous :
#! /bin/sh
### BEGIN INIT INFO
# Provides: PersonalFirewall
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Personal Firewall
# Description:
### END INIT INFO

# Faire appel aux commandes de programme iptables IPV4 et IPV6


IPT=/sbin/iptables
IP6T=/sbin/ip6tables

# Les IPs
IPPoste1=xx.xx.xx.xx
IPPoste2=xx.xx.xx.xx

# Lancer les fonctions qui dmarre le firewall


do_start() {

# Efface toutes les rgles en cours. -F toutes. -X utilisateurs


$IPT -t filter -F
$IPT -t filter -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
# mangle : Chane principalement utilise pour modifier les paquets, i-e,
changement # de TOS, etc.
# nat : Cette chane permet de faire du NAT sur des paquets sortant du pare-feu

ISTIC Borj Cedria AU 2017/2018


TP scurit rseaux et systmes informatiques 3-me anne LART

# 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

# stratgie (-P) par dfaut : bloc tout l'entrant le forward et


autorise le sortant
$IPT -t filter -P INPUT DROP
$IPT -t filter -P FORWARD DROP
$IPT -t filter -P OUTPUT ACCEPT
#
$IP6T -t filter -P INPUT DROP
$IP6T -t filter -P FORWARD DROP
$IP6T -t filter -P OUTPUT ACCEPT

# 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

# Permettre une connexion ouverte de recevoir du trafic en


entre
$IPT -t filter -A INPUT -m state --state ESTABLISHED, RELATED -j
ACCEPT
#

ISTIC Borj Cedria AU 2017/2018


TP scurit rseaux et systmes informatiques 3-me anne LART

$IP6T -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j


ACCEPT

# ICMP depuis les ips autorises des serveur de monitoring d'OVH


$IPT -t filter -A INPUT -p icmp -s 37.187.37.250 -j ACCEPT
$IPT -t filter -A INPUT -p icmp -s 5.39.111.9 -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

# accepte tout d'une ip en TCP


$IPT -t filter -A INPUT -p tcp -s $IPMAISON -j ACCEPT
$IPT -t filter -A INPUT -p tcp -s $IPBUREAU -j ACCEPT

#
echo "firewall started [OK]"
}

# fonction qui arrte le firewall


do_stop() {

# Efface toutes les rgles


$IPT -t filter -F
$IPT -t filter -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
#

ISTIC Borj Cedria AU 2017/2018


TP scurit rseaux et systmes informatiques 3-me anne LART

$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]"
}

# fonction status firewall


do_status() {

# affiche les rgles en cours


clear
echo Status IPV4
echo -----------------------------------------------
$IPT -L -n -v
echo
echo -----------------------------------------------
echo
echo status IPV6
echo -----------------------------------------------
$IP6T -L -n -v
echo

ISTIC Borj Cedria AU 2017/2018


TP scurit rseaux et systmes informatiques 3-me anne LART

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

ISTIC Borj Cedria AU 2017/2018


TP scurit rseaux et systmes informatiques 3-me anne LART

;;
esac

Ensuite on rend le fichier excutable :

chmod +x /etc/init.d/firewall

Maintenant on peut le tester :

service firewall start


Pour regarder les rgles en cours :

service firewall status


Et pour larrter :

service firewall stop

Vous pouvez automatiser le dmarrage avec la commande suivante :

update-rc.d firewall defaults

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

Ensuite, il faut taper les commandes suivantes :

iptables -A INPUT -i ppp0 -p tcp --sport 21 -m state --state


ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --dport 21 -m state --state
NEW,ESTABLISHED -j ACCEPT

Cela pour que la connexion puisse s'tablir. Ensuite (et c'est la qu'on a besoin de
ip_conntrack_ftp) :

ISTIC Borj Cedria AU 2017/2018


TP scurit rseaux et systmes informatiques 3-me anne LART

iptables -A INPUT -i ppp0 -p tcp --sport 20 -m state --state


ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --dport 20 -m state --state
ESTABLISHED -j ACCEPT

Pour que serveur puisse tablir la connexion pour les donnes (en mode actif). Et
enfin :

iptables -A INPUT -i ppp0 -p tcp --sport 1024:65535 --dport


1024:65535 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --sport 1024:65535 --dport
1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT

Application faire

Nous allons mettre en place un pare-feu / proxy.

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.

La classe d'adresse IP 192.168.2.0 correspond au rseau interne sur l'interface eth1.


La classe d'adresse IP 192.168.1.0 correspond a la DMZ sur l'interface eth0.
L'interface de la connexion Internet est ppp0 sur l'interface eth2.

* DMZ, ou zone dmilitarise


Sous-rseau dans lequel des serveurs accessibles depuis internet sont en
adressage priv (classe d'adresse IP rserve comme 192.168.x.x) derrire un
pare-feu.

ISTIC Borj Cedria AU 2017/2018

Vous aimerez peut-être aussi