# UTM / ファイアウォール

本製品には、IPトラフィックフローの開始・終了を認識し、これに応じて動的なパケットフィルタリングを行うステートフルインスペクション型のファイアウォールが搭載されています。
ファイアウォールを有効化すると、デフォルトでは本製品のルーティング用インターフェースを通過するすべてのトラフィックが遮断されるようになります。このデフォルト動作をベースとして、必要なトラフィックを通過させるためのルールを登録していくのがファイアウォールの基本的な設定方法となります。
Note

ブリッジングパケットは初期設定では本機能の適用対象外ですが、ソフトウェアブリッジに l3-filtering enableを設定している場合は、該当ソフトウェアブリッジでブリッジされるL3トラフィックに対して本機能が適用されるようになります。

Note

AMFとファイアウォールを併用する場合、AMF仮想リンクを使用している環境では、仮想リンクのパケットを許可する必要があります（AMF応用編を参照）。

Note

本製品のファイアウォールは厳密なセッション管理を行っているため、許可ルールに該当するトラフィックであっても、セッション情報が存在しないパケット（*）は転送せずに破棄します。（* TCP SYNパケットを受信していない状態でのTCP ACKパケットやTCP SYN/ACKパケット、ICMP Requestパケットを受信していない状態でのICMP Replyパケット等がこれに該当します）

ファイアウォール機能の具体的な使用例については、「設定例集」をご覧ください。

## 基本設定

ファイアウォールの設定は、ファイアウォールモード（firewallコマンド）で行います。
ルールの設定はruleコマンドで、機能の有効化はprotectコマンドで行います。
以下、ファイアウォール機能の基本的な設定手順を示します。

1. ファイアウォール機能の設定を行うため、ファイアウォールモードに移行します。これにはfirewallコマンドを使います。

       awplus(config)# firewall

2. ファイアウォール有効時はデフォルトですべてのトラフィックが拒否されるため、許可するトラフィックをpermitルールで明示的に指定する必要があります。ルールの作成は、ruleコマンドで行います。
   アクションには次の4つがあります。また、ルールの順序にも意味があります。これについては後述する「ルールの処理順序」をご覧ください。
   - permit（許可）
   - deny（破棄。送信元にエラーを返さない）
   - reject（破棄。送信元にエラーを返す）
   - log（パケットごとにログを記録）
   次のルールでは、内部を表すゾーン「private」から外部を表すゾーン「public」に宛てた通信をすべて許可するよう設定しています。ステートフルインスペクションにより、ファイアウォール経由の通信が開始されたときにはその状態が記憶されるため、戻りのパケットを許可するためのルールは不要です。

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

   この例において、
   - 「any」はアプリケーション（ただし、ここではすべてのトラフィックを意味するキーワード「any」を指定している）
   - 「from private」は送信元エンティティー（ゾーン、ネットワーク、ホスト）
   - 「to public」は宛先エンティティー（ゾーン、ネットワーク、ホスト）
   を表します。
   「アプリケーション」と「エンティティー」の詳細は、「UTM」/「アプリケーション定義」、「UTM」/「エンティティー定義」をご覧ください。
   Note

   アプリケーションコントロール（DPI）機能では、各アプリケーション固有の通信パターンを検出するために一定量のパケットを受信してそのデータ部分を検査する必要がありますが、ファイアウォールはその仕様として初期設定ですべてのパケットを破棄するため、ファイアウォールとアプリケーションコントロール（DPI）を併用する場合は注意が必要です。詳しくは「UTM」/「アプリケーションコントロール（DPI）」をご覧ください。

   同様にして必要なルールを作成していきます。以下にいくつかの例を示します。
   - 内部ゾーン「private」内の各ネットワークから、同ゾーン内のネットワーク「wired」にあるホスト「dbserver」へのアクセスを許可。

         awplus(config-firewall)# rule permit mydb from private to private.wired.dbserver

     ファイアウォールの適用対象はルーティングトラフィックであるため、ゾーン「private」に属するサブネットが1つだけのときはこのルールは不要ですが、ゾーン内に複数のサブネットが存在するときは同一ゾーン内であっても、サブネットをまたぐ通信に対しては明示的な許可ルールが必要な点にご注意ください。
     なお、ゾーン「private」内の通信を完全に自由にするには、次のようなルールを設定します。
     ネットワーク構成にもよりますが、通常は本製品のプライベート側インターフェースへのアクセス（Telnet/SSHなど）にもこのルールが必要です。

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

   - 内部ゾーン「private」ネットワーク「wired」上のホスト「adminpc」から、ゾーン「dmz」上のネットワーク「servernet」へのSSH通信を許可。

         awplus(config-firewall)# rule permit ssh from private.wired.adminpc to dmz.servernet

   - 外部ゾーン「public」から、ゾーン「dmz」上のネットワーク「servernet」にあるホスト「web」へのHTTP通信を許可。ここでは、logオプションにより通信開始のログも記録しています。

         awplus(config-firewall)# rule permit http from public to dmz.servernet.web log

   - 外部ゾーン「public」ネットワーク「internet」上のホスト「vpngw」から「myself」へのIPsec通信（ISAKMPとESP）を許可。ここでは、ホスト「public.internet.myself」がルーターのWAN側IPアドレスを、「public.internet.vpngw」が対向IPsecルーターのIPアドレスを定義していると仮定しています。

         awplus(config-firewall)# rule permit isakmp from public.internet.vpngw to public.internet.myself
         awplus(config-firewall)# rule permit esp from public.internet.vpngw to public.internet.myself

3. ファイアウォール機能を有効化します。これにはprotectコマンドを使います。

       awplus(config-firewall)# protect

設定は以上です。

### ルールの処理順序

ファイアウォールルール（rule）は次の順序で新しく開始されたセッションを処理します。
Note

すでに確立済みのセッションはセッションテーブルに登録された情報を元にパケットを転送します。

- ファイアウォールルールをルール番号順にチェック。
- マッチしたルールのアクションが permit、deny、reject の場合はアクションを実行してチェック終了。
- マッチしたルールのアクションが log の場合はログに記録して後続ルールのチェックを継続。
- どのルールにもマッチしなかった場合は破棄して終了。
- permitされたTCP、UDP通信に関してはファイアウォールセッションリミットルールをルール番号順にチェックし、最初にマッチしたルールのリミットを適用。

Note

ファイアウォールルール（rule）とファイアウォールセッションリミットルール（connection-limit）のルール番号は独立しており関係はありません。

### ICMPエラーメッセージの送信設定

ファイアウォール使用時に、本製品・LAN側端末間の通信を許可する次のようなルールが設定されている場合は、LAN側端末から受信したIPパケットのTTL値が「0」になった、宛先への経路が存在しないなどの例外状況をICMPのエラーメッセージ（Time Exceeded、Destination Unreachableなど）で送信元に通知することができます。
ルールA（送信元エンティティーが「ゾーン」または「ネットワーク」）

    awplus(config-firewall)# rule permit any from private to private
    または
    awplus(config-firewall)# rule permit any from private.lan to private.lan

（ゾーン「private」やネットワーク「private.lan」がLAN側ネットワークを定義していると仮定）
Note

本設定が行われていれば、該当IPパケットに対するファイアウォールセッションが登録されていない場合でも本製品はICMPエラーメッセージを送信することができます。

ただし、前記ルールAの代わりに、送信元を本製品のLAN側IPアドレス（ホストエンティティー）に限定し、本製品からLAN側端末への一方向のみ通信を許可する次のようなルールを使用している場合は、別途 ICMPメッセージ全般を表すカスタムアプリケーションを定義し、同アプリケーションを明示的に指定したファイアウォールルールを追加設定してください。
ルールB（送信元エンティティーが「ホスト」）

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

（ネットワーク「private.lan」がLAN側ネットワークを、ホスト「private.lan.myself」が本製品のLAN側IPアドレスを定義していると仮定）
たとえば、ルールB使用時に、LAN側ネットワーク上のホストから受信したIPパケットに対して、本製品のLAN側IPアドレスを始点アドレスとするICMPエラーメッセージを返送できるようにするには、次のようにICMPメッセージ全般を表すカスタムアプリケーションを定義し、同アプリケーションを明示的に指定したファイアウォールルールを追加してください。

    awplus(config)# application icmp
    awplus(config-application)# protocol icmp
    awplus(config-application)# exit
    awplus(config)# firewall
    awplus(config-firewall)# rule permit icmp from private.lan.myself to private.lan

ここではカスタムアプリケーション「icmp」でICMPメッセージ全般を定義しており、ホスト「private.lan.myself」が本製品のLAN側IPアドレスを、ネットワーク「private.lan」がLAN側ネットワークを定義していると仮定しています。
また、LAN側ネットワーク上のホストから該当IPパケットの受信を許可するルールは別途設定済みであるとします。
Note

送信元をホストエンティティー（本製品のアドレス）に限定したファイアウォールルールにおいて、ICMPエラーメッセージの送信を許可する場合は、同メッセージに該当するアプリケーションを明示的に指定してください。前記ルールBのようにアプリケーションとして「any」を指定したルールでは、セッション未登録のIPパケットに対してICMPエラーメッセージを送信できませんのでご注意ください。

## 攻撃検出機能

攻撃検出機能（IDS）は、サービス妨害攻撃（DoS）や不正アクセスと思われるトラフィックを検出してログに記録するとともに、該当トラフィックを遮断することで、本製品と配下のネットワークを保護する機能です。
IDSはファイアウォール機能の一部として実装されており、ファイアウォール機能を有効にすると自動的に有効化されます。
Note

IPスプーフィング検出はファイアウォール機能が無効でも動作します。

Note

検出後のパケットはすべて破棄されます。この動作を変更することはできません。

Note

本機能は、no-state-enforcementパラメーターを含むファイアウォールルール（rule）にマッチする通信は監視しません。

### 検出可能な攻撃と検出条件

- Syn Flood
  特定の始点IPv4アドレスを持つTCP SYNパケットの数が、基準時間内（1秒以内）にしきい値に達したときに、該当攻撃を検出したとみなします。
- ICMP Flood
  特定の始点IPv4アドレスを持つICMPパケットの数が、基準時間内（1秒以内）にしきい値に達したときに、該当攻撃を検出したとみなします。
- UDP Flood
  特定の始点IPv4アドレスを持つUDPパケットの数が、基準時間内（1秒以内）にしきい値に達したときに、該当攻撃を検出したとみなします。
- TCP Stealth Scan
  次のいずれかの条件に一致するTCPパケットを検出したときに、該当攻撃を検出したとみなします（IPv4のみサポート対象）。
  - NAT機能を併用している場合
    - 制御フラグが1つもセットされていない
    - FIN/URG/PSHフラグだけがセットされている
    - FINフラグだけがセットされている
    - SYN/FINフラグだけがセットされている
    - SYN/RSTフラグだけがセットされている
  - NAT機能を併用していない場合
    - 制御フラグが1つもセットされていない
    - SYN/FINフラグだけがセットされている
    - SYN/RSTフラグだけがセットされている
- IPスプーフィング
  次のいずれかの条件に一致するIPv4パケットを検出したときに、該当攻撃を検出したとみなします。
  - 始点IPv4アドレスが自インターフェースのIPv4アドレスと一致
  - 始点IPv4アドレスがNAT機能のグローバル側IPv4アドレスと一致

## セッション数の制限

特定の端末によって大量のファイアウォールセッションが生成され、帯域幅やリソースが専有されることを防ぐには、ファイアウォールセッションリミット機能を使います。
同機能では、送信元IPアドレスごとにファイアウォールセッションの上限数（TCPとUDPの合計セッション数）を設定できます。
Note

本機能はTCPとUDPのみを監視しており、他のプロトコルは監視しません。また、本機能有効時は1秒間あたりのTCP/UDPセッション登録数に制限がかかります（TCP、UDPそれぞれ50セッション/秒）。

Note

本機能は、no-state-enforcementパラメーターを含むファイアウォールルール（rule）にマッチする通信は監視しません。

Note

ファイアウォールルール（rule）とファイアウォールセッションリミットルール（connection-limit）のルール番号は独立しており関係はありません。

特定端末からのファイアウォールセッション数を制限するには、connection-limitコマンドでファイアウォールセッションリミットルールを追加します。
たとえば、外部ゾーン「public」ネットワーク「internet」上のホスト「hostA」からのセッションを20までに制限するには、次のように設定します。

    awplus(config-firewall)# connection-limit from public.wan.hostA with limit 20

connection-limitコマンドのfromパラメーターに複数アドレスに対応したエンティティーを指定することにより、特定のアドレス範囲にあるホストからのセッションをそれぞれ指定値に制限することもできます。
たとえば、外部ゾーン「public」ネットワーク「netA」内の各ホストからのセッションをそれぞれ10までに制限するには、次のようにします。

    awplus(config-firewall)# connection-limit from public.netA with limit 10

## 設定と状態の確認

ファイアウォール機能の有効・無効と現在のセッション数はshow firewallコマンドで確認できます。

    awplus# show firewall
    Firewall protection is enabled
    Active connections: 21

ファイアウォールを介して行われている通信セッションの一覧を表示するにはshow firewall connectionsコマンドを使います。

    awplus# show firewall connections
    tcp ESTABLISHED src=192.168.1.2 dst=172.16.1.2 sport=58616 dport=23 packets=16
    bytes=867 src=172.16.1.2 dst=172.16.1.1 sport=23 dport=58616 packets=11 bytes=636
    [ASSURED]
    icmpv6 src=2001:db8::2 dst=2001:db8::1 type=128 code=0 id=1416 packets=34
    bytes=3536 src=2001:db8::1 dst=2001:db8::2 type=129 code=0 id=1416 packets=34
    bytes=3536
    tcp TIME_WAIT src=2001:db8:1::2 dst=2001:db8:2::2 sport=42532 dport=80 packets=7
    bytes=597 src=2001:db8:2::2 dst=2001:db8:1::2 sport=80 dport=42532 packets=5
    bytes=651 [ASSURED]
    tcp TIME_WAIT src=2001:db8:1::2 dst=2001:db8:2::2 sport=48740 dport=80 packets=5
    bytes=564 src=2001:db8:2::2 dst=2001:db8:1::2 sport=80 dport=48740 packets=5
    bytes=594 [ASSURED]

ファイアウォールを介して行われている通信セッションをクリアするにはclear firewall connectionsコマンドを使います。

    awplus# clear firewall connections

Note

本コマンドを実行すると、ファイアウォール経由のTCP通信が切断されるため注意してください。UDPやICMPの通信は継続されます。

ファイアウォールルールの情報はshow firewall ruleコマンドで確認できます。

    awplus# show firewall rule

    [* = Rule is not valid - see "show firewall rule config-check"]
      ID     Action  App        From                 To                   Hits
    --------------------------------------------------------------------------------
      10     permit  openvpn    public               private              0
      20     deny    samba-tcp  private              public               0
      30     deny    samba-udp  private              public               0
      40     permit  ssh        branch               private              0

ファイアウォールルールが有効かどうかをチェックするには、show firewall rule config-checkコマンドを使います。
ファイアウォールルールの作成時にはエンティティーとアプリケーションの両定義を使用しますが、これらの定義が不完全な場合（指定したアプリケーションやエンティティーが未定義である、アプリケーション定義でIPプロトコルが未指定、など）、該当ルールは有効にならず無視されてしまいます。
このような事態を避けるには、ルール作成後にshow firewall rule config-checkコマンドを実行してルールが有効かどうかをチェックしてください。

    awplus# show firewall rule config-check
    Rule 10:
      Application does not have a protocol configured

同コマンドでは、無効なルールがある場合、それが理由とともに示されます。
この例では、次の理由によりルール「10」が無効であることが示されています。

- ルール内で指定したアプリケーションの定義において、IPプロトコルが指定されていない。

また、次の例では、すべてのルールが有効であることが示されています。

    awplus# show firewall rule config-check
    All rules are valid

ファイアウォールセッションリミットルールの情報はshow firewall connections limitsコマンドで確認できます。
ファイアウォールセッションリミットルールが有効かどうかをチェックするには、show firewall connections limits config-checkコマンドを使います。

## ログ

ファイアウォールの動作を監視する場合、ログは基本的な資料になりますが、デフォルトではこれらのログは記録されませんので、以下のコマンド（log(filter)）を実行して必要なログオプションを有効にしてください。

    awplus(config)# log buffered level informational facility local5

セッションの開始と終了もログに記録したい場合は、別途connection-log eventsコマンドで有効化してください。
また、通常のファイアウォールログと同様に local5ファシリティーで出力されるため、log(filter)で同ファシリティーのメッセージを出力する設定も追加してください。

    awplus(config)# connection-log events all
    awplus(config)# log buffered level informational facility local5