Introduction
Un pare-feu est
une structure destinée à empêcher un feu de la traverser.
Les pare-feux Internet sont conçus pour isoler votre réseau
local privé des flammes de l'Internet, ou de protéger la
pureté des membres de votre réseau local en leur interdisant
l'accès aux tentations démoniaques de l'Internet.
Il existe cependant
différentes sortes de parefeu, dans notre cas nous utiliserons un
parefeu filtrant .
Explication:
Les données
qui circulent sur le réseau sont découpées en morceaux
qu'on appelle paquet, un paquet est constitué d'une entête
qui contient des informations sur le paquet (émetteur, destinataire,
taille des données, ...) et des données elle-mêmes
(corps du paquet). Sur le réseau on trouve des filtres de paquets,
c'est à dire qu'à partir de certains critères, quand
le paquet leur arrive, ils peuvent décider de son sort, soit en
le laissant passer (accept), en le supprimant (deny) ou encore en le supprimant
et en avertissant l'émetteur que le paquet a été rejeté
(reject).
Ipchains est un outil disponible sur linux qui permet
de filtrer les paquets, en fait celui-ci est plus ou moins intégré
au noyau (supérieur à 2.2.X), pour les noyaux plus anciens
on utilise ipfwadm, on verra ça plus tard.
Ipchains:
Le noyau
commence avec trois listes de règles : ces listes sont appellées
chaînes de protection ou juste chaînes. Ces trois chaînes
sont appellées input (entrée), output (sortie) et forward
(transmission). Lorsqu'un paquet arrive (disons, par une carte Ethernet),
le noyau utilise la chaîne input pour décider de son destin.
S'il survit à ce passage, alors le noyau décide où
envoyer le paquet par la suite (ceci est appelé routage). S'il est
destiné à une autre machine, il consulte alors la chaîne
de transmission. Enfin, juste avant que le paquet ne ressorte, le noyau
consulte la chaîne de sortie.
Une chaîne est une vérification de règles.
Chaque règle dit `si l'entête de ce paquet ressemble à
ceci, alors voilà quoi faire de ce paquet'. Si la règle ne
vérifie pas le paquet, alors la règle suivante dans la chaîne
est consultée. Enfin, s'il n'y a plus de règles à
consulter, alors le noyau regarde la chaîne police pour décider
ce qu'il doit faire. Dans un système orienté sécurité,
cette police dit généralement au noyau de rejeter ou de refuser
le paquet.
Syntaxe de ipchains:
Il y a plusieurs
choses différentes que vous pouvez faire avec ipchains. Tout d'abord
les opérations servant à gérer les chaînes entières.
Vous commencez avec trois chaînes intégrées input,
output et forward que vous ne pouvez effacer.
1. Créer une nouvelle chaîne (-N) ;
2. Supprimer une chaîne vide (-X) ;
3. Changer la police d'une chaîne intégrée (-P) ;
4. Lister les règles d'une chaîne (-L) ;
5. Supprimer les règles d'une chaîne (-F) ;
6. Mettre à zéro les compteurs de paquets et d'octets sur
toutes les règles d'une chaîne (-Z).
Il y a plusieurs
moyens pour manipuler les règles à l'intérieur d'une
chaîne :
1. Ajouter une nouvelle règle à une chaîne (-A) ;
2. Insérer une nouvelle règle à une position quelconque
de la chaîne (-I) ;
3. Remplacer une règle à une position quelconque de la chaîne
(-R) ;
4. Supprimer une règle à une position quelconque de la chaîne
(-D) ;
5. Supprimer la première règle vérifiée dans
la chaîne (-D).
Il faut aussi
donner le protocole sur lequel sera appliqué la règle (tcp,
udp, icmp, ..), et également ensuite spécifier les
machines ou les réseaux sur lesquels on veut que soit appliquées
les règles définies. Les machines en destination sont –d
et en source sont –s. Dans notre cas, le réseau sera d’adresse :
192.9.101.0/24, on met /24 à la fin pour prendre en compte le masque
de sous réseau 255.255.255.0, en fait, le chiffre 24 signifie que
les 24 premiers octets de l’adresse sont figés et que seul
varie les 8 restants, donc on peut avoir des adresses allant de 192.9.101.1
à 192.9.101.254.
Mise en place du firewall
Avant toute chose,
il faut savoir ce que l’on veut, quel protocole, quels services sur quelle
machine, etc... En bref, qu’est ce qu’on autorise et qu’est ce qu’on rejète
? En ce qui concerne les protocoles TCP ou UDP, il existe une multitude
de services que l’on peut activer ou rejeter selon le cas par l’intermédaire
de leur port. En fait, chaque service est défini par un port particulier.
Pour avoir la liste de ces services et de leur port, il faut éditer
le fichier : /etc/services.
/etc/services (extrait)
tcpmux 1/tcp #TCP port service multiplexer
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp user
daytime 13/tcp
daytime 13/udp
netstat 15/tcp
qotd 17/tcp quote
msp 18/tcp #message send protocol
msp 18/udp #message send protocol
......
......
Ainsi, pour sécuriser
au maximum le réseau, il faut rejeter le plus de services possible
et ne garder que l’essentiel. Dans notre cas, on va conserver les services
suivant :
ftp port 20
ftp-data port 21
telnet port 23
smtp port 25
http port 80
pop2 port 109
pop3 port 110
Ceci afin de permettre,
entre autre, le transfert des fichiers au sein du réseau grâce
au service ftp, l’accés aux machines distantes grâce au telnet,
le système de messagerie électronique grâce aux services
smtp, pop2 et pop3 ainsi qu’à l’intranet et à internet.
Ainsi, pour mettre
en place un firewall filtrant à l’aide d’ ipchains, il faut écrire
un script contenant toutes les règles que l’on a définies
pour protéger notre réseau. Pour cela il faut créer
un nouveau fichier que j’appelle : rc.firewall dans le répertoire
contenant tous les scripts de démarrage /etc/rc.d/init.d. Il faut
ensuite que ce script soit activé au démarrage, il faut aller
dans l’ Editeur de Syst Init et l’on place rc.firewall à la
position 98 du runlevel 3, dans ce cas le script est pris en compte à
chaque redémarrage de l’ordinateur.
/etc/rc.d/init.d/rc.firewall
# !/bin/sh
#CONFIGURATION DU FIREWALL
#INITIALISATION
#Adresse du proxy
IPPROX= « 192.168.10.4 »
#Adresses du réseau
ADNET= « 192.9.101.0/24 »
#Toutes les adresses IP possibles
ANY= « 0.0.0.0/0 »
#LES REGLES DE LA CHAINE INPUT
#On supprime tout d’abord toutes les règles en entrée
ipchains –F input
#On rejete tout ce qui veut entrer
ipchains –P input REJECT
#On accepte les entrées à partir du proxy
ipchains –A input –d $IPPROX –jACCEPT
#On accepte le service telnet en entrée
ipchains –A input –p tcp –s $ANY 23 –d $ADNET –jACCEPT
ipchains –A input –p tcp –s $ADNET –d $ANY 23 –jACCEPT
#On accepte le service smtp en entrée
ipchains –A input –p tcp –s $ANY 25 –d $ADNET –jACCEPT
ipchains –A input –p tcp –s $ADNET –d $ANY 25 –jACCEPT
#On accepte le service http en entrée
ipchains –A input –p tcp –s $ANY 80 –d $ADNET –jACCEPT
ipchains –A input –p tcp –s $ADNET -d $ANY 80 –jACCEPT
#On accepte les services pop2 et pop3 en entrée
ipchains –A input –p tcp –s $ANY 109:110 –d $ADNET –jACCEPT
ipchains –A input –p tcp –s $ADNET –d $ANY 109:110 –jACCEPT
#On accepte le protocole icmp en entrée
ipchains –A input –p icmp –s $ANY –d $ADNET –jACCEPT
ipchains –A input –p icmp –s $ADNET –d $ANY –jACCEPT
#LES REGLES DE LA CHAINE OUTPUT
#On supprime tout d’abord toutes les règles en entrée
ipchains –F output
#On rejete tout ce qui veut entrer
ipchains –P output REJECT
#On accepte les sorties à partir du proxy
ipchains –A output –s $IPPROX –jACCEPT
#On accepte le service ftp en sortie
ipchains –A output –p tcp –s $ADNET –d $ANY 20:21 –jACCEPT
ipchains –A output –p tcp –s $ANY 20:21 –d $ADNET -jACCEPT
#On accepte le service telnet en sortie
ipchains –A output –p tcp –s $ADNET –d $ANY 23 –jACCEPT
ipchains –A output –p tcp –s $ANY 23 –d $ADNET -jACCEPT
#On accepte le service smtp en sortie
ipchains –A input –p tcp –s $ADNET –d $ANY 25 –jACCEPT
ipchains –A input –p tcp –s $ANY 25 –d $ADNET –jACCEPT
#On accepte le service http en sortie
ipchains –A input –p tcp –s $ADNET -d $ANY 80 –jACCEPT
ipchains –A input –p tcp –s $ANY 80 –d $ADNET –jACCEPT
#On accepte les services pop2 et pop3 en sortie
ipchains –A input –p tcp –s $ADNET –d $ANY109:110 –jACCEPT
ipchains –A input –p tcp –s $ANY 109:110 –d $ADNET –jACCEPT
#On accepte le protocole icmp en sortie
ipchains –A input –p icmp –s $ADNET –d $ANY –jACCEPT
ipchains –A input –p icmp –s $ANY –d $ADNET –jACCEPT
#LES REGLES DE LA CHAINE FORWARD
#On supprime tout d’abord toutes les règles
ipchains –F forward
#On empeche la transmission
ipchains –P forward DENY
#On accepte la transmission vers l’addresse du proxy
ipchains –A forward –s $IPPROX –jACCEPT
ipchains –A forward –d $IPPROX –jACCEPT
#On accepte la transmission à l’intérieur du réseau
ipchains –A forward –s $ADNET –jACCEPT
ipchains –A forward –d $ADNET –jACCEPT
#On active le masquerading, l’adresse IP de l’expéditeur
#est cachée
ipchains –A forward –s $ADNET –jMASQ
ipchains –A forward –d $ADNET –jMASQ
#On refuse toutes les autres sortes de transmission
ipchains –A forward –s $ANY –d $ANY –jREJECT
Les tests
Une fois ce script
mis en place, il faut tester si ce firewall fonctionne bien comme on l’a
configurer. Pour cela, on utilise la fonction ping qui doit normalement
fonctionner que ce soit à partir du réseau de la radiologie
ou du réseau de l’hôpital, on essaie également le telnet
dans les deux réseaux ainsi que le ftp qui ne doit fonctionner que
vers l’extérieur du réseau mais pas en direction de celui
ci, on teste également la connexion à internet.
Depuis notre réseau, on fait :
ping 192.9.101.7
ping 10.1.12.2
telnet 192.9.101.7
telnet 101.12.2
et l’on teste ensuite la connexion internet (http)
ainsi que le système de transfert de fichier (ftp) à l’aide
de Netscape à partir d’un poste client.
Depuis le réseau
de l’hopital, on fait :
ping 192.9.101.7
telnet 192.9.101.7
Et l’on essaie
de transférer un fichier appartenant au réseau de la radiologie
à l’aide de ftp, cela ne doit pas fonctionner en principe.
Au cas où tous
les tests précédents sont passés avec succés,
on peut en conclure que le firewall fonctionne bien.
|