Page suivante Page précédente Table des matières

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 :

  1. utiliserez-vous des adresses IP réelles ou non pour votre réseau local ?
  2. 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.

            199.1.2.10   __________    192.168.2.1
      _  __  _        \ |          | /           ___________
     | \/  \/ |        \| Systeme  |/           | Postes de |
    / InterNet \--------| pare-feu |------------|  travail  |
    \_/\_/\_/\_/        |__________|            |___________|

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.


Page suivante Page précédente Table des matières