Exemple : ajout d’une durée finale puis d’acceptation à un pare-feu
Cet exemple de script de validation ajoute une then accept
déclaration à n’importe quel filtre de pare-feu qui ne se termine pas déjà par une déclaration explicite then accept
.
Exigences
Cet exemple utilise un équipement exécutant Junos OS.
Script de présentation et de validation
Chaque filtre de pare-feu de Junos OS comporte une action de rejet implicite à la fin du filtre, ce qui équivaut au terme de filtre explicite suivant :
term implicit-rule { then discard; }
Par conséquent, si un paquet ne correspond à aucun des termes du filtre, il est jeté. Dans certains cas, vous pouvez remplacer la valeur par défaut en ajoutant un dernier terme pour accepter tous les paquets qui ne correspondent pas à la série de conditions de correspondance d’un filtre de pare-feu. Dans cet exemple, le script de validation ajoute une déclaration finale then accept
à n’importe quel filtre de pare-feu qui ne se termine pas déjà par une déclaration explicite then accept
.
L’exemple de script est illustré dans les syntaxes XSLT et SLAX :
Syntaxe XSLT
<?xml version="1.0" standalone="yes"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:junos="http://xml.juniper.net/junos/*/junos" xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm" xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0"> <xsl:import href="../import/junos.xsl"/> <xsl:template match="configuration"> <xsl:apply-templates select="firewall/filter | firewall/family/inet | firewall/family/inet6" mode="filter"/> </xsl:template> <xsl:template match="filter" mode="filter"> <xsl:param name="last" select="term[position() = last()]"/> <xsl:comment> <xsl:text>Found </xsl:text> <xsl:value-of select="name"/> <xsl:text>; last </xsl:text> <xsl:value-of select="$last/name"/> </xsl:comment> <xsl:if test="$last and ($last/from or $last/to or not($last/then/accept))"> <xnm:warning> <xsl:call-template name="jcs:edit-path"/> <message> <xsl:text>filter is missing final 'then accept' rule</xsl:text> </message> </xnm:warning> <xsl:call-template name="jcs:emit-change"> <xsl:with-param name="content"> <term> <name>very-last</name> <junos:comment> <xsl:text>This term was added by a commit script</xsl:text> </junos:comment> <then> <accept/> </then> </term> </xsl:with-param> </xsl:call-template> </xsl:if> </xsl:template> </xsl:stylesheet>
Syntaxe SLAX
version 1.0; ns junos = "http://xml.juniper.net/junos/*/junos"; ns xnm = "http://xml.juniper.net/xnm/1.1/xnm"; ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0"; import "../import/junos.xsl"; match configuration { apply-templates firewall/filter | firewall/family/inet | firewall/family/inet6 { mode "filter"; } } match filter { mode "filter"; param $last = term[position() = last()]; <xsl:comment> { expr "Found "; expr name; expr "; last "; expr $last/name; } if ($last and ($last/from or $last/to or not($last/then/accept))) { <xnm:warning> { call jcs:edit-path(); <message> "filter is missing final 'then accept' rule"; } call jcs:emit-change() { with $content = { <term> { <name> "very-last"; <junos:comment> "This term was added by a commit script"; <then> { <accept>; } } } } } }
Configuration
Procédure
Procédure étape par étape
Pour télécharger, activer et tester le script :
Copiez le script dans un fichier texte, nommez le fichier add-accept.xsl ou add-accept.slax selon le cas, et copiez-le dans le répertoire /var/db/scripts/commit/ sur l’équipement.
Sélectionnez les strophes de configuration de test suivantes, puis appuyez sur Ctrl+c pour les copier dans le presse-papiers.
Si vous utilisez la version SLAX du script, modifiez le nom du fichier au niveau de la
[edit system scripts commit file]
hiérarchie en add-accept.slax.system { scripts { commit { file add-accept.xsl; } } } firewall { policer sgt-friday { if-exceeding { bandwidth-percent 10; burst-size-limit 250k; } then discard; } family inet { filter test { term one { from { interface t1-0/0/0; } then { count ten-network; discard; } } term two { from { forwarding-class assured-forwarding; } then discard; } } } } interfaces { t1-0/0/0 { unit 0 { family inet { policer output sgt-friday; filter input test; } } } }
En mode configuration, la
load merge terminal
commande vous permet de fusionner les strophes dans la configuration de votre équipement.[edit] user@host# load merge terminal [Type ^D at a new line to end input] ... Paste the contents of the clipboard here ...
À l’invite, collez le contenu du presse-papiers à l’aide de la souris et de l’icône coller.
Appuyez sur Entrée.
Appuyez sur Ctrl+d.
Validez la configuration.
user@host# commit
Vérification
Vérification de la configuration
But
Vérifiez que le script se comporte comme prévu.
Action
Examinez la sortie de la commit
commande. Le script exige que tous les filtres de pare-feu se terminent par une déclaration explicite then accept
. Les exemples de strophes de configuration comprennent le test
filtre avec deux termes, mais n’incluent pas d’énoncé explicite then accept
. Lorsque vous émettez la commit
commande, le script ajoute l’instruction manquante then accept
et valide la configuration. Lorsque vous émettez la commit
commande, le résultat suivant apparaît :
[edit] user@host# commit [edit firewall family inet filter test] warning: filter is missing final 'then accept' rule commit complete
En mode configuration, émettez la show firewall
commande pour examiner la configuration modifiée. Le résultat suivant apparaît :
[edit] user@host# show firewall policer sgt-friday { if-exceeding { bandwidth-percent 10; burst-size-limit 250k; } then discard; } family inet { filter test { term one { from { interface t1-0/0/0; } then { count ten-network; discard; } } term two { from { forwarding-class assured-forwarding; } then { discard; } } term very-last { then accept; /* This term was added by a commit script */ } } }