이 페이지의
예: 최종 추가 후 방화벽에 Term 허용
이 커밋 스크립트 예는 then accept
아직 명시적 then accept
명령문으로 끝나지 않은 모든 방화벽 필터에 문을 추가합니다.
요구 사항
이 예에서는 Junos OS를 실행하는 디바이스를 사용합니다.
개요 및 커밋 스크립트
Junos OS의 각 방화벽 필터는 필터 끝에 암시적 폐기 조치를 가집니다. 이는 다음과 같은 명시적 필터 용어와 동일합니다.
term implicit-rule { then discard; }
그 결과, 패킷이 필터의 조건에 부합하지 않으면 폐기됩니다. 경우에 따라 방화벽 필터의 일련의 일치 조건과 일치하지 않는 모든 패킷을 수용하기 위해 마지막 용어를 추가하여 기본값을 무효화할 수도 있습니다. 이 예에서 커밋 스크립트는 명시적 then accept
명령문으로 끝나지 않은 모든 방화벽 필터에 최종 then accept
문을 추가합니다.
예제 스크립트는 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: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>
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>; } } } } } }
구성
절차
단계별 절차
스크립트를 다운로드, 활성화, 테스트하려면 다음을 수행합니다.
스크립트를 텍스트 파일에 복사하여 파일 add-accept.xsl 또는 add-accept.slax 에 적절하게 이름을 지정하고 장비의 /var/db/scripts/commit/ directory에 복사합니다.
다음 테스트 구성 스탠자를 선택하고 Ctrl+c를 눌러 클립보드에 복사합니다.
스크립트의 SLAX 버전을 사용하는 경우 계층 수준에서 파일 이름을
[edit system scripts commit file]
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; } } } }
구성 모드에서 스탠자를 디바이스 구성으로 병합하도록 명령을 실행
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
. 스크립트는 모든 방화벽 필터가 명시적 then accept
명령문으로 종료되도록 요구합니다. 샘플 구성 스탠자는 두 용어를 포함하는 필터를 포함 test
하지만 명시적 then accept
선언문은 포함하지 않습니다. 명령을 실행 commit
하면 스크립트가 누락된 then accept
명령문을 추가하고 구성을 커밋합니다. 명령을 실행 commit
하면 다음 출력이 나타납니다.
[edit] user@host# commit [edit firewall family inet filter test] warning: filter is missing final 'then accept' rule commit complete
구성 모드에서 명령을 실행 show firewall
하여 수정된 구성을 검토합니다. 다음 출력이 나타납니다.
[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 */ } } }