IPsecの概要と実装方法
IPsec(Internet Protocol Security)は、インターネット上やその他WAN回を跨いだ接続でセキュアな通信を確保するための重要なプロトコルであり、ネットワークエンジニアにとっても設定機会が多いプロトコルです。
IPsecを実装する際には、Map方式とProfile方式という2つの異なる方法が広く用いられており、どちらの方法を選択すればよいかを悩む機会が多かったので、
それぞれの設定方法を比較し、適切な選択について確認してみます。
MAP方式とProfile方式の違いについて
比較項目 | Map方式 | Profile方式 |
---|---|---|
実装方法 | 1.暗号対象パケット識別用ACL作成 2.ISAKMPポリシー作成 3.IPsecトランスフォームセット設定 4.暗号化MAP設定 5.暗号化MAPをIFへ適用 |
1.ISAKMPポリシー作成 2.IPsecトランスフォームセット設定 3.IPsecプロファイル設定 4.トンネルIFへIPsecプロファイルを適用 |
適用IF | 物理IF | トンネルIF |
管理の複雑さ | 個々のトラフィックに対して設定を行うため、管理が複雑になりやすい場合がある | 複数の接続を一元管理できるため、管理が効率化される場合がある |
カスタマイズ可能性 | 特定の接続に対して細かな制御を行うことができる | 個々の接続に対するカスタマイズが難しくなる場合がある |
マルチキャスト | トンネリング不可(GRE over IPsecで対応可) | トンネリング可能 |
大まかな差分は票の通りだと感じるが、実際の設定等を通じて詳しく見ていきたいと思います。
Map方式概要
Map方式は、暗号化するトラフィックをACL識別する方法となる。これにより、送信元や宛先のIPアドレス、ポート番号などの特定のパラメータに基づいてトラフィック毎に暗号化有無を選択できる。この方式は、細かなトラフィック制御を実現し、特定の接続に対して個別のセキュリティ設定を容易に行うことができます。
Map方式での設定
下記の図のイメージでIP実際の設定をしてみる
図1:Map方式によるIPsec設定イメージ
1.ACLの設定
暗号化対象のトラフィックを指定するアクセスコントロールリストを作成
R1(config)#access-list 100 permit ip 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255
R2(config)#access-list 100 permit ip 192.168.20.0 0.0.0.255 192.168.10.0 0.0.0.255
2.isakmpポリシーの設定
ISAMPM設定情報に基づきそれぞれ設定
R1(config)#crypto isakmp policy 1
R1(config-isakmp)#encryption aes
R1(config-isakmp)#hash sha256
R1(config-isakmp)#group 2
R1(config-isakmp)#authentication pre-share
R1(config)#crypto isakmp key IPSEC address 2.2.2.2
R2(config)#crypto isakmp policy 1
R2(config-isakmp)#encryption aes
R2(config-isakmp)#hash sha256
R2(config-isakmp)#group 2
R2(config-isakmp)#authentication pre-share
R2(config)#crypto isakmp key IPSEC address 1.1.1.1
3.IPsecトランフォームセットの設定
IPsec SAの情報に基づきそれぞれ設定
トランスフォーム名は任意ですので、ここでは適当にTRSETとしています。
R1(config)#crypto ipsec transform-set TRSET esp-aes esp-sha256-hmac
R1(cfg-crypto-trans)#mode tunnel
R2(config)#crypto ipsec transform-set TRSET esp-aes esp-sha256-hmac
R2(cfg-crypto-trans)#mode tunnel
4.暗号化MAPの設定
暗号化MAPを定義しACLとトランスフォームセット等を指定します。
マップ名は適当にMAPとしています。
R1(config)#crypto map MAP1 1 ipsec-isakmp
R1(config-crypto-map)#match address 100
R1(config-crypto-map)#set transform-set TRSET
R1(config-crypto-map)#set peer 2.2.2.2
R2(config)#crypto map MAP1 1 ipsec-isakmp
R2(config-crypto-map)#match address 100
R2(config-crypto-map)#set transform-set TRSET
R2(config-crypto-map)#set peer 1.1.1.1
5.暗号化MAPをインターフェースへ適用
暗号化されたパケットを送信するIFへ暗号化MAPを適用
R1(config)#int gigabitEthernet 1/0
R1(config-if)#crypto map MAP
R2(config)#int gigabitEthernet 1/0
R2(config-if)#crypto map MAP
設定後にIPsecが確立できているか確認します。
なお、MAP方式の場合、実通信を発生させないとISAKMP SA及びIPSEC SAは作成されないので注意が必要です。
R1配下の端末からR2配下の端末間でpingを実施後確認しました。
確認結果はR1のものです。
無事IASKMP SAと送り受けでIPsec SAがそれぞれできています。
R1#show crypto engine connections active
Crypto Engine Connections
ID Type Algorithm Encrypt Decrypt LastSeqN IP-Address
1 IPsec AES+SHA256 0 4 4 1.1.1.1
2 IPsec AES+SHA256 4 0 0 1.1.1.1
1001 IKE SHA256+AES 0 0 0 1.1.1.1
R1~R2のパケットキャプチャの画面です。
R1配下端末(192.168.10.1)からR2配下端末(192.168.20.1)へpingしました。
MAP方式でマルチキャストのトンネリング
ちなみにMAP方式で設定したIPsecではマルチキャストをトンネリングできないので
OSPF等のマルチキャストパケットを通したい場合、通常GREと併用します。
図:GRE over IPsec設定イメージ
基本的にはMAP方式の設定と同様ですが、ACLの指定方法で暗号化対象パケットをGREで指定してやる必要があります。
configは前述のMAPの設定との差分のみ記載です。
■ACLの設定
R1(config)#access-list 100 permit gre host 1.1.1.1 host 2.2.2.2
R2(config)#access-list 100 permit gre host 2.2.2.2 host 1.1.1.1
■Tunnelインターフェースの設定
GREを設定するトンネルインターフェースを作成します。
R1(config)#interface tunnel 0
R1(config-if)#ip address 10.1.1.1 255.255.255.252
R1(config-if)#tunnel source 1.1.1.1
R1(config-if)#tunnel destination 2.2.2.2
R1(config-if)#tunnel mode gre ip
R2(config)#interface tunnel 0
R2(config-if)#ip address 10.1.1.2 255.255.255.252
R2(config-if)#tunnel source 2.2.2.2
R2(config-if)#tunnel destination 1.1.1.1
R2(config-if)#tunnel mode gre ip
※対応NWのルート設定
GRE over IPsecトラフィックの投げ先を作成したTunnelインターフェースにしてやる必要があります。
R1(config)#ip route 192.168.20.0 255.255.255.0 tunnel 0
R2(config)#ip route 192.168.10.0 255.255.255.0 tunnel 0
もしくはOSPF等を動作させます。
R1(config)#router ospf 1
R1(config-router)#network 192.168.10.0 0.0.0.255 area 0
R1(config-router)#network 10.1.1.0 0.0.0.3 area 0
R2(config)#router ospf 1
R2(config-router)#network 192.168.20.0 0.0.0.255 area 0
R2(config-router)#network 10.1.1.0 0.0.0.3 area 0
ルートを記載してR1配下端末(192.168.10.1)からR2配下端末(192.168.20.1)へpingしその後SAの状態確認しました。
R1#sh crypto engine connections active
Crypto Engine Connections
ID Type Algorithm Encrypt Decrypt LastSeqN IP-Address
1 IPsec AES+SHA256 0 9 9 1.1.1.1
2 IPsec AES+SHA256 9 0 0 1.1.1.1
1001 IKE SHA256+AES 0 0 0 1.1.1.1
無事各SAが作成されました。(もちろんping疎通もOKです)
ただ、細かいのですがこの状態だと先ほどと同じようにpingしたはずのなのにデータサイズが増えてしまっています。(170bytes→186bytes)
これはGRE over IPsecでGREでカプセル化分が増えてしまったから、かつIPSecのESPでのモードをトンネルモードを使用してしまっていたからです。
そのためGREでカプセル化するときは、トランスポートモードを適用するのが推奨されます。
R1(config)#crypto ipsec transform-set TRSET esp-aes esp-sha256-hmac
R1(cfg-crypto-trans)#mode transport
R2(config)#crypto ipsec transform-set TRSET esp-aes esp-sha256-hmac
R2(cfg-crypto-trans)#mode transport
これでもう一度端末からのpingをキャプチャするとデータ長が削減されているはずです。
4. Profile方式によるセキュリティポリシーの適用
一方、Profile方式は、ACLは使用せず、指定したIFから出力されるパケットは全て暗号化する手法である。この方式は、拠点間の通信がすべて同一のセキュリティ要件の場合設定が簡略化でき、特に大規模なネットワーク構築において効率的な管理が可能となります。
先ずはProfile方式でIPsecを設定していくが、この方式をIPsec VTIとも呼ぶらしい
参考:https://www.cisco.com/c/ja_jp/support/docs/security-vpn/ipsec-negotiation-ike-protocols/ipsec-vti.html
このMAP方式と比較してこの方式は次のような特徴がある
2.暗号化MAPを作成せず、Profileを作成する
3.作成したProfileを物理IFではなくトンネルIFへ適用する
4.GREを使用しなくてもマルチキャストトンネリング可
Profile方式での設定(IPsec VTI)
図:IPsec VTI設定イメージ
1.isakmpポリシーの設定
ISAMPM設定情報に基づきそれぞれ設定
ここはMAP方式と同様
R1(config)#crypto isakmp policy 1
R1(config-isakmp)#encryption aes
R1(config-isakmp)#hash sha256
R1(config-isakmp)#group 2
R1(config-isakmp)#authentication pre-share
R1(config)#crypto isakmp key IPSEC address 2.2.2.2
R2(config)#crypto isakmp policy 1
R2(config-isakmp)#encryption aes
R2(config-isakmp)#hash sha256
R2(config-isakmp)#group 2
R2(config-isakmp)#authentication pre-share
R2(config)#crypto isakmp key IPSEC address 1.1.1.1
2.IPsecトランフォームセットの設定
IPsec SAの情報に基づきそれぞれ設定
ここもMAP方式と同様。
R1(config)#crypto ipsec transform-set TRSET esp-aes esp-sha256-hmac
R1(cfg-crypto-trans)#mode tunnel
R2(config)#crypto ipsec transform-set TRSET esp-aes esp-sha256-hmac
R2(config-crypto-trans)#mode tunnel
3.IPsecプロファイルを作成
IPsecプロファイルを作成しトランスフォームセットをセット
ここがMAP方式と違ってくるポイント
R1(config)#crypto ipsec profile IPSECPRO
R1(ipsec-profile)#set transform-set TRSET
R2(config)#crypto ipsec profile IPSECPRO
R2(ipsec-profile)#set transform-set TRSET
4.Tunnelインターフェースの設定及びTunnelモードプロファイル紐づけ
Profile方式では必ずトンネルインターフェースを作成します。
そしてmodeをipsec、protectionに作成したプロファイルを紐づけます。
R1(config)#interface tunnel 0
R1(config-if)#ip address 10.1.1.1 255.255.255.252
R1(config-if)#tunnel source 1.1.1.1
R1(config-if)#tunnel destination 2.2.2.2
R1(config-if)#tunnel mode ipsec ipv4
R1(config-if)#tunnel protection ipsec profile IPSECPRO
R2(config)#interface tunnel 0
R2(config-if)#ip address 10.1.1.2 255.255.255.252
R2(config-if)#tunnel source 2.2.2.2
R2(config-if)#tunnel destination 1.1.1.1
R2(config-if)#tunnel mode ipsec ipv4
R2(config-if)#tunnel protection ipsec profile IPSECPRO
MAP方式の場合実通信を発生させないと各SAは作られませんでしたが、
Profile方式の場合設定が完了した時点でISAKMP SA,IPSECSAが形成されます。
R1#show crypto engine connections active
Crypto Engine Connections
ID Type Algorithm Encrypt Decrypt LastSeqN IP-Address
1 IPsec AES+SHA256 0 0 0 1.1.1.1
2 IPsec AES+SHA256 0 0 0 1.1.1.1
1001 IKE SHA256+AES 0 0 0 1.1.1.1
なお、ルーティング情報各拠点のネットワークですが今回はOSPFで設定しました。
IPsec VTIの場合GREでカプセル化しなくてもマルチキャストをトンネリングできます。
※OSPFの設定
各ルータでLANとTunnelのネットワークでOSPFを動作させます。
R1(config)#router ospf 1
R1(config-router)#network 192.168.10.0 0.0.0.255 area 0
R1(config-router)#network 10.1.1.0 0.0.0.3 area 0
R2(config)#router ospf 1
R2(config-router)#network 192.168.20.0 0.0.0.255 area 0
R2(config-router)#network 10.1.1.0 0.0.0.3 area 0
疎通確認とパケットキャプチャです。
疎通確認はR1配下端末~R2配下端末間のping
パケットキャプチャはR1のWANインターフェースです。
Profile方式によるGRE over IPsec
トンネルインターフェースのmodeをGREにするとMAP方式で設定した
GRE over IPsecと同様にGRE over IPsecとなります。
この場合機能は同じですが、SAが確立されつタイミングのみ差分がある形となります。
MAP方式によるSA確立→実通信疎通時
Profile方式によるSA確立→設定完了時
図:ProfileでのGRE over IPsec設定イメージ
前段で設定したIPsec VTIとの変更点のみconfigを記載します。
トンネルインターフェースでmodeをgreに設定
transform-setのmodeをtransportへ設定(余計なオーバーヘッドをなくすため)
R1(config)#interface tunnel 0
R1(config-if)#tunnel mode gre ip
R1(config)#crypto ipsec transform-set TRSET esp-aes esp-sha256-hmac
R1(cfg-crypto-trans)#mode transport
R2(config)#interface tunnel 0
R2(config-if)#tunnel mode gre ip
R2(config)#crypto ipsec transform-set TRSET esp-aes esp-sha256-hmac
R2(cfg-crypto-trans)#mode transport
profile方式ではトンネルインターフェースに適用したprofileの再設定、及びIFの sh noshが必要です。
(no tunnel protecton xxxxしてから再度tunnel protecton xxxxその後 sh no sh)
5. 【結論】Map方式とProfile方式どっちがいいのか
Map方式とProfile方式のに関して様々調べましたが、
機能的な大きな違い次のようにまとめることができると思います。
それ以外⇒Profile方式
Profile方式でOKだと感じました。
あと違うとすればSAの確立タイミングくらいですが、SAのタイミングを考慮しなければならない機会はあまりないと思われます。
IPsecの設定自体は下記の書籍の「トンネリングとVPN」の章を参考にしています。
シスコ技術者認定教科書 CCNP Enterprise 完全合格テキスト&問題集 [対応試験]コア試験ENCOR(350-401)
コメント