Cisco ASAのIPsec設定要素
ASA の policy-based site-to-site VPN では、IKEv2 policy、IPsec proposal、crypto ACL、crypto map、tunnel-group、identity NAT を組み合わせる。
IKE、IKE SA、Child SA、ESP、トンネルモードの一般的な仕組みは、IKEとSA、ESPとAH、トランスポートモードとトンネルモードを参照する。
設定要素の関係
Section titled “設定要素の関係”flowchart TD
ikepolicy["IKEv2 policy: IKEv2 SAのアルゴリズム"] --> ikesa["IKEv2 SA"]
tunnelgroup["tunnel-group: peerの種類と認証情報"] --> ikesa
cryptoacl["crypto ACL: 保護する通信"] --> cryptomap["crypto map entry"]
peer["peer: 対向ASAのoutsideアドレス"] --> cryptomap
ipsecproposal["IKEv2 IPsec proposal: ESPのアルゴリズム"] --> cryptomap
pfs["PFS: Child SA更新時のDH group"] --> cryptomap
ikesa --> childsa["Child SA / IPsec SA"]
cryptomap --> childsa
cryptomap --> outside["outside interfaceへ適用"]
identitynat["identity NAT: VPN通信のアドレスを維持"] --> selector["crypto ACLと同じlocal / remote network"]
selector --> cryptoacl
IKEv2 policy と tunnel-group は、IKEv2 SA のネゴシエーションと相手認証を成立させる。crypto ACL、peer、IPsec proposal をまとめた crypto map は、どの通信をどの相手へ、どの ESP 方式で保護するかを決める。
IKEv2 policy
Section titled “IKEv2 policy”crypto ikev2 policy は、IKEv2 SA で使用する暗号化、完全性確認、PRF、DH group、lifetime を定義する。
ASA では、一つの IKEv2 policy の中にアルゴリズムを直接設定する。IOS / IOS XE のように IKEv2 proposal を別に作成し、その proposal を IKEv2 policy から参照する構造ではない。
policy の番号はローカルでの優先順位であり、小さい番号から評価される。番号自体を対向機器と一致させる必要はないが、ネゴシエーションに使うアルゴリズムには共通の組み合わせが必要である。
crypto ikev2 enable outside は、outside で IKEv2 の終端を受け付けるための設定である。policy を作成しただけでは、そのインターフェースで IKEv2 は有効にならない。
IKEv2 IPsec proposal
Section titled “IKEv2 IPsec proposal”crypto ipsec ikev2 ipsec-proposal は、Child SA が ESP でデータを保護するときの暗号化方式と完全性確認方式を定義する。
ASA の IKEv2 policy が IKEv2 の制御通信を保護するのに対し、IKEv2 IPsec proposal は VPN を通る実データを保護する。IOS / IOS XE の IPsec transform set に近い役割だが、ASA では IKEv2 用の ipsec-proposal というコマンド体系を使う。
AES-CBC と HMAC-SHA-256 を使う場合は、protocol esp encryption aes-256 と protocol esp integrity sha-256 を組み合わせる。AES-GCM を使う場合は暗号化と完全性確認を一つの方式で提供するため、独立した HMAC ではなく integrity null を指定する。
crypto ACL
Section titled “crypto ACL”crypto ACL は、IPsec で保護する local network と remote network の組み合わせを定義する。permit に一致した通信が crypto map の処理対象となり、IKEv2 では Child SA の traffic selector に反映される。
crypto ACL はインターフェースへ access-group で適用するフィルタではない。次の二つは同じ ACL 構文を使うが、目的が異なる。
| ACL | 参照元 | 役割 |
|---|---|---|
| interface ACL | access-group |
ASAを通過する通信を許可または拒否する |
| crypto ACL | crypto map ... match address |
IPsecで保護する通信を選ぶ |
対向同士の crypto ACL は送信元と宛先を反転させる。ASA-A が LAN-A → LAN-B を permit するなら、ASA-B は LAN-B → LAN-A を permit する。ネットワーク範囲やプロトコルが食い違うと、traffic selector が一致せず Child SA を確立できないか、一方向だけが保護対象になる。
crypto map
Section titled “crypto map”crypto map entry は、IPsec SA に必要な ASA 固有の設定要素を一つにまとめる。
match addressは、どのcrypto ACLに一致する通信を保護するかを決める。set peerは、その通信を送るVPN peerを指定する。set ikev2 ipsec-proposalは、Child SAで使用するESPの暗号化・完全性確認方式を結びつける。
set pfsは任意設定であり、Child SAを新しく作るときに追加のDH鍵交換を行う場合、そのDH groupを指定する。対向機器も同じPFS groupを受け入れる必要がある。
同じ名前の crypto map に異なる sequence number の entry を作成できる。複数 entry がある場合は番号が小さいものほど優先される。同じ outside interface で複数の対向 VPN を終端するときは、peer ごとに entry を追加する。
crypto map MAP-NAME interface outside を設定すると、crypto map set 全体が outside に適用される。これにより ASA は、そのインターフェースを通る通信を crypto map entry と照合し、IPsec SA を処理できるようになる。
tunnel-group
Section titled “tunnel-group”tunnel-groupは、VPN接続ごとの属性を保持するASAの設定単位である。固定IPアドレスを持つIKEv2 PSK認証のLAN-to-LAN VPNでは、到着した接続を対応するconnection profileへ結びつけるため、tunnel-group名を対向peerのIPアドレスにする。
type ipsec-l2lは、そのtunnel-groupを拠点間IPsec VPNとして作成する。ipsec-attributesでは、IKEv2のlocal authenticationとremote authenticationに使うPSKを設定する。
ikev2 local-authentication pre-shared-keyは、自分が相手へ示す認証情報を生成する。ikev2 remote-authentication pre-shared-keyは、相手から受け取った認証情報を検証する。
同じ PSK を双方向に使う構成でも、IKEv2 は local と remote を別々に設定する。IKEv2 では、方向ごとに異なる認証方式や資格情報を扱えるためである。
identity NAT
Section titled “identity NAT”ASA に inside から outside への dynamic PAT があると、local LAN から remote LAN への通信も PAT される可能性がある。crypto ACL が元の local LAN を対象にしている場合、アドレスが変換されると、意図した selector と一致しなくなる。
identity NAT はアドレスを別の値へ変換せず、同じアドレスへ静的変換する NAT 規則である。VPN では「local LAN から特定の remote LAN へ向かう通信」を条件に、送信元と宛先を維持する。
この条件を一つの規則で表すため、ASAのtwice NATを使用する。sourceのreal objectとmapped object、destinationのreal objectとmapped objectに、それぞれ同じオブジェクトを指定する。
source static LOCAL LOCALは、local networkの送信元アドレスを同じ値のままにする。destination static REMOTE REMOTEは、remote network宛ての場合だけ規則を一致させ、宛先も同じ値のままにする。
no-proxy-arpは任意オプションであり、identity NATで表したアドレスに対してmapped側インターフェースでproxy ARP応答しない。route-lookupも任意であり、NAT規則に書かれたインターフェースだけで出力先を固定せず、ルーティングテーブルからegressを決める。
twice NATは既定でNAT tableのSection 1に入り、object NATが置かれるSection 2より先に評価される。ただし、Section 1の内部では上から最初に一致した規則が使われ、新しい規則は既定でSection 1の末尾へ追加される。既存のmanual NATやtwice NATが同じ通信に一致する場合は、identity NATをそれらより前へ配置する。natコマンドのline番号で挿入位置を指定し、show nat detailで実際の評価順序を確認する。
復号後の通信とACL
Section titled “復号後の通信とACL”sysopt connection permit-vpnを有効にすると、復号後のVPN通信は、crypto mapを適用したインターフェースのACLと、転送先インターフェースのegress ACLを迂回する。ASA 7.0(1)以降は既定で有効であり、明示コマンドは既定動作を設定へ表す場合に使用する。
ただし、crypto ACL は通信をサービス単位で厳密に制限するための規則とは限らない。VPN から内部へ到達できるサービスを ASA の ACL で制限する場合は、sysopt connection permit-vpn と interface ACL の相互作用を設計し、packet-tracer と実通信で確認する。
sysopt connection permit-vpnは暗号化前のinsideからoutsideへの通信を無条件に許可する設定ではない。inside側から開始する通信にはinsideのingress ACLが適用される。復号後の通信にもinterface ACLを適用する構成ではno sysopt connection permit-vpnを使用し、許可する通信をACLへ明示する。
IOS / IOS XEとの対応
Section titled “IOS / IOS XEとの対応”| ASA | IOS / IOS XEで近い要素 | 相違点 |
|---|---|---|
| IKEv2 policy | IKEv2 proposal + policy | ASAはpolicy内へアルゴリズムを直接設定する |
| IKEv2 IPsec proposal | IPsec transform set | ASAのIKEv2ではipsec-proposalを使う |
| tunnel-group | IKEv2 keyring + profile | ASAはpeer固有の接続属性と認証情報をtunnel-groupへ持つ |
| crypto ACL | crypto map用ACL | どちらもpolicy-based VPNの保護対象を選ぶ |
| crypto map | crypto map | ASAではtunnel-groupやNATとの関係も含めて構成する |
| identity NAT | NAT除外設定 | ASAではNAT tableの規則として同一アドレスへ変換する |
IOS / IOS XE の proposal、policy、keyring、profile、transform-set の関係は Cisco IOSのIPsec設定要素 を参照する。