Cisco ASAの全体像
Cisco ASA は、インターフェース間を通過する通信を状態、ACL、NAT、VPN などに基づいて制御する Cisco のファイアウォールである。
ASA は Cisco IOS / IOS XE ルータと似た形式の CLI を持つが、ASA のソフトウェアは IOS の一種ではない。コマンド名が似ていても、構文や処理が同じとは限らない。仮想アプライアンス版は ASAv と呼ばれる。
ファイアウォールモード
Section titled “ファイアウォールモード”ASA には routed mode と transparent mode がある。
| モード | 動作 |
|---|---|
| routed mode | 各データインターフェースに IP アドレスを持ち、Layer 3 でルーティングしながら通信を検査する |
| transparent mode | ネットワーク間に Layer 2 ファイアウォールとして入り、ブリッジ転送する |
single contextでは一台のASAを一つのファイアウォールとして扱う。multiple contextでは、一台のASAを複数の論理ファイアウォールへ分割し、contextごとにインターフェース、ポリシー、ルーティングなどを管理する。
インターフェースを構成する要素
Section titled “インターフェースを構成する要素”ASA の routed interface は、物理または仮想インターフェースに次の情報を設定して使う。
| 要素 | 役割 |
|---|---|
| インターフェースID | GigabitEthernet0/0など、ポート自体を識別する名前 |
nameif |
inside、outsideなど、ASAの各機能から参照する論理名 |
security-level |
インターフェースの信頼度を0から100で表す値 |
| IPアドレス | routed modeでASAがルーティングに使うアドレス |
nameif は単なる説明文ではない。NAT の (inside,outside)、access-group の適用先、crypto map の適用先などでは、インターフェースIDではなく nameif を指定する。
一般的には、内部側をinside、外部側をoutsideと名付ける。security levelの既定値は0である。ただし、nameif insideを設定したインターフェースだけは、security levelを省略すると100になる。outsideという名前が0を設定するわけではない。意図を設定へ明示するため、既定値と同じ値を明示的に指定できる。
security level
Section titled “security level”security level は0が最も低く、100が最も高い。ACLが適用されていない基本状態では、異なるsecurity level間の通信は次のように扱われる。
| 通信方向 | 既定の扱い |
|---|---|
| 高いsecurity levelから低いsecurity level | 許可 |
| 低いsecurity levelから高いsecurity level | 拒否 |
| 同じsecurity level同士 | 拒否 |
security level は通信ポリシーの初期値であり、ポート番号や個別ホストまで表現する規則ではない。具体的な許可・拒否は extended ACL を access-group でインターフェースへ適用して制御する。同じsecurity levelのインターフェース間を許可する場合は、same-security-traffic permit inter-interface を使用する。
ASA はステートフルに通信を追跡する。許可された TCP や UDP の接続については接続表を作り、その接続に属する戻り通信を対応づける。ACL を往路と復路で機械的に二重定義するのではなく、どちら側から接続を開始できるかを基準に考える。
ASAのACL
Section titled “ASAのACL”ASA の ACL には二つの代表的な使われ方がある。
| 使われ方 | permitの意味 |
|---|---|
access-groupでインターフェースへ適用 |
パケットの通過を許可する |
| crypto mapや機能の選択条件として参照 | その機能の処理対象に含める |
同じ access-list 構文でも、どの機能から参照されるかによって役割が変わる。IPsec の crypto ACL は「暗号化する通信」を選ぶ条件であり、それだけではインターフェースを通過する通信の許可規則にはならない。
ASA の IPv4 ACL でネットワークを指定するときは、IOS / IOS XE の ACL で使うワイルドカードマスクではなく、255.255.255.0 のようなサブネットマスクを使用する。
interface ACLは、access-group ACL-NAME in interface insideのようにnameifへ適用する。inはそのインターフェースからASAへ入る方向、outはASAからそのインターフェースへ出る方向である。通常は接続を開始するパケットを入口のin ACLで制御する。
ACLの末尾には暗黙のdenyがある。ACLを適用した方向では、明示的なpermitに一致しない通信は拒否される。このため、高いsecurity levelから低いsecurity levelへの既定許可をACLで絞り、低いsecurity levelから高いsecurity levelへの通信をACLで明示的に許可できる。
同じsecurity levelのインターフェース間では、ACLより先にsame-securityの可否が検査される。ACLでpermitしていても、インターフェース間通信にはsame-security-traffic permit inter-interfaceが必要である。
ACL、NAT、ルーティングの関係
Section titled “ACL、NAT、ルーティングの関係”ASA がパケットを転送するには、一つの設定だけでなく複数の判断が成立する必要がある。
- ACLまたはsecurity levelにより通信が許可される
- NAT規則により、送信元と宛先をどのアドレスとして扱うかが決まる
- ルーティングテーブルから出力インターフェースとnext hopが決まる
- 戻り通信がASAへ戻る経路が存在する
NAT は許可規則ではない。静的 NAT を設定しても通信を無条件に許可するわけではなく、ACL や接続状態による判断は別に行われる。一方、ACL で許可していても、意図しない NAT 規則に一致したり戻り経路がなかったりすれば通信は成立しない。
NAT には、network object の中で設定する object NAT と、送信元と宛先を一つの規則で条件にできる twice NAT がある。twice NAT は初期状態では NAT table の Section 1 に入り、上から最初に一致した規則が使われる。VPN の identity NAT では、送信元と対向ネットワークの組み合わせを指定できる twice NAT が使われる。
IKE、NAT-T、ESPなどASA自身がVPNを終端するためのパケットは、既定ではoutsideのinterface ACLへ個別のpermitを追加しなくても受け付けられる。復号後にASAを通過してinsideへ転送されるパケットは別に扱われ、sysopt connection permit-vpnやinterface ACLの設定が関係する。
ASAとIOS / IOS XEの違い
Section titled “ASAとIOS / IOS XEの違い”| 項目 | ASA | IOS / IOS XEルータ |
|---|---|---|
| ソフトウェア | ASA専用のソフトウェア | IOSまたはIOS XE |
| 主な役割 | ステートフルファイアウォール、NAT、VPN | ルーティング、スイッチング、各種ネットワーク機能 |
| インターフェースの論理名 | nameif insideなどを各機能から参照する |
多くの機能でGigabitEthernet0/0などのIDを直接参照する |
| 信頼度の初期値 | security-levelを持つ |
ASAのsecurity levelに相当する仕組みはない |
| IPv4 ACLのネットワークマスク | サブネットマスク | 一般にワイルドカードマスク |
| 拠点間IPsecの例 | crypto ACL、crypto map、tunnel-groupを組み合わせる | VTI、GRE over IPsec、crypto mapなどを選択できる |
IOS / IOS XE のコマンドを ASA へそのまま移すことはできない。たとえば、ASA の IKEv2 policy は、IOS / IOS XE の IKEv2 proposal と policy を分けた構成とは異なる。ASA 固有の IPsec 設定要素は Cisco ASAのIPsec設定要素 を参照する。