このページで
例:フルルーティングテーブルのインポートを防止する
Junos OSルーティングポリシーでは、一致条件と終了アクション then accept
が のポリシーを設定し、ポリシーをルーティングプロトコルに適用すると、プロトコルはルーティングテーブル全体をインポートします。この例では、コミット スクリプトを使用してこのシナリオを回避する方法を示します。
要件
この例では、Junos OSを実行しているデバイスを使用しています。
概要とコミット スクリプト
この例では、 import
および [edit protocols isis]
階層レベルで設定されたステートメントを[edit protocols ospf]
検査して、指定されたポリシーのいずれかに一致条件のない条件がthen accept
含まれているかどうかを判断します。このスクリプトは、これらの内部ゲートウェイプロトコル(IGP)にフルルーティングテーブルをインポートすることを防ぎます。
このスクリプトの例は、XSLT と SLAX の両方の構文で示されています。
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:param name="po" select="commit-script-input/configuration/policy-options"/> <xsl:template match="configuration"> <xsl:apply-templates select="protocols/ospf/import"/> <xsl:apply-templates select="protocols/isis/import"/> </xsl:template> <xsl:template match="import"> <xsl:param name="test" select="."/> <xsl:for-each select="$po/policy-statement[name=$test]"> <xsl:choose> <xsl:when test="then/accept and not(to) and not(from)"> <xnm:error> <xsl:call-template name="jcs:edit-path"> <xsl:with-param name="dot" select="$test"/> </xsl:call-template> <xsl:call-template name="jcs:statement"> <xsl:with-param name="dot" select="$test"/> </xsl:call-template> <message>policy contains bare 'then accept'</message> </xnm:error> </xsl:when> </xsl:choose> </xsl:for-each> </xsl:template> </xsl:stylesheet>
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"; param $po = commit-script-input/configuration/policy-options; match configuration { apply-templates protocols/ospf/import; apply-templates protocols/isis/import; } match import { param $test = .; for-each ($po/policy-statement[name=$test]) { if (then/accept and not(to) and not(from)) { <xnm:error> { call jcs:edit-path($dot = $test); call jcs:statement($dot = $test); <message> "policy contains bare 'then accept'"; } } } }
構成
手順
手順
スクリプトをダウンロード、有効化、テストするには、以下の手順にしたがっています。
スクリプトをテキスト ファイルにコピーし、 import.xsl または import.slax に名前を付け、デバイス上の /var/db/scripts/commit/ ディレクトリにコピーします。
以下のテスト構成スタンザを選択し、Ctrl+cを押してクリップボードにコピーします。
スクリプトの SLAX バージョンを使用している場合は、 階層レベルのファイル名を
[edit system scripts commit file]
import.slax に変更します。system { scripts { commit { file import.xsl; } } } protocols { ospf { import bad-news; } } policy-options { policy-statement bad-news { then accept; } }
設定モードで、 コマンドを
load merge terminal
発行して、スタンザをデバイス設定にマージします。[edit] user@host# load merge terminal [Type ^D at a new line to end input] ... Paste the contents of the clipboard here ...
プロンプトで、マウスと貼り付けアイコンを使用して、クリップボードの内容を貼り付けます。
Enter キーを押します。
Ctrl+dを押します。
設定をコミットします。
user@host# commit
検証
コミット スクリプトの実行の検証
目的
スクリプトが想定どおりに動作していることを確認します。
アクション
コマンドの出力をcommit
確認します。サンプル設定では、 階層レベルで ステートメントを[edit protocols ospf]
設定import
します。ポリシーに一致条件のない条件が含then accept
まれているため、スクリプトはエラーを生成し、コミット操作は失敗します。コマンドを発行すると、以下のcommit
出力が表示されます。
[edit] user@host# commit [edit protocols ospf] 'import bad-news;' policy contains bare 'then accept' error: 1 error reported by commit scripts error: commit script failure