-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Firewall et Proxy Préface Dans ce texte, je vais tenter de vous expliquer le fonctionnement des firewalls. Ils servent à deux choses. Protéger le reseau interne contre les tentatives d'intruision venant de l'extérieur. Le principe du Firewall est très simple.A l'origine un firewall est un système comportant deux interfaces réseau. Pour la suite on prendra le premier cas , celui ou 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ège ne peut atteindre Internet et Internet ne peut toucher le réseau protège. Firewall et 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. Types de Firewalls Filtres de paquets 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 contenu dans les paquets. Les Proxy Lorsqu'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. Filtres de paquets 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 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 FW. 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 , vas 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 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é! -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 la vous avez plus qu'a fait partir un paquet du port 20 de votre machine vers un service . Beaucoup de services tournent sur ce port . Par exemple pour sur les ports 6000vous avez les services X-Windows . S'ils n'ont pas ete protege correctement vous pouvez voir ce que fait l'utilisateur. Vous pouvez memes voir les toubhes frappees , les programmes lancees. Si vous faites telnet dessus vous aurez je pense l'effet d'un denial of service; l'ecran va se geler , le sys va ralentir ... Mais il y a plus mieux. Si vous vous y connaissez un peu en programmation utilisez la fonction XOpenDisplay() , si la fonction retourne NULL alors c'est securise sinon ... char *hostname; if (XOpenDisplay(hostname) == NULL) { printf("Loupe : %s\n", hostname); } else { printf("Ca marche : %s\n", hostname); } Il y a a autre chose auquel il faut penser . Normalement la route qu'emprunte un paquet de sa source à sa destination est determinee par les routeurs qui se trouvent entre eux. En fonction de l'adresse de destination et de leur table les routeurs se chargent de dirigier les paquets . Mais dans une trame TCP/IP, il y a une option qui porte le nom de ®source routing¯ qui est peu utilisee. En fait on l'utilise dans le debuggage des reseaux pour trouver les problèmes. Le truc c'est que si vous envoyez un paquet en faisant croire qu'il vient de l'interieur, normalement les routeurs ne devrait pas l'ammener au FW mais le probleme la c'est qu'ils le font avec cette option. En plus c'est pas dificile a faire. Mais normalement il y a des options pour desactiver le ®source routing¯ . 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 FW . Installation: Bon beh va falloir recompiler le noyau 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) 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 Les 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 forcement 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 ê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 . Si l'IP forwarding est laisse , alors la il y a une faille mais la je connais pas du tout ,en fait la solution serait de downer le firewall , ainsi le FW ne marcherait plus mais le noyau lui continuerait a router les paquets sans suivre les règles! Pour ça , il y a des solutions diverses et pas très gentilles comme le SYN flooding et autres attaques barbares . Bon vous compilez les outils TIS en suivant les instructions . Configuration La table netperm réside 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 système netacl se démarre avec comme paramètre telnetd . Mais avant que le démon soit lance le logiciel vérifie que la requête est valide selon la table . Par exemple si je veux autorise 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 implementent un relais pour les services . En fait le client fait d'abord une requête au service du FW puis de la 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 proxy rlogin . -http-gw: relais pour client HTTP et gopher .( pratique pour empêcher certaines applications JAVA ) .... Il y en a d'autres mais je les connais pas tous donc pour plus de renseignement 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 security hole que ca peut faire. The FrHack Crew Snowcrach Basé sur le livre de Linux