Ce HOWTO a pour sujet le filtrage de paquets. Ce filtrage permet la prise de décision concernant le destin d'un paquet : s'il est autorisé à passer ou non. Cependant, Linux étant le joujou pour bidouilleurs qu'il est, vous voudriez probablement en savoir un peu plus.
Un des problèmes est que le même outil ("ipchains") est utilisé pour contrôler à la fois le camouflage et le cache transparent, alors que ce sont des notions séparées du filtrage de paquets (l'implémentation actuelle de Linux les brouille tous les trois de façon inhabituelle, laissant l'impression qu'ils sont très proches).
Le camouflage et le cachage sont recouverts par des HOWTOs séparés, et les possibilités de redirection automatique et de redirection de ports sont contrôlées par des outils séparés, mais puisque de nombreuses personnes continuent à me harceler à leur propos, je vais ajouter un ensemble de scénarios classiques en indiquant les moments où chacun doit être utilisé. Les mérites de la sécurité de chacun de ces scénarios ne seront néanmoins pas discutés ici.
Ces lignes présument que votre interface externe est appellée "ppp0". Utilisez ifconfig pour le vérifier, et ajustez selon votre goût.
# ipchains -P forward DENY
# ipchains -A forward -i ppp0 -j MASQ
# echo 1 > /proc/sys/net/ipv4/ip_forward
Vous pouvez acheter des pare-feu tout faits. Un excellent est le FireBox de WatchGuard. C'est excellent parce que je l'apprécie, parce qu'il est sécurisé, basé sur Linux, et parce qu'ils financent la maintenance d'ipchains ainsi que du nouveau code pare-feu (prévu pour le 2.3). En bref, WatchGuard me paye à manger lorsque je travaille pour vous. Donc, je vous prierai de prendre leur travail en compte.
Vous êtes petiteboite.com. Vous avez un réseau interne, et une connexion intermittente (PPP) simple à l'Internet (firewall.petiteboite.com a pour IP 1.2.3.4). Vous êtes en Ethernet sur votre réseau local, et votre machine personnelle s'appelle "mamachine".
Cette section illustrera les différents arrangements classiques. Lisez attentivement, car ils sont tous subtilement différents.
Dans ce scénario, les paquets venant d'un réseau privé ne traversent jamais l'Internet, et vice versa. Les adresses IP du réseau privé doivent être assignées en utilisant les adresses privées réservées par la RFC 1597 (càd 10.*.*.*, 172.16.*.* ou 192.168.*.*).
La seule méthode pour que les choses soient connectés à l'Internet est en se connectant au pare-feu, qui est la seule machine sur les deux réseaux qui sont connectés plus loin. Vous lancez un programme (sur le pare-feu) appellé un proxy pour ce faire (il y a des proxy (caches) pour le FTP, l'accès web, telnet, RealAudio, les News Usenet et autres services). Voyez le Firewall HOWTO.
Tous les services auxquels vous voulez que l'Internet puisse avoir accès doivent être sur le pare-feu (mais voyez Services internes limités plus bas).
Exemple : autoriser l'accès web d'un réseau privé vers l'Internet.
Netscape sur mamachine lit http://slashdot.org.
C'est-à-dire que du point de vue de slashdot.org, la connexion est réalisée par 1.2.3.4 (interface PPP du pare-feu), port 1025, vers 207.218.152.131 (slashdot.org) port 80. Du point de vue de mamachine, la connexion est faite de 192.168.1.100 (mamachine) port 1050, vers 192.168.1.1 (interface Ethernet du pare-feu), port 8080.
Dans ce scénario, les paquets venant du réseau privé ne traversent jamais l'Internet, et vice versa. Les adresses IP du réseau privé doivent être assignées en utilisant les adresses privées réservées par la RFC 1597 (càd 10.*.*.*, 172.16.*.* ou 192.168.*.*).
La seule méthode pour que les choses soient connectées à l'Internet est en se connectant au pare-feu, qui est la seule machine sur les deux réseaux, qui sont connectés plus loin. Vous lancez un programme (sur le pare-feu) appellé un cache transparent pour ce faire ; le noyau envoie les paquets sortants au cache transparent au lieu de les envoyer plus loin (càd qu'il rend bâtard le routage).
Le cachage transparent signifie que les clients n'ont pas besoin de savoir qu'il y a un proxy dans l'histoire.
Tous les services que l'Internet peut utiliser doivent être sur le pare-feu (mais voyez Services internes limités plus bas).
Exemple : autoriser l'accès web du réseau privé vers l'Internet.
Netscape sur mamachine lit http://slashdot.org.
C'est à dire que du point de vue de slashdot.org, la connexion est réalisée par 1.2.3.4 (interface PPP du pare-feu) port 1025 vers 207.218.152.131 (slashdot.org) port 80. Du point de vue de mamachine, la connexion est faite à partir de 192.168.1.100 (mamachine) port 1050, vers 207.218.152.131(slashdot.org) port 80, mais il parle en fait au proxy transparent.
Dans ce scénario, les paquets venant du réseau privé ne traversent jamais l'Internet sans traitement spécial, et vice versa. Les adresses IP du réseau privé doivent être assignées en utilisant les adresses privées réservées par la RFC 1597 (càd 10.*.*.*, 172.16.*.* ou 192.168.*.*).
Au lieu d'utiliser un cache, nous utilisons une spécificité spéciale du noyau nommée "camouflage" (masquerading). Le camouflage réécrit les paquets lorsqu'ils passent par le pare-feu, ce qui fait qu'ils semblent toujours venir du pare-feu lui-même. Il réécrit ensuite les réponses afin qu'elles semblent venir du destinataire originel.
Le camouflage dispose de modules séparés afin de gérer les protocoles "étranges", comme FTP, RealAudio, Quake, etc. Pour les protocoles vraiment difficiles à gérer, la spécificité de "redirection automatique" (auto forwarding) peut en gérer quelques-uns en configurant automatiquement la redirection de ports pour un ensemble donné de ports : voyez "ipportfw" (noyaux 2.0) ou "ipmasqadm" (noyaux 2.1 et supérieurs).
Tous les services auxquels vous voulez que l'Internet puisse avoir accès doivent être sur le pare-feu (mais voyez Services internes limités plus bas).
Exemple : autoriser l'accès web du réseau privé sur l'Internet.
Netscape sur mamachine lit http://slashdot.org.
C'est à dire que du point de vue de slashdot.org, la connexion est réalisée de 1.2.3.4 (interface PPP du pare-feu), port 65000 vers 207.218.152.131 (slashdot.org) port 80. Du point de vue de mamachine, la connexion est faite entre 192.168.1.100 (mamachine) port 1050, et 207.218.152.131 (slashdot.org) port 80.
Dans ce scénario, votre réseau personnel fait partie de l'Internet : les paquets peuvent passer sans avoir à changer de réseau. Les adresses IP du réseau interne doivent être assignées en utilisant un bloc d'adresses IP, de manière à ce que le reste du réseau sache comment vous envoyer des paquets. Ceci implique une connexion permanente.
Dans ce rôle, le filtrage de paquets est utilisé pour restreindre les paquets qui peuvent être redirigés entre votre réseau et le reste de l'Internet, càd pour restreindre le reste de l'Internet à accéder uniquement au serveur web qui se trouve en interne.
Exemple : autoriser l'accès web du réseau privé vers l'Internet.
Netscape sur mamachine lit http://slashdot.org.
C'est à dire qu'il n'y a qu'une seule connexion : à partir de 1.2.3.100 (mamachine) port 1050, vers 207.218.152.131 (slashdot.org) port 80.
Il y a quelques trucs que vous pouvez utiliser pour autoriser l'Internet à accéder à vos services internes, plutôt que de faire tourner vos services internes sur le pare-feu. Ils fonctionneront soit avec un proxy, soit avec une approche type camouflage pour les connexions externes.
L'approche la plus simple est de faire tourner un "redirecteur", qui est un cache de pauvre, attendant une connexion sur un port donné, et ouvrant une connexion sur un hôte et un port interne fixé, et copiant les données entre les deux connexions. Un exemple de ceci est le programme "redir". Du point de vue de l'Internet, la connexion est faite sur votre pare-feu. Du point de vue de votre serveur interne, la connexion est faite par l'interface interne du pare-feu sur le serveur.
Une autre approche (qui nécessite un noyau 2.0 corrigé pour ipportfw, ou un noyau 2.1 ou supérieur) est d'utiliser la redirection des ports du noyau. Il effectue le même travail que "redir" d'une manière différente : le noyau réécrit les paquets lorsqu'ils passent, en changeant leur adresse de destination et le port pour les faire pointer sur un port et un hôte interne. Du point de vue de l'Internet, la connexion est faite sur votre pare-feu. Du point de vue de votre serveur interne, une connexion directe est réalisée entre l'hôte Internet et votre serveur.
David Ranch a écrit un excellent howto tout neuf sur le camouflage, qui en grande partie recouvre ce howto. Vous pouvez le trouver sur http://www.ecst.csuchico.edu/~dranch/LINUX/index-LINUX.html
J'espère pouvoir bientôt le trouver hébergé sous les auspices du LDP (Linux Documentation Project), sur http://www.metalab.unc.edu/LDP.
La page officielle du camouflage se trouve sur http://ipmasq.cjb.net.