Le HOWTO du pare-feu et des serveurs mandataires
Mark Grennan mark@grenna.com
v0.67, 26 septembre 1999 - Adaptation française
Bernard Choppy, choppy@imaginet.fr 7 décembre 1999
Ce document est destiné à enseigner les
bases des systèmes pare-feux ainsi que pour donner quelques détails
sur la configuration d'un pare-feu aussi bien filtrant que serveur mandataire
avec un PC sous Linux. Une version HTML de la version originale en anglais
de ce document est disponible à http://www.grennan.com/Firewall-HOWTO.html.
1. Introduction
1.1 Réactions
1.2 Avertissement
1.3 Droit d'auteur
1.4 Les raisons qui me poussent à écrire ceci
1.5 Autres sources d'information
2. Comprendre les pare-feux
2.1 Politiques de sécurité
2.2 Types de pare-feux
2.3 Serveurs mandataires
3. Architecture de pare-feu
4. Configurer le pare-feu filtrant Linux
4.1 Matériel nécessaire
4.2 Logiciel nécessaire
5. Préparer le système Linux
5.1 Compiler le noyau
5.2 Configurer deux cartes réseau
5.3 Configurer les adresses réseau
5.4 Tester votre réseau
5.5 Sécuriser le pare-feu
6. Configuration du filtrage IP (IPFWADM)
7. Configuration du filtrage IP (IPchains)
8. Rendre le tout plus simple
9. Installer un mandataire Squid transparent
10. Installer le serveur mandataire TIS
10.1 Trouver le logiciel
10.2 Compilation du FWTK TIS
10.3 Installation du FWTK TIS
10.4 Configuration du FWTK TIS
11. Le serveur mandataire SOCKS
11.1 Installation du serveur mandataire
11.2 Configuration du serveur mandataire
11.3 Travailler avec un serveur mandataire
11.4 Faire fonctionner le serveur mandataire avec les paquets UDP
11.5 Inconvénients des serveurs mandataire
12. Configurations avancées
12.1 Un grand réseau avec sécurité renforcée
13. Simplifier l'administration
14. Outrepasser un pare-feu mandataire
1. Introduction
David Rudder drig@execpc.com. est l'auteur de la version d'origine de ce Firewall-HOWTO, il y a de si nombreux mois, et je voudrais encore le remercier pour m'avoir autorisé à mettre son travail à jour.
Les pare-feux sont devenus très populaires en tant que "nec plus ultra" de la sécurité sur Internet. Comme de nombreuses choses dont la renommée grandit, une certaine incompréhension s'y est jointe. Ce HOWTO présente les bases de la définition d'un pare-feu et la manière d'en configurer un.
J'utilise un noyau 2.2.15 et RedHat 6.0 pour développer ce howto, ainsi les exemples ci-dessous sont fondés sur cette distribution. Si vous trouvez des différences dans votre distribution, envoyez-moi un courriel et je mettrai à jour ce howto.
NdT : Diverses traductions ont été proposées pour
le terme firewall, dont pare-feu, coupe-feu, mur anti-feu, etc. Le traducteur
a adopté "pare-feu", qui semble actuellement le terme le plus couramment
admis.
1.1 Réactions
Toute réaction est la bienvenue. SIGNALEZ TOUTE INEXACTITUDE DANS CET ARTICLE S'IL VOUS PLAIT ! Je suis humain, et donc sujet aux erreurs. Si vous trouvez une correction, envoyez-la moi. Je tenterai de répondre à tout courriel, mais je suis très occupé, donc ne m'en veuillez pas si je ne le fais pas.
Mon adresse courriel est : mark@grennan.com.
1.2 Avertissement
JE NE SUIS RESPONSABLE D'AUCUN DOMMAGE RESULTANT D'ACTIONS FONDEES SUR LE PRESENT DOCUMENT. Ce document est conçu comme une introduction au fonctionnement des pare-feux et des serveurs mandataires. Je ne suis, ni ne prétends être un expert ès sécurité. ;-) Je suis simplement un individu qui a trop lu et qui apprécie les ordinateurs plus que ce n'est le cas pour beaucoup. Considérez que j'écris ceci pour familiariser les gens avec ce sujet, et que je ne suis pas prêt à perdre ma jeunesse dans l'exactitude de ce qui s'y trouve.
NdT : Pour sa part, le traducteur émet les mêmes réserves
que celles de l'auteur.
1.3 Droit d'auteur
Sauf mention contraire, les documents Linux HOWTO sont la propriété de leurs auteurs respectifs. Les documents Linux HOWTO peuvent être reproduits et distribués en totalité ou en partie, sur tout support physique ou électronique, tant que cette notice de droit d'auteur est présente sur chaque copie. La redistribution commerciale est autorisée et encouragée ; néammoins, l'auteur souhaite être informé de toute distribution de ce genre.
Toute traduction, travail dérivé, ou agrégat incorporant tout ou partie d'un ou plusieurs documents Linux HOWTO doit être couvert par ce même droit d'auteur. Ce qui veut dire que vous ne pouvez produire un travail dérivé d'un HOWTO et imposer des restrictions supplémentaires concernant sa distribution. Des exceptions à ces règles peuvent être délivrées sous certaines conditions ; contactez le coordinateur des Linux HOWTO.
En bref, nous souhaitons promouvoir la dissémination de cette information à travers autant de canaux que possible. Néammoins, nous souhaitons conserver un droit d'auteur sur les documents HOWTO, et être avisés de tout plan de distribution les concernant.
Si vous avez des questions, veuillez me contacter (cf. supra).
NdT : Le traducteur (Bernard Choppy) se met aussi à disposition,
soit pour répondre directement, dans la mesure de ses faibles moyens,
à toute question, soit pour transmettre et traduire, entre l'auteur
et l'interlocuteur francophone. Son adresse est : choppy@imaginet.fr
1.4 Les raisons qui me poussent à écrire ceci
Il y a quelques années, alors que je travaillais pour l'État de l'Oklahoma en tant qu'"administrateur Internet", il me fut demandé de "mettre l'État sur Internet", sans m'allouer de budget (note : il n'existait pas de titre de ce genre à l'époque. J'étais juste le type qui faisait tout le travail). La meilleure manière de faire en sorte que cela puisse arriver était d'utiliser le plus possible de logiciel libre et de matériel de récupération. Linux et un tas de vieux 486 étaient tout ce que j'avais pour travailler.
Les pare-feux du commerce sont hors de prix et la documentation sur leur fonctionnement est considérée quasiment comme secret-défense. J'ai découvert que la création d'un pare-feu de mon cru était à peu près impossible.
Dans mon travail suivant, il m'a été demandé de
mettre en place un pare-feu. Linux venait d'intégrer le code correspondant.
À nouveau sans budget, j'ai commencé à monter un pare-feu
avec Linux. Six mois plus tard, mon pare-feu était en place et ce
document mis à jour.
1.5 Autres sources d'information
The
Linux Networking Overview HOWTO ;
The
Ethernet HOWTO ;
IPchains Firewalling made
Easy! ;
Linux Network Address
Translation ;
The Net-3
HOWTO ;
The NET-PPP
HOWTO ;
TCP/IP Network Administrator's
Guide aux éditions O'Reilly and Associates ;
The Documentation for
the TIS Firewall Toolkit .
Ces sites web sont des sources d'informations sur le sujet de la sécurité
en général.
Secure Linux.
Il s'agit de mon propre site de sécurité sur lequel j'ai
rassemblé des livres blancs, de la documentation et des programmes
concourant à la sécurisation de systèmes Unix.
2. Comprendre les pare-feux
Un pare-feu est une structure destinée à empêcher
un feu de la traverser. Dans un immeuble, il s'agit d'un mur qui divise
complètement des parties de celui-ci. Dans une voiture, un pare-feu
est une pièce métallique qui sépare le moteur du compartiment
passagers.
Les pare-feux Internet sont conçus pour isoler votre réseau
local privé des flammes de l'Internet, ou de protéger la
pureté des membres de votre réseau local en leur interdisant
l'accès aux tentations démoniaques de l'Internet. ;-)
Le premier pare-feu informatique était une machine Unix sans
routage avec deux connexions à deux réseaux différents.
Une carte réseau était connectée à Internet
et l'autre au réseau privé.
Pour atteindre Internet depuis le réseau privé, il fallait
se loger sur le pare-feu (Unix). Ensuite, on utilisait les ressources de
ce système pour accéder à Internet. Par exemple, on
pouvait utiliser X-Window pour lancer le navigateur Netscape sur le pare-feu
et en avoir l'affichage sur sa station de travail. Si le navigateur tourne
sur le pare-feu, il a accès aux deux réseaux.
Cette sorte de hôte à double réseau (un système
à deux connexions réseau) est bien si l'on peut faire confiance
à TOUS les utilisateurs. On peut configurer simplement un système
Linux et y créer un compte pour tout utilisateur souhaitant un accès
à Internet. Avec cette configuration, le seul ordinateur du réseau
privé qui connaisse quelque chose du monde extérieur est
le pare-feu proprement dit. Personne ne peut télécharger
directement sur un poste de travail personnelle il faut d'abord télécharger
un fichier sur le pare-feu, puis transférer celui-ci du pare-feu
au poste de travail.
NOTE IMPORTANTE : 99% des intrusions commencent par l'obtention d'un
accès utilisateur sur le système attaqué. Pour cette
raison, je ne recommande pas ce type de pare-feu. De plus, il est aussi
extrêmement limité.
2.1 Politiques de sécurité
Il ne faut pas croire qu'un pare-feu soit la panacée. Il faut
tout d'abord définir une politique de sécurité.
Les pare-feux sont utilisés dans deux buts :
pour maintenir des gens (intrus, vandales...) dehors ;
pour maintenir des gens (employés, enfants...) dedans.
Lorsque j'ai commencé à travailler sur les pare-feux,
j'ai été surpris d'apprendre que l'entreprise pour laquelle
je travaillais cherchait plus à "espionner" ses propres employés
qu'à maintenir les intrus hors de ses réseaux.
Au moins dans mon état (l'Oklahoma), les employeurs ont le droit
de surveiller les appels téléphoniques et l'activité
Internet à condition d'informer préalablement les employés
de cette surveillance (NdT : la législation française est
identique de ce point de vue).
Big Brother n'est pas le gouvernement. Big Brother est le Big Businness.
Ne me méjugez pas : les gens sont au travail pour travailler,
non pour jouer. Et il me semble que l'éthique du travail est en
train de s'éroder. Néanmoins, j'ai aussi observé que
certains types de directions se trouvent aussi les principaux transgresseurs
des règles qu'ils ont eux-mêmes édictées. J'ai
vu des vacataires réprimandés car ils avaient utilisé
Internet pour chercher le trajet de bus pour venir au travail alos que
le même directeur passait des heures au travail à chercher
de bons restaurants et boîtes de nuit pour y trouver des clients
potentiels.
Mon correctif de ce genre d'abus est de publier les traces du pare-feu
sur une page web accessible à tout un chacun.
Le travail dans la sécurité peut être difficile.
Si vous êtes gestionnaire de pare-feux, surveillez vos arrières.
2.2 Types de pare-feux
Il y a deux types de pare-feux :
pare-feux IP ou filtrants - ils bloquent tout le trafic sauf celui
sélectionné ;
serveurs mandataires (parfois appelés bastions) - ils réalisent
les connexions réseau pour vous.
Pare-feux filtrants
Le filtrage de paquets est le type de pare-feu inclus dans le noyau
Linux.
Un pare-feu filtrant fonctionne au niveau du réseau. Les données
ne sont autorisées à quitter le système que si les
règles du pare-feu le permettent. Lorsque les paquets arrivent,
ils sont filtrés en fonction de leurs type, origine, destination
et port qui sont décrits dans chacun de ceux-ci.
De nombreux routeurs comportent un certain nombre de services de type
pare-feu. Les pare-feux filtrants peuvent être pensés comme
des types particuliers de routeurs. Pour cette raison, il faut une profonde
compréhension de la structure des paquets IP pour travailler avec
l'un d'eux.
Puisque très peu de données sont analysées et
tracées, les pare-feux filtrants consomment peu de temps processeur
et créent moins de latence sur un réseau.
Les pare-feux filtrants ne fournissent pas de contrôle par mot
de passe. Un utilisateur ne peut s'identifier en tant que tel. La seule
identité connue pour un utilisateur est l'adresse IP de son poste
de travail. Cela peut être un problème lorsqu'on souhaite
utiliser DHCP (assignation dynamique d'adresses IP). En effet, les règles
étant fondées sur les adresses IP, il faut ajuster celles-ci
à chaque fois que de nouvelles adresses sont assignées. Je
ne sais pas comment automatiser ce processus.
Les pare-feux filtrants sont plus transparents pour les utilisateurs.
Ceux-ci n'ont en effet pas à configurer des règles dans leurs
applications pour utiliser Internet. Ce n'est pas vrai avec la plupart
des serveurs mandataires.
2.3 Serveurs mandataires
Le meilleur exemple du fonctionnement de ceux-ci est celui d'une personne
se connectant à un système puis, depuis celui-ci, au reste
du monde. C'est seulement avec un serveur mandataire que ce processus est
automatique. Lorsque vous vous connectez à l'extérieur, le
logiciel client vous connecte en fait d'abord au serveur mandataire. Le
serveur mandataire se connecte alors au serveur que vous cherchez à
atteindre (l'extérieur) et vous renvoie les données reçues.
NdT : en français, on utilise souvent le terme "bastion" pour désigner
un serveur mandataire situé entre le réseau local interne
et l'extérieur. Dans le présent document, on utilisera plutôt
le terme bastion pour désigner la machine qui porte le serveur mandataire.
Puisque les serveurs mandataires gèrent toutes les communications,
ils peuvent enregistrer tout ce qu'ils font (donc ce que vous faites).
Pour les mandataires HTTP (web), cela comprend les URL que vous demandez.
Pour les mandataires FTP, cela inclut chaque fichier téléchargé.
Ils peuvent même expurger les mots "inappropriés" des sites
que vous visitez ou analyser la présence de virus.
Les serveurs mandataires d'applications peuvent authentifier des utilisateurs.
Avant qu'une connexion soit réalisée vers l'extérieur,
le serveur peut demander à l'utilisateur de se connecter préalablement.
Pour un utilisateur web, cela fonctionnera comme si chaque site requérait
une connexion.
Mandataire SOCKS
Un mandataire SOCKS ressemble beaucoup à un vieux central téléphonique
à fiches. Il interconnecte simplement une machine interne à
une autre externe.
De nombreux serveurs SOCKS fonctionnent uniquement avec les connexions
de type TCP. De même, comme les pare-feux filtrants, il ne permettent
pas l'authentification d'utilisateurs. En revanche, ils peuvent enregistrer
la destination de la connexion de chaque utilisateur.
3. Architecture de pare-feu
Il existe de nombreuses manières de structurer un réseau
pour protéger des systèmes à l'aide d'un pare-feu.
Si l'on dispose de connexions dédiées à Internet
par un routeur, on peut connecter directement celui-ci au système
pare-feu. Au contraire, on peut passer par un hub pour permettre un accès
complet aux serveurs à l'extérieur du pare-feu.
On peut configurer un certain nombre de règles de filtrage matérielles
dans le routeur. Néanmoins, ce routeur peut être la propriété
d'un FAI (fournisseur d'accès Internet), auquel cas on ne dispose
pas du contrôle de celui-ci. Il faut demander au FAI d'y inclure
des filtres (NdT : et avoir pleine confiance dans son FAI !).
On peut aussi utiliser un service commuté comme une ligne RNIS. Dans ce cas on peut utiliser une troisième carte réseau pour créer une DMZ (De-Militarized Zone, ou "zone démilitarisée") filtrée. Cela donne un contrôle total sur les services Internet et maintient la séparation avec le réseau local normal.
Si l'on ne fournit pas soi-même des services Internet mais que l'on souhaite surveiller où vont les utilisateurs, on voudra utiliser un serveur mandataire (bastion). Cela peut être intrégré dans le pare-feu.
On peut aussi placer le serveur mandataire sur le réseau local. Dans ce cas, les règles du pare-feu ne doivent autoriser que le bastion à se connecter à Internet pour les services que celui-ci fournit. Ainsi les utilisateurs ne peuvent accéder à Internet que par le mandataire.
Si l'on souhaite réaliser un service comme ceux de Yahoo! ou
peut-être SlashDot, on peut souhaiter réaliser une architecture
redondante de routeurs et pare-feux (cf. High Availability HOWTO).
En utilisant une technique de DNS à jeton tournant ou à
l'aide de serveurs d'application à équilibrage de charge,
on peut créer un service à 100% de disponibilité.
Il est facile de voir corrompre son réseau local. Il faut conserver
le contrôle de chaque connexion. Il suffit d'un utilisateur avec
un modem pour compromettre tout un réseau local.
4. Configurer le pare-feu filtrant Linux
4.1 Matériel nécessaire
Les pare-feux filtrants ne nécessitent pas de matériel
haut de gamme. Ils ne sont pas grand chose de plus que de simples routeurs.
Tout ce qu'il faut est :
un 486-DX66 avec 16 Mo de mémoire vive ;
un disque dur de 200 Mo (500 Mo sont tout de même recommandés)
;
des connexions réseau (cartes Ethernet, ports série,
connexions sans fil ?) ;
un moniteur et un clavier.
Avec certains systèmes, on peut même éliminer le
moniteur et le clavier en utilisant une console sur port série.
Si l'on a besoin d'un serveur mandataire qui doive gérer un
fort trafic, il faut prendre le système le plus puissant qui soit
possible. En effet, pour chaque utilisateur qui se connectera par le bastion,
il se créera un nouveau processus. Si l'on a 50 utilisateurs simultanés
ou plus, je pense qu'il faut :
un Pentium II avec 64 Mo de mémoire vive ;
un disque dur de 2 Go pour contenir toutes les traces ;
deux connexions réseau ;
un moniteur et un clavier.
Les connexions réseau peuvent être de n'importe quel type
(cartes NIC, RNIS ou même des modems).
4.2 Logiciel nécessaire
Pare-feu filtrant
Pour créer un pare-feu filtrant, aucun logiciel spécifique
n'est nécessaire. Linux suffit.
Si l'on utilise un _TRES_ vieux noyau Linux (1.0.x ou plus ancien),
il faut une copie de ipfwadm (NdT : il faut surtout passer à un
noyau plus récent, car ces noyaux sont obsolètes, et risquent
de plus de contenir des points faibles dont il sera difficile de retrouver
trace).
Si l'on utilise un noyau 2.1.102 ou plus récent, il faut utiliser
un ipchaining comme par exemple celui développé par http://www.rustcorp.com/linux/ipchains.
Serveur mandataire
Si l'on veut configurer un serveur mandataire, il faut l'un des paquetages
suivants :
Squid ;
la boîte à outils TIS Firewall (FWTK) ;
SOCKS.
Squid est un beau paquetage et fonctionne avec la fonctionnalité
de Linux de mandataire transparent. Je vais décrire comment configurer
ce serveur.
À l'heure où j'écris ces lignes, Network Associates
<http://www.networkassociates.com/> et Trusted Information System's
(TIS) ont fusionné. Il faut donc continuer à consulter leurs
sites web pour toute information sur les modifications. Dans l'intervalle,
la boîte à outils TIS est toujours disponible sur : <http://www.tis.com/research/software/>.
Trusted Information System fournit une collection de programmes conçue
pour faciliter la gestion de pare-feux. Avec cette boîte à
outils, on configure un daemon pour chaque service (web, telnet, etc.)
qui sera utilisé.
5. Préparer le système Linux
5.1 Compiler le noyau
Commencez avec une installation minimale propre de votre distribution
Linux. Moins vous installez de logiciels, moins votre système aura
de trous de sécurité, portes dérobées et/ou
bogues susceptibles d'induire des problèmes de sécurité
dans votre système.
Prenez un noyau stable. J'utilise le noyau Linux 2.2.9 ou plus pour
mon système. La documentation est donc fondée sur ces paramètres.
Vous devez recompiler le noyau Linux avec les options appropriées.
Si vous n'avez jamais recompilé de noyau, je vous renvoie au Kernel
HOWTO, à l'Ethernet HOWTO et au NET-3 HOWTO.
Voici les paramètres réseau que je sais correspondre
à quelque chose qui fonctionne. J'en ai signalé quelques-uns
avec un "?". Si l'on souhaite utiliser cette fonctionnalité, il
faut aussi l'activer.
J'utilise "make menuconfig" pour éditer ma configuration de
noyau.
<*> Packet socket
[ ] Kernel/User netlink socket
[*] Network firewalls
[ ] Socket Filtering
<*> Unix domain sockets
[*] TCP/IP networking
[ ] IP: multicasting
[*] IP: advanced router
[ ] IP: kernel level autoconfiguration
[*] IP: firewalling
[?] IP: always defragment
(required for masquerading)
[?] IP: transparent proxy
support
[?] IP: masquerading
--- Protocol-specific masquerading
support will be built as modules.
[?] IP: ICMP masquerading
--- Protocol-specific masquerading
support will be built as modules.
[ ] IP: masquerading special
modules support
[*] IP: optimize as router
not host
< > IP: tunneling
< > IP: GRE tunnels over
IP
[?] IP: aliasing support
[*] IP: TCP syncookie support
(not enabled per default)
--- (it is safe to leave these
untouched)
< > IP: Reverse ARP
[*] IP: Allow large windows
(not recommended if <16Mb of memory)
< > The IPv6 protocol (EXPERIMENTAL)
---
< > The IPX protocol
< > Appletalk DDP
< > CCITT X.25 Packet Layer
(EXPERIMENTAL)
< > LAPB Data Link Driver
(EXPERIMENTAL)
[ ] Bridging (EXPERIMENTAL)
[ ] 802.2 LLC (EXPERIMENTAL)
< > Acorn Econet/AUN protocols
(EXPERIMENTAL)
< > WAN router
[ ] Fast switching (read help!)
[ ] Forwarding between high
speed interfaces
[ ] PU is too slow to handle
full bandwidth
QoS and/or fair queueing
--->
Après avoir réalisé toute la configuration qu'il
vous faut vous devez recompiler, réinstaller le noyau et rebouter.
J'utilise la commande :
make dep;make clean;make bzlilo;make modules;make modules_install;init
6
pour accomplir tout cela en une étape.
5.2 Configurer deux cartes réseau
Si vous avez deux cartes réseau dans votre ordinateur, vous devrez
très certainement ajouter un paramètre "append" dans votre
fichier /etc/lilo.conf pour décrire les IRQ et adresses des deux
cartes. Le mien se présente ainsi :
append="ether=12,0x300,eth0 ether=15,0x340,eth1"
5.3 Configurer les adresses réseau
Nous arrivons à la partie amusante de notre configuration. Je
ne vais pas entrer très profondément dans les détails
de mise en place d'un réseau local. Pour résoudre vos problèmes
à ce niveau, vous pouvez vous reporter au Networking-HOWTO.
Votre but est de fournir deux connexions réseau à votre
système pare-feu filtrant : l'une est Internet (côté
dangereux) et l'autre est le réseau local (côté sécurisé).
Dans tous les cas, vous devez prendre quelques décisions :
utiliserez-vous des adresses IP réelles ou non pour votre réseau
local ?
votre FAI vous assigne-t'il une adresse IP ou utilisez-vous des adresses
IP statiques ?
Puisque nous ne souhaitons pas laisser InterNet accéder au réseau
privé, il n'est pas nécessaire d'utiliser des adresses "réelles".
On peut toujours choisir des adresse arbitraires pour un réeau privé,
mais ce n'est pas recommandé : au cas où des données
seraient routées en-dehors de celui-ci, elles pourraient arriver
sur un autre système.
Un certain nombre de plages d'adresses Internet ont été
laissées de côté pour les réseaux privés.
Parmi celles-ci, nous utiliserons celles de 192.168.2.xxx pour nos exemples.
Il vous faudra utiliser le masquage IP (IP masquerading) pour permettre
à cela de fonctionner. Dans ce mode de fonctionnement, le pare-feu
transmet les paquets en les traduisant en adresses IP "réelles"
pour leur permettre de voyager sur Internet.
L'utilisation de ces adresses IP non routables rend le réseau
privé plus sûr, car les routeurs Internet ne transmettront
pas les paquets porteurs de ces adresses.
Il peut être judicieux maintenant de lire le IP Masquerading
HOWTO.
Vous devez assigner l'adresse IP "réelle" à la carte réseau
du côté Internet. Cette adresse peut vous être assignée
de manière permanente (comme adresse IP statique) ou à chaque
connexion par le processus PPP.
Vous assignez vos numéros IP internes, comme 192.168.2.1 pour
la carte Ethernet du réeau local. Il s'agira de votre adresse de
passerelle. Vous pouvez assigner une adresse de la plage 192.168.2.xxx
à toutes les autres machines du réseau protégé
(soit 192.168.2.2 à 192.168.2.254).
J'utilise Linux RedHat. Pour configurer le réseau lors du démarrage,
j'ai ajouté un fichier "ifcfg-eth1" dans le répertoire /etc/sysconfig/network-scripts.
On peut aussi trouver des fichiers ifcfg-ppp0 ou ifcfg-tr0 dans ce répertoire.
Ces fichiers "ifcfg-" sont utilisés par RedHat pour configurer et
activer les périphériques réseau lors du démarrage.
Leur nom est fonction du type de connexion.
Voici l'allure du fichier ifcfg-eth1 (deuxième carte Ethernet)
de notre exemple :
DEVICE=eth1
IPADDR=192.168.2.1
NETMASK=255.255.255.0
NETWORK=192.168.2.0
BROADCAST=192.168.2.255
GATEWAY=199.1.2.10
ONBOOT=yes
Si vous utilisez une connexion commutée, vous devrez consulter
les fichiers ifcfg-ppp0 et chat-ppp0 qui contrôlent votre connexion
PPP.
Ce fichier ifcfg peut avoir l'allure suivante :
DEVICE="ppp0"
ONBOOT="yes"
USERCTL="no"
MODEMPORT="dev/modem"
LINESPEED="115200"
PERSIST="yes"
DEFABORT="yes"
DEBUG="yes"
INITSTRING="ATZ"
DEFROUTE="yes"
HARDFLOWCTL="yes"
ESCAPECHARS="no"
PPPOPTIONS=""
PAPNAME="LoginID"
REMIP=""
NETMASK=""
IPADDR=""
MRU=""
MTU=""
DISCONNECTTIMEOUT=""
RETRYTIMEOUT="5"
BOOTPROTO="none"
5.4 Tester votre réseau
Commencer en utilisant les commandes ifconfig et route. Si vous avez
deux cartes réseau, votre ifconfig doit ressembler à :
#ifconfig
lo
Link encap:Local Loopback
inet addr:127.0.0.0 Bcast:127.255.255.255 Mask:255.0.0.0
UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1
RX packets:1620 errors:0 dropped:0 overruns:0
TX packets:1620 errors:0 dropped:0 overruns:0
eth0
Link encap:10Mbps Ethernet HWaddr 00:00:09:85:AC:55
inet addr:199.1.2.10 Bcast:199.1.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0
TX packets:0 errors:0 dropped:0 overruns:0
Interrupt:12 Base address:0x310
eth1
Link encap:10Mbps Ethernet HWaddr 00:00:09:80:1E:D7
inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0
TX packets:0 errors:0 dropped:0 overruns:0
Interrupt:15 Base address:0x350
et votre table de routage :
#route
-n
Kernel
routing table
Destination
Gateway Genmask
Flags MSS Window Use Iface
199.1.2.0
* 255.255.255.0
U 1500 0
15 eth0
192.168.2.0
* 255.255.255.0
U 1500 0
0 eth1
127.0.0.0
* 255.0.0.0
U 3584 0
2 lo
default
199.1.2.10 *
UG 1500 0 72
eth0
Note: 199.1.2.0 est l'adresse du côté Internet
du pare-feu et 192.168.2.0 celle du côté privé (réseau
local).
Vous devez commencer par vous assurer que chaque ordinateur de votre réseau local puisse atteindre l'adresse de votre pare-feu (192.168.2.2 dans cet exemple) par ping. Dans le cas contraire, replongez-vous dans le NET-3 HOWTO et retravaillez un peu votre réseau. |
Ensuite, essayez d'atteindre un système Internet depuis le pare-feu.
J'utilise personnellement l'adresse www.internic.net
pour mes tests. Si cela ne fonctionne pas, essayez un serveur de votre
FAI. Si cela ne fonctionne toujours pas, il y a un problème quelque
part dans la configuration de votre connexion Internet. Vous devriez pouvoir
atteindre n'importe quel point d'Internet depuis votre pare-feu. Essayez
de vérifier la configuration de votre passerelle par défaut.
Si vous utilisez une connexion commutée, recontrôlez votre
nom d'utilisateur et votre mot de passe. Replongez--vous dans le NET-3
HOWTO et essayez encore.
Maintenant, essayez d'atteindre l'adresse extérieure du pare-feu
(199.1.2.10 dans notre exemple) depuis une machine du réseau local.
Cela ne doit pas fonctionner. Dans le cas contraire, le masquage IP ou
la transmission IP sont activés ou vous avez déjà
une sorte de filtrage de paquet positionnée. Désactivez-les
et réessayez. Vous devez savoir si le filtrage est en place.
Pour les noyaux postérieurs au 2.1.102, vous pouvez utiliser
la commande :
echo "0" > /proc/sys/net/ipv4/ip_forward
Si, en revanche, vous utilisez un noyau plus ancien (pourquoi ?), vous
devrez recompiler celui-ci en désactivant la transmission IP (IP
forwarding, mais mettez plutôt votre noyau à jour).
Essayez à nouveau d'atteindre l'adresse extérieure du
pare-feu (199.1.2.10 dans notre exemple) depuis une machine du réseau
local. Cela ne doit pas fonctionner.
Maintenant, activez la transmission IP et/ou le masquage IP. Vous devez
être à même d'atteindre n'importe quel point d'Internet
depuis n'importe quelle machine de votre réseau local.
echo "0" > /proc/sys/net/ipv4/ip_forward
Note importante : Si vous utilisez des adresses IP "réelles"
sur votre réseau local (et non 192.168.xxx.yyy) et que vous ne puissisez
atteindre Internet, mais que vous puissiez atteindre le côté
extérieur de votre pare-feu, vérifiez que votre FAI route
correctement les paquets depuis l'adresse de votre réseau privé.
Un test de ce problème est de connaître quelqu'un d'autre
sur Internet (un ami utilisant un fournisseur local, par exemple) et de
lui demander d'effectuer un traceroute vers votre réseau. Si la
trace s'arrête sur le routeur de votre fournisseur, c'est qu'il ne
transmet pas votre trafic.
Ça fonctionne ? Bien. La partie la plus difficile est faite.
:-)
5.5 Sécuriser le pare-feu
Le pare-feu n'est d'aucune utilité s'il reste largement ouvert
aux attaques. Un "méchant" pourrait obtenir l'accès au pare-feu
et le modifier pour ses desseins personnels. Vous devez désactiver
tous les services inutilisés.
Regardez dans votre fichier /etc/inetd.conf. Ce fichier contrôle
inetd qu'on appelle aussi "super-serveur". Il contrôle un tas de
daemons serveurs et les exécute à la demande, à partir
des paquets qui arrivent sur un port "bien connu" (well known port).
Vous devez désactiver echo, discard, daytime, chargen, ftp,
gopher, shell, login, exec, talk, ntalk, pop-2, pop-3, netstat, systat,
tftp, bootp, finger, cfinger, time, swat ainsi que linuxconfig si vous
en possédez un.
Pour désactiver un service, placez simplement un "#" (dièze)
devant. Ensuite, envoyez un signal SIG-HUP au processus inetd, selon la
syntaxe suivante :
kill -HUP <pid>
où "pid" est le numéro du processus inetd. Cela force
inetd à relire son fichier de configuration (inetd.conf) et à
se relancer sans arrêter votre système.
Testez le résultat par telnet sur le port 15 (netstat) du pare-feu.
Si vous obtenez une réponse de netstat, c'est que vous n'avez pas
arrêté ces services correctement.
telnet localhost 15
Vous pouvez aussi créer le fichier /etc/nologin. Placez-y quelques
mots (comme "CONNEXION STOPPEE"). Lorsque ce fichier existe, login n'autorise
pas de connexion d'utilisateur. Ceux-ci verront simplement le contenu de
ce fichier et leur connexion sera refusée. Seul root peut alors
se loger.
Vous pouvez encore éditer le fichier /etc/securetty. Si l'utilisateur
est root, la connexion doit s'effectuer depuis l'un des périphériques
indiqués dans /etc/securetty. Les échecs seront tracés
par la facilité syslog. Avec ces deux contrôles actifs, la
seule manière de se connecter sur le pare-feu est de se présenter
comme root sur la console.
6. Configuration du filtrage IP (IPFWADM)
Si vous utilisez un noyau 2.1.102 ou supérieur, passez directement
à la section suivante sur IPCHAINS.
Dans les anciens noyaux, la transmission IP est activée par
défaut. Pour cette raison, votre réseau doit commencer par
refuser l'accès à tout et vider toutes les règles
de transmission (ipfw) en place depuis le dernier lancement. Le fragment
de script suivant doit se trouver dans votre script de lancement réseau
(en général, /etc/rc.d/init.d/network) :
#
#
configuration de la transmission IP et
#
de la trace
#
#
Transmission
#
#
Par defaut INTERDIRE tous les services
ipfwadm
-F -p deny
#
Vider toutes les regles de trace
ipfwadm
-F -f
ipfwadm
-I -f
ipfwadm
-O -f
Maintenant, nous avons un pare-feu absolu. Rien ne peut passer au travers.
Maintenant, on peut créer le fichier /etc/rc.d/rc.firewall.
Ce script doit autoriser le passage des trafics courrier, web et DNS. ;-)
#!/bin/sh
#
# rc.firewall
#
# Lancement de la bibliotheque de fonctions
. /etc/rc.d/init.d/functions
# Lecture de la configuration
. /etc/sysconfig/network
# On controle que le reseau soit actif
if [ $NETWORKING = "no" ]
then
exit
0
fi
case "$1" in
start)
echo -n "Lancement des services du pare-feu
: "
# Autorise le courriel a arriver au serveur
/sbin/ipfwadm -F -a accept -b -P tcp -S
0.0.0.0/0 1024:65535 -D 192.1.2.10 25
# Autorise les connexions aux serveurs
courriel externes
/sbin/ipfwadm -F -a accept -b -P tcp -S
192.1.2.10 25 -D 0.0.0.0/0 1024:65535
# Autorise les connexions a notre serveur
web
/sbin/ipfwadm -F -a accept -b -P tcp -S
0.0.0.0/0 1024:65535 -D 192.1.2.11 80
# Autorise les connexions aux serveurs
web externes
/sbin/ipfwadm -F -a accept -b -P tcp -S
192.1.2.* 80 -D 0.0.0.0/0 1024:65535
# Autorise le trafic DNS
/sbin/ipfwadm -F -a accept -b -P udp -S
0.0.0.0/0 53 -D 192.1.2.0/24
;;
stop)
echo -n "Arret des services du pare-feu
: "
ipfwadm -F -p deny
;;
status)
echo -n "Montrez-vous les statistiques
du pare-feu ?"
;;
restart|reload)
$0
stop
$0
start
;;
*)
echo
"Usage: firewall {start|stop|status|restart|reload}"
exit
1
esac
Note: Dans cet exemple, nous avons un serveur courriel (SMTP) qui tourne sur 192.1.2.10 qui doit être capable d'envoyer et recevoir des paquets sur le port 25. Le serveur web tourne sur 192.1.2.11. Nous autorisons quiconque sur le réseau local à accéder aux serveurs web externes ainsi qu'aux serveurs DNS. |
Cet exemple n'est pas parfaitement sécurisé. Puisque le
port 80 n'est pas obligatoirement utilisé comme port web, un intrus
rusé pourrait utiliser celui-ci pour créer un réseau
privé virtuel (VPN : virtual private network) au-travers du pare-feu.
Pour contourner cela, il faut configurer un mandataire web, et n'autoriser
que celui-ci à traverser le pare-feu. Les utilisateurs du réseau
local devront alors passer par le mandataire pour atteindre les serveurs
web extérieurs.
On peut aussi s'intéresser à la surveillance du trafic
qui passe au-travers du pare-feu. Le script qui suit compte chaque paquet.
On peut ajouter une ou deux lignes pour compter les paquets qui vont vers
un système particulier.
# Flush the current accounting rules
ipfwadm -A -f
# Accounting
/sbin/ipfwadm -A -f
/sbin/ipfwadm -A out -i -S 192.1.2.0/24
-D 0.0.0.0/0
/sbin/ipfwadm -A out -i -S 0.0.0.0/0 -D
192.1.2.0/24
/sbin/ipfwadm -A in -i -S 192.1.2.0/24
-D 0.0.0.0/0
/sbin/ipfwadm -A in -i -S 0.0.0.0/0 -D
192.1.2.0/24
Si tout ce que vous cherchez est un pare-feu filtrant, vous pouvez
vous arrêter ici. Testez-le et amusez-vous bien :-)
7. Configuration du filtrage IP (IPchains)
Les ipchains Linux sont une réécriture du code pare-feu
IPv4 de Linux (en grande partie inspiré de BSD) ainsi que de ipfwadm
qui était lui-même une réécriture du ipfw de
BSD, je crois. Il est indispensable d'administrer les filtres de paquets
IP dans les noyaux Linux versions 2.1.102 et au-delà.
L'ancien code ne gère pas les fragments, a des compteurs sur
32 bits (sur Intel en tout cas), ne permet aucune autre spécification
de protocole que TCP, UDP ou ICMP, ne peut réaliser de vastes modifications
de manière atomique, ne peut spécifier de règles inversées,
a quelques défauts et peut se révéler dur à
administrer (ce qui le rend vulnérable aux erreurs d'utilisation).
Ou du moins c'est ce qu'en dit l'auteur.
Je ne vais pas entrer en détail sur la manière de contrôler
un pare-feu IPchains, car il existe un _BON !!_ HOWTO qui en parle sur
http://www.rustcorp.com/linux/ipchains/HOWTO.html.
Je finirais juste par le recopier ici. En voici les bases.
On travaille avec les chaînes par noms. Il existe au début
trois chaînes prédéfinies input, output et forward,
qu'il est impossible de supprimer. On peut créer des chaînes
personnelles. Des règles peuvent ensuite être ajoutées
et supprimées de ces ensembles de règles.
Les opérations nécessaires pour travailler sur les chaînes
sont les suivantes :
création d'une nouvelle chaîne (-N) ;
suppression d'une chaîne vide (-X) ;
modification de la spécification pour une chaîne prédéfinie
(-P)
liste des règles d'une chaîne (-F) ;
remise à zéro des compteurs de paquets et d'octets de
toutes les règles d'une chaîne (-Z).
Il existe différentes méthodes pour manipuler les règles
à l'intérieur des chaînes :
ajout d'une nouvelle règle dans une chaîne (-A) ;
insertion d'une nouvelle règle à une position donnée
d'une chaîne (-I) ;
remplacement d'une règle à une position donnée
d'une chaîne (-R) ;
suppression d'une règle à une position donnée
d'une chaîne (-D) ;
suppression de la première règle correspondante dans
une chaîne (-D).
Il existe quelques opérations pour le masquage qui se trouvent
dans ipchains dans l'attente d'un bon emplacement pour les placer :
liste des connexions actuellement masquées (-M -L) ;
positionnement du temps d'expiration du masquage (-M -S).
Il y a quelques détails de chronologie qui interviennent dans
la modification des règles de pare-feu. Si l'on n'est pas suffisamment
prudent, il est possible de laisser passer quelques paquets pendant la
mise en place des modifications. Une approche simpliste est la suivante
:
# ipchains -I input
1 -j DENY
# ipchains -I output
1 -j DENY
# ipchains -I forward
1 -j DENY
... réalisation des modification ...
# ipchains -D input
1
# ipchains -D output
1
# ipchains -D forward
1
#
Cela interdit tout passage de paquet durant les modifications.
Voici une copie des règles de pare-feu qui précèdent
dans IPChains :
#!/bin/sh
#
# rc.firewall
#
## Tout vider et repartir du debut
/sbin/ipchains -F input
/sbin/ipchains -F output
/sbin/ipchains -F forward
## Redirection pour le mandatement transparent
de HTTP
#$IPCHAINS -A input -p tcp -s 192.1.2.0/24
-d 0/0 80 -j REDIRECT 8080
## Creation de nos propres chaines
/sbin/ipchains -N ma-chaine
# On autorise le courriel entrant vers
le serveur
/sbin/ipchains -A ma-chaine -s 0.0.0.0/0
smtp -d 192.1.2.10 1024:-j ACCEPT
# On autorise les connexions courriel
vers l'extérieur
/sbin/ipchains -A ma-chaine -s 192.1.2.10
-d 0.0.0.0/0 smtp -j ACCEPT
# On autorise les connexions web entrantes
vers le serveur
/sbin/ipchains -A ma-chaine -s 0.0.0.0/0
www -d 192.1.2.11 1024: -j ACCEPT
# On autorise les connexions web vers
l'extérieur
/sbin/ipchains -A ma-chaine -s 192.1.2.0/24
1024: -d 0.0.0.0/0 www -j ACCEPT
# On autorise le trafic DNS
/sbin/ipchains -A ma-chaine -p UDP -s
0.0.0.0/0 dns -d 192.1.2.0/24 -j ACCEPT
## Si on utilise le masquage
# On ne masque pas le trafic interne
/sbin/ipchains -A forward -s 192.1.2.0/24
-d 192.1.2.0/24 -j ACCEPT
# On ne masque pas l'interface externe
directe
/sbin/ipchains -A forward -s 199.1.2.0/24
-d 0/0 -j ACCEPT
# On masque tout paquet interne qui sort
/sbin/ipchains -A forward -s 192.1.2.0/24
-d 0/0 -j MASQ
## On interdit tout le reste
/sbin/ipchains -P my-chains input DENY
Il ne faut pas s'arrêter là. Ce n'est pas un pare-feu
très puissant et je suis sûr qu'il y a d'autres services que
vous souhaiteriez fournir. À nouveau, lisez le IPCHAINS-HOWTO.
8. Rendre le tout plus simple
Il existe des interfaces graphiques ou fondées sur le web développées
pour fonctionner avec les règles de filtrage Linux. Un certain nombre
d'entreprises ont même créé des pare-feux commerciaux
fondés sur Linux en le plaçant dans leur propre machine avec
leur propre code de management (joli).
gfcc (GTK+ Firewall Control Center) est une application GTK+ capable
de contrôler les principes et règles de filtrage de Linux,
fondée sur le paquetage ipchains. Rendez-vous sur <http://megaman.ypsilonia.net/kfirewall/>.
FCT est un outil HTML de configuration de pare-feu. Il permet la génération
automatique de scripts de commandes de filtrage IP (ipfwadm) sur un pare-feu
pour des interfaces multiples et tout service internet http://www.fen.baynet.de/~ft114/FCT/firewall.htm
Voilà, c'est ici que s'arrête cet intéressant et populaire HOWTO sur les firewalls sous linux. Ce n'est pas moi qui l'ai écrit, je me suis juste occupé de la mise en forme. Donc pour tout commentaires regardez les références au début.