# UTM / URLフィルター

URLフィルター（URLブラックリスト）は、ユーザーが定義したURLのブラックリスト、ホワイトリストにもとづいて、Webアクセスを拒否・許可する機能です。
URLフィルターは、本製品のブリッジング用、ルーティング用インターフェースを通過するIPv4/IPv6パケット内のHTTP/HTTPSトラフィックを監視し、HTTPリクエストまたはHTTPSの接続開始時に送信されるTLS ClientHelloメッセージを検出すると、HTTPリクエストに含まれるURLや、TLS ClientHelloメッセージ内のSNI（Server Name Indication）フィールドに平文で含まれているサーバーのドメイン名をユーザー定義のホワイトリスト、ブラックリストと比較して該当パケットの拒否・許可を判断します。
Note

HTTPSの通信では暗号化されたTLSセッション上でHTTPリクエストが送信されるため、アクセス先URLそのものを検査することはできません。ただし通常、TLSセッション開始時のClientHelloメッセージには接続先サーバーのドメイン名がSNIとして含まれるため、HTTPS通信に対してはこのドメイン名の情報を利用して処理を行います。

## 検査タイミング

本機能は下記のタイミングでサポート対象のパケットを検査します。

- VAPインターフェースでの受信時
- Ethernetインターフェース（PPPoE、802.1Qを含む）での受信時
- トンネルインターフェースでの受信時 ※初期設定では検査しません。後述する設定が必要です。
- ブリッジインターフェースでの受信時
- 本製品が生成したパケット（自装置発パケット）の送信前

Note

初期設定では、トンネルインターフェースで受信したパケットは検査されません。
トンネルインターフェースで受信したパケットに本機能を適用するには、グローバルコンフィグモードのtunnel security-reprocessingコマンドを有効にしてください。
tunnel security-reprocessingコマンドの有効時は、すべてのトンネルインターフェースで受信パケットが検査対象になります。

## 基本動作

HTTPリクエストやHTTPS SNI内にURLを検出したときの、URLフィルターの処理フローは次のとおりです。

1. ホワイトリストにマッチ → 許可
2. ブラックリストにマッチ → 拒否
3. どちらにもマッチしない → 許可

Note

SNIを含まないHTTPSトラフィックはフィルタリングの対象になりません。

ここから、URLフィルターでは次の方針にしたがってブラックリスト、ホワイトリストを作成することになります。

- 拒否するURLのパターンをブラックリストに記述
- 本来ブラックリストで拒否されるURLのうち、例外的に許可したいものがあれば、そのパターンをホワイトリストに記述

## 基本設定

URLフィルターの設定は、次の流れで行います。

1. ブラックリスト、ホワイトリストのリストファイルを作成し、ローカルファイルシステムに保存。
2. URLフィルターモードでリストファイルを指定し、URLフィルター機能を有効化。

## リストファイルの作成

最初にブラックリスト、ホワイトリストそれぞれに対応するリストファイルを作成し、本製品のローカルファイルシステム（内臓フラッシュメモリー、SDカード、USBメモリー）上に保存してください。
PC上で作成し本製品にダウンロードしても、本製品上でeditコマンドを使って作成してもかまいません。
リストファイルの仕様は以下のとおりです。

- リストファイルには、1行に1つURLパターンを記述します。
- シャープ記号（#）またはセミコロン（;）で始まる行はコメントとして無視されます。また、空行も無視されます。
- ファイル内におけるURLパターンの順序は意味を持ちません。どのような順序で記述しても動作は同じです。
- URLパターンはASCII文字だけで記述してください。
- URLパターン中にスペースを含めることはできません。
- URLパターンの記述にあたっては、URLフィルターが行うURLの事前変換（正規化）処理を考慮してください。
  URLフィルターは、HTTPリクエスト、HTTPS SNIから抽出したURL、および、URLパターンに対して、次の変換を行った後で照合を行います。
  - 英大文字をすべて小文字に変換します。
  - URLに埋め込まれたユーザー名、パスワード（URLの先頭にある「username:password@」）を取り除きます。
  - ドメイン名の先頭にある「www.」を取り除きます。
  次に正規化処理の具体例を示します。

      # 大文字を小文字に変換
      SITE6.EXAMPLE.JP/products/list.html
        ↓
      site6.example.jp/products/list.html

      # ユーザー名、パスワードを除去。大文字を小文字に変換
      userA:passwordB@shop.example.com/MYPAGE/index.html
        ↓
      shop.example.com/mypage/index.html

      # ドメイン名先頭の www. を除去
      www.example.com/document/list
        ↓
      example.com/document/list

  URLとURLパターンの比較は、ともに変換後（各例の下段）の文字列で行われます。
  リストファイル作成時には、これらの仕様にご注意ください。
  - たとえば「www.example.com」というURLパターンは、正規化によって実際には「example.com」というパターンとして扱われるため、「www.example.com」だけでなく、「www2.example.com」、「www.jp.example.com」、「server1.example.com」、「example.com」などのURLにもマッチします。
  - またこれとは逆に、「www.example.com」というURLは、正規化によって実際には「example.com」として扱われるため、URLパターン「*.example.com」にはマッチしません。
- リストファイルに記述するURLパターンは、「ベースドメイン」と「ワイルドカード」の2種類があります。
  - 次のようにアスタリスク（*）やスラッシュ（/）を含まない文字列はベースドメインとみなされ、該当ドメインとすべてのサブドメインにマッチします。

        # com, example.com, www.example.com などにマッチ。com.example.jpにはマッチしない。
        com

        # example.com、store.example.com、www.jp.example.com などにマッチ。example.com.auにはマッチしない。
        example.com

  - 次のようにアスタリスク（*）を使ったパターンはワイルドカードURLとみなされ、アクセス先サイトのドメイン名とパスを連結したURL全体と照合されます。その際、アスタリスクはURL内における0文字以上の任意の文字列にマッチします。

        # xxxxという文字列を含むすべてのURL。www.xxxx.example.com, example.jp/file/xxxx.zip などにマッチ。
        *xxxx*

        # example.net/viruses/ という文字列で始まるすべてのURL。
        example.net/viruses/*

        # example.net/harmful/ という文字列を含むすべてのURL。
        *example.net/harmful/*

        # /viruses/ という文字列を含むすべてのURL。
        */viruses/*

  Note

  HTTPSのフィルタリングではSNIに含まれるサーバーのドメイン名しか使用できないため、HTTPSトラフィックはドメイン名のみのパターンにしかマッチしません。

- すべてにマッチするURLパターンを使用したい場合は、「*」、「*.*」、「*/*」、「*.*.*」 を使用してください。
  ただし、これらのパターンはブラックリストファイルでのみ使用可能です。
- リストファイルは、「b1.txt」「b2.txt」「w1.txt」「w2.txt」といったように複数のファイルに分けて記述することが可能ですが、サポートするパターンの数はブラックリスト、ホワイトリストそれぞれについて1000行までです。

### URLフィルター機能の有効化

リストファイルの用意ができたら、URLフィルターモード（url-filterコマンド）でURLフィルター機能の設定を行います。

1. URLフィルターの設定を行うため、url-filterコマンドでURLフィルターモードに移動します。

       awplus(config)# url-filter
       awplus(config-url-filter)#

2. ホワイトリストファイルを指定します。これには、whitelistコマンドを使います。
   リストファイルが複数ある場合は同コマンドを複数回実行してください。

       awplus(config-url-filter)# whitelist flash:/w1.txt
       awplus(config-url-filter)# whitelist flash:/w2.txt

3. ブラックリストファイルを指定します。これには、blacklistコマンドを使います。
   リストファイルが複数ある場合は同コマンドを複数回実行してください。

       awplus(config-url-filter)# blacklist flash:/b1.txt
       awplus(config-url-filter)# blacklist flash:/b2.txt

4. URLフィルター機能を有効化します。これには、protectコマンドを使います。

       awplus(config-url-filter)# protect

## リストファイルを更新したとき

リストファイルを更新したときは、url-filter reload custom-listsコマンドを実行してリストファイルを再読み込みする必要があります。

    awplus# url-filter reload custom-lists

## 設定や状態の確認

URLフィルター機能の有効・無効、ブラックリスト・ホワイトリストの登録数は、show url-filterコマンドで確認できます。

    awplus# show url-filter
    Status:      Enabled (Active)
    Events:      104
    Provider:    not set
    Custom blacklists   Entries
     b1.txt               2
     b2.txt               2
    Custom whitelists   Entries
     w1.txt               3
     w2.txt               2

## ログ

URLフィルター（URLブラックリスト）のログを記録するには、以下のコマンド（log(filter)）を実行してください。初期設定では本機能のログは記録されません。

    awplus(config)# log buffered level informational facility local5

前記の設定を行っても初期状態では拒否したURLしかログに記録されません。すべてのURLリクエストをログに記録したい場合はlog url-requestsコマンドで有効化してください。

    awplus(config)# url-filter
    awplus(config-url-filter)# log url-requests