Table des matières
Résumé
La mascarade et les pare-feux permettent de contrôler le trafic et l'échange des données. L'interpréteur de commandes sécurisé (secure shell, SSH) permet à l'utilisateur de se connecter à une machine distante par une liaison chiffrée. Le chiffrement des fichiers ou de partitions entières sécurise vos données lorsque des tiers ont accès à votre système. Outre ces instructions purement techniques, vous trouverez des informations sur différents aspects de la sécurité dans les réseaux Linux.
Lorsque Linux est utilisé dans un environnement réseau, vous pouvez utiliser des fonctions de kernel qui permettent de manipuler les paquets réseau afin de maintenir une séparation entre les secteurs interne et externe du réseau. L'infrastructure Linux Netfilter permet d'établir un pare-feu efficace qui isole les différents réseaux. Vous pouvez contrôler avec précision les paquets autorisés à franchir une interface réseau à l'aide d'iptables, structure de table générique qui permet de définir des ensembles de règles. Vous pouvez définir assez facilement ce type de filtre de paquets à l'aide de SUSEfirewall2 et du module YaST correspondant.
Les composants netfilter et iptables sont chargés de filtrer et de manipuler les paquets réseau et sont également chargés de la traduction des adresses réseau (NAT - Network Address Translation). Les critères de filtrage et toute action associée sont stockés dans des chaînes, qui doivent être mises en correspondance les unes après les autres par chaque paquet réseau entrant. Les chaînes à mettre en correspondance sont stockées dans des tables. La commande iptables permet de modifier ces tables et ces ensembles de règles.
Le kernel Linux gère trois tables, chacune correspondant à une catégorie spécifique de fonctions du filtre de paquets :
Cette table comprend la plupart des règles de filtrage puisqu'elle implémente le mécanisme de filtrage des paquets au sens le plus strict, qui détermine par exemple si les paquets sont admis (ACCEPT) ou rejetés (DROP).
Cette table définit toutes les modifications apportées aux adresses source et cible des paquets. Ces fonctions vous permettent également d'implémenter le masquage, qui correspond à un cas particulier de NAT utilisé pour relier un réseau privé à Internet.
Les règles contenues dans cette table permettent de manipuler les valeurs stockées dans les en-têtes IP (telles que le type de service).
Ces tables contiennent plusieurs chaînes prédéfinies à mettre en correspondance avec les paquets :
Cette chaîne concerne les paquets entrants.
Cette chaîne concerne les paquets destinés aux processus internes du système.
Cette chaîne concerne les paquets qui sont uniquement routés via le système.
Cette chaîne concerne les paquets provenant du système lui-même.
Cette chaîne concerne tous les paquets sortants.
La Figure 23.1, « iptables : les chemins possibles d'un paquet » illustre les chemins que peut emprunter un paquet réseau sur un système donné. Pour plus de clarté, cette figure regroupe les tables en chaînes, mais en réalité, ces chaînes sont conservées dans les tables mêmes.
Dans le cas le plus simple, un paquet entrant destiné au système arrive sur l'interface eth0. Le paquet est d'abord transmis à la chaîne PREROUTING de la table mangle, puis à la chaîne PREROUTING de la table nat. L'étape suivante, concernant le routage du paquet, indique que la cible réelle du paquet est un processus du système. Après être passé par les chaînes INPUT des tables mangle et filter, le paquet atteint finalement sa cible, à condition que les règles de la table filter coïncident réellement.
Le masquage est la forme de traduction d'adresses réseau (NAT) propre à Linux. Il permet de relier un petit réseau local, où les hôtes utilisent des adresses IP de la plage privée (consultez la Section 38.1.2, « Masques réseau et routage »), à Internet (où des adresses IP officielles sont utilisées). Pour que les hôtes du réseau local soient en mesure de se connecter à Internet, leurs adresses privées sont converties en adresses officielles. Cette opération s'effectue sur le routeur, qui tient le rôle de passerelle entre le réseau local et Internet. Le principe sous-jacent est simple : Le routeur possède plusieurs interfaces réseau, généralement une carte réseau et une interface distincte d'accès à Internet. Tandis que cette dernière relie le routeur au monde extérieur, une ou plusieurs autres interfaces le relient aux hôtes du réseau local. Ces hôtes du réseau local étant connectés à la carte réseau (eth0 par exemple) du routeur, ils peuvent envoyer tous les paquets non destinés au réseau local à leur routeur ou leur passerelle par défaut.
![]() | Utilisation du masque réseau approprié |
|---|---|
Lorsque vous configurez votre réseau, vérifiez que l'adresse de diffusion et le masque réseau sont bien les mêmes pour tous les hôtes locaux. Si ce n'est pas le cas, les paquets ne peuvent pas être routés correctement. | |
Comme indiqué précédemment, lorsque l'un des hôtes du réseau local envoie un paquet destiné à une adresse Internet, il est orienté vers le routeur par défaut. Toutefois, le routeur doit être configuré pour pouvoir transmettre ces paquets. Pour des raisons de sécurité, SUSE Linux n'active pas cette fonction dans une installation par défaut. Pour l'activer, définissez la variable IP_FORWARD du fichier /etc/sysconfig/sysctl sur IP_FORWARD=yes.
L'hôte cible de la connexion peut voir votre routeur mais ne sait rien sur l'hôte de votre réseau interne d'où proviennent les paquets. C'est la raison pour laquelle cette technique porte le nom de masquage. En raison de la traduction d'adresses, le routeur est la première destination de tout paquet de réponses. Il doit identifier ces paquets entrants et traduire leurs adresses cible, pour que les paquets puissent être transmis à l'hôte approprié dans le réseau local.
Le routage du trafic entrant dépend de la table de masquage. Il n'est donc pas possible d'ouvrir une connexion depuis l'extérieur vers un hôte interne. Il n'y aurait pas d'entrée dans la table pour ce type de connexion. Une connexion établie possède ainsi un état particulier dans cette table, de manière à ce que cet élément ne puisse pas être utilisé par une autre connexion.
Par conséquent, vous risquez de rencontrer des problèmes avec certains protocoles d'application, tels que ICQ, cucme, IRC (DCC, CTCP) et FTP (en mode PORT). Netscape, le programme FTP standard et bien d'autres utilisent le mode PASV. Ce mode passif pose bien moins de problèmes en matière de filtrage de paquets et de masquage.
Le terme pare-feu est probablement le plus utilisé pour décrire un mécanisme qui fournit et gère une liaison entre deux réseaux tout en contrôlant les flux de données circulant entre eux. En réalité, le mécanisme décrit dans la présente section est un filtre de paquets. Il régule le flux de données en fonction de certains critères, tels que les protocoles, les ports et les adresses IP. Vous pouvez ainsi bloquer les paquets qui, selon leur adresse, ne sont pas censés atteindre votre réseau. Pour autoriser l'accès public à votre serveur Web, par exemple, vous devez ouvrir explicitement le port correspondant. Toutefois, un filtre de paquets n'analyse pas le contenu des paquets dont l'adresse est légitime (comme ceux qui sont destinés à votre serveur Web). Par exemple, si des paquets entrants ont pour objectif de mettre en péril un programme CGI sur votre serveur Web, le filtre de paquets les laisse tout de même passer.
Il existe un mécanisme plus efficace, mais également plus complexe, qui associe plusieurs types de systèmes, comme l'interaction d'un filtre de paquets avec le proxy ou la passerelle applicative. Dans ce cas, le filtre de paquets rejette tous les paquets destinés aux ports désactivés. Seuls les paquets destinés à la passerelle applicative sont acceptés. Cette passerelle ou ce proxy prétend être le client réel du serveur. D'une certaine manière, ce type de proxy peut être considéré comme un hôte de masquage au niveau du protocole utilisé par l'application. Squid, qui est un serveur proxy HTTP, correspond à ce type de proxy. Pour utiliser Squid, le navigateur doit être configuré pour communiquer via le proxy. Les pages HTTP demandées sont remises depuis le cache du proxy et les pages introuvables dans le cache sont extraites d'Internet par le proxy. Autre exemple, la suite proxy de SUSE (proxy-suite) fournit un proxy pour le protocole FTP.
La section suivante est consacrée au filtre de paquets fourni avec SUSE Linux. Pour plus d'informations sur le filtrage de paquets et l'utilisation d'un pare-feu, consultez le Firewall HOWTO (Guide pratique) inclus dans le paquetage howto. Lisez-le à l'aide de la commande less /usr/share/doc/howto/en/txt/Firewall-HOWTO.gz si ce paquetage est installé.
SUSEfirewall2 est un script qui lit l'ensemble de variables dans /etc/sysconfig/SuSEfirewall2 pour générer un ensemble de règles iptables. Il détermine trois zones de sécurité, même si seules les deux premières sont prises en compte dans l'exemple de configuration suivant :
L'hôte doit se protéger du réseau externe puisqu'il n'a aucun moyen de savoir ce qui s'y passe. Généralement, ce réseau externe est Internet mais il peut s'agir d'un réseau non protégé, comme un réseau WLAN.
Il s'agit du réseau privé, généralement le réseau local. Si les hôtes de ce réseau utilisent des adresses IP de la plage privée (consultez la Section 38.1.2, « Masques réseau et routage »), activez la traduction d'adresses réseau (NAT) pour que les hôtes du réseau interne puissent accéder au réseau externe.
Les hôtes situés dans cette zone peuvent être joints depuis le réseau externe et le réseau interne mais ne peuvent pas accéder au réseau interne. Vous pouvez utiliser ce paramètre pour installer une ligne de défense supplémentaire devant le réseau interne, puisque les systèmes DMZ sont isolés de ce réseau.
iptables supprime tout type de trafic réseau non explicitement autorisé par l'ensemble de règles de filtrage. Par conséquent, chaque interface associée à un trafic entrant doit être placée dans l'une de ces trois zones. Définissez les services ou protocoles autorisés pour chacune des zones. L'ensemble de règles s'applique uniquement aux paquets provenant d'hôtes distants. Le pare-feu ne filtre pas les paquets générés localement.
Vous pouvez effectuer la configuration via YaST (consultez Section 23.1.4.1, « Configuration avec YaST »). Vous pouvez également l'effectuer manuellement dans le fichier /etc/sysconfig/SuSEfirewall2, qui contient des commentaires détaillés. En outre, vous trouverez quelques exemples de scénario dans /usr/share/doc/packages/SuSEfirewall2/EXAMPLES.
![]() | Configuration automatique du pare-feu |
|---|---|
Une fois l'installation terminée, YaST démarre automatiquement un pare-feu sur toutes les interfaces configurées. Si un serveur est configuré et activé sur le système, YaST peut modifier la configuration de pare-feu générée automatiquement à l'aide des options ou dans les modules de configuration du serveur. Certaines boîtes de dialogue du module du serveur comportent un bouton qui permet d'activer des ports et des services supplémentaires. Vous pouvez utiliser le module de configuration du pare-feu YaST pour activer, désactiver ou reconfigurer le pare-feu. | |
Pour la configuration graphique, vous pouvez accéder aux boîtes de dialogue YaST à partir du centre de contrôle YaST. Sélectionnez +. La configuration est divisée en sept sections auxquelles vous accédez directement à partir de la structure de l'arborescence située à gauche.
Cette boîte de dialogue permet de définir le comportement au démarrage. Dans une installation par défaut, SUSEfirewall2 démarre automatiquement. Vous pouvez également démarrer et arrêter le pare-feu ici. Pour implémenter les nouveaux paramètres dans un pare-feu en cours d'exécution, utilisez .
Toutes les interfaces réseau connues sont listées ici. Pour supprimer une interface d'une zone, sélectionnez-la, cliquez sur , puis choisissez . Pour ajouter une interface à une zone, sélectionnez-la, cliquez sur , puis choisissez l'une des zones disponibles. Pour créer une interface spéciale avec vos propres paramètres, utilisez .
Cette option vous permet d'offrir des services à partir de votre système à une zone vis-à-vis de laquelle il est protégé. Par défaut, le système est uniquement protégé des zones externes. Autorisez explicitement les services auxquels les hôtes externes doivent pouvoir accéder. Activez ces services après avoir sélectionné la zone souhaitée dans .
Le masquage vous permet de cacher votre réseau interne des réseaux externes, comme Internet. Il permet aussi aux hôtes du réseau interne d'accéder au réseau externe en toute transparence. Les requêtes du réseau externe vers le réseau interne sont bloquées alors que les requêtes du réseau interne semblent être émises par le serveur de masquage lorsqu'elles sont vues à l'extérieur. Si des services spéciaux d'une machine interne doivent être disponibles pour le réseau externe, ajoutez des règles spéciales de réacheminement pour le service correspondant.
Cette boîte de dialogue vous permet de configurer les ports UDP qui permettent les diffusions. Ajoutez les numéros ou services de port nécessaires à la zone correspondante en les séparant par un espace. Consultez également le fichier /etc/services.
Cette boîte de dialogue permet également d'activer la journalisation des diffusions générales non autorisées. Cela risque d'être problématique car les hôtes Windows utilisent les diffusions générales pour obtenir des informations les uns sur les autres et génèrent donc de nombreux paquets non autorisés.
Cette boîte de dialogue permet de déterminer si le service IPsec doit être disponible depuis le réseau externe. Déterminez les paquets de confiance sous .
Il existe deux règles de journalisation : les paquets autorisés et les paquets non autorisés. Les paquets non autorisés sont ABANDONNÉS ou REJETÉS. Pour ces deux règles, sélectionnez , ou .
Une fois la configuration du pare-feu terminée, cliquez sur pour quitter cette boîte de dialogue. Vous obtenez alors un résumé par zone de la configuration du pare-feu. Il vous permet de vérifier tous les paramètres. Ce résumé dresse la liste de tous les services, ports et protocoles qui ont été autorisés. Pour modifier la configuration, cliquez sur . Pour l'enregistrer, cliquez sur .
Les paragraphes suivants fournissent des instructions détaillées pour une configuration réussie. Pour chaque élément de configuration, nous indiquons s'il concerne le pare-feu ou le masquage. Les aspects relatifs à la zone démilitarisée (DMZ) mentionnés dans le fichier de configuration ne sont pas abordés ici. En effet, ils s'appliquent uniquement à des infrastructures réseau plus complexes que l'on trouve dans les grandes sociétés (réseaux d'entreprise), qui nécessitent une configuration de grande envergure et des connaissances approfondies sur le sujet.
Activez d'abord SUSEfirewall2 pour votre niveau d'exécution (probablement 3 ou 5) à l'aide du module de YaST Services système (niveau d'exécution). Il crée les liens symboliques pour les scripts SUSEfirewall2_* dans les répertoires /etc/init.d/rc?.d/.
FW_DEV_EXT (pare-feu, masquage)
Il s'agit du périphérique connecté à Internet. Pour une connexion par modem, saisissez ppp0. Pour une connexion RNIS, utilisez ippp0. Les connexions DSL utilisent dsl0. Indiquez auto pour utiliser l'interface qui correspond à la route par défaut.
FW_DEV_INT (pare-feu, masquage)
Il s'agit du périphérique connecté au réseau interne privé (par exemple, eth0). Laissez ce champ vide s'il n'existe aucun réseau interne et si le pare-feu protège uniquement l'hôte sur lequel il est exécuté.
FW_ROUTE (pare-feu, masquage)
Si vous avez besoin du masquage, vous devez indiquer yes ici. Vos hôtes internes ne sont pas visibles de l'extérieur puisque leurs adresses réseau privées (192.168.x.x, par exemple) sont ignorées par les routeurs Internet.
Pour un pare-feu sans masquage, indiquez yes uniquement si vous souhaitez autoriser l'accès au réseau interne. Dans ce cas, vos hôtes internes doivent utiliser des adresses IP officiellement enregistrées. Mais normalement, vous ne devez pas autoriser l'accès à votre réseau interne depuis l'extérieur.
FW_MASQUERADE (masquage)
Si vous avez besoin du masquage, vous devez indiquer yes ici. Les hôtes internes disposent ainsi d'une connexion quasiment directe à Internet. Pour plus de sécurité, il est préférable d'installer un serveur proxy entre les hôtes du réseau interne et Internet. Le masquage n'est pas nécessaire pour les services fournis par un serveur proxy.
FW_MASQ_NETS (masquage)
Indiquez les hôtes ou les réseaux à masquer, en les séparant par un espace. Par exemple :
FW_MASQ_NETS="192.168.0.0/24 192.168.10.1"
FW_PROTECT_FROM_INT (pare-feu)
Indiquez yes si vous souhaitez protéger l'hôte utilisé comme pare-feu contre les tentatives d'attaque en provenance du réseau interne. Pour que les services soient accessibles depuis le réseau interne, vous devez les autoriser explicitement. Consultez également FW_SERVICES_INT_TCP et FW_SERVICES_INT_UDP.
FW_SERVICES_EXT_TCP (pare-feu)
Indiquez les ports TCP que vous souhaitez rendre disponibles. Laissez ce champ vide s'il s'agit d'un ordinateur personnel qui n'offre aucun service.
FW_SERVICES_EXT_UDP (pare-feu)
Laissez ce champ vide sauf si vous exécutez un service UDP que vous souhaitez rendre accessible de l'extérieur. Parmi les services qui utilisent UDP figurent les serveurs DNS, IPSec, TFTP, DHCP, etc. Dans ce cas, saisissez les ports UDP à utiliser.
FW_SERVICES_INT_TCP (pare-feu)
Cette variable vous permet de définir les services disponibles depuis le réseau interne. La notation est identique à celle employée pour FW_SERVICES_EXT_TCP, mais les paramètres s'appliquent au réseau interne. Vous ne devez paramétrer cette variable que si FW_PROTECT_FROM_INT a pour valeur yes.
FW_SERVICES_INT_UDP (pare-feu)
Voir FW_SERVICES_INT_TCP.
Une fois le pare-feu configuré, testez votre configuration. Pour créer les ensembles de règles du pare-feu, entrez SUSEfirewall2 start en tant qu'utilisateur root. Ensuite, vous pouvez utiliser telnet, par exemple, à partir d'un hôte externe, pour vérifier si la connexion est effectivement refusée. Vous pouvez alors consulter le fichier /var/log/messages, qui doit comporter un message semblable à celui-ci :
Mar 15 13:21:38 linux kernel: SFW2-INext-DROP-DEFLT IN=eth0 OUT= MAC=00:80:c8:94:c3:e7:00:a0:c9:4d:27:56:08:00 SRC=192.168.10.0 DST=192.168.10.1 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=15330 DF PROTO=TCP SPT=48091 DPT=23 WINDOW=5840 RES=0x00 SYN URGP=0 OPT (020405B40402080A061AFEBC0000000001030300)
Parmi les autres paquetages disponibles pour tester la configuration de votre pare-feu, citons nmap ou nessus. Vous trouverez la documentation relative à nmap dans /usr/share/doc/packages/nmap et la documentation relative à nessus dans le répertoire /usr/share/doc/packages/nessus-core, après avoir installé le paquetage correspondant.
Vous trouverez les informations les plus récentes et la documentation sur le paquetage SUSEfirewall2 dans /usr/share/doc/packages/SuSEfirewall2. La page d'accueil des projets netfilter et iptables (http://www.netfilter.org) comporte de nombreux documents, traduits dans plusieurs langues.