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, en conclusion, une section traitant de différents aspects de la sécurité dans les réseaux Linux.
Lorsque Linux est utilisé dans un environnement réseau, vous pouvez utiliser les fonctionnalités du noyau pour manipuler les paquets réseau afin de maintenir une séparation entre les secteurs externe et interne du réseau. L'infrastructure Netfilter offre les moyens d'établir un pare-feu efficace maintenant la séparation entre des réseaux différents. Iptables — une structure de table générique permettant de définir des ensembles de règles — permet un contrôle précis des paquets autorisés à transiter par l'interface réseau. Vous pouvez mettre en place un tel filtre de paquets de façon assez simple avec l'aide de SuSEfirewall2 et du module correspondant de YaST.
Les composants netfilter et iptables sont chargés de filtrer et de manipuler les paquets réseau, ainsi que de traduire les adresses réseau (NAT, Network Address Translation). Les critères de filtrage ainsi que toute action leur étant associée sont enregistrés dans des chaînes qui doivent être vérifiées l'une après l'autre par tout paquet réseau entrant. Les chaînes de règles sont enregistrées dans des tables. La commande iptables a permet de modifier ces tables et ces ensembles de règles.
Linux dispose de trois tables pour les différentes fonctions d'un filtre de paquets :
La plupart des règles se trouvent dans cette table puisque le
filtrage de paquets proprement dit y est défini. Les
règles concernant l'admission (ACCEPT) et l'abandon
(DROP) des paquets y figurent.
La modification des adresses sources et cibles des paquets est définie ici. Le masquage dont vous vous servez pour la connexion d'un petit réseau privé à l'Internet est un cas particulier de NAT.
Les valeurs contenues dans l'en-tête IP peuvent être manipulées à l'aide des règles fixées ici (le type de service).
Dans les tables citées, il y a plusieurs chaînes prédéfinies par lesquelles les paquets doivent passer :
Cette chaîne concerne les paquets qui viennent d'arriver au système.
Cette chaîne concerne les paquets qui sont destinés à des processus propres au système.
Cette chaîne concerne les paquets qui sont simplement routés à travers le système.
Cette chaîne concerne les paquets qui ont été générés dans le système lui-même.
Cette chaîne concerne tous les paquets qui quittent le système.
Figure 34.1, « iptables : chemins pouvant être suivis par un paquet » illustre le cheminement possible d'un paquet réseau à travers le système. Pour la clarté de l'exposé, les tables sont groupées par chaînes, bien que dans la réalité les chaînes se trouvent à l'intérieur des tables.
Dans le cas le plus simple, un paquet qui est destiné au système
lui-même arrive sur l'interface eth0 du système. Ce
paquet est d'abord dirigé dans la chaîne PREROUTING de la
table mangle, puis dans la chaîne
PREROUTING de la table nat. L'étape de
routage suivante permet d'établir que le paquet est destiné à un processus
dans le système lui-même. Après être passé par la chaîne
INPUT dans les deux tables mangle et
filter, le paquet arrive à son lieu de destination, en
supposant que les règles de filtrage dans la table ne l'en empêchent pas.
Le masquage est le cas particulier sous Linux de NAT
(Network Address Translation), la traduction des adresses
réseau. Il est mis en œuvre quand un petit réseau local ayant ses
adresses IP du domaine privé (voir section Section 22.1.2, « Masques réseau et routage ») est connecté à l'Internet avec
ses adresses IP officielles. Pour que les ordinateurs du réseau local
puissent établir des connexions à l'Internet, une correspondance entre les
adresses privées et les adresses officielles s'impose. Ce processus a lieu
sur le routeur, qui sert de passerelle entre le réseau local et l'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 séparée
d'accès à l'Internet. Celle-ci raccorde le routeur à l'extérieur, tandis
qu'une ou plusieurs autres le raccordent aux ordinateurs du réseau local.
Les ordinateurs du réseau local étant connectés à la carte réseau du routeur
(par exemple eth0), ils peuvent envoyer à leur passerelle par
défaut ou au routeur tous les paquets non destinés au réseau local.
![]() | Utiliser le bon masque réseau |
|---|---|
Lorsque vous configurez votre réseau, veillez toujours à la concordance entre les adresses de diffusion et les masques réseau. Autrement, votre réseau ne fonctionnera pas correctement, puisque les paquets réseau ne pourront pas être routés. | |
Comme expliqué plus haut, si un des ordinateurs de votre réseau
envoie un paquet destiné à l'Internet, ce paquet arrive sur le routeur par
défaut. Toutefois, celui-ci doit préalablement être configuré de manière à
transmettre aussi ce type de paquets. Pour des raisons de sécurité,
SUSE LINUX ne permet pas, par défaut, un tel fonctionnement. Pour activer
cette fonctionnalité, modifiez la variable
IP_FORWARD dans le fichier
/etc/sysconfig/sysctl pour lui attribuer la valeur
IP_FORWARD=yes.
L'ordinateur cible de la connexion ne connaît que votre routeur, et non l'ordinateur expéditeur de votre réseau interne proprement dit. Celui-ci se cache derrière votre routeur. C'est de là que vient le terme de masquage. Du fait de la traduction d'adresses, l'adresse cible pour les paquets reçus est à nouveau notre routeur. Ce dernier doit reconnaître les paquets et réécrire l'adresse cible de manière à ce qu'ils arrivent sur l'ordinateur qui convient dans le réseau local.
Comme le chemin parcouru par les paquets de l'extérieur vers l'intérieur dépend du tableau de masquage, il n'est pas possible d'ouvrir une connexion de l'extérieur vers l'intérieur. Il n'y aurait pour cette connexion aucun élément dans le tableau. Une connexion établie possède ainsi un état particulier dans ce tableau, de manière à ce que cet élément de tableau ne puisse être utilisé par une deuxième connexion.
En conséquence, on rencontre à présent des problèmes avec certaines applications, ICQ, CU-SeeMe, IRC (DCC, CTCP) et FTP (en mode PORT). Netscape, le programme FTP standard et beaucoup d'autres applications utilisent le mode PASV qui, en ce qui concerne le filtrage des paquets et le masquage, rencontre beaucoup moins de problèmes.
Le terme pare-feu est probablement le terme le plus utilisé pour décrire un mécanisme qui fournit et gère une connexion entre deux réseaux mais en contrôlant le trafic autant que possible. Au sens strict du terme, le mécanisme décrit dans cette section serait plus correctement désigné par l'expression filtre de paquets. Un filtre de paquets régule le passage des données au moyen de critères tels que le protocole, le port et l'adresse IP. De cette manière, vous pouvez bloquer des paquets qui, en raison de leur adressage, ne devraient pas s'infiltrer dans votre réseau. Si, par exemple, vous souhaitez autoriser les accès à votre serveur web, vous devez explicitement ouvrir le port correspondant. Toutefois, un filtre de paquets ne contrôle pas le contenu de paquets adressés correctement, comme ceux ayant votre serveur web pour cible. Ainsi, si un paquet est envoyé dans le but d'attaquer l'un des programmes CGI de votre serveur web, votre filtre de paquets le laissera passer.
Une structure plus efficace—mais aussi plus
complexe—consiste à combiner plusieurs types de systèmes, par exemple, un
filtre de paquets interagissant avec des passerelles applicatives ou des
serveurs mandataires supplémentaires. Dans ce cas, le filtre de paquets
rejette tous les paquets destinés à des ports non ouverts. Seuls les paquets
destinés à une passerelle applicative doivent pouvoir être autorisés à
passer. Ce serveur mandataire fonctionne alors comme s'il s'agissait du
véritable interlocuteur du serveur qui établit une connexion avec nous. En
ce sens, un tel serveur mandataire peut être considéré comme une machine de
masquage au niveau du protocole de chaque application. Un exemple de ce
type de serveur mandataire est Squid, un serveur mandataire HTTP. Pour
utiliser Squid, vous devez configurer votre navigateur de manière à
communiquer à travers le proxy. La mémoire cache du serveur mandataire
répond à toute demande de page HTML, et si une page n'y est pas enregistrée,
c'est le serveur mandataire qui récupère la page depuis l'Internet. Un autre
exemple serait SuSE proxy-suite (paquetage proxy-suite) qui propose un serveur
mandataire pour le protocole FTP.
Nous souhaitons à présent nous concentrer sur le paquetage
« filtre de paquets » de SUSE LINUX. Pour obtenir plus
d'informations ainsi que d'autres liens à propos des pare-feu, consultez le
document Firewall-HOWTO (en anglais) contenu dans le paquetage howto. Pour le lire, utilisez la commande
less /usr/share/doc/howto/en/txt/Firewall-HOWTO.gz
si ce paquetage est installé.
SuSEfirewall2 est un script qui convertit les variables configurées
dans /etc/sysconfig/SuSEfirewall2 en un ensemble de
règles iptables. SuSEfirewall2 définit trois zones de sécurité
cependant, dans l'exemple de configuration suivant, on ne prendra en
considération que les deux premières zone :
L'ordinateur doit être protégé du réseau externe, puisque ce dernier n'est pas sous contrôle à proprement parler. Il est généralement question ici de l'Internet, mais il peut tout aussi bien s'agir d'autres réseaux non protégés (un réseau étendu).
Ici, il est question du réseau privé, généralement un réseau local. Si l'on utilise dans ce réseau des adresses IP du domaine privé (voir section Section 22.1.2, « Masques réseau et routage »), la mise en œuvre de la traduction d'adresses réseau (NAT) s'impose pour pouvoir accéder du le réseau interne vers l'extérieur.
Les ordinateurs qui se trouvent dans cette zone sont accessibles du réseau externe comme du réseau interne mais n'ont aucun accès au réseau interne. Ce type de configuration est une protection additionnelle du réseau interne vis-à-vis du réseau externe, puisque les machines de la zone démilitarisée sont isolées du réseau interne.
Tout trafic réseau qui n'a pas fait l'objet d'une autorisation explicite dans le jeu de règles de filtrage est interrompu par iptables. Par conséquent, chaque interface ayant un trafic entrant doit être affectée à une des trois zones. Pour chacune de ces zones, il faut définir les services ou protocoles autorisés. L'ensemble de règles ne contrôle toutefois que les paquets provenant d'hôtes distants. Les paquets générés localement ne sont pas filtrés par le pare-feu.
La configuration se fait soit avec YaST (voir section Section 34.1.4.1, « Configuration avec YaST »), soit manuellement dans le fichier
/etc/sysconfig/SuSEfirewall2 qui contient des
commentaires détaillés en anglais. Vous trouverez de plus quelques exemples
de scénarios dans /usr/share/doc/packages/SuSEfirewall2/EXAMPLES.
![]() | Configuration automatique du pare-feu |
|---|---|
Après l'installation, YaST démarre automatiquement un pare-feu sur toutes vos interfaces configurées. Si un serveur est configuré et activé sur votre système, YaST modifie la configuration du pare-feu générée automatiquement au travers des options ou du module de configuration du serveur. Certaines boites de dialogue de module serveur proposent un bouton permettant d'activer d'autres services ou ports. Le module de YaST pour la configuration du pare-feu sert à activer ou désactiver le pare-feu ou à le reconfigurer indépendamment. | |
Utilisez le centre de contrôle de YaST pour accéder à la configuration en mode graphique. Choisissez dans la catégorie l'option . La configuration se divise en sept sous-sections auxquelles on peut accéder directement dans la partie gauche de l'arborescence à l'écran.
Définissez le comportement au démarrage dans ce dialogue. Dans l'installation par défaut, SuSEfirewall2 fonctionne déjà sur un système nouvellement installé. Vous pouvez également démarrer et arrêter le pare-feu ici. Si vous souhaitez tester les paramètres actuels de votre pare-feu, utilisez le bouton .
Toutes les interfaces réseau connues sont répertoriées ici. Pour supprimer une interface d'une zone, sélectionnez l'interface, cliquez sur et choisissez . Pour ajouter une interface dans une zone, sélectionnez l'interface, cliquez sur et choisissez une des zones disponibles. Vous pouvez également créer une interface spéciale avec vos propres paramètres en utilisant .
Vous nécessitez cette option pour offrir des services de votre système à une zone protégée. Par défaut, seule la zone externe est protégée. Dans ce cas, vous devez autoriser explicitement les services qui doivent être vus par des hôtes externes. Après avoit sélectionné la zone concernée, activez le service correspondant dans .
Le masquage vous permet de cacher votre réseau interne des réseaux externes comme Internet. Il permet aussi au réseau interne d'accéder au réseau externe de façon transparente. Les requêtes du réseau externe vers le réseau interne sont bloquées alors que les requêtes du réseau interne vers le réseau externe semblent être faites 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, vous pouvez ajouter des règles spéciales de redirection pour les services correspondants.
Dans ce dialogue, les ports UDP qui permettent les diffusions générales
sont configurés. Les numéros ou services de port nécessaires doivent être
ajoutés à la zone correspondante en les séparant par un espace. Voyez
également le fichier /etc/services.
La journalisation des diffusions générales non autorisées peut être activée ici. Cela peut être problématique car les hôtes Windows utilisent les diffusions générales pour se connaître les uns les autres et génèrent donc de nombreux paquets non autorisés.
Dans ce dialogue, vous pouvez définir si le service IPsec sera autorisée depuis le réseau externe. La configuration des paquets qui sont de confiance doit être faite sous .
Il existe deux règles de journalisation paquets autorisés ou non autorisés. Les paquets autorisés sont ACCEPTÉS, les paquets non autorisés sont ABANDONNÉS ou REJETÉS. Pour ces deux règles, vous pouvez sélectionner parmi , ou .
Lorsque vous avez terminé la configuration du pare-feu, quittez ce formulaire en cliquant sur . Vous obtenez alors un résumé par zone de la configuration du pare-feu où vous pouvez encore vérifier tous les paramètres. Tous les services ports et protocoles qui ont été autorisés sont répertoriés dans le résumé. Si vous voulez retourner en arrière dans la configuration, utilisez , sinon cliquez sur afin d'enregistrer votre configuration.
Voyons à présent étape par étape une configuration réussie. Nous préciserons, pour chaque point, s'il s'agit de masquage ou de pare-feu. Dans le fichier de configuration, il est aussi question d'une zone démilitarisée (DMZ, en anglais demilitarized zone), que nous n'étudierons pas en détail pour l'instant. En effet, on n'utilise de zone démilitarisée que dans le cadre d'une infrastructure réseau plus complexe, qu'on trouve dans des organisations de grande envergure (réseaux d'entreprise), et qui demandent une configuration extensive et des connaissances détaillées sur le sujet.
Activez d'abord SuSEfirewall2 pour votre niveau d'exécution
(probablement 3 ou 5) avec le module de YaST Éditeur de niveaux 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 de l'interface connectée à l'Internet. Pour une
connexion par modem, saisissez ppp0, et à
ippp0 pour une connexion RNIS. Les connexions
DSL utilisent dsl0. Indiquez
auto pour utiliser l'interface correspondant à la
route par défaut.
FW_DEV_INT (pare-feu, masquage) Indiquez ici l'interface qui pointe sur le réseau
« privé » interne (eth0). S'il n'existe aucun réseau
interne, contentez-vous de laisser ce champ vide.
FW_ROUTE (pare-feu, masquage) Si vous avez besoin du masquage, vous devez
impérativement indiquer yes ici. Vos machines internes
ne sont pas visibles de l'extérieur, car elles possèdent des adresses
réseau privées (192.168.x.x)
qui ne sont pas routées sur l'Internet.
Dans le cas d'un pare-feu sans masquage, ne choisissez ici
yes que si vous souhaitez autoriser l'accès à votre
réseau interne. Vous devez pour cela avoir affecté des adresses IP
officielles aux machines internes. Vous ne devriez normalement
pas autoriser l'accès de l'extérieur à vos machines
internes !
FW_MASQUERADE (masquage) Si vous avez besoin du masquage, vous devez indiquer
yes ici. Ceci offre une connexion à Internet virtuellement
directe aux hôtes internes. Notez qu'il est plus sûr d'avoir un serveur
mandataire entre les ordinateurs du réseau interne et l'Internet. Le
masquage n'est pas nécessaire pour les services qu'un serveur proxy fournit.
FW_MASQ_NETS (masquage) Indiquez ici les ordinateurs ou les réseaux pour lesquels il faut faire du masquage. Séparez chaque saisie par un espace. Par exemple :
FW_MASQ_NETS="192.168.0.0/24 192.168.10.1"
FW_PROTECT_FROM_INT (pare-feu) Saisissez ici yes si vous souhaitez aussi
protéger l'ordinateur utilisé comme pare-feu contre les tentatives
d'attaque en provenance du réseau interne. Vous devez alors autoriser
explicitement les services disponibles pour le réseau interne. Voir
également FW_SERVICES_INT_TCP et
FW_SERVICES_INT_UDP.
FW_SERVICES_EXT_TCP (pare-feu) Indiquez ici les ports TCP auxquels on doit pouvoir accéder. Pour un simple ordinateur domestique qui n'a pas à proposer de services, vous n'avez la plupart du temps rien à indiquer.
FW_SERVICES_EXT_UDP (pare-feu) Laissez ce champ vide à moins que vous utilisiez un service UDP auquel on doit pouvoir accéder de l'extérieur. Les services qui utilisent UDP comprennent des serveurs DNS, IPSec, TFTP, DHCP et d'autres. Dans ce cas, ajoutez ici les ports UDP requis.
FW_SERVICES_INT_TCP (pare-feu) Avec cette variable, vous définissez les services disponibles
pour le réseau interne. La notation est analogue à celle employée pour
FW_SERVICES_EXT_TCP, mais les réglages sont
cette fois appliqués au réseau interne. Cette
variable ne doit être configurée que si
FW_PROTECT_FROM_INTERNAL a été activée (valeur
yes.
FW_SERVICES_INT_UDP (pare-feu) Voir FW_SERVICES_INT_TCP.
La
configuration est à présent terminée. N'oubliez pas de tester le pare-feu.
En tant qu'utilisateur root,
appelez la commande SuSEfirewall2 start pour créer les
règles. Utilisez par exemple telnet de l'extérieur, pour
vérifier si cette connexion est refusée de
facto : vous devriez alors voir dans le fichier
/var/log/messages des lignes similaires à
celles-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)
nmap ou nessus sont d'autres paquetages disponibles pour tester la
configuration de votre pare-feu.
Vous trouverez la documentation relative à nmap dans
/usr/share/doc/packages/nmap et celle de
nessus dans le répertoire /usr/share/doc/packages/nessus-core
après avoit installé le paquetage respectif.
Vous trouverez les informations les plus récentes et de la
documentation sur le paquetage SuSEfirewall2 dans
/usr/share/doc/packages/SuSEfirewall2. http://www.netfilter.org est la page d'accueil des projets
netfilter/iptables. Vous y trouverez de la documentation en abondance en
différentes langues.