Accueil
Sommaire
Partie 1
Partie 2
Partie 3
Partie 4
Partie 5
Conclusion
Liens
DESMETTRE Julien
LEBON Samuel
FI 2001
RIO 2000
|

Dans cette partie, nous allons nous concentrer à décrire la transformation d'une machine Linux en routeur firewall, en respectant les principales fonctionnalités décrites dans la première partie, et quelles sont les commandes ou applications à utiliser.
1. Routage des paquets
1.1. Commande " route "
Il est nécessaire dans un premier temps de configurer les interfaces réseau de la machine Linux fonctionnant en tant que routeur firewall. Pour cela on utilise ifconfig.
Pour visualiser la table de routage, utiliser la commande suivante :
user% cat /proc/net/route
ou bien :
user% /sbin/route -n
user% netstat -r
Pour manipuler cette table de routage, une commande spéciale est utilisée, " route ", qui permet d'ajouter, de supprimer, ou de modifier des entrées dans la table de routage.
Exemples :
- un réseau Ethernet avec un classe C privée : 192.168.1.0 l'adresse 192.168.1.1 est l'adresse du routeur connecté à internet.
root# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
root# route add default gw 192.168.1.1 eth0
" up " active l'interface. D'autres paramètres sont possibles : down, -arp, -allmulti, mtu N, netmask addr, -broadcast addr, -pointopoint addr...
- 3 réseaux Ethernet et une passerelle (routeur) supportant PPP :
root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
root# route add -net 192.168.2.0 netmask 255.255.255.0 eth1
root# route add -net 192.168.3.0 netmask 255.255.255.0 eth2
root# route add default ppp0
L'inconvénient de ce routage est qu'il est statique : tout problème sur une des machines rend inopérant le routage des informations. C'est pourquoi il est possible de réaliser un routage dynamique sous Linux, avec les protocoles traditionnels comme RIP ou OSPF : " routed -RIP " et " gated - RIP "...
Ces implémentations sont incluses dans le package Netkit.
Avec une allocation statique de la table de A, celle-ci serait alors définie par les commandes suivantes :
root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
root# route add -net 192.168.2.0 netmask 255.255.255.0 ppp0
root# route add -net 192.168.3.0 netmask 255.255.255.0 ppp1

Si le lien entre A et B tombe en panne, il n'y a pas de route de secours, alors qu'il pourrait emprunter temporairement le routeur C pour atteindre B. C'est pourquoi les routeurs doivent lancer un démon pour ajuster leurs tables de routage en fonction de la topologie variable du réseau.
Pour le routeur A :
root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
root# /usr/sbin/routed
Le démon routed détectera automatiquement tous les ports actifs du routeur, enverra sa propre table de routage et recevra celles de ses voisins (dans le cas de RIP).
Ces démons peuvent opérer de deux manières différentes :
- standalone : le démon " écoute " toute tentative de connexion et gère cette connexion lui-même pour fournir le service correspondant ;
- slave (esclave du serveur inetd) : inetd est un démon spécialisé dans la gestion des demandes de connexion : il possède un fichier de configuration qui lui précise quels programmes ont besoin d'être lancés quand une demande de connexion est reçue.
Deux fichiers ont besoin d'être configurés avec précaution : /etc/services qui assigne les noms de service et les numéros de port associés, et /etc/inetd.conf qui est le fichier de configuration pour le démon inetd.
D'autres fichiers de configuration réseau existent :
- /etc/protocols : allouer un nom à un protocole particulier, au lieu d'un identifiant chiffré ; surtout utilisé par les programmeurs pour rendre explicites leurs programmes
- /etc/networks : fonction similaire à /etc/hosts, réalise la correspondance entre les noms réseau et des adresses IP
- ...
Pour assurer un minimum de sécurité, on utilise également le fichier /etc/inetd.conf pour indiquer les différents services que l'on ne désire pas utiliser, comme par exemple login, exec, ftp, finger, netstat.
Prenons l'exemple de /etc/ftpusers, qui permet d'interdire les connexions FTP à certains utilisateurs. Ceci est géré par le démon ftpd. Dans les versions 2.0 et inférieures du noyau Linux, la commande standard de routage permettait de placer de simples routes dans une seule table de routage.
Dans les noyaux 2.1 et supérieurs, une autre option est disponible : celle-ci est basée sur des règles et permet d'avoir plusieurs tables de routage simultanées, ce qui permet une plus grande flexibilité et réactivité en décidant comment le paquet est routé : on peut désormais choisir entre plusieurs routes en se basant non seulement sur l'adresse destination, mais aussi sur l'adresse source, le ToS...
Pour lister et modifier la table de routage d'une machine dans les dernières versions du noyau, on utilise la commande ip route :
207.149.43.62 dev eth0 scope link
207.149.43.0/24 dev eth0 proto kernel scope link src 207.149.43.62
default via 207.149.43.1 dev eth0
La première ligne correspond à l'adresse de l'interface Eth0
Tout ce qui va vers l'adresse 207.149.43.0 doit sortir par l'interface Eth0
La dernière ligne est la route par défaut.
Pour ajouter une ligne dans la table de routage on fait comme suit :
ip route add 207.149.43.62 dev eth0 scope link
ip route add 207.149.43.0/24 dev eth0 proto kernel scope link src 207.149.43.62
ip route add 127.0.0.0/8 dev lo scope link
ip route add default via 207.149.43.1 dev eth0
Il est également possible de réaliser un filtrage NAT avec ip route :
ip route add nat 195.113.148.34 via 192.168.0.2
ip route add nat 195.113.148.32/27 via 192.168.0.0
La première ligne indique que l'adresse interne 192.168.0.2 est accessible via 195.113.148.34. La seconde ligne montre que le pool d'adresses 192.168.0.0 à 192.168.0.31 communique avec le pool d'adresses publiques 195.113.148.32 à 195.113.148.63.
1.2. Routage Multicast
Il est également possible de configurer Linux en tant que routeur multicast. Pour uniquement envoyer et recevoir du trafic multicast, il faut juste d'activer l'option " IP : multicasting " lorsque l'on configure le noyau.
Par contre, pour que Linux soit effectivement configuré comme un véritable routeur multicast (démon mrouted, réception, transit de trafic multicast), il est nécessaire d'activer l'option " IP : forwarding/gatewaying " , " IP : multicast routing " et " IP : tunneling ". Cette dernière option est nécessaire car les nouvelles versions de mrouted se basent sur l'IP tunnelling pour envoyer des datagrammes mutlicast encapsulés dans des datagrammes unicast. Ceci est utilisé lorsque des routeurs mutlicast sont séparés par des routeurs unicast (utilisation de CBT : Core-Based Tree avec le protocole PIM Sparse Mode).
Pour obtenir une version de mrouted :
ftp://www.video.ja.net/mice/mrouted/Linux/
Un article sur les applications multicast sous Linux : http://www.cs.virginia.edu/~mke2e/multicast/
Enfin, quelques applications spécifiques au multicast et fonctionnant sous Linux :
Audioconférence :
- NeVoT - Network Voice Terminal : http://www.fokus.gmd.de/step/nevot
- RAT - UCL Robust-Audio Tool : http://www-mice.cs.ucl.ac.uk/mice/rat
- vat - LBL visual audio tool : http://www-nrg.ee.lbl.gov/vat/
Vidéoconférence :
- ivs - Inria video conferencing system : http://www.inria.fr/rodeo/ivs.html
- nv - Network video tool : ftp://ftp.parc.xerox.com/pub/net-research/
- nv w/ Meteor - Release of nv w/ support for the Matrox Meteor (UVa) :
ftp://ftp.cs.virginia.edu/pub/gwtts/Linux/nv-meteor.tar.gz
- vic - LBL video conferencing tool : http://www-nrg.ee.lbl.gov/vic/
- vic w/ Meteor - Release of vic w/ support for the Matrox Meteor (UVa) :
ftp://ftp.cs.virginia.edu/pub/gwtts/Linux/vic2.7a38-meteor.tar.gz
Autres utilitaires :
- mmphone Multimedia phone service :
http://www.eit.com/software/mmphone/phoneform.html
- wb - LBL shared white board : http://www-nrg.ee.lbl.gov/wb/
- webcast - Reliable multicast application for linking Mosaic browsers :
http://www.ncsa.uiuc.edu/SDG/Software/XMosaic/CCI/webcast.html
Pour plus d'informations sur le multicast sous Linux consulter le site :
http://icewalkers.com/doclib/howtos/Multicast-HOWTO-6.html, qui rassemble de nombreuses informations sur mrouted, la création d'applications multicast.
Linux Multicast Homepage : http://www.cs.virginia.edu/~mke2e/multicast.html
Le routage des paquets seul n'est une sécurité suffisamment fiable pour un réseau d'entreprise. Une solution d'analyse et de filtrage des paquets transitant à travers le routeur doit être implémentée, afin de garantir le plus possible la sécurité des données.
C'est pourquoi il existe sous Linux une batterie de commandes réalisant ces fonctions, et ce depuis les premières versions du noyau. Nous allons maintenant présenter par ordre chronologique quelques-uns d'entre elles : ipfwadm, IPChains et Netfilter.
2. Filtrage des paquets : ipfwadm
Les anciennes versions du noyau Linux incluaient en natif un logiciel de filtrage de paquets, ainsi qu'une fonction de masquerading. Il fallait juste employer un module appelé ipfwadm permettant de configurer ces fonctions dans le noyau. Ipfwadm était disponilbe jusqu'aux versions 2.1 du noyau Linux. IPChains le remplace dans les versions 2.2.x, et sera décrit en détail au chapitre suivant.
Ipfwadm était compris dans les distributions RedHat ou Mandrake et probablement dans les autres. Il s'agit d'un petit module simple à utiliser, adapté pour les petits réseaux, et dédié aux personnes qui ne sont pas des professionnels de l'administration, et qui désirent apporter un niveau de sécurité supplémentaire au réseau.
Pour utiliser ses fonctions, il faudra cependant suivre la procédure suivante, et recompiler le noyau comme suit :
Aller dans le répertoire /usr/src/linux puis faire make xconfig :
Lorsque l'utilitaire de configuration du noyau apparait :
Sélectionner networking options, puis, dans le menu à l'écran, sélectionner :
- Activer le firewall réseau,
- Activer le protocole TCP/IP,
- Activer la transmission / routage IP (forwarding/gatewaying),
- Activer le firewalling IP,
- Activer la trace des paquets de firewall (ce n'est pas indispensable mais utile),
- Activer le masquage (masquerading) pour autoriser le protocole NAT,
- Activer le masquage pour ICMP, nécessaire pour pouvoir utiliser ping et traceroute, qui utilisent ce protocole.
- Activer la gestion des comptes (" accounting "),
- l'aliasing n'est pas nécessaire, mais utile pour simuler plusieurs cartes réseau à des fins de test.
Il faut maintenant sauvegarder les modifications du noyau :
Taper les commandes à la suite :
- make dep,
- make clean,
- make zImage,
- make modules, pour recompiler le noyau et les modules associés.
Il ne reste plus à ce stade qu'à réinstaller le noyau et à redémarrer la machine.
Il ne faut pas perdre de vue qu'une machine firewall doit, pour jouer son rôle de protection, posséder deux interfaces réseau. En effet, si ce n'est pas le cas, rien n'empêche une station sur le réseau externe d'accéder directement au réseau interne sans passer par le firewall, le rendant ainsi inutile.
Si les deux interfaces réseau sont des cartes Ethernet, il faudra également configurer le noyau pour qu'il puisse gérer les deux cartes. Ce sujet n'est pas traité ici, on pouurra se reporter au Multi-Ethernet mini-HOWTO pour plus de précisions : http://tellaw.free.fr/howto/Multi-Ethernet.html ou http://www.linux-kheops.com/doc/howto/MINI.html/Multi-Ethernet-1.html
Cependant, une configuration plus modeste et probablement plus répandue peut se limiter à une seule carte Ethernet pour le réseau local, et une connexion PPP vers Internet . Dans ce cas il n'y a rien de plus à ajouter à la configuration Linux que la connexion PPP classique vers le fournisseur d'accès.
Un dernier point est à contrôler : Linux possède un interrupteur général autorisant (ou non) le passage des trames IP d'une interface à l'autre. Si cet interrupteur est à off, aucun passage ne sera autorisé quelle que soit la configuration appliquée. Il faut donc le mettre à on.
Les commandes suivantes permettent de vérifier très simplement l'état de cet interrupteur :
cat /proc/sys/net/ipv4/ip_forward
si l'on obtient 0 : pas de passage ; 1 : passage autorisé selon la configuration.
On peut bien sur changer l'état de cet interrupteur de la ligne de commande :
echo 1 > /proc/sys/net/ipv4/ip_forward
Le nom et l'emplacement du fichier peuvent être différents selon les distributions. Par exemple, les distributions RedHat et Mandrake forcent cet interrupteur à off par défaut. Ceci est configurable dans le fichier /etc/sysconfig/network où il suffit de changer FORWARD_IPV4=false par true.
A ce stade, la machine Linux se comporte comme un firewall. Encore faut-il maintenant la configurer correctement afin qu'elle remplisse les règles de sécurité définies par l'entreprise. Nous allons toujours utiliser la commande ipfwadm à partir de la ligne de commande du shell :
Par défaut, interdire tout passage, comme dans toute configuration de firewall :
ipfwadm -F -p deny
Vider toutes les règles de filtrage : maintenant, nous avons un firewall absolu, rien ne peut passer au travers :
ipfwadm -F -f
ipfwadm -I -f
ipfwadm -O -f
En fonction des applications, nous allons maintenant autoriser quelques services à passer à travers le firewall.
L'entreprise prise ici comme exemple possède une adresse privée de classe C : 192.168.61.0 à 192.168.61.255. Parmi ces adresses, quelques-unes sont remarquables :
- serveur web : 192.168.61.1
- serveur de messagerie : 192.168.61.3
Autoriser l'accès de l'e-mail (SMTP:25) au serveur :
ipfwadm -F -a accept -b -P tcp -S 0.0.0.0/0 1024:65535 -D 192.168.61.3 25
Autoriser les connexions e-mail (SMTP:25) vers les serveurs exterieurs :
ipfwadm -F -a accept -b -P tcp -S 192.168.61.3 25 -D 0.0.0.0/0 1024:65535
Autoriser les connexions web (HTTP:80) vers le serveur web de l'entreprise (trafic HTTP entrant) :
/sbin/ipfwadm -F -a accept -b -P tcp -S 0.0.0.0/0 1024:65535 -D 192.168.61.1 80
Autoriser les connexions web de toutes les machines du réseau local vers les serveurs web extérieurs :
/sbin/ipfwadm -F -a accept -b -P tcp -S 196.168.61.* 80 -D 0.0.0.0/0 1024:65535
Autoriser le trafic DNS :
/sbin/ipfwadm -F -a accept -b -P udp -S 0.0.0.0/0 53 -D 196.168.61.1/24
Masquer un réseau entier par le firewall :
ipfwadm -F -p deny
ipfwadm -F -a m -S 192.168.61.0/24 -D 0.0.0.0/0
Ou bien masquer certaines adresses seulement :
ipfwadm -F -p deny
ipfwadm -F -a m -S 192.168.61.4/32 -D 0.0.0.0/0
ipfwadm -F -a m -S 192.168.61.10/32 -D 0.0.0.0/0
Selon les besoins, ne pas oublier d'insérer les modules nécessaires au masquage de certains protocoles :
/sbin/modprobe ip_masq_ftp.o
/sbin/modprobe ip_masq_irc.o
/sbin/modprobe ip_masq_cuseeme.o
Tous ces paramètres ne sont pas évidents à remplir quand on veut obtenir une solution qui corresponde aux besoins de l'entreprise : autoriser tel ou tel trafic, en interdire un autre… De plus, comme habituellement dans le monde Unix, les paramètres à entrer derrière les commandes sont impossibles à retenir.
Pour plus de convivialité il existe une interface graphique qui reprend les fonctionnalités de ipfwadm : Easyfw.
Easyfw, locigiel écrit en tcl/tk, permet de générer automatiquement un script de commande ipfwadm, qu'il est possible ensuite d'exécuter indépendamment ou non de easyfw.
Easyfw permet de créer les règles de filtrage de manière visuelle et plus facilement ; mais surtout, il permet d'appliquer des configurations prédéfinies, et de créer ses propres configurations, ce qui rend la configuration du firewall beaucoup plus aisée.
On peut le trouver à l'adresse suivante : http://www.linux-kheops.com/pub/easyfw/
3. Translation d'adresses
3.1. Compilation du noyau
Voici les options à compiler dans le noyau pour activer l'IP Masquerading :
|
Rubrique
|
Option
|
|
|
Networking options
|
TCP/IP networking
|
Y
|
|
Networking options
|
IP: firewalling
|
Y
|
|
Networking options
|
IP: transparent proxy support
|
N
|
|
Networking options
|
IP: masquerading
|
Y
|
|
Networking options
|
IP: ICMP masquerading
|
Y
|
|
Networking options
|
IP: masquerading special modules support
|
Y
|
|
Networking options
|
IP: ipautofw masq support
|
M
|
|
Networking options
|
IP: ipportfw masq support
|
M
|
|
Networking options
|
IP: ip fwmark masq-forwarding support
|
M
|
3.2. Installation des modules au démarrage
Une fois la compilation des modules de l'IP Masquerading effectuée, celle-ci va créer plusieurs modules situés dans /lib/modules/version du kernel/ipv4 dont les suivants :
- ip_masq_autofw : masquage de protocole n'ayant pas encore de support,
- ip_masq_cuseeme : Microsoft Cuseeme,
- ip_masq_ftp : FTP,
- ip_masq_irc : IRC,
- ip_masq_mfw : masquage port local vers exterieur avec selection des packets à rediriger,
- ip_masq_portfw : masquage de port local vers l'exterieur,
- ip_masq_quake : Quake,
- ip_masq_raudio : Real Audio,
- ip_masq_vdolive : VDO Live.
- ...
L'installation des modules s'effectue par la commande /sbin/modprobe nom du module.
Pour tout savoir sur le masquerading sous Linux, visiter le site http://ipmasq.cjb.net/
L'IP Masquerade HOWTO est disponilbe sur :
http://www.e-infomax.com/ipmasq/howto/ipmasq-howto-1.90c.html
Avec la translation d'adresses IP se pose toujours le problème des applications qui supportent ce protocole : ce site recense quelques applications qui fonctionnent via le NAT : http://ipmasq.cjb.net/, et précise les paramètres à modifier ou ajouter dans les configurations de sécurité (IPChains ou ipfwadm).
Il propose en outre quelques liens utiles comme http://www.coritel.it/projects/sofia/nat.html, qui renseigne sur l'utilisation du protocole H.323 à travers un routeur NAT Linux, et fournit le module associé.
4. Un outil plus puissant que ipfwadm : IPChains
4.1. Fonctionnalités
C'est aujourd'hui le standard en terme de filtrage des paquets, depuis les versions de noyau 2.1.
Tout comme ipfwadm, IPChains est dérivé de ipfw, un système présent sur d'autres systèmes Unix.
Une description complète de son installation et de sa configuration est disponible à l'adresse suivante : http://www.ifrance.com/airwex/sans_applet/securite/ipchains.htm
La référence HOWTO de IPChains : http://www.linuxdoc.org/HOWTO/IPCHAINS-HOWTO.html
IPChains est plus puissant que ipfwadm, et possède des fonctionnalités supplémentaires à celles traditionnelles réalisées par ipfwadm :
- Comptage de trafic,
- Blocage de trafic non souhaité,
- Masquage d'adresses (n : 1),
- Détournement vers un service local.

Chaque règle sélectionne les paquets sur les critères :
- Adresse IP source du paquet,
- Adresse IP destination du paquet,
- Type de protocole (TCP, UDP, ICMP),
- Port de protocole adressé (source, destination),
- Interface IP traversée,
- Type de paquet (connexion, transfert).
Chaque règle permet les actions suivantes :
- Autorisation du paquet,
- Destruction du paquet,
- Rejet du paquet avec message d'erreur,
- Détournement du paquet sur un serveur local.
Pour préparer le noyau Linux pour le firewall, il faut recompiler avec les options suivantes (on suppose ici que la connexion réseau fonctionne, et que l'IP masquerading est bien configuré) :
|
Rubrique
|
Option
|
|
|
Networking options
|
Packet socket
|
Y
|
|
Networking options
|
Kernel/User netlink socket
|
Y
|
|
Networking options
|
Netlink device emulation
|
Y
|
|
Networking options
|
Network firewalls
|
Y
|
|
Networking options
|
Unix domain sockets
|
Y
|
|
Networking options
|
TCP/IP networking
|
Y
|
|
Networking options
|
IP: firewalling
|
Y
|
|
Networking options
|
IP: firewall packet netlink device
|
Y
|
Une chaîne peut être assimilée à une politique de sécurité par rapport à des services prédéfinis faisant partie de cette politique. Ces chaînes sont décidées et définies par l'administrateur.
Exemple :
- la chaîne INTERNET : tous les flux venant d'internet seront " matchés " par cette chaîne,
- la chaîne COMPTA : tous les flux venant des machines faisant partie du service comptabilité seront matchés par cette politique,
- la chaîne DIRECTION : tous les flux venant des machines faisant partie de la Direction seront matchés par cette politique.
IPChains fournit trois chaînes de base, et tous les paquets commencent par l'une de ces chaînes :
- INPUT : tout les paquets arrivant sur une interface réseau de votre machine en provenance d'Internet,
- FORWARD : les paquets qui passent juste à travers votre machine,
- OUTPUT : tous les paquets quittant votre machine vers Internet.
Chaque règle a une cible qui lui dit comment se comporter avec le paquet. Si un paquet atteint la fin d'une chaîne sans rencontrer de règle, la cible par défaut du paquet est utilisée :
- ACCEPT : laisse tous les paquets passer à travers le firewall,
- REJECT : n'accepte pas le paquet. Si le paquet en question n'est pas un paquet ICMP, il renvoie un message ICMP ("Host unreachable") à l'expediteur,
- DENY : n'accepte pas le paquet et ne répond pas. Ignore simplement l'expediteur,
- MASQ : pour le forward uniquement. Laisse le paquet entrer et le renvoie après analyse à l'adresse locale correspondante,
- REDIRECT : chaîne input uniquement. Envoie le paquet à une socket locale ou un procesus. Peut être appliqué aux paquets UDP ou TCP,
- RETURN : équivalent à laisser tomber la fin d'une chaîne, soit en invoquant une cible d'une chaîne, soit en retournant à l'appelant,
- Rien de spécifié : normalement utilisée pour l'accounting. Les compteurs bytes et paquet des règles seront incrémentés, mais le paquet passera à la règle suivante dans la chaîne.
4.2. Exemple complet et commenté
Cliquez ici
Tout comme ipfwadm, il existe un outil pour configurer IPChains, GFCC, qui permet de configurer son firewall sous interface X. Il est téléchargeable sur http://joayo.net/~tri
Mais il est difficile d'être sans reproche vis-à-vis des règles de filtrage. Ainsi, il faut maîtriser les lignes de commandes qui définissent les règles.
Exemple :
ipchains -A eth3_i -j ACCEPT -i eth3 -p udp -s ipdns -d any/0 53
ipchains -A eth0_i -j ACCEPT -i eth0 -p udp -s any/0 53 -d ipdns
Cette configuration possède un trou de sécurité au niveau UDP, car les requêtes pourraient dans le cas présent être émises de n'importe quel port, y compris le port 53 normalement dédié. Cela est corrigé en éliminant les requêtes DNS n'utilisant pas le port 53.
ipchains -A eth3_i -j ACCEPT -i eth3 -p udp -s ipdns 53 -d any/0 53
ipchains -A eth0_i -j ACCEPT -i eth0 -p udp -s any/0 53 -d ipdns 53
4.3. Inconvénients de IPChains
L'inconvénient, selon les spécialistes, est que le même outils est utilisé pour contrôler à la fois la translation d'adresses et le firewall, bien que ce soient deux notions bien différentes et séparées de la notion de filtrage de paquets. Pour preuve, la translation d'adresses et le proxy sont couvertes par deux HOWTOs différentes.
Nous allons maintenant nous intéresser à la dernière version de firewall sous Linux : NetFilter.
5. NetFilter : la prochaine génération de filtrage IP
Nous allons maintenant exposer le fonctionnement de NetFilter, qui s'inspire fortement de ses prédécesseurs. Pour l'instant, Netfilter n'est utilisable qu'avec les noyaux de développement 2.4 (risques d'instabilité).
Après avoir installé Netfilter et recompilé le noyau, il faut exécuter les commandes suivantes :
- cd /usr/src/linux
- make [ config | menuconfig | xconfig ]
Intégrer les fonctionnalités suivantes :
- Network packet filtering (replaces IPChains) : CONFIG_NETFILTER = y
- Network packet filtering debugging : CONFIG_NETFILTER_DEBUG = y
- Socket Filtering : CONFIG_FILTER = y
Compiler le noyau, comme sous ipfwadm.
Récupérer Netfilter sur le site officiel :
- cd usr/src/archives
- wget -m http://www.samba.org/netfilter/netfilter-0.1.17.tar.bz2
- md5sum netfilter-0.1.17.tar.bz2
85aefbdf845b520cf316e37ae92d6501 netfilter-0.1.17.tar.bz2
Comparer les deux sommes MD5 : somme de MD5 sur le site officiel :
md5sum 85aefbdf845b520cf316e37ae92d6501
Désarchivage et compilation de Netfilter :
- cd usr/src
- bzip2 -dc /usr/src/archives/netfilter-0.1.17.tar.bz2
- cd usr/src/netfilter-0.1.17
- make
- make install
Netfilter réalise un filtrage des paquets IP avec contrôle des tables d'état : il vérifie que les paquets de retour correspondent bien aux fenêtres et au numéro de séquences.
Netfilter permet comme ses prédéceseurs le filtrage d'adresses (avec l'outil ipnatctl). Iptables gère quant à lui les filtres : http://www.samba.org/netfilter/ipnatctl-HOWTO.html :
- redirection de ports (port-forwarding),
- relayage transparent (transparent proxying).
Netfilter permet de faire de l'accounting : comptage des paquets pour d'éventuelles refacturations en interne.
Netfilter intègre également la possibilité de garder en mémoire, dans une table d'états, les connexions en cours. Cela permet d'associer que tel client (adresse IP cliente) est en train de faire quelque chose vers tel serveur (adresse IP serveur) : connexion du port source x vers le port source y.
On ne filtre plus simplement maintenant sur le filtrage TCP/UDP, mais sur l'état en cours des connexions. Le fenêtre du paquet de retour correspond bien à la transaction en cours, et aux numéros de séquences associés.
Quelques différences sont à noter entre IPChains et Netfilter, notammment au niveau de la syntaxe des commandes, plus précises et faisant la différence entre l'entrée et la sortie des interfaces :
- une règle INPUT associée en " -o " (output) ne sera jamais consultée,
- une règle OUTPUT associée en " -i " (input) ne sera jamais consultée,
- une règle FORWARD peut être associée en " -i " et " -o ".
Il existe une option de filtrage uniquement sur le bit " SYN " de l'en-tête TCP, et non plus sur l'ensemble des 3 bits " SYN, ACK, FIN ".
L'action " DENY " est maintenant nommée " DROP ", ce qui est plus clair.
Pour créer une chaîne, réaliser la procédure suivante :
- iptables -N internet
Ensuite, on associe la chaîne " internet " à la chaîne INPUT (interface LAN nommée eth0) et on définit les règles de sécurité :
- iptables -A INPUT -i eth0 -j internet
- iptables -A internet -m state - - state ESTABLISHED, RELATED -j ACCEPT :
permet d'avoir le mode stateful (" ESTABLISHED "), et d'accepter les paquets ICMP d'erreur concernant la transaction (" RELATED ")
- iptables -A internet -p all -s any/0 -d any/0 -j LOG : tout ce qui arrive sur cette interface est matché par cette chaîne, et journalisé.
- iptables -A INTERNAL -p tcp --syn -s ipmail -d any/0 --dport 25 -j ACCEPT
La version de masquage avec NAT est complète et intégrée au noyau. Il existe des chaînes spécifiques au NAT : " PREROUTING " et " POSTROUTING ".
Exemples :
Masquage des adresses du réseau local :
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -s 192.168.61.0/24 -o eth0 -j SNAT -to 192.70.106.140
NAT en entrée :
iptables -t nat -F PREROUTING
iptables -t nat -A PREROUTING -d 192.70.106.141-j DNAT --to 192.168.61.1
Un inconvénient cependant, est que le filtrage est séparé, car effectué par des modules.
De nombreuses autres applications de sécurité sont disponibles. C'est au responsable sécurité de l'entreprise de déterminer celle la plus adaptée à ses besoins.
- Ip_filter : filtrage de paquets supportant NAT, pour les systèmes Unix,
- DANTE : une implémentation gratuite des protocoles proxy, tels SOCKS versions 4 et 5 (RFC 1928) ou MS-Proxy. Il peut être utilisé comme firewall,
- GFCC : interface de contrôle et d'administration pour les firewalls basés sur Linux, et qui régit des règles de sécurité (basés sur IPChains),
- SOCKS : un standard internet pour les firewalls, qui peut aussi être utilisé pour construire des VPN : http://www.socks.nec.com
- SQUID : un serveur proxy performant pour HTTP, FTP, DNS : http://www.squid-cache.org
- TinyProxy : proxy HTTP, idéal pour les petits réseaux où Squid serait trop gourmand.
- Intégration avec OpenLDAP : http://www.openldap.org
6. VPN et tunnels
L'avantage du VPN est qu'il est transparent pour les utilisateurs, une fois mis en place.
Pour la création de tunnels sous Linux, on peut utiliser le module CIPE (à partir de la version 2.x du noyau ; fichier de configuration dans etc/cipe). C'est un outil simple et bien documenté.
Il génère deux composants : un module noyau qui se chargera du chiffrement et un pilote.
Pour plus d'informations sur CIPE, visiter le site suivant : http://www.sites.inka.de/~bigred/devel/cipe.html
Il est également possible d'utiliser le protocole PPTP ou IPSec, bien que IPSec ne soit pas disponible par défaut dans les piles TCP/IP ; il faut ajouter un élément spécifique : FreeS/WAN, téléchargeable à l'adresse : http://www.xs4all.nl/~freeswan
Avec IPSec, chaque paquet IP échangé est chiffré et/ou authentifié. Sa mise en œuvre est possible sur tout équipement du réseau : routeur, serveur, station de travail...
Deux modes sont possibles :
- mode Transport : sécurisation de bout en bout, en-tête non modifiée,
- mode Tunnel : encapsulation dans un nouveau paquet IP.
Un site qui propose un VPN gratuit sous Linux : VPS 2.0 en version Beta :
http://www.strongcrypto.com/
Un site complet recense l'état de l'art sur VPN sous Linux :
ftp://ftp.rubyriver.com/pub/jhardin/masquerade/ip_masq_vpn.html
Le HOWTO du VPN sous Linux est disponible à l'adresse :
ftp://ftp.rubyriver.com/pub/jhardin/masquerade/VPN-howto/VPN-Masquerade.html
Le HOWTO du pare-feu et des serveurs mandataires :
http://www.freenix.org/unix/linux/HOWTO/Firewall-HOWTO.html
Ce HOWTO montre comment utiliser PPP pour relier deux réseaux locaux ensemble, et fournit une méthode pour configurer votre machine Linux comme serveur PPP :
http://www.freenix.org/unix/linux/HOWTO/PPP-HOWTO.html
Une FAQ sur PPP complète et très intéressante :
http://www.freenix.org/unix/linux/HOWTO/PPP-FAQ.html
De nombreux logiciels en Open Source permettent de réaliser du tunneling sous Linux. En voici quelques-uns :
- CIPE, que nous venons de citer précédemment,
- ECliPt Secure Tunnel : outil de chiffrement écrit en Python,
- NIST Cerberus : basé sur IPSec,
- PoPToP : un serveur Linux PPTP qui fonctionne également avec des clients NT,
- Slush : Slush est un projet destiné à créer une application simple de sécurité à distance en utilisant SSL/TLS pour la sécurisation des communications et X.509 pour l'authentification. L'objectif est à terme de fournir un logiciel gratuit capable de remplacer SSH.
7. Tests de vérification des fonctionnalités de sécurité
Linux est très appréciable du point de vue des tests car il est beaucoup plus pratique que Windows dans certains domaines :
- changement d'adresse IP sans réamorçage,
- facilité de création de datagrammes IP en C (libpcap) ou Perl (netrawip).
Il existe des centaines d'outils disponibles sur internet pour tester la sécurité d'un système Linux fonctionnant en réseau, et réalisant des fonctions de routage ou de firewalling.
Certains outils scannent les systèmes pour connaître leur vulnérabilité : SATAN (Security Administrator's Tool for Analyzing Networksest) reste le plus célèbre programme pour Unix : téléchargeable sur http://www.fish.com/~zen/satan/satan.html
D'autres programmes vérifient l'intégrité des données comme TRIPWIRE.
Et d'autres outils de vérification : ISS, C2 security, COPS, TIGER (qui fait partie de TAMU security), MD5.
Il est également possible pour l'administrateur de détecter les intrusions et les dysfonctionnements sur le réseau :
- BRO, SHADOW (http://www.nswc.navy.mil/ISSEC/CID/) ou SNORT (http://www.snort.org) sont libres,
- NFR est payant,
- TRINUX est une mini-distribution de Linux disposant d'outils de sécurité et de supervision du réseau : http://www.trinux.org
- NESSUS, scanner de réseau gratuit et téléchargeable sur http://www.nessus.org réalise des tests d'intrusion, et indique les différentes failles d'un réseau local et les précautions à prendre.
De nombreux outils qui fonctionnent sous Linux pour le " sniffage " de paquets. En voici quelques-uns :
- ETHEREAL : un analyseur de protocoles qui capture les trames qui circulent sur le réseau et analyse de nombreux protocles : ARP/RARP, BOOTP/DHCP, DNS, Ethernet, ICMP, IGMP, IP/TCP/UDP, IPX, LPR/LPD, OSPF, PPP, RIP, Token Ring, AppleTalk...
- IPGRAP,
- NGREP,
- TCPDUMP : le sniffer de paquets standard fonctionnant sous les systèmes Unix.
8. Autres solutions
La question de savoir pourquoi utiliser un PC pour réaliser les fonctions de routage et de firewalling peut amener deux principales réponses :
- l'entreprise dispose d'un nombre important de machines et ne souhaite pas investir dans un équipement spécifique de routeur firewall,
- l'entreprise souhaite gérer la sécurité de son réseau indépendamment de tout équipement de sécurité propriétaire, et par là même, remettre régulièrement à niveau la version de ses applications de sécurité indépendamment de tout fournisseur.
Sous Linux, il circule pour l'instant peu de virus (par rapport à Windows), ce qui rend le système d'exploitation plus résistant. Mais avec un réseau ouvert, Linux n'est en revanche pas mieux protégé de toutes les attaques liées au protocole TCP/IP.
Pour réaliser les fonctions de routage et de firewalling, il est préférable d'installer une version propriétaire de Linux, à laquelle sera ajoutée tous les éléments indispensables de sécurité (modules…) qui eux sont gratuits, et à laquelle on supprimera toutes les fonctions inutiles et sujets à des attaques (NFS…). A partir de là, la machine " extra-light " ne pourra plus servir exclusivement qu'aux fonctions auxquelles elle aura été destinée.
Si le responsable sécurité de l'entreprise ne souhaite cependant pas acquérir une solution firewall en Open Source, les plus grands constructeurs proposent des solutions complètes, mais payantes :
- Checkpoint, en partenariat avec RedHat, propose des solutions complètes de sécurité comme par exemple Meta IP 4.1, qui fournit les services DNS, DHCP, Firewall-One, VPN-One, LDAP… Son prix varie entre 445 $ pour la version Standard, et 9.995 $ pour la version Entreprise. Pour plus de renseignements, consulter le site officiel de Checkpoint : http://www.checkpoint.com. Tout comme Netiflter, la solution Meta IP 4.1 supporte le mode " stateful " de contrôle de session.
- Cisco, avec l'acquisition de la société Altiga, propose la solution VPN 5000 : http://www.cisco.com pour la réalisation de réseaux privés virtuels.
- La solution ProWall de Protectix : http://www.protectix.com, passerelle fédérant les fonctions de firewall (filtrage des paquets IP) et de routeur (NAT).
Ce type de solution vient cependant en contradiction avec l'objectif initial, c'est-à-dire réaliser une solution de sécurité " tout linux ", gratuite, performante et en Open Source.
|