Mise en place du firewall

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. 

 

Suite