L'objectif de ce chapitre est de vous fournir une brève
explication de chaque script disponible avec ce didacticiel, et
quels services ils fournissent. Ces scripts ne sont en aucun cas
parfaits, et peuvent ne pas correspondre tout à fait à ce que vous
en attendez. C'est une aide pour vous assister dans la création de
scripts selon vos besoins. La première section indique la structure
que j'ai établie dans chaque script, ainsi nous pourrons retrouver
notre chemin un peu plus facilement.
14.1. Structure du script
rc.firewall.txt
Tous les scripts de ce didacticiel ont été écrits pour une
structure spécifique. La raison pour ça est qu'ils sont assez
similaires entre eux ce qui permet de façon aisée de voir les
différences. Cette structure est à peu près bien documentée dans ce
bref chapitre. Il vous donnera une idée de pourquoi ces scripts ont
été écrits, et pourquoi j'ai choisi cette structure.
Note
Même si c'est la structure que j'ai choisi, notez qu'elle peut
ne pas être la meilleure pour vos scripts. Elle vise une lecture et
une compréhension faciles pour nos besoins.
14.1.1. La structure
C'est la structure de tous les scripts de ce didacticiel. S'ils
diffèrent quelque part c'est probablement une erreur de ma part,
sauf si spécifié explicitement.
Configuration - En premier lieu
nous avons les options de configuration que le reste du script
utilisera. Les options de configuration seront toujours les
premières dans chaque script.
1.1.
Internet - C'est la section de
configuration qui concerne la connexion Internet. Vous pouvez la
passer si vous n'avez pas de connexion Internet. Notez qu'il
pourrait y avoir d'avantage de sous-sections ici, mais nous
n'indiquons que celles concernant l'Internet.
1.1.1.
DHCP - Si nécessaire nous
ajouterons les options de configuration spécifique à DHCP ici.
1.1.2.
PPPoE - Si l'utilisateur désire ce
script spécifique, et qu'il utilise une connexion PPPoE, nous
ajouterons les options ici.
1.2.
LAN - S'il y a un réseau local derrière
le pare-feu, nous ajouterons les options le concernant ici. C'est
le cas la plupart du temps, donc cette section sera toujours
disponible.
1.3.
DMZ - Si nécessaire, nous ajouterons la
configuration de la DMZ ici. Beaucoup de scripts n'ont pas cette
section, principalement parce que dans un réseau domestique, ou
pour une petite entreprise il n'y en a pas.
1.4.
Localhost - Cette section concerne
l'hôte local. Ces options ne changent pratiquement jamais.
1.5.
iptables - Section qui concerne la
configuration spécifique d'iptables. Dans la plupart des cas elle
ne nécessite qu'une variable qui nous indique où iptables est
situé.
1.6.
Other - S'il y a d'autres options
et variables spécifiques, elles devront être placées dans la
sous-section concernée (si elles appartiennent à la connexion
Internet, elles seront placées dans la sous-section Internet,
etc.). Si elles ne vont nulle part elles seront placées dans les
sous-sections des options de configuration.
Module loading - Cette section
contient une liste de modules. La première partie concerne les
modules nécessaires, la seconde les modules non optionnels.
Note
Notez que certains modules peuvent accroître la sécurité, ou
ajouter certaines possibilités, et donc peuvent être ajoutés même
s'ils ne sont pas obligatoires. Ils seront indiqués dans certains
cas dans les scripts.
Note
Dans les dernières versions d'iptables, les modules sont
automatiquement chargés, mais il vaut mieux, dans une perspective
de contrôle, de les indiquer dans votre propre script. Par exemple,
les assistants conntrack ne sont jamais chargés
automatiquement.
2.1.
Required modules - Cette section
contient les modules obligatoires et, peut être, des modules
spéciaux qui ajoutent à la sécurité ou des services supplémentaires
pour l'administrateur ou les clients.
2.2.
Non-required
modules - Section qui contient les modules non obligatoires
pour les opérations normales. Tous ces modules peuvent être
commentés par défaut, si vous voulez ajouter le service en question
décommentez le.
proc configuration - Cette section
concerne toute configuration particulière nécessaire pour le
système de fichiers proc. Si certaines de ces options sont
obligatoires, elles seront listées ici, elles sont commentées par
défaut, et indiquées comme configurations proc non obligatoires.
Beaucoup de configurations proc utiles seront indiquées, mais pas
toutes et de loin.
3.1.
Required proc
configuration - Section qui contient les configurations proc
obligatoires pour que le script fonctionne. Elle peut aussi
contenir des configurations qui accroissent la sécurité, ou
ajoutent des services supplémentaires pour l'administrateur ou les
clients.
3.2.
Non-required proc
configuration - Cette section pourrait contenir les configurations
proc non obligatoires mais qui peuvent être utiles. Elles sont
toutes commentées, car elles ne sont pas nécessaires pour l'instant
pour que le script fonctionne. Cette liste n'est de loin pas
complète.
Rules set up - Maintenant le
script est prêt pour y insérer la table de règles. J'ai choisi de
diviser toutes les règles en noms de table et de chaîne dans la
table de règles, pour rendre plus facile à lire ce qui suit. Toutes
les chaînes utilisateur spécifiées sont créées avant de faire quoi
que ce soit d'autre. J'ai aussi choisi de placer les chaînes et
leur spécifications de règles dans le même ordre que la sortie de
la commande iptables
-L.
4.1.
Filter table - En premier nous voyons la
table filter et son contenu. En priorité nous configurons toutes
les stratégies de la table.
4.1.1.
Set policies - Configuration des
stratégies par défaut pour les chaînes système. Normalement je met
les stratégies à DROP pour les chaînes de la table filter, et
spécifie ACCEPT pour les services et les flux que je veux
autoriser. De cette façon nous nous débarrassons de tous les ports
que nous ne voulons pas autoriser.
4.1.2.
Create user specified
chains - Ici nous créons toutes les chaînes utilisateur que
nous voulons utiliser dans cette table. Nous ne pourrons pas
utiliser ces chaînes dans les chaînes système si elles ne sont pas
déjà créées, le mieux est de le faire le plus tôt possible.
4.1.3.
Create content in user specified
chains - Après avoir créé les chaînes utilisateur nous
pouvons rentrer toutes les règles dans ces chaînes. Vous pouvez
aussi les rentrer plus tard dans le script, c'est comme vous
voulez.
4.1.4.
INPUT chain - Ici nous
ajouterons toutes les règles de la chaîne INPUT.
Note
Nous utiliserons le modèle de sortie de la commande iptables -L comme vous pourrez le
voir. Il n'y a pas de raison pour que vous conserviez cette
structure, cependant, essayez d'éviter de mélanger les données
provenant de différentes tables et chaînes car elles deviendraient
plus difficiles à lire et pour résoudre les problèmes.
4.1.5.
FORWARD chain - Ici nous ajoutons
les règles de la chaîne FORWARD.
4.1.6.
OUTPUT chain - En dernier, nous
ajoutons les règles de la chaîne OUTPUT.
4.2.
nat table - Après la table filtre
occupons nous de la table nat. Nous le faisons après la table
filtre pour plusieurs raisons. La première c'est que nous ne
voulons pas activer l'ensemble du mécanisme de forwarding et les
fonctions NAT trop tôt, ce qui pourrait conduire les paquets à
traverser le pare-feu au mauvais moment (i.e., quand le NAT est
activé, mais que les règles de filtre ne le sont pas). Ainsi, je
vois la table nat comme une sorte de couche qui se lie à la table
filter et en quelque sorte l'entoure. La table filter sera donc le
noyau, tandis que la table nat agira comme une couche autour de la
table filter, et enfin la table mangle entourera la table nat comme
une seconde couche. Ceci peut être faux dans certaines perspectives
mais pas trop loin de la réalité.
4.2.1.
Set policies - En premier
nous plaçons les stratégies par défaut dans la table nat.
Normalement, avec la stratégie ACCEPT placée au début ce sera
suffisant. Cette table n'est pas utilisée pour le filtrage, et les
paquets ne seront pas DROPés ici, car certaines choses dangereuses
peuvent survenir dans certains cas. Je laisse ces chaînes à ACCEPT
car il y a aucune raison de ne pas le faire.
4.2.2.
Create user specified
chains - Ici nous créons les chaînes utilisateur que
nous voulons insérer dans la table nat. Normalement je n'en ai pas,
mais j'ai ajouté cette section juste au cas où. Notez que les
chaînes utilisateur doivent être créées avant qu'elles soient
utilisées dans les chaînes système.
4.2.3.
Create content in user specified
chains - Maintenant il est temps d'ajouter toutes les
règles des chaînes utilisateur dans la table nat. C'est la même
chose que pour les chaînes utilisateur dans la table filter. Nous
les ajoutons ici car il n'y a aucune raison de ne pas le faire.
4.2.4.
PREROUTING chain - La chaîne
PREROUTING est utilisée pour faire du DNAT sur les paquets quand
nous en avons besoin. Dans beaucoup de scripts cette fonctionnalité
n'est pas utilisée, ou alors elle est désactivée. La raison en
étant que nous ne voulons pas créer de gros trous dans notre réseau
local sans savoir ce que nous faisons. Dans certains scripts nous
l'avons activé par défaut car le seul but de ces scripts et de
procurer certains services.
4.2.5.
POSTROUTING chain - La chaîne
POSTROUTING sera utilisée par les scripts que j'ai écrit car la
plupart d'entre eux dépendent du fait que nous avons un ou
plusieurs réseaux locaux que nous voulons protéger de l'Internet.
Principalement nous essaierons d'utiliser la cible SNAT, mais dans
certains cas nous devrons utiliser la cible MASQUERADE.
4.2.6.
OUTPUT chain - Cette chaîne est
à peine utilisée dans les scripts. Je n'ai trouvé aucune bonne
raison de m'en servir.
4.3.
mangle table - La dernière table
est la table mangle. Normalement je n'utilise pas cette table, sauf
pour des besoins spécifiques, comme masquer toutes les machines
pour utiliser le même TTL ou pour changer les champs TOS, etc. J'ai
choisi de laisser ces parties du script plus ou moins vides, avec
quelques exceptions dans lesquelles j'ai ajouté des exemples.
4.3.1.
Set policies - Place les
stratégies par défaut dans la chaîne. C'est la même chose que pour
la table nat, à peu près. Cette table n'est pas faite pour le
filtrage. Je n'ai placé aucune stratégie dans aucun des scripts de
la table mangle, et vous êtes encouragés à en faire autant.
4.3.2.
Create user specified
chains - Crée toutes les chaînes utilisateur. Comme
j'ai laissé vide la table mangle, je n'ai créé aucune chaîne ici.
Cependant, cette section a été ajoutée juste au cas où vous en
auriez besoin dans le futur.
4.3.3.
Create content in user specified
chains - Ici plus aucun script de ce didacticiel ne
contiendra de règles.
4.3.4.
PREROUTING - Ici plus aucun script de ce
didacticiel ne contiendra de règles.
4.3.5.
INPUT chain - Ici plus aucun
script de ce didacticiel ne contiendra de règles.
4.3.6.
FORWARD chain - Ici plus aucun
script de ce didacticiel ne contiendra de règles.
4.3.7.
OUTPUT chain - Ici plus aucun
script de ce didacticiel ne contiendra de règles.
4.3.8.
POSTROUTING chain - Ici plus aucun
script de ce didacticiel ne contiendra de règles.
Nous expliquerons en détail comment chaque script est structuré
et pourquoi.
Attention
Notez que ces descriptions sont assez brèves, et doivent être
vues comme une explication assez rapide.