Configuration du noyau

Pour exécuter les fonctions les plus élémentaires d'iptables, vous devez configurer les options suivantes dans le noyau, pendant la phase make config ou une autre commande apparentée:

CONFIG_PACKET - Cette option autorise les applications et les utilitaires à accéder directement aux périphériques réseau. Ces utilitaires sont par exemple tcpdump ou snort.

CONFIG_NETFILTER - Cette option est nécessaire si vous comptez utiliser votre ordinateur en tant que pare-feu ou passerelle vers Internet. En définitive, c'est indispensable pour faire fonctionner tout ce qui se trouve dans ce didacticiel. Je présume que vous le souhaitez, puisque vous lisez ceci.

Bien sûr, vous devez ajouter les pilotes spécifiques à votre interface pour obtenir un fonctionnement correct, i.e. pour les interfaces de type adaptateur Ethernet, PPP ou SLIP. Cette option ajoute seulement quelques-uns des organes élémentaires présents dans iptables. Pour être honnête, vous ne pourrez pas être véritablement productif car ceci n'ajoute qu'une architecture au noyau. Si vous voulez utiliser des options plus évoluées d'iptables, il vous faudra configurer les options adéquates dans votre noyau. Voici celles disponibles pour un simple noyau 2.4.9 accompagnées d'une courte explication:

CONFIG_IP_NF_CONNTRACK - Ce module permet de faire du traçage de connexion. Entre autres, le traçage de connexion est utilisé par le NAT et le camouflage. Si vous voulez protéger les machines d'un LAN derrière un pare-feu, vous devriez à coup sûr sélectionner cette option. Par exemple, ce module est obligatoire pour que le script rc.firewall.txt puisse fonctionner.

CONFIG_IP_NF_FTP - Ce module permet de faire du traçage de connexion sur du FTP. Comme il est habituellement difficile d'effectuer du traçage de connexion sur des connexions FTP, le module conntrack requiert le bien-nommé module d'assistance << helper >>. Et cette option compile justement le module helper. Si vous n'ajoutez pas ce module vous ne pourrez pas faire du FTP proprement à travers un pare-feu ou une passerelle.

CONFIG_IP_NF_IPTABLES - Cette option est nécessaire pour effectuer n'importe quel type de filtrage, du camouflage ou du NAT. Elle insère dans le noyau toute l'architecture d'identification d'iptables. Sans cela, vous ne pourrez rien faire avec iptables.

CONFIG_IP_NF_MATCH_LIMIT - Ce module est facultatif, mais il est utilisé dans l'exemple rc.firewall.txt. Cette option fournit la correspondance LIMIT. Elle donne la possibilité de contrôler le nombre de paquets par minute pour lesquels autoriser la correspondance, suivant la définition d'une règle. Par exemple, la commande -m limit --limit 3/minute autorise une correspondance avec un maximum de 3 paquets par minute. Ce module permet aussi d'éviter certaines attaques de type déni de service (DoS).

CONFIG_IP_NF_MATCH_MAC - Ceci permet de faire correspondre des paquets à partir des adresses MAC. Chaque adaptateur Ethernet possède sa propre adresse MAC. Il est possible de bloquer des paquets en identifiant l'adresse MAC utilisée et par conséquent, bloquer efficacement un ordinateur particulier, puisque l'adresse MAC est rarement modifiée. Cette option n'est utilisée ni dans l'exemple rc.firewall.txt, ni ailleurs.

CONFIG_IP_NF_MATCH_MARK - Ceci permet d'utiliser la correspondance MARK. A titre d'exemple, on peut utiliser la cible MARK afin de marquer un paquet, et s'appuyer sur ce marquage plus loin dans la table pour éventuellement établir une correspondance. Cette option est la correspondance MARK, elle sera décrite un peu plus loin.

CONFIG_IP_NF_MATCH_MULTIPORT - Ce module permet de faire correspondre des paquets sur un intervalle étendu de ports source ou destination. Normalement, c'est impossible, mais pas avec cette correspondance.

CONFIG_IP_NF_MATCH_TOS - Ce module peut faire correspondre des paquets à partir du champ TOS qu'ils contiennent. TOS signifie Type de Service (<< Type Of Service >>). Elle peut être définie par certaines règles dans la table mangle et grâce aux commandes ip/tc.

CONFIG_IP_NF_MATCH_TCPMSS - Cette option introduit la possibilité de faire correspondre les paquets TCP en fonction de leur champ MSS.

CONFIG_IP_NF_MATCH_STATE - Il s'agit d'une des plus importantes nouveautés vis-à-vis d'ipchains. Ce module permet de faire de la correspondance d'état sur les paquets. Par exemple, si vous avez déjà observé un trafic dans les deux directions sur une connexion TCP, les paquets concernés seront repérés par la mention ESTABLISHED. Ce module est employé de manière intensive dans l'exemple rc.firewall.txt.

CONFIG_IP_NF_MATCH_UNCLEAN - Ce module introduit la possibilité d'établir une correspondance avec les paquets IP, TCP, UDP et ICMP, qui s'avèrent non-conformes à leur spécification ou invalides. Ces paquets pourront être détruits, mais il sera impossible alors de vérifier leur légitimité. Sachez que cette correspondance est encore expérimentale, donc qu'elle peut ne pas fonctionner parfaitement dans toutes les situations.

CONFIG_IP_NF_MATCH_OWNER - Cette option offre la possibilité d'établir une correspondance en se référant au propriétaire d'un connecteur réseau. A titre d'exemple, on peut autoriser l'accès Internet uniquement à l'utilisateur root. Ce module a été écrit à l'origine pour illustrer les possibilités du nouvel outil iptables. Notez que cette correspondance est encore expérimentale, donc qu'elle pourrait ne pas fonctionner pour tout le monde.

CONFIG_IP_NF_FILTER - Ce module ajoute la table fondamentale filter qui permet d'effectuer le moindre filtrage IP. Dans la table filter, on trouve les chaînes INPUT, FORWARD et OUTPUT. Ce module est indispensable si vous envisagez de faire n'importe quel type de filtrage sur des paquets reçus ou envoyés.

CONFIG_IP_NF_TARGET_REJECT - Cette cible permet de spécifier qu'un message d'erreur ICMP doit être expédié en réponse à des paquets entrants, plutôt que de simplement les détruire. Gardez à l'esprit que les connexions TCP, à contrario des connexions ICMP et UDP, sont toujours réinitialisées ou refusées avec un paquet de type TCP RST.

CONFIG_IP_NF_TARGET_MIRROR - Ceci permet de renvoyer des paquets à leur expéditeur. Par exemple, si vous configurez une cible MIRROR sur le port destination HTTP dans votre chaîne INPUT, et que quelqu'un tente d'accéder à ce port, vous lui renverrez ses paquets, et il devrait probablement visualiser au final sa propre page web.

Avertissement

La cible MIRROR n'est pas à utiliser à la légère. Elle a été écrite à l'origine comme un module de test, et il serait sans doute très dangereux de l'utiliser (risque de DoS sérieux entre autre).

CONFIG_IP_NF_NAT - Ce module permet d'effectuer de la traduction d'adresse réseau, ou NAT, dans ses différentes formes. Il vous donne accès à la table nat d'iptables. Cette option est nécessaire pour réaliser de la redirection de port, du camouflage d'adresse IP, etc. Notez que cette option n'est pas indispensable pour installer un pare-feu et camoufler un réseau local, mais elle devrait vous être utile sauf si vous pouvez fournir une adresse IP unique pour chacun des hôtes. Par conséquent, cette option est nécessaire d'une part pour que le script d'exemple rc.firewall.txt puisse fonctionner correctement, et d'autre part pour votre réseau si vous n'êtes pas en mesure d'ajouter des adresses IP uniques.

CONFIG_IP_NF_TARGET_MASQUERADE - Ce module ajoute la cible MASQUERADE. Par exemple, si vous ne connaissez pas l'adresse IP de votre connexion Internet, cette méthode permet de la récupérer en évitant le recours à du DNAT ou du SNAT. En d'autres termes, si vous utilisez DHCP, PPP, SLIP ou un autre moyen de connexion qui attribue lui-même l'adresse IP, vous aurez besoin d'utiliser cette cible plutôt que du SNAT. Le camouflage génère sur la machine une charge légèrement supérieure à du NAT, mais fonctionne sans connaître à l'avance l'adresse IP.

CONFIG_IP_NF_TARGET_REDIRECT - Cette cible est utile associée avec des proxies d'application par exemple. Au lieu de laisser passer un paquet directement, on peut le rediriger vers une machine locale. Autrement dit, on a la possibilité de réaliser un proxy transparent de cette manière.

CONFIG_IP_NF_TARGET_LOG - Ceci ajoute à iptables la cible LOG avec ses fonctionnalités. Ce module peut être employé pour journaliser des paquets dans syslogd, et découvrir ainsi ce qu'il advient d'eux. Cette possibilité se révèle inestimable dans le cas d'audits de sécurité, d'expertises ou pour déboguer un script en cours d'écriture.

CONFIG_IP_NF_TARGET_TCPMSS - Cette option permet de contrecarrer les Fournisseurs d'Accès à Internet (FAI) et les serveurs qui bloquent les paquets ICMP de type Fragmentation Nécessaire (<< Fragmentation Needed >>). La conséquence de ceci est que des pages web ne passeront pas, des petits messages sont envoyés mais pas les gros, ssh fonctionne mais scp s'arrête après l'établissement de la liaison (<< handshake >>), etc. Dans cette situation, on peut utiliser la cible TCPMSS pour contourner cette difficulté en limitant le MSS (<< Maximum Segment Size >> ou taille maximum de segment) à la valeur du PMTU (<< Path Maximum Transmit Unit >> ou unité de transfert maximum de liaison). De cette façon, il est possible de surmonter ce que les auteurs de Netfilter appellent eux-mêmes les << FAI ou serveurs à tendance criminelle >> dans l'aide de la configuration du noyau.

CONFIG_IP_NF_COMPAT_IPCHAINS - Ajoute un mode de compatibilité avec l'outil ipchains qui est devenu obsolète. Ne considérez pas ceci comme une solution sérieuse à long terme pour dénouer les problèmes de migration des noyaux Linux 2.2 vers 2.4, puisque ce mode pourrait bien disparaître dans le noyau 2.6.

CONFIG_IP_NF_COMPAT_IPFWADM - Ajoute un mode de compatibilité avec l'outil ipfwadm, qui est également obsolète. Encore une fois, ne considérez pas ceci comme une solution sérieuse à long terme.

Comme vous le constatez, il existe un large éventail d'options. J'ai expliqué brièvement leur intérêt et ce qu'on pouvait attendre de chaque module. Cependant, seules sont décrites ici les options disponibles pour un noyau Linux 2.4.9 standard (saveur << vanilla >>). Si vous souhaitez connaître d'autres options, je vous suggère de vous orienter vers les fonctions de patch-o-matic (POM) présentes dans l'espace utilisateur de Netfilter, qui apportent d'innombrables options supplémentaires. Les correctifs de POM sont des ajouts qu'il est envisagé d'intégrer au noyau à l'avenir, mais qui ne le sont pas encore. Les raisons sont variées - entre le patch qui n'est pas tout à fait stable, l'impossibilité pour Linus Torvalds de le maintenir, ou son refus de l'ajouter à la branche principale de développement du noyau puisqu'il semble encore expérimental.

La liste d'options suivante devra être compilée dans votre noyau, ou ajoutée en tant que module, pour que le script rc.firewall.txt fonctionne. Si vous avez besoin d'aide pour les options requises par les autres scripts, lisez la section sur les exemples de scripts de pare-feux.

Une dernière fois, tout ceci est indispensable pour le script rc.firewall.txt. Pour les autres scripts d'exemple, leurs conditions d'utilisation sont précisées dans leurs sections respectives. Pour l'instant, concentrez-vous sur le script principal que vous devriez déjà être en train d'étudier.