Les Firewalls

Cette documentation est purement à but éducatif, je ne pourrais pas être tenu responsable de son utilisation. De plus si vous avez des remarques à me faire, elles seront les bienvenues ! J'invite tous les experts de sécurité à me contacter. En effet j'aurais quelques questions à poser, quelques théories à vérifier et quelques files à demander. Sur ce, je vous laisse à mon aide en espérant qu'elle étanche un peu votre soif de savoir !

Présentation

1/ Objectif du firewall.

Les firewalls ont obtenu une grande renommée en matière de sécurité sur Internet. Ils ont deux objectifs  :

  • Protéger le réseau interne contre les tentatives d'intrusion provenant de l'extérieur. (extérieur vers intérieur)
  • Limiter et vérifier les connexions provenant du réseau interne vers l'extérieur. (intérieur vers extérieur)

    2/ Fonctionnement du Firewall

    Le principe du firewall est relativement simple. A l'origine un firewall est un système comportant deux interfaces réseau. (Je vous passe l'explication bidon du mot qui en fait nous vient de l'automobile).

    Remarque : Il se peut que l'isolement de la totalité du réseau ne soit pas nécessaire. A ce moment, le réseau à sécurisé est relié au sous réseau par un FW et le sous réseau est relié à Internet par un routeur.

    Pour la suite on prendra le premier cas, celui où l'on souhaite protéger tout le réseau local. On a en fait une interface interne reliée au réseau local et une interface externe reliée à internet. L'ordinateur firewall peut atteindre à la fois le réseau protégé et internet. Le réseau protégé ne peut atteindre l'internet et internet ne peut toucher le réseau protégé.

    3/ Principale différence entre un FW et un routeur IP.

    Le routeur prend en charge les paquets jusqu'à la couche IP. Le routeur transmet chaque paquet en fonction de l'adresse de destination du paquet et de la route vers la destination précisée dans la table de routage. Par contre le firewall ne transmet pas les paquets. Le pare feu accepte les paquets et les prend en charge jusqu'à la couche application .

    Les différents types

    1/ Filtres de paquet.

    Un firewall de ce type inspecte tous les paquets qu'il recoie et regarde s'ils correspondent aux règles préalablement établis. S'il respecte les règles il est accepté sinon il est rejeté. Les critères des règles peuvent être par exemple l'adresse IP, les ports sources et destination contenus dans les paquets.

    2/ Les Proxies.

    Lorqu'un firewall de type proxy est utilisé sur un réseau, il n'y a aucune connexion directe entre les systèmes du réseau local et le réseau internet. Les machines internes se connectent en fait au firewall pour lui demander un service. Après le FW se charge de relayer la requête au serveur internet puis de renvoyer la réponse au client interne.

    3/ Les hybrides.

    Ils tentent de concilier le meilleur des deux technologies précédentes. Je ne sais pas grand chose dessus mais je sais qu'il existe la technologie Stateful Inspection implantée dans Checkpoint Firewall-1. Voilà tout ce que je peux dire ! (ok c pas grand chose)

    Filtre de paquet

    La technologie de filtre de paquets est incluse dans le noyau de Linux. Le filtre doit agir dans la pile IP du système. Pour utiliser cette technique vous allez devoir une fois de plus recompiler le noyau (Youpi vous allez bien vous marrez) et répondre YES aux questions suivantes :

    IP : forwarding/gatewaying (CONFIG_IP_FORWARD)               YES
    IP : firewalling (CONFIG_IP_FIREWALL)                        YES
    IP : firewall packet logging (CONFIG_IP_FIREWALL_VERBOSE)    YES
    

    Le noyau compilé, installé, redémarré, vous allez être en mesure de configuré le Firewall. Pour cela on va utilisé ipfadm. La syntaxe générale est :

    ipfwadm -A commande paramètres [options]
    ipfwadm -I commande paramètres [options]
    ipfwadm -O commande paramètres [options]
    ipfwadm -F commande paramètres [options]
    ipfwadm -M [-l ou -s] [options]
    

    Comme vous venez de le voir il y a cinq catégories :

    A configuration de l'accounting (compatibité des paquets atteignant le système) .
    I règles à appliquer aux paquets TCP/IP en entrée .
    O règles à appliquer aux paquets TCP/IP en sortie .
    F règles à appliquer aux paquets TCP/IP à router d'une interface à une autre .
    M administration de l'IP Masquerading .

    Perso je pourrais vous parler que des categories I , O , F , M. ipfwadm possède de très nombreuses options que je vais pas décrire ici par ce j'ai pas envie ! Lisez la doc linux .

    Avant de créer toute règles de filtre IP , va falloir définir des règles de sécurité. Par exemple pour ma machine on va dire :

    Toute connexion du réseau internet vers une machine interne est interdite.
    De l'extérieur, on doit avoir accès au serveur de messagerie et au service DNS du firewall .

    On va dire qu'on a un réseau interne de type 193.1.1.0/24 et qu'on est relié à un sous réseau de type 193.1.2.0/24 (entre le FW et le routeur). Le FW ayant pour adresse 193.1.1.254 en interne (eth0) et 193.1.2.1 en externe (eth1).

    Je vais maintenant dire quelques uns des filtres que j'applique :

    -ipfwadm -O -p accept
    La règle par défaut des paquets en sortie est accept (-p représente l'action par défaut)

    - ipfwadm -I -p deny
    La règle par défaut des paquets en entrée est deny.

    -ipfwadm -F -p deny
    La règle par défaut des paquets à router en entrée est deny.

    -ipfwadm -F -a accept -S 193.1.1.0/24 -D0/0 -P tcp
    Autorisation pour router tous les paquets TCP provenant de l'extérieur.

    -ipfwadm -I -a deny -S 193.1.1.0/24 -D0/0 -W eth1
    Cette commande sert à lutter contre le SPOOFING (changer son adresse IP) en effet cette règle dit que tous les paquets qui rentrent dans le sous réseau sécurisé et qui ont une adresse source correspondant à une adresse du sous réseau (ce qui n'est pas logique) doivent être rejetés !

    -ipfawadm -I -a accept -P udp -S0/0 -D 193.2.1.1 53

    -ipfawadm -I -a accept -P tcp -S0/0 -D 193.2.1.1 53
    Ces mesures disent que les accès au serveur DNS (port 53) sont accessible de n'importe où.

    -ipfawadm -I -a accept -P udp -S0/0 -D 193.2.1.1 25
    Accès au serveur SMTP du firewall de n'importe où. 

    Malheureusement on retrouve là le plus grand inconvenient des FW. En effet dans l'état actuelle système on ne pourra pas faire fonctionner un client FTP du réseau interne avec un serveur situé à l 'extérieur. Le protocole FTP prévoit l'établissement d'une connexion du serveur FTP vers le client (du port 20 -> port > 1024)

    Mais il y a des solutions.

    - Utiliser le client FTP en mode passif (A ce moment le client établit une connexion vers le serveur ftp)
    - Utiliser un proxy (voir section suivante) installé sur le FW qui relaiera les requêtes de l'intérieur vers extérieur.
    - Utiliser l'IP masquerading.
    - Ou alors rajouter cette règle ipfwadm -F -a accept -P tcp -S0/0 20 -D 193.1.1.0/24 1024-65535

    Remarque intéressante : Si vous tombez sur un système avec une règle de ce type, vous pouvez en profitez, en effet cette règle expose les services du réseau interne qui écoutent sur un port >1024. A partir de là, vous avez plus qu'a faire partir un paquet du port 20 de votre machine vers un service. Beaucoup de services tournent sur ce port (serveurs X window...).

    Note : n'oubliez pas de configurer les clients de telle façon que le routeur par défaut soit le FW.

    IP Masquerading

    C'est une technique de plus en plus utilisée. Elle consiste à masquer totalement l'adressage IP du réseau interne (On peut donc utiliser des adresses IP privées). Ainsi chaque paquet qui traverse le firewall est modifié pour faire croire qu'il n'y a qu'un seul système connecté. Tout le réseau interne partage ainsi l'adresse IP (externe) du Firewall.

    Installation :

    Bon beh va falloir recompiler le noyau (c'est la fête !) et répondre YES aux questions :

    IP : forwarding/gatewaying (CONFIG_IP_FORWARD)		
    IP : firewalling (CONFIG_IP_FIREWALL)				
    IP : firewall packet logging (CONFIG_IP_FIREWALL_VERBOSE)	
    IP : masquerading (CONFIG_IP_MASQUERADE)
    IP : ICMP masquerading (CONFIG_IP_MASQUERADE_ICMP)
    

    (Répondez oui que si le FW doit router les paquets ICMP)

    Maintenant vous allez être en mesure d'utiliser une autre des 5 options d'ipfwadm : l'option -M. Pour cela utiliser l'option -l qui liste les connexions qui utilisent l'IP masquerading et -s qui fixe le timeout. Pour autoriser le masquerading il faudra les règles suivantes :

    - ipfwadm -F -p deny
    - ipfwadm -F -a masquerade -S 192.10.10.0/24 -D0/0
    

    V Proxy

    D'après ce que j'ai lu et ce qu'on m'a dit, la meilleure solution pour utiliser une machine Linux en proxy consiste à utiliser l'ensemble d'outils qu'offre TIS. Ils fournissent un package connu sous le nom de FW toolkit . Vous pouvez le telecharger sur le site Web de TIS

    http://www.tis.com/docs/products/fwtk/index.html

    Installation

    Bon comme vous allez être un Proxy, il va falloir forcément désactiver la fonction de routeur de Linux. Pour cela on recompile le noyau en répondant NO au forwarding/gatewaying (CONFIG_IP_FORWARDING). Vous n'êtes pas obligé de mettre cette option mais si vous ne le faites pas, les machines du réseau interne seraient directement accessibles de l'extérieur à travers les possibilités du FW.

    Bon vous compilez les outils TIS en suivant les instructions.

    Configuration

    La table netperm reside dans le fichier /usr/local/etc/netprem-table. Cette table décrit la configuration principale de tous les composants du Trusted Firewall Toolkit. Quand une des applications est lancée, elle va chercher sa config dans cette table.

    Description

    Netacl : Cette application permet de donner l'accès aux différents services TCP. Ce programme se démarre depuis le super-démon inetd. Si par exemple on ajoute au fichier /etc/inetd.conf :

    telnet stream tcp nowait root /usr/local/etc/netacl telnetd.

    Avec ca quand une requête atteint le port ftp du systeme, netacl se démarre avec comme paramètre telnetd. Mais avant que le demon ne soit lancé, le logiciel vérifie que la requête est valide selon la table. Par exemple si je veux autoriser aux personnes de mon réseau interne de se connecter au telnet du FW faudra ajouter :

    netacl-telnetd : permit-hosts 193.1.1.* -exec /usr/sbin/in.telnetd
    

    (note 193.1.1.* équivaut à 193.1.1.0/24)

    Après on a aussi tous les logiciels qui implémentent un relais pour les services. En fait le client fait d'abord une requête au service du FW puis, de là, fait une requête pour se connecter au site extérieur. Selon les règles du proxy cette connexion sera refusée ou acceptée.

    tn-gw : relais pour le service telnet.
    ftp-gw : relais pour le service ftp.
    rlogin-gw : relais pour le prowy rlogin.
    http-gw : relais pour client HTTP et gopher. (Pratique pour empêcher certaines applications Java)...
    

    Il y en a d'autres mais je ne les connais pas toutes. Donc pour plus de renseignements, allez voir vous même !

    Exemple de config de /usr/local/etc/netperm-table :

    tn-gw : deny-hosts * -dest 193.1.1.*
    Interdiction a ces machines d'accéder au service telnet.

    tn-gw : permit-hosts 193.1.1.25
    Autorise la machine 193.1.1.25 a accéder au service telnet.

    Pas compliqué et je vous jure que c'est incroyable tout ce que l'on peut faire et les espèces de trous dans la sécurité que ca peut faire !

    Assainissement et protection du Firewall

    Bon vous l'avez compris, quand on veut attaquer un système qui possède un FW il n'y a pas 36 choix. Il faut attaquer le FW. Alors reste plus qu'à trouver les points faibles et donc il faut vérifier la protection de cette machine. On va maintenant voir comment on assainie un Firewall.

    Premierement, regardez le fichier /etc/inet.conf. Ce fichier est ce qu'on appelle un "super-serveur". Il lance un tas de demons serveurs sur demande. Il contient la liste des services offerts. Il faut enlever tous les services qui ne sont pas parfaitement obligatoires comme NIS, NFS, rsh, rcp, netstat, systat, tftp, bootp et finger...

    NOTE qui peut faire gagner du temps : Il n'est pas nécessaire de tout désactiver. Pour désactiver un service, placez simplement un # devant. Ensuite envoyez un signal SIG-HUP au processus inetd, selon la syntaxe suivante : kill -HUP pid, ou pid est le numéro du processus inetd.(Pour avoir le PID si vraiment vous êtes débutant sous linux, faites ps -uax |grep inetd ). Cela force inetd a relire son fichier de configuration (inetd.conf) et a se relancer.

    Petite astuce :

    Si TFTP est ouvert, tentez le coup, ce protocol permet de transférer des fichiers comme ftp mais s'appuie sur le protocol UDP. Il est donc moins sur et ne peut servir que pour les fichiers de petite taille. Mais surtout il ne demande pas de MOT DE PASSE ET DE COMPTE UTILISATEUR ! Donc tout utilisateur qui a accès au port 69 a accès à tous les fichiers lisibles par le demon correspondant. Il y a peut être de bonnes infos à prendre .

    Pour la sécurité, il faut aussi bien évidemment supprimer tous les comptes utilisateurs inutiles. Il faut également supprimer tous les packages installés qui n'ont rien à faire sur un firewall comme X window, les services NFS et Samba, les jeux (ok c'est discutable pour le dernier) ...

    Exemple type de machine où on installe un firewall :

    Je vais prendre mon PC, un 166MMX, 32 Mo de Ram et une partition de 800 Meg pour Linux avec une connexion PPP à un fournisseur internet (ça je l'ai pas encore L) par un modem 36,6 kbps. Pour en faire un firewall, on ajoute une carte ethernet compatible NE2000. Il est alors connecté a trois autres PC. Et voilà un Firewall typique.

    Pour protéger le firewall (en effet c'est lui qui va se prendre dans la gueule toutes les attaques) il faut utiliser un filtre de paquet. Pour faire ca on recompile le noyau avec ces options :

    IP : forwarding/gatewaying (CONFIG_IP_FORWARD)               NO
    IP : firewalling (CONFIG_IP_FIREWALL)                        YES
    IP : firewall packet logging (CONFIG_IP_FIREWALL_VERBOSE)    YES
    

    On s'inspira des règles sur le filtrage des paquets exposé dans le III, notamment celle contre le spoofing !

    Bon là c'est tout, bientôt une nouvelle version de ce texte !
    Mon site: http://www.altern.org/trom - tromh@yahoo.com

    Trom, Linux.SA