ASA: MPFを用いたサービスポリシーの設定例と動作確認

ドキュメント

2016/12/19 - 21:20
7月 12th, 2015
User Badges:
  • Cisco Employee,

 

はじめに

Modular Policy Framework(MPF) を用いたサービスポリシーにより、以下の機能を柔軟に設定できます。

  ・ サービスモジュール (例:FirePOWER(SFR)、IPS、CX、CSC) との通信連携

  ・ アプリケーションインスペクション

  ・ コネクション制御 (例:タイムアウト値変更、最大接続可能数制限など)


サービスモジュールとの通信連携や、コネクションの高度な管理のためには、新規設定が必要です。

一部のアプリケーションインスペクション(例:FTPやSIPやSMTPなど)は デフォルトで有効です。 該当の通信が発生時、ASAはパケット内部まで確認し、セカンダリチャネルの動的な許可や 埋め込み型IPアドレスの変換、セキュリティチェックを行います。

本ドキュメントでは、MPFを用いたサービスポリシーの動作仕様、及び その設定例と動作確認方法について説明します。

本ドキュメントは、ASAバージョン 9.3(3)1、ASDMバージョン 7.4(2)を元に確認、作成しております。



 

パケットの処理順序について

既存コネクションの無いパケットの場合、宛先アドレス変換(UnNAT) or ルーティングの後に ACLチェックが行われ、その後に サービスポリシーのチェックが行われます。


MPF-setting-01



 

サービスポリシーの処理順序について

サービスポリシーは、任意インターフェイス もしくは グローバルに適用できます。 サービスポリシーを 指定インターフェイスと グロ―バルの両方に設定した場合、インターフェイス ポリシーが優先し処理されます。

ポリシーマップ内に複数クラスを定義した場合、各機能別に上から順にチェックされ、マッチした場合、後続のクラスは処理されません。

この処理をよく理解するために、以下に実際の設定例と、Insideから WEB・FTP・ICMP通信が発生時の処理について説明します。

サービスポリシー設定例:

access-list CLASS-01-ACL extended permit ip any any
access-list CLASS-02-ACL extended permit tcp any any eq ftp
!
class-map CLASS-01 
match access-list CLASS-01-ACL
class-map CLASS-02 match access-list CLASS-02-ACL ! policy-map GLOBAL-PMAP class inspection_default inspect ftp inspect icmp policy-map INSIDE-PMAP class CLASS-01 sfr fail-open class CLASS-02 sfr fail-open inspect ftp ! service-policy GLOBAL-PMAP global service-policy INSIDE-PMAP interface inside


Inside側から WEB通信が発生時は、インターフェイス ポリシー(INSIDE-PMAP)の CLASS-01に定義した FirePOWER(SFR)サービスモジュールと通信連携を行うための sfr fail-open にのみマッチします。  CLASS-02は FTP(=tcp21) のみ対象ですのでマッチしません。その後の グローバルポリシー (GLOBAL-PMAP)にも マッチ対象の inspect機能が無いため、マッチしません。 

Inside側から FTP通信が発生時は、CLASS-01の sfr fail-open にマッチ後、CLASS-02では 既にサービスモジュールには前クラスでマッチしてますので inspect ftpのみマッチします。 既に inspect ftp にマッチしてますので、その後の グローバルポリシー (GLOBAL-PMAP)の inspect ftp にはマッチしません。

Inside側から  ICMP通信 (PING) が発生時は、CLASS-01の sfr fail-open にマッチ後、CLASS-02は FTP(=tcp21) のみ対象ですのでマッチしません。 その後の グローバルポリシー(GLOBAL-PMAP)の inspect icmpにマッチします。

上記 設定時の、Inside側から WEB、FTP、ICMP通信 (PING) が発生時の処理フローは、まとめますと以下となります。


asa-mpf-packet-order-02.jpg

 

 

サービスモジュールとの通信連携の設定例

本項では、以下の構成例と通信要件における設定例と動作確認方法について説明します。
 

試験構成と通信要件

以下構成において、以下の通信要件があるものとします。 ASAは FirePOWER(SFR)サービスモジュールを搭載し、アプリケーションレイヤー制御と 侵入検知・防御処理を提供します。


MPF-setting-04b

 
 送信元  送信元IP
 nameif名
 宛先IP  宛先ポート  SFR処理  目的・通信タイプ

 Internal
 Segments

 172.16.0.0/16
 inside側
 Any  http(=tcp80)
 https(=tcp443)
 有効   Web通信
 各種アップデート
 監視対象の通信
 Internal
 Servers
 172.16.200.0/24
 inside側
 172.17.200.0/24  https(=tcp443)  無効  定期バックアップ 
 信頼された通信


 

設定例

CLIでのサービスモジュールへのリダイレクト設定は以下となります。 ACLは上からマッチングを行いますので、インターナルサーバ(172.16.200.1)から リモートサイト(172.17.200.1:443) 宛の通信のDenyエントリを 上位に設定する事で、FirePOWER (SFR) サービスモジュールの処理対象から除外できます。

access-list SFR-ACL extended deny tcp 172.16.200.0 255.255.255.0 172.17.200.0 255.255.255.0 eq https
access-list SFR-ACL extended permit tcp 172.16.0.0 255.255.0.0 any eq www
access-list SFR-ACL extended permit tcp 172.16.0.0 255.255.0.0 any eq https
!
class-map SFR-CMAP
 match access-list SFR-ACL    <--- SFR-ACLを、クラスマップ SFR-CMAPに紐付け
!
policy-map INSIDE-PMAP
 class SFR-CMAP
  sfr fail-open       <--- FirePOWER(SFR)サービスモジュールにリダイレクト設定
!
service-policy INSIDE-PMAP interface inside     <---- insideインターフェイスに適用
!

 

動作確認

以下は実際の、Inside側のクライアント(172.16.100.1)から WEBサーバ(1.0.0.2:80)に通信時のコネクションテーブルの出力です。 サービスモジュールでインスペクション時は、Xフラグが立ちます。

ASA/pri/act# show conn protocol tcp port 80
15 in use, 67539 most used

TCP outside  1.0.0.2:80 inside  172.16.100.1:2719, idle 0:00:00, bytes 1818575, flags UIOX


以下は実際の、Inside側のインターナルサーバ(172.16.200.1)から リモートサイト(172.17.200.1:443)に通信時のコネクションテーブルの出力です。 サービスモジュールでインスペクションが行われない為、Xフラグが立ちません。


ASA/pri/act(config)# show conn protocol tcp port 443
58 in use, 67539 most used

TCP outside  172.17.200.1:443 inside  172.16.200.1:4712, idle 0:00:00, bytes 95708, flags UFRIO
TCP outside  172.17.200.1:443 inside  172.16.200.1:4706, idle 0:00:00, bytes 150730, flags UFRIO
TCP outside  172.17.200.1:443 inside  172.16.200.1:4705, idle 0:00:00, bytes 163046, flags UFRIO
TCP outside  172.17.200.1:443 inside  172.16.200.1:4704, idle 0:00:00, bytes 148665, flags UFRIO
TCP outside  172.17.200.1:443 inside  172.16.200.1:4703, idle 0:00:00, bytes 100004, flags UFRIO
TCP outside  172.17.200.1:443 inside  172.16.200.1:4694, idle 0:00:00, bytes 307592, flags UFRIO


以下は show access-listコマンドの出力です。 インターナルサーバ(172.16.200.1)から リモートサイト(172.17.200.1:443)に通信時は、SFR-ACL line 1 の アクセスコントロールエントリにマッチし、サービスモジュールの処理は拒否されます。

ASA/pri/act(config)# show access-list SFR-ACL
access-list SFR-ACL; 3 elements; name hash: 0xbb46b9db
access-list SFR-ACL line 1 extended deny tcp 172.16.200.0 255.255.255.0 172.17.200.0 255.255.255.0 eq https (hitcnt=34) 0x2f841f94
access-list SFR-ACL line 2 extended permit tcp 172.16.0.0 255.255.0.0 any eq www (hitcnt=72) 0xbdbee4c4
access-list SFR-ACL line 3 extended permit tcp 172.16.0.0 255.255.0.0 any eq https (hitcnt=195) 0xccc4bb49


以下は show service-policyコマンドの出力です。 ヒット時にパケットカウンタの増加を確認できます。

ASA/pri/act(config)# show service-policy

Interface inside:
  Service-policy: INSIDE-PMAP
    Class-map: SFR-CMAP
      SFR: card status Up, mode fail-open
        packet input 75954, packet output 76209, drop 0, reset-drop 0


なお、実通信試験を行わなくても、packet-tracer ユーティリティと show access-list コマンドを用いて、期待の設定にマッチするかの簡易確認が可能です。

以下は、Inside側のクライアント(172.16.100.1)から WEBサーバ(1.0.0.2:443)宛の通信の簡易試験の結果です。

ASA/pri/act# packet-tracer input inside tcp 172.16.100.1 1234 1.0.0.2 443 detail
              --- snip ---
Phase: 6
Type: SFR
Subtype:
Result: ALLOW
Config:                          <----- マッチしたサービスポリシー
class-map SFR-CMAP
 match access-list SFR-ACL
policy-map INSIDE-PMAP
 class SFR-CMAP
  sfr fail-open
service-policy INSIDE-PMAP interface inside
Additional Information:
 Forward Flow based lookup yields rule:
 in  id=0x7fffe2635f40, priority=73, domain=sfr, deny=false
        hits=227, user_data=0x7fffe1a7b8f0, cs_id=0x0, use_real_addr, flags=0x0, protocol=6
        src ip/id=172.16.0.0, mask=255.255.0.0, port=0, tag=any
        dst ip/id=0.0.0.0, mask=0.0.0.0, port=443, tag=any, dscp=0x0
        input_ifc=inside, output_ifc=any

ASA/pri/act# show access-list SFR-ACL
access-list SFR-ACL; 3 elements; name hash: 0xbb46b9db
access-list SFR-ACL line 1 extended deny tcp 172.16.200.0 255.255.255.0 172.17.200.0 255.255.255.0 eq https (hitcnt=37) 0x2f841f94
access-list SFR-ACL line 2 extended permit tcp 172.16.0.0 255.255.0.0 any eq www (hitcnt=74) 0xbdbee4c4
access-list SFR-ACL line 3 extended permit tcp 172.16.0.0 255.255.0.0 any eq https (hitcnt=227) 0xccc4bb49     <----- マッチしたアクセスコントロールエントリ


以下は、Inside側のインターナルサーバ(172.16.200.1)から リモートサイト(172.17.200.1:443)宛の通信の簡易試験の結果です。

ASA/pri/act# packet-tracer input inside tcp 172.16.200.1 1234 172.17.200.1 443 detail
              --- snip ---
Phase: 6
Type: SFR
Subtype:
Result: ALLOW
Config:                     <----- マッチしたサービスポリシー
class-map SFR-CMAP
 match access-list SFR-ACL
policy-map INSIDE-PMAP
 class SFR-CMAP
  sfr fail-open
service-policy INSIDE-PMAP interface inside
Additional Information:
 Forward Flow based lookup yields rule:
 in  id=0x7fffe1e9d390, priority=73, domain=sfr, deny=true   <----- DENY
        hits=38, user_data=0x7fffe1a7b8f0, cs_id=0x0, use_real_addr, flags=0x0, protocol=6
        src ip/id=172.16.200.0, mask=255.255.255.0, port=0, tag=any
        dst ip/id=172.17.200.0, mask=255.255.255.0, port=443, tag=any, dscp=0x0
        input_ifc=inside, output_ifc=any

ASA/pri/act# show access-list SFR-ACL
access-list SFR-ACL; 3 elements; name hash: 0xbb46b9db
access-list SFR-ACL line 1 extended deny tcp 172.16.200.0 255.255.255.0 172.17.200.0 255.255.255.0 eq https (hitcnt=38) 0x2f841f94    <----- マッチしたアクセスコントロールエントリ
access-list SFR-ACL line 2 extended permit tcp 172.16.0.0 255.255.0.0 any eq www (hitcnt=74) 0xbdbee4c4
access-list SFR-ACL line 3 extended permit tcp 172.16.0.0 255.255.0.0 any eq https (hitcnt=236) 0xccc4bb49

 

ベストプラクティス

サービスモジュール (例:FirePOWER(SFR)、IPSなど) での アプリケーション制御や URLフィルタリング、侵入検知や防御の処理は、パケット内部までの検査、およびフローの検査と制御を行うため、高度かつ柔軟な制御が可能ですが、負荷の高い処理となります。

通信負荷の高い環境の場合は、不要な通信は ACLでの破棄を優先して行い、高度な処理が必要な通信のみサービスモジュールにリダイレクトする事で、パフォーマンスの最適化が可能です。




 

コネクション タイムアウト値変更と流量制限の設定例

本項では、以下の構成例と通信要件における設定例と動作確認方法について説明します。

 

試験構成と通信要件

以下構成において、以下の通信要件があるものとします。 ASAは 外部(インターネット)から 公開サーバ宛の http(tcp=80)通信の、コネクションのタイムアウト値の短縮、および 最大コネクション数の制限を行います。

MPF-Conn-setting-01

 送信元名  送信元IP
 nameif名
 宛先IP
 宛先Port
 TCP
 アイドル
 タイムアウト
 TCP
 ハーフクローズ
 タイムアウト
 最大同時
 コネクション数

 Internet
 Clients

 Any
 outside側
 内部:192.168.200.1
 外部: 1.100.100.1
 http(=tcp80)
 10分  30秒  最大 1000 まで
 Any  Any  Any  1時間
 (デフォルト)
 10分
 (デフォルト)
 制限無し
 (デフォルト)


 

設定例

CLIでの コネクションタイムアウト値の変更と 流量制限の設定は以下となります。

access-list OUT-CONN-ACL extended permit tcp any host 192.168.200.1 eq www
!
class-map OUT-CONN-CMAP
 match access-list OUT-CONN-ACL
!
policy-map OUT-CONN-PMAP
 class OUT-CONN-CMAP
  set connection conn-max 1000      <---- コネクションを最大1000に制限
  set connection timeout half-closed 0:00:30 idle 0:10:00    <---- タイムアウト値を変更
!
service-policy OUT-CONN-PMAP interface outside   <---- outsideインターフェイスに適用
!

 

動作確認

以下は実際の、DMZ内の公開サーバ(192.168.200.1)から WEB上の任意サイト(1.0.0.2:80)に 通信時のコネクションテーブルの出力です。 show conn long コマンドで、そのコネクションのアイドルタイムアウト値を確認できます。 タイムアウト値の変更対象にマッチしない為、TCPコネクションのアイドルタイムアウト値は 1時間 (1h0m) です。

ASA/pri/act# show conn long address 192.168.200.1
27 in use, 67539 most used
Flags: A - awaiting inside ACK to SYN, a - awaiting outside ACK to SYN,
       B - initial SYN from outside, b - TCP state-bypass or nailed,
       C - CTIQBE media, c - cluster centralized,
       D - DNS, d - dump, E - outside back connection, F - outside FIN, f - inside FIN,
       G - group, g - MGCP, H - H.323, h - H.225.0, I - inbound data,
       i - incomplete, J - GTP, j - GTP data, K - GTP t3-response
       k - Skinny media, M - SMTP data, m - SIP media, n - GUP
       O - outbound data, P - inside back connection, p - Phone-proxy TFTP connection,
       q - SQL*Net data, R - outside acknowledged FIN,
       R - UDP SUNRPC, r - inside acknowledged FIN, S - awaiting inside SYN,
       s - awaiting outside SYN, T - SIP, t - SIP transient, U - up,
       V - VPN orphan, W - WAAS,
       w - secondary domain backup,
       X - inspected by service module,
       x - per session, Y - director stub flow, y - backup stub flow,
       Z - Scansafe redirection, z - forwarding stub flow

TCP outside: 1.0.0.2/80 (1.0.0.2/80) DMZ: 192.168.200.1/10991 (1.100.100.1/10991), flags UO , idle 0s, uptime 9s, timeout 1h0m, bytes 2


以下は実際の、Outside側の外部クライアント(1.100.0.29)から 公開Webサーバ(外部IP=1.100.100.1、内部IP=192.168.200.1)に WEB通信時のコネクションテーブルの出力です。 タイムアウト値の変更対象にマッチする為、TCPコネクションのアイドルタイムアウト値は 10分 (10m0s) です。

ASA/pri/act# show conn long address 192.168.200.1
15 in use, 67539 most used
Flags: A - awaiting inside ACK to SYN, a - awaiting outside ACK to SYN,
       B - initial SYN from outside, b - TCP state-bypass or nailed,
       C - CTIQBE media, c - cluster centralized,
       D - DNS, d - dump, E - outside back connection, F - outside FIN, f - inside FIN,
       G - group, g - MGCP, H - H.323, h - H.225.0, I - inbound data,
       i - incomplete, J - GTP, j - GTP data, K - GTP t3-response
       k - Skinny media, M - SMTP data, m - SIP media, n - GUP
       O - outbound data, P - inside back connection, p - Phone-proxy TFTP connection,
       q - SQL*Net data, R - outside acknowledged FIN,
       R - UDP SUNRPC, r - inside acknowledged FIN, S - awaiting inside SYN,
       s - awaiting outside SYN, T - SIP, t - SIP transient, U - up,
       V - VPN orphan, W - WAAS,
       w - secondary domain backup,
       X - inspected by service module,
       x - per session, Y - director stub flow, y - backup stub flow,
       Z - Scansafe redirection, z - forwarding stub flow

TCP outside: 1.100.0.29/8672 (1.100.0.29/8672) DMZ: 192.168.200.1/80 (1.100.100.1/80), flags UIB , idle 0s, uptime 30s, timeout 10m0s, bytes 26


以下は実際の、Outside側の外部クライアント(1.100.0.*)から 公開Webサーバ(外部IP=1.100.100.1、内部IP=192.168.200.1)に  同時1000コネクション以上の http(tcp=80)通信が発生時に、ASAがコネクション流量制限を行ったことを示すログメッセージです。

ASA/pri/act# show log
Jul 13 2015 11:49:51: %ASA-3-201011: Connection limit exceeded 1000/1000 for input packet from 1.100.0.12/3667 to 192.168.200.1/80 on interface outside
Jul 13 2015 11:49:51: %ASA-3-201011: Connection limit exceeded 1000/1000 for input packet from 1.100.0.12/3668 to 192.168.200.1/80 on interface outside
Jul 13 2015 11:49:51: %ASA-3-201011: Connection limit exceeded 1000/1000 for input packet from 1.100.0.12/3669 to 192.168.200.1/80 on interface outside


以下は show service-policyコマンドの出力です。 現在のコネクション数と 超過によるドロップ数を確認できます。

ASA/pri/act# show service-policy interface outside

Interface outside:
  Service-policy: OUT-CONN-PMAP
    Class-map: OUT-CONN-CMAP
      Set connection policy: conn-max 1000
        current conns 1000, drop 1670     <---- 現在コネクション数とドロップ数
      Set connection timeout policy:
        half-closed 0:00:30 idle 0:10:00
        DCD: disabled, retry-interval 0:00:15, max-retries 5
        DCD: client-probe 0, server-probe 0, conn-expiration 0


なお、実通信試験を行わなくても、packet-tracer ユーティリティと show access-list コマンドを用いて、期待の設定にマッチするかの簡易確認が可能です。

以下は、Outside側の外部クライアント(1.0.0.2)から 公開Webサーバ(外部IP=1.100.100.1、内部IP=192.168.200.1)への http(tcp=80)通信の簡易試験の結果です。

ASA/pri/act# packet in out tcp 1.0.0.2 1234 1.100.100.1 80 detail

Phase: 1
Type: UN-NAT
Subtype: static
Result: ALLOW
Config:
object network DMZ-192.168.200.1
 nat (DMZ,outside) static 1.100.100.1
Additional Information:
NAT divert to egress interface DMZ
Untranslate 1.100.100.1/80 to 192.168.200.1/80     <---- 宛先アドレス変換

Phase: 2
Type: ACCESS-LIST
Subtype: log
Result: ALLOW
Config:
access-group OUT in interface outside
access-list OUT extended permit ip any any    <---- ACLチェック
Additional Information:
 Forward Flow based lookup yields rule:
 in  id=0x7fffe1a7b6b0, priority=13, domain=permit, deny=false
        hits=28823, user_data=0x7fffd3eeca00, cs_id=0x0, use_real_addr, flags=0x0, protocol=0
        src ip/id=0.0.0.0, mask=0.0.0.0, port=0, tag=any
        dst ip/id=0.0.0.0, mask=0.0.0.0, port=0, tag=any, dscp=0x0
        input_ifc=outside, output_ifc=any

Phase: 3
Type: CONN-SETTINGS
Subtype:
Result: ALLOW
Config:                       <----- マッチしたサービスポリシー
class-map OUT-CONN-CMAP
match access-list OUT-CONN-ACL
policy-map OUT-CONN-PMAP
class OUT-CONN-CMAP
  set connection conn-max 1000 embryonic-conn-max 0 random-sequence-number enable
  set connection timeout idle 0:10:00 embryonic 0:00:30 half-closed 0:00:30
        half-closed 0:00:30 idle 0:10:00     <----- 適用のタイムアウト値
        DCD: disabled, retry-interval 0:00:15, max-retries 5
        DCD: client-probe 0, server-probe 0, conn-expiration 0
service-policy OUT-CONN-PMAP interface outside
Additional Information:
 Forward Flow based lookup yields rule:
in  id=0x7fffe2a0db20, priority=8, domain=conn-set, deny=false
        hits=7783, user_data=0x7fffe262e630, cs_id=0x0, use_real_addr, flags=0x0, protocol=6
        src ip/id=0.0.0.0, mask=0.0.0.0, port=0, tag=any
        dst ip/id=192.168.200.1, mask=255.255.255.255, port=80, tag=any, dscp=0x0
        input_ifc=outside, output_ifc=any

ASA/pri/act# show access-list OUT-CONN-ACL
access-list OUT-CONN-ACL; 1 elements; name hash: 0xb9547993
access-list OUT-CONN-ACL line 1 extended permit tcp any host 192.168.200.1 eq www (hitcnt=7784) 0xeadecbc1    <----- マッチしたアクセスコントロールエントリ

 

MPFでコネクション管理時の注意事項

サービスモジュール (例:FirePOWER(SFR)、CXなど) での検査を行っている通信は、コネクションタイムアウト値の変更は避けてください。 サービスモジュールは ASAのデフォルトのコネクションタイムアウト値に最適化されているためです。

ASAバージョン 9.1(2)より、ハーフクローズ タイムアウトが、従来の最短5分から 最短30秒に設定変更が可能に拡張されました。 これは、ハーフクローズのコネクションフラッド攻撃への対応のための実装変更です。

コネクション流量制限は、マルチコアによる分散処理が可能なモデル(例: ASA5585)の場合、実際のコネクション流量制限の発生が、設定数より若干多い事があります。  例えば、ASA5585-20 の場合、CPU 8コアで分散処理を行います為、最大 n-1個 (nはコア数) の 7個までの 最大コネクション制限数の超過が発生する事があります。 これは、各コアがコネクションを分散処理している事、及び 各コアのコネクション処理状況の確認と制限発生タイミングにより発生する実装です。 モデルのコア数は show cpu core コマンドで確認できます。

     
     
     

TCPステートバイパスの設定例

TCPステートバイパスを有効化すると、ASAでデフォルト有効な TCPのステート監視や セキュリティチェックをバイパスするようになります。 これは、非対称ルーティング構成や RFCに準拠しない特殊なTCP通信のASA通過のサポートに有効です。

設定や確認方法について詳しくは、ASA: TCPステートバイパスを有効時の注意点と、設定と確認 を参照してください。

     
    
   

サービスポリシー 変更時の通信影響について

サービスポリシーの変更後、新規コネクションから その新ポリシーは適用され始めます。 既存コネクションは、そのコネクションが生成時に適用されたポリシーを利用し続けます。

既存コネクションにも新規ポリシーを適用したい場合は、通信影響は発生しますが、既存コネクションを clear conn コマンドで指定 or 全削除し、新規コネクションでの再接続を促す方法が有効です。

もしくは、対象の既存コネクションが無い時間帯を見極めての ポリシー設定変更が有効です。

     

     
      

参考情報

ASA 9.3: モジュラ ポリシー フレームワークを使用したサービス ポリシーの設定
http://www.cisco.com/cisco/web/support/JP/docs/SEC/Firewall/ASA5500-XNext-GenerationF/CG/004/mpf-service-policy.html?bid=0900e4b1840506ef

ASA 8.3 以降: MPF を使用した SSH/Telnet/HTTP 接続のタイムアウトの設定例
http://www.cisco.com/cisco/web/support/JP/110/1107/1107707_asa83x-mpf-config-00.html

ファイアウォール トラブルシューティング
https://supportforums.cisco.com/ja/document/12725841

Loading.

アクション

このドキュメントについて