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

4. FIREWALLING

4.1 Logiciel et lectures

Vous devriez lire le Firewall-HOWTO.

Il vous indiquera où trouver ipfwadm si vous ne l'avez pas déjà. Vous pouvez également récupérer d'autres outils, mais seulement ipfwadm m'a été utile. C'est pratique et de bas niveau ! Vous pouvez voir exactement ce qu'il fait.

4.2 Vérifications préliminaires

Vous avez compilé l'IP-forwarding et le masquerading dans le noyau, et vous allez vérifier que le firewall est dans son état par défaut (il accepte) grâce à :

ipfwadm -I -l
ipfwadm -O -l
ipfwadm -F -l

Ce qui, dans l'ordre, "affiche les règles affectant la partie .."entrante ou sortante ou qui fait suivre (masquerading) ".. du firewall". L'option "-l" signifie "lister".

Si vous avez compilé l'IP accounting également :

ipfwadm -A -l

Vous devriez constater qu'aucune règle n'est définir et que l'action par défaut est d'accepter tous les paquets. Vous pouvez retourner à cet état à tout moment, avec :

ipfwadm -I -f
ipfwadm -O -f
ipfwadm -F -f

L'option "-f" signifie "flush" (en français, "vider"). Vous pourriez en avoir besoin.

4.3 Règle par défaut

Je veux interdire l'accès au monde entier depuis mon réseau interne, et rien d'autre, donc je vais donner comme dernière règle (comme règle par défaut) une règle indiquant d'ignorer les paquets venant du réseau interne et dirigés vers l'extérieur. Je place toutes les règles (dans cet ordre) dans le fichier /etc/rc.d/rc.firewall que j'execute depuis /etc/rc.d/rc.local au démarrage.

ipfwadm -I -a reject -S 192.168.2.0/255.255.255.128 -D 0.0.0.0/0.0.0.0

Le "-S" représente l'adresse source/masque de sous-réseau. L'option "-D" est pour l'adresse destination/masque de sous-réseau.

Ce format n'a plus le vent en poupe. ipfwadm est intelligent et connaît des abréviations courantes. Vérifier les pages de manuel.

Il peut être plus pratique de placer certaines ou toutes les règles sur la partie sortante du firewall en utilise "-O" au lieu de "-I", mais je supposerai que les règles sont conçues pour être utilisées sur la moitié entrante.

4.4 Accès par adresse

Avant la règle par défaut, je dois placer des règles qui servent d'exceptions pour cette interdiction générale des services extérieurs aux clients intérieurs.

Je veux traiter les adresses des machines derrière le firewall de manière spéciale. Je veux empêcher aux gens de se loguer sur la machine qui sert de firewall à moins qu'elles aient une permission spéciale, mais une fois connectées, elles devraient être capables de parler au monde extérieur.

ipfwadm -I -i accept -S 192.168.2.100/255.255.255.255 \
 -D 0.0.0.0/0.0.0.0

Je veux également que les clients internes soient capables de parler à la machine faisant firewall. Peut-être pourront-elles la persuader de les laisser sortir !

ipfwadm -I -i accept -S 192.168.2.0/255.255.255.128 \
 -D 192.168.2.100/255.255.255.255

Vérifiez que vous pouvez joindre les machines à l'intérieur du firewall depuis l'extérieur par telnet, mais que vous ne pouvez pas sortir. Vous pouvez faire le premier pas, mais les clients ne peuvent pas vous envoyer de messages. Essayez également rlogin et ping avec tcpdump lancé sur une carte ou l'autre. Vous devriez être capable de comprendre ce que vous lirez.

4.5 Accès par protocole

J'assouplis les règles protocole par protocole. Je veux que les pings depuis l'extérieur vers l'intérieur obtiennent une réponse, par exemple, donc j'ai ajouté la règle :

ipfwadm -I -i accept -P icmp -S 192.168.2.0/255.255.255.128 \
 -D 0.0.0.0/0.0.0.0

L'option "-P icmp" correspond au protocole tout entier.

Avant que j'installe un proxy ftp, j'autorise également les appels ftp sortants en relâchant les restrictions sur un port donné. Ceci vise les ports 20, 21 et 115 sur les machines externes :

ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 \
 -D 0.0.0.0/0.0.0.0 20 21 115

Je n'ai pas pu faire fonctionner sendmail entre les clients locaux sans serveur de noms. Au lieu d'installer un serveur de nom directement sur le firewall, j'ai juste autorisé les requêtes TCP de résolution de nom visant le plus proche serveur de nom, et j'ai placé son adresse dans le fichier /etc/resolv.conf des clients. ("nameserver 123.456.789.31" sur une ligne séparée).

ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 \
 -D 123.456.789.31/255.255.255.255 54

Vous pouvez trouver quel numéro de port et protocole requiert un service grâce à tcpdump. Utilisez ce service avec un ftp ou un telnet ou autre vers ou depuis une machine interne, et observez-le sur les ports d'entrée et de sortie du firewall avec tcpdump :

tcpdump -i eth1 -e host client04

par exemple. Le fichier /etc/services/ est une importante source d'indices. Pour laisser ENTRER le telnet et le ftp depuis l'extérieur, vous devez autoriser un client local à envoyer des données vers l'extérieur sur un port donné. Je comprends pourquoi ceci est nécessaire pour le ftp (c'est le serveur qui établit la connexion de données), mais je me demande pourquoi telnet en a également besoin.

ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 ftp telnet \
 -D 0.0.0.0/0.0.0.0

Il existe un problème particulier avec certains démons qui cherchent le nom d'hôte de la machine firewall afin de décider quelle est leur adresse réseau. J'ai eu des problèmes avec rpc.yppasswdd. Il insiste sur des informations broadcast qui indiquent qu'il se trouve en dehors du firewall (sur la seconde carte). Cela signifie que les clients à l'intérieur ne peuvent pas le contacter.

Au lieu de lancer l'IP aliasing ou de changer le code source du démon, j'ai traduit le nom vers l'adresse de la carte du côté intérieur sur les clients, dans leur fichier /etc/hosts.

4.6 Vérifications

Vous voudrez tester que vous pouvez toujours utiliser telnet, rlogin et ping depuis l'extérieur. Depuis l'intérieur, vous devriez être capable d'utiliser ping vers la sortie. Vous devriez également être capables d'utiliser le telnet vers la machine firewall depuis l'intérieur, et cette dernière manipulation devrait vous permettre d'accéder au reste.

Et voilà. A présent, vous voulez probablement apprendre rpc/Yellow Pages et leur interaction avec le fichier de mots de passe. Le réseau derrière le firewall devrait vouloir empêcher aux utilisateurs non privilégiés de se logguer sur le firewall, et donc de sortir. C'est traité dans un autre HOWTO !


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