Firewall / Filtres IP

De Korben Wiki
Aller à : navigation, rechercher

Introduction

Les Firewalls font partie intégrante de la sécurité d'un système ou d'un réseau informatique. Ils permettent de limiter l'accès à des applications ou des parties de réseau grâce à des règles (statiques ou dynamiques) définies par la politique de sécurité mise en place par les administrateurs réseaux ou responsables de la sécurité du système d'information d'une entreprise.

Il existe deux grand types de firewall, les firewalls basés réseaux (souvent réalisés par les constructeurs de périphériques réseaux (Cisco, Juniper etc.) mais nous pouvons trouver des distributions Linux avec Firewall embarqués telles qu'IpCop) permettant la transformation d'un vieux ordinateur ou d'un Soekris (Pour ne pas citer de marque...) en une véritable passerelle réseau sécurisée avec NIDS, Firewall, serveur DNS, DHCP, NAT etc.

Ces derniers permettent de bloquer ou de rediriger certains flux réseaux en provenance de l'intérieur ou de l'extérieur du réseau et de permettre l'élaboration de différentes zones (cloisonnement) en fonction de la confiance accordée dans les systèmes ou au point de vue critique des données stockées dans ces systèmes. La forme la plus connue de "cloisonnement" reste la DMZ, zone démilitarisée permettant de différencier les serveurs orientés WEB du reste du réseau informatique.

Il existe un autre type de Firewall, basé hôte, beaucoup plus couche application du modèle OSI même si l'on retrouve là aussi une grande partie liée aux flux réseaux. Ils permettent là aussi de stoper certaines connexions entrantes et sortantes du système suivant différentes rêgles définies par l'administrateur de ce dernier. Dans les plus connus, nous pouvons citer, ZoneAlarm sur Windows, IP Tables/netfilter sur les environnements Linux et Pf sur les environnements BSD.

Les Systèmes de détection d'intrusion

Les systèmes de détection d'intrusion (eux aussi basés hote (HIDS) et réseau (NIDS)) peuvent rentrer dans la catégorie des firewalls même s'ils ont leur propres caractéristiques telles que la :

- Détection d'intrusions par signatures : Il peuvent détecter les intrusions grâce à une base de signatures, de la couche réseau à la couche application du modèle OSI dans le cadre des NIDS (tels que Snort). Les HIDS, eux peuvent aussi intervenir sur les flux entrants et sortant mais il peuvent aussi inspecter les fichier par leur hash MD5 (tels que rkhunter). Rkhunter n'est pas un véritable IDS car il faut qu'il soit couplé à un autre programme afin qu'il démarre automatiquement son inspection.

- Détection d'intrusions par comportements : Cette détection se fait par exemple, suite à un ensemble de connexions remuant un peu trop les logs, ou par certaines connexions qui n'auraient pas lieu d'êtres (scans etc.) Là aussi, nous retrouvons notre bon vieux Snort en NIDS et comme HIDS je donnerai comme exemple Fail2ban.

Du fait de leur évolution, aujourd'hui les firewalls les plus complexes remplissent un nombre inimaginables de fonction avant séparées, et certains peuvent agir aujourd'hui sur un système d'information entier.

Mise en place d'une solution de Port Knocking

Auteur & source Félix Aimé

Le port-knocking est une technique assez méconnue des administrateurs serveurs, cependant, elle est l'une des meilleures afin d'établir des règles dynamiques de Firewall tout en étant extrêmement simple à mettre en place sur un serveur. Cette technique peut aussi servir à exécuter d'autres commandes et à démarrer des services, sans pour autant avoir un shell sous la main. Ce petit article va faire une brève description de ce qu'est le port-knocking, et ensuite, la mise en place de ce dernier sur une Ubuntu/Debian (la configuration ne change pas, seule l'installation change selon les distributions.)

1. Port-knockwa ?

Même si ce nom est assez barbare pour un français, son sens est devinable en deux secondes. Il veut littéralement signifier frapper sur les ports (...pour ouvrir la porte). En deux mots, c'est comme dans tous les films d'espionnage amateurs, on toc à la porte selon une certaine séquence afin que la personne étant derrière la porte sache que c'est vous pour venir l'ouvrir (voir le film Léon...).

Cette technique, passée à la moulinette informatique se traduit par la modification des règles de Firewall à la volée, suite à l'envoi par un client d'une séquence de paquets SYN sur différents ports de la BOX. Par exemple, la séquence de paquets SYN sur les ports 45324, 15432 et 23942 changera les règles d'Iptables afin d'accepter la réception de paquets sur le port 22 provenant de l'IP source (envoyant les paquets SYN). Nous ferons une autre séquence afin de refermer la porte derrière nous à la fin de notre session SSH.

2. L'intérêt du port-knocking

L'intérêt est simplement d'interagir avec le serveur sans passer par une connexion distante, ainsi, nous pouvons ouvrir un service, changer son état ou modifier les règles de son fonctionnement. Il est principalement utilisé par pour manipuler les Firewalls afin d'ouvrir des ports prétendus bloqués. Ceci permettant ainsi d'éviter les attaques sur certains services par des Botnets remuant un peu trop les logs, ou des attaques ciblés contre votre box se faisant à la main.

La chance de tomber par hasard sur la bonne combinaison pour un pirate est extrêmement petite (pour vous faire une petite idée) :

   * 65535^2 = 4 294 836 225 possibilités
   * 65535^3 = 2.81462092 × 10^14 possibilités
   * 65535^4 = 1.84456182 × 10^19 possibilités
   * etc...

Autant vous dire que cette protection va limiter grandement le pirate dans ses tentatives d'attaque tellement les possibilités sont énormes, cependant, il existe quelques faiblesses matérielles et humaines à cette technique.

3. Faiblesses

Il existe deux principales faiblesses à cette technique de port-knocking. Tout d'abord, la possibilité pour un attaquant d'effectuer une attaque Man In The Middle (Monkey in the Middle pour les intimes) en local permettant ainsi de récupérer la séquence dans le flot de données en sniffant simplement la connexion.

Une seconde vulnérabilité est plus imputable à l'humain, ainsi, nous avons pas un random service intégré dans notre cerveau donc souvent, un pirate expérimenté pourra tenter de deviner les numéros de ports employés par l'administrateur, souvent des multiples ou une séquence facilement mémorisable. (sans parler de l'administrateur qui laisse par défaut la séquence contenue dans le fichier de configuration après installation ou la lecture d'un tutoriel...).

Nous pouvons aussi noter d'autres faiblesses où le pirate doit avec accès au client exécutant knockd, ainsi, si l'administrateur ne supprime pas ses logs de sessions sur le terminal, le pirate pourra avoir la suite des ports en faisant un petit $cat .bash_history

Après avoir vu les faiblesses, nous allons passer à l'installation et la configuration du serveur, puis ensuite, l'utilisation du système de port-knocking avec un client.

4. Installation et configuration

Vu que nous n'allons pas réinventer la roue, nous allons utiliser un logiciel déjà développé afin de mettre en place la solution de port-knocking, son nom : knockd. L'installation (sur une Débian) se fait facilement avec un petit :

   * (# | sudo ) apt-get install knockd


Cela va installer proprement (et tant mieux...) le programme. Après, nous allons passer à la configuration de la chose, vous allez voir, c'est d'une simplicité détonante. Donc c'est parti, tapez dans votre shell (je sais, j'utilise nano et j'aime ça) :

   * (# | sudo ) nano /etc/default/knockd


Hop, là dans ce fichier knockd nous allons configurer le demon afin qu'il sache sur quelle interface réseau écouter et s'il doit s'exécuter au démarrage de la machine. pour ce faire, il suffit simplement de mettre :

   * START_KNOCKD=1 # Ainsi il démarrera au démarrage de la box
   * KNOCKD_OPTS="-i [votre interface (eth0, eth1 etc.)]"


(si vous ne savez par votre interface, faites un petit ifconfig et regardez...) Arrivé à ce point là, nous sommes déjà bien partis, le demon peut fonctionner, reste maintenant à éditer les règles, pour cela, go to :

   * (# | sudo ) nano /etc/knockd.conf


Et éditez vos rêgles simplement en faisant :

   * [Nom de la rêgle]
   * sequence = XXXXX, XXXX, XXXXX [séquence des ports]
   * seq_timeout = 5 [quant-est-ce que la séquence est "finie"]
   * command = /sbin/iptables (+règles) [commande à exec.]
   * tcpflags = syn 


Par défaut, les ports de la séquence sont en TCP, mais on peut s'amuser pour compliquer encore l'affaire à alterner TCP et UDP en faisant : XXX:tcp, XXXXX:udp, XXXX:tcp, XXXXX:tcp... Ainsi, un fichier de configuration bien paramétré, ressemblera à quelque chose (comme cela - lien). (n'oubliez pas de droper les paquets par défaut sur Iptables... car sinon, cela ne sert à rien...) Ensuite, nous devons redémarrer knockd afin qu'il reprenne bien en compte les nouveaux paramètres, pour se faire, une simple commande suffit :

   * (# | sudo ) /etc/init.d/knockd restart


Voilà, l'installation, et la configuration est finie, reste plus qu'à tester avec un client !

5. Utilisation d'un client

Il existe des clients pour tous les systèmes d'exploitation, et cela, c'est cool ! Ainsi, il suffit simplement d'exécuter le binaire client knockd comme ceci afin de réaliser le port-knocking :

   * > knock (ip du serveur) (port):(tcp|udp) (port):(tcp|udp)...


Vous trouverez les binaires et sources des clients sur le site de knockd : http://www.zeroflux.org/projects/knock (il existe même un client pour Iphone!). Bref, libre à vous ensuite de vous amuser avec knockd, sur différentes box et à partir de différents clients.

Firewall avec IPTables

Introduction

Iptables est un firewall installé de base sur la plupart des distributions linux. Il fonctionne sur la base de règles, qui définissent la politique de filtrage du firewall.

Commandes de bases

TODO

TheCyberSeb : je me suis permis de commencer la liste des commandes de base :)

Pour afficher la liste des règles en cours.

iptables --list ou iptables -L

Pour ajouter une règle.

iptables --append ou iptables -A

Pour supprimer les règles.

iptables --flush ou iptables -F

Blocage automatique avec Fail2ban

Fail2ban est un programme qui permet de bloquer les adresses IP d'hôtes qui tentent de violer la sécurité d'un système.

Le fonctionnement est simple. Il faut pour mettre en place cette solution identifier le programme à sécuriser, le fichier de log des accès à ce programme et une politique de sécurité basique (combien de tentatives de connexion échouées sont acceptables). Une fois configuré, fail2ban va analyser les log et identifier les tentatives de connexion qui ont échoué. Si elles sont plus nombreuses que seule souhaitée (indiquée dans le fichier de conf), fail2ban va ajouter une entrée dans la table du firewall iptables pour bloquer l'hôte hauteur de l'attaque.

La configuration est personnalisable. Certains programmes usuels comme ssh, serveurs ftp sont déjà configurés, mais il est aussi possible de créer ça propre configuration en suivant les quelques indications ci-dessus et les différents howto présents sur le net.

Liens vers des tutoriaux

Le filtrage intégré aux solutions Firewall UTM

Un firewall UTM (Unified Threat Management) est un équipement utilisé en entreprise comme passerelle permettant de gérer différents modules de sécurité réseaux.

Il existent différents constructeurs tels que Fortinet, Sonicwall, Cisco et même les français Netasq et Arkoon.

Les modules les plus courants sont les fonctions antivirus, détection/prévention d'intrusion, VPN IPSec, filtrage web, antispam mais aussi du filtrage de contenu, VPN SSL.

Les modules qui nous intéressent ici sont la partie filtrage web et le filtrage applicatif.

Le filtrage web

Cette fonctionnalité est équivalent à ce que peuvent proposer les proxy web tout en ayant l'avantage de ne pas avoir de configuration particulière à faire au niveau du poste de l'utilisateur. C'est le firewall UTM qui en jouant le rôle de passerelle internet autorisera ou non l'accès à la ressource demandée.

Le filtrage peut être configuré de manière statique avec des listes d'URL ou de mots clés mais l'efficacité est dans ce cas limité à ce qui a été géré par l'administrateur. Un filtrage statique est donc uniquement mis en place pour des listes blanches exhaustives.

Le filtrage dynamique est quand à lui nettement plus efficace et donc plus délicat à contourner et il peut contenir des erreurs de jugement (faux positifs).

Le filtrage dynamique repose sur des bases de classement d'URL créées par des éditeurs tiers (surfcontrol, esafe ...) ou des bases propriétaires aux constructeurs d'UTM (fortiguard ...).

Ces bases peuvent être stockés localement sur l'équipement ou interrogés à la demande. Lorsqu'un utilisateur demande une page web, la requête est transmise au firewall qui va simultanément demander la catégorie du site et interroger le site en question. Si la catégorie est autorisée, la requête de réponse du site sera transmise à l'utilisateur, dans le cas contraire, un message d'interdiction d'accès lui sera renvoyé.

Pour contourner ce genre de système, la solution la plus simple et efficace reste l'utilisation d'un proxy entreposé sur un serveur personnel. L'utilisation de proxy web classique est bien souvent vaine car nombre d'entre eux sont évidemment catégorisés et donc souvent bloqués. Vous pouvez toute fois tenter les sites de traduction de page web qui eux sont moins souvent filtrés.

Le filtrage applicatif

Ce type de filtrage utilise les fonctionnalités d'analyse de trame offert par les modules IPS combiné avec une base de signature d'application.

L'idée principale est de filtrer les différentes applications de manière plus précise en ne se basant plus uniquement sur les ports utilisés car de plus en plus d'applications utilisent des ports standards pour communiquer. Par exemple, MSN se connecte via le port 80 sans soucis si le 1863 n'est pas autorisé en sortie.

Le parefeu va donc analyser l'intégralité du contenu des trames pour le comparer à sa base de signature d'application et va ensuite vérifier si celle si est autorisée pour l'utilisateur en question (si l'option d'authentification de l'utilisateur a été activée).

Ce type de filtrage est donc capable de reconnaitre les flux de messagerie instantanée, le P2P mais aussi des flux métier comme les bases de données, sharepoint, les CRM ... ou bien encore les fonctionnalité intégrés à un site comme le module de chat de Facebook.

L'administrateur pourra donc choisir de désactiver le chat de Facebook, de vous autoriser à vous connecter à une base de donnée DB2, et interdire le transfert de fichier sous MSN mais en vous laissant la possibilité de vous connecter.

Ce type de filtrage est donc un complément terriblement efficace. Il peut donc évidemment aussi détecter l'utilisation de proxy, tor ou autres solutions de prise de main à distance.

Les mesures de contournement sont donc plus limités. Il peut être possible par exemple de créer un Tunnel_SSH. Il faut tout de même savoir que ces matériels savent se placer en position Man in the middle pour inspecter le contenu des sessions sécurisées.

Liens externes - Firewall & Filtres IP

  • Bases d’un firewall sur serveur dédié avec Netfilter (iptables) sur Jopa.fr
  • Ipcop est une distribution Linux dédiée firewall afin de posséder un firewall matériel (serveur dédiée) à moindre cout. Elle demeure simple d'installation et de paramétrage et possède un système d'addons pour y ajouter des fonctionnalités supplémentaires (VPN, Proxy, ...) Site du projet - forums
  • SME Server est une distribution Linux dédiée firewall ajoutant des services "web" tels que http, ftp, ... Site officiel wiki Wikipedia site francophone
  • SmooyhWall est une distribution Linux dédiée firewall. IPCop est un fork de SmoothWall. site officiel
  • PeerGuardian est logiciel de filtrage d'IPs fonctionnant sous Windows : site officiel. PeerGuardian Loader est un patch qui permet de corriger plusieurs bugs rencontrés sous Windows Vista et Windows 7 lors de l'exécution du logiciel : Lien. DSEO est un programme permettant de forcer la signature obligatoire des pilotes sous Windows 64-bits, utile pour le fichier pgfilter.sys : Lien
  • PeerBlock est aussi un logiciel de filtrage, digne descendant de PeerGuardian, de nombreux bugs sont corrigés pour être intégré à Vista et Seven 32 et 64 bits : site officiel
  • Je vous recommande ce site pour mettre à jour vos listes, et pourquoi pas en créer de nouvelles et les mettre à disposition de tous : I-BlockList

Divers