# rule

モード
  ファイアウォールモード
カテゴリー
  UTM / ファイアウォール

## 構文

コマンド構文

`(config-firewall)# rule [<1-65535>] ACTION {APPNAME|any} from SRC_ENTITY to DST_ENTITY [no-state-enforcement] [log]`

`(config-firewall)# no rule {<1-65535>|all}`

## コマンド説明

ファイアウォールにルールを追加する。
no形式で実行した場合は指定したルールを削除する。
ファイアウォール機能を有効化しただけで、まだ1つもルールを登録していない場合は、すべてのトラフィックが遮断される。
このデフォルト動作をベースとして、必要なトラフィックを通過させるためのルールを本コマンドで登録していくのがファイアウォールの基本的な設定方法となる。
ルールの指定にはエンティティーとアプリケーションの両定義を使用するが、これらの定義が不完全な場合（指定したアプリケーションやエンティティーが未定義である、アプリケーション定義でIPプロトコルが未指定、など）、該当ルールは有効にならないので注意。ルールが有効化どうかは、show firewall rule config-checkコマンドでチェックできる。
なお、ルールの順番はmove ruleコマンドで変更可能。

## パラメーター

`<1-65535>`
  ルール番号。省略時はリストの最後尾に新規ルールが追加される。このときのルール番号決定方法については「注意・補足事項」を参照
`ACTION := {permit|deny|reject|log}`
  アクション
  `permit`
    許可
  `deny`
    破棄（送信元にエラーを返さない）
  `reject`
    拒否（送信元にエラーを返す）
  `log`
    ログを記録（パケットごとにログを取る）。なお、特別な理由がないかぎり、本アクションよりもlogオプションのほうを推奨する
`APPNAME`
  制御対象のアプリケーション名。指定可能なアプリケーションはshow application detailで確認可能。詳細は解説編を参照
`any`
  すべてのトラフィックを制御対象にする
`from SRC_ENTITY`
  送信元エンティティー名（show entityで一覧表示可能）
`to DST_ENTITY`
  宛先エンティティー名（show entityで一覧表示可能）
`no-state-enforcement`
  端末間で送受信されるトラフィックの経路が一定でない環境や、端末間の接続は確立済みだが一定期間（ファイアウォールセッション保持時間）内に通信が発生しない状況において、該当トラフィックがブロックされないようにするためのオプション。ただし、本オプションは外部ネットワーク（インターネット等）とのトラフィックを制御するルールには使用しないこと
`log`
  アクションを実行するだけでなくログにも記録したいときに指定する（セッションの最初のパケットだけログを取る）
`all`
  no形式ですべてのルールを削除するときに指定する

## 使用例

ゾーン「private」から「public」への通信をすべて許可する。

    awplus(config-firewall)# rule permit any from private to public

ゾーン「private」内の通信をすべて許可する。
ゾーン「private」内に複数のサブネットが存在する場合だけでなく、ゾーン「private」内のホストから「private」に属する本製品のインターフェースへのアクセス（SSHなど）を許可する場合にもこのルールが必要。

    awplus(config-firewall)# rule permit any from private to private

ゾーン「public」から「private」に対するOpenVPNの通信を許可する。

    awplus(config-firewall)# rule permit openvpn from public to private

ゾーン「private」から「public」へのWindowsネットワーク通信を破棄し、ログを記録する。

    awplus(config-firewall)# rule deny samba-tcp from private to public log
    awplus(config-firewall)# rule deny samba-udp from private to public log

ファイアウォールルール「10」を削除する。ルール番号はshow firewall ruleコマンドで確認できる。

    awplus(config-firewall)# no rule 10

すべてのファイアウォールルールを削除する。

    awplus(config-firewall)# no rule all

## 注意・補足事項

ファイアウォールルール（本コマンド）とファイアウォールセッションリミットルール（connection-limit）のルール番号は独立しており関係がない。
ルールの処理順序については解説編を参照。
本コマンドでルール番号を指定しなかったときはリストの最後尾に新規ルールが追加される。このときのルール番号は次のようにして決まる。

- (1) 原則：既存の最後尾ルールより大きい直近の10の倍数になる
  - ルールが存在しない状態でルール番号を省略して作成したルールの番号は10（有効範囲内にある最小の10の倍数）
  - 最後尾のルール番号が10～18の状態でルール番号を省略して作成したルールの番号は20
- (2) 例外：既存の最後尾ルール番号の一の位が9のときは、「+11」した値（直近ではなくその次の10の倍数）になる
  - 最後尾のルール番号が19の状態でルール番号を省略して作成したルールの番号は20ではなく30（=19+11）
    ※この動作は、既存の最後尾ルールと新規に追加したルールの間に、後から別のルールを挿入する余地を残すため。
- その他：前述の仕様 (1) (2) により、最後尾のルール番号が65529以上の時は、ルール番号を省略して新規ルールを追加することはできない（65529 + 11 = 65540となりルール番号の最大値 65535 を超えてしまうため）。その場合はルール番号を明示的に指定して追加すること。

ファイアウォールルールのログを取得したい場合は、logアクションではなくlogオプションのほうを推奨。
logアクションはパケットの転送可否とは関係なく、純粋にログを取るだけのアクション。
ファイアウォールのデフォルト動作は「すべて拒否」であるため、[例1] のようにlogアクションのルールしか存在しない場合、ゾーン「branch」から「private」へのSSHパケットは、このルールによりログに記録された後、デフォルト動作によって破棄される。
[例1]

    rule log ssh from branch to private

ただし、前述のとおり logアクションはパケットを破棄するわけではないため、[例2] のようにlogアクションの次に同じ条件のpermitアクションのルールがあれば、該当パケットはログに記録された後、通過を許可される。
[例2]

    rule log ssh from branch to private
    rule permit ssh from branch to private

なお、[例2] のように logアクションと permitアクションのルールを分けた場合と、次の [例3] のようにpermitアクションのルールに logオプションを付けた場合ではログ記録の動作が異なる。
[例3]

    rule permit ssh from branch to private log

[例2] では logアクションにより該当する SSH パケット1個1個のログが記録されるのに対し、
[例3] では permitアクションによって許可されたSSH セッションの最初のパケットだけがログに記録される。
同一ルール内でlogアクションとlogオプションを併用した場合は、logアクション（パケットごとにログを取る）の動作となる。
アプリケーションコントロール（DPI）機能では、各アプリケーション固有の通信パターンを検出するために一定量のパケットを受信してそのデータ部分を検査する必要があるが、ファイアウォールはその仕様として初期設定ですべてのパケットを破棄するため、ファイアウォールとアプリケーションコントロール（DPI）を併用する場合は注意が必要。詳しくは「UTM」/「アプリケーションコントロール（DPI）」を参照。
既存のルールを変更したときに、変更前のルールに該当するセッション情報がすでに登録されている場合は、clear firewall connectionsコマンドで古いセッション情報を削除すること。
no-state-enforcementパラメーターを含むファイアウォールルールにマッチする通信には、ファイアウォールセッションリミットルール（connection-limit）は適用されない。

## コマンドツリー

## 関連コマンド