UTM / ファイアウォール

本製品には、IPトラフィックフローの開始・終了を認識し、これに応じて動的なパケットフィルタリングを行うステートフルインスペクション型のファイアウォールが搭載されています。

ファイアウォールを有効化すると、デフォルトでは本製品のルーティング用インターフェースを通過するすべてのトラフィックが遮断されるようになります。このデフォルト動作をベースとして、必要なトラフィックを通過させるためのルールを登録していくのがファイアウォールの基本的な設定方法となります。



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

基本設定

ファイアウォールの設定は、ファイアウォールモード(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」/「エンティティー定義」をご覧ください。

    同様にして必要なルールを作成していきます。以下にいくつかの例を示します。

    • 内部ゾーン「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)は次の順序で新しく開始されたセッションを処理します。

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側ネットワークを定義していると仮定)

ただし、前記ルール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パケットの受信を許可するルールは別途設定済みであるとします。

攻撃検出機能

攻撃検出機能(IDS)は、サービス妨害攻撃(DoS)や不正アクセスと思われるトラフィックを検出してログに記録するとともに、該当トラフィックを遮断することで、本製品と配下のネットワークを保護する機能です。

IDSはファイアウォール機能の一部として実装されており、ファイアウォール機能を有効にすると自動的に有効化されます。




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


セッション数の制限

特定の端末によって大量のファイアウォールセッションが生成され、帯域幅やリソースが専有されることを防ぐには、ファイアウォールセッションリミット機能を使います。

同機能では、送信元IPアドレスごとにファイアウォールセッションの上限数(TCPとUDPの合計セッション数)を設定できます。


特定端末からのファイアウォールセッション数を制限するには、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

ファイアウォールルールの情報は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」が無効であることが示されています。

また、次の例では、すべてのルールが有効であることが示されています。
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