photo by Axel Schwenke
突如として始まりました!自称IPsecマスター(?)の私がシスコルーターのIPsec機能をいろいろ解剖していくというコーナーです!
今回はIKEv1を使用してIPsecを確立するためのコンフィグを解説します。
「設定がうざい!」とネットワークエンジニアの方々からとかく嫌われがちなIPsecですが、このコラムがIPsec環境を作るときの手助けになればいいなと思います。
ではまずは軽くIPsecのおさらいから・・。
目次
IPsecとは?
IPsec(Security Architecture for Internet Protocol)とはIPパケットの暗号化技術のことです。
インターネット技術の標準化団体「IETF」によって標準化されている技術で、IP通信を行う多くの通信機器にこの機能が搭載されています。
IPsecによって構築されたVPNトンネルはIPsec-VPNと呼ばれます。このトンネル内の通信は暗号化によって保護されていて、第三者に内容をのぞき見されることがありません。
みなさんも、自分の会社と別拠点の会社の間で通信網を設けるときや、出張先から会社の情報にアクセスするときなどに、このIPsec機能を使ったことがあるのではないでしょうか?
IKEv1とは?
IKEv1(Internet Key Exchange protocol version 1)とは、IPsec通信で利用する「暗号鍵」を生成するための鍵交換プロトコルです。
IPsec装置は、IPsecトンネル生成時にこのIKEv1を使うことによって対向のIPsec装置と暗号鍵の情報を共有しあい、秘密の通信路を確立します。
IPsecにおいて、暗号鍵が第三者に漏れると通信内容を盗み読みされて、大切な情報を奪われてしまう危険があります。
このIKEプロトコルによって、第三者の目から秘匿された状態でこっそりと暗号鍵を交換することが可能となるのです。
実験環境は「GNS3」を使用!
実験環境は「GNS3」という、シスコルーターの動作をバーチャル環境でエミュレートすることができるソフトを使用しました。
シスコ機は高価なのでなかなか購入するのは気が引けてしまうところがありますが、この「GNS3」を使えばただでシスコ機の動作をいろいろと確認できるというわけです。
インストール手順や使用方法は、下記サイト様に詳しく紹介されていましたので、参考にさせて頂きました(GNS3 Windows版の使い方)
ネットワーク構成は以下のとおりです。
「R1」と「R3」はIPsecゲートウェイの装置です。この間でIPsecトンネルを確立して、エンドノードの「PC1」と「PC2」に通信をさせます。
ちなみに、シスコルーターのファームウェアは「Cisco 3700 シリーズ」のものを使用しました。
IKEv1ネゴのキャプチャ(mainモード)
以下にIKEv1ネゴシエーション(mainモード)のキャプチャデータを置いておきます。
mainモードとは、IPアドレスが固定されたゲートウェイ同士でIPsecを確立するときによく使われる接続モードです(サイト間接続というやつです)。mainモードの他にaggressiveモードという接続モードもあるのですが、これは次回の記事で説明することにいたします。
このキャプチャは、上図のPC1からPC2に対してpingを送信して、R1装置がR3装置に対してIPsecセッションを張りにいったときのものです(一般にIPsecはこのように通信の発生を契機にしてセッションの確立動作を行います、パケットトリガーという動作です)。
キャプチャ:ikev1_nego.pcap
IPSec IKEv1設定(mainモード)
以下がIKEv1(mainモード)の設定です。
IPsecの確立に必要な設定のみをピックアップして記述しています。
ルーターR1の設定:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
! crypto isakmp policy 1 encr aes 256 authentication pre-share group 5 lifetime 180 ! crypto isakmp key hogehoge address 30.0.0.2 crypto isakmp keepalive 10 periodic ! crypto ipsec transform-set IPSEC-TRA esp-aes 256 esp-sha-hmac ! crypto map IPSEC-MAP 1 ipsec-isakmp set peer 30.0.0.2 set security-association lifetime seconds 120 set transform-set IPSEC-TRA match address 100 ! interface FastEthernet0/0 ip address 192.168.1.2 255.255.255.0 ! interface FastEthernet0/1 ip address 20.0.0.1 255.255.255.0 crypto map IPSEC-MAP ! ip route 0.0.0.0 0.0.0.0 20.0.0.2 ! access-list 100 permit ip 192.168.1.0 0.0.0.255 172.16.0.0 0.0.0.255 ! |
ルーターR3の設定:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
! crypto isakmp policy 1 encr aes 256 authentication pre-share group 5 ! crypto isakmp key hogehoge address 20.0.0.1 crypto isakmp keepalive 30 periodic ! crypto ipsec transform-set IPSEC-TRA esp-aes 256 esp-sha-hmac ! crypto map IPSEC-MAP 1 ipsec-isakmp set peer 20.0.0.1 set transform-set IPSEC-TRA match address 100 ! interface FastEthernet0/0 ip address 172.16.0.2 255.255.255.0 ! interface FastEthernet0/1 ip address 30.0.0.2 255.255.255.0 crypto map IPSEC-MAP ! ip route 0.0.0.0 0.0.0.0 30.0.0.1 ! access-list 100 permit ip 172.16.0.0 0.0.0.255 192.168.1.0 0.0.0.255 ! |
設定の解説!
crypto isakmp policy
「crypto isakmp policy」はISAKMPネゴシエーションの際に使用されるパラメータを設定するセクションです。ISAKMPとはIKE機能の一部をなす技術のうちの一つで、IPsec確立のためのパラメータの折衝を行うプロトコルです。このセクションで設定したパラメータに沿って、暗号鍵の交換作業が行われます。
「encr」の箇所は、鍵交換の際に使用される暗号化アルゴリズムを指定します。IPsecのデータグラム通信に使われる暗号化アルゴリズムではなく、鍵交換の際に使われる暗号化アルゴリズムなので注意しましょう。
「hash」の箇所は、鍵交換の際に使用されるハッシュアルゴリズムを指定します。IPsecのデータグラム通信に使われるハッシュアルゴリズムではなく、鍵交換の際に使われるハッシュアルゴリズムなので注意しましょう。
「authentication」の設定は、IPsecの相手装置の認証方法を指定します。「pre-share」は互いに設定されている「事前共有鍵(pre-shared-key)」の情報を元に相手の認証を行うモードです。「rsa-encr」や「rsa-sig」はRSA共有鍵を利用した認証、電子証明書を利用した認証のときに設定します。
「group」の設定は、鍵交換の際に使用されるDH(Diffie-Hellman)グループを指定します。IKEの鍵交換は「Diffie-Hellman鍵交換」という第三者に鍵情報を隠蔽する手法で行われます。bit数の大きなグループを設定すると、よりセキュリティ強度の高い方法で鍵交換が行われるようになります。
「lifetime」の設定は、鍵交換に使われるセッション「ISAKMP_SA」の生存時間を指定します。鍵交換のセッションをあまり長い時間存続させると、攻撃者に暗号を解読されて鍵情報を読み取られる危険があるため、ISAKMP_SAはこの生存時間が過ぎたタイミングですみやかに解放されます。
crypto isakmp key
「crypto isakmp key」はISAKMPネゴシエーションの際に使われる事前共有鍵(pre-shared-key)の情報と、相手装置の識別情報(IPアドレス・ID情報)を設定する箇所です。「address」には相手装置のIPアドレスを指定し、「hostname」には相手装置のID情報を指定します。IPアドレスが固定されている相手とIPsecを確立する場合は「address」を利用できますが、IPアドレスが不定の相手とIPsecを確立するときは「hostname」を利用することになります。
crypto isakmp keepalive
「crypto isakmp keepalive」には、IPsec対向装置の生存確認機能 DPD(Dead Peer Detection)の設定を行います。この設定をすると、指定した秒数間隔で定期的に生存確認のためのISAKMPメッセージを送信し、互いの疎通性を監視するようになります。もし送信したDPDメッセージに相手が応答しなかったら、相手が死んでいるとみなしてIPsecを切断するという動作になります。「periodic」設定をすると、必ず指定された秒数間隔でDPDメッセージを送信します。「on-demand」設定を行うと、IPsecトラフィックが流れていないときのみDPDメッセージを送信し、IPsecトラフィックが流れているときはDPDメッセージは送信しません。トラフィックが流れているということは、相手が生きているということなので生存確認をする必要はない、という考えです。「crypto isakmp keepalive」設定を省略した場合はDPDメッセージによる生存確認は行いません。
crypto ipsec transform-set
「crypto ipsec transform-set」には、IPsec通信に使われる暗号化アルゴリズムやハッシュアルゴリズムを指定します。IKEの鍵交換の際に使われるパラメータではなく、実際のIPsecデータグラムの通信の際に使われるパラメータなので、間違えないように注意しましょう。
crypto map
「crypto map」は、IPsec確立のための様々な基本情報や紐付けとなる設定を行う箇所です。
「set peer」の設定は、IPsecの対向装置のIPアドレス、またはID文字列を指定します。
「set pfs」の設定は、IPsecセッション(IPsec_SA)の確立時の鍵情報の計算に使用するDH(Diffie-Hellman)グループを指定します。この設定をすると、IPsec_SA確立時に毎回鍵情報を再計算するようになります。この設定を省略すると、IPsec_SA確立時はpfsを用いずに、ISAKMP_SA生成時に作られた鍵情報を再利用します。
「set transform-set」の設定は、「crypto ipsec transform-set」の設定内容を名前で指定し紐付けを行う箇所です。
「match address」の設定は、「access-list」の設定内容を番号や名前で指定し紐付けを行う箇所です。
IFへのcrypto map設定
IPsec通信に使用するインターフェースに「crypto map XXXX」といった形式でcrypto map設定を与えます。上記の設定例では FastEthernet0/1にこの設定が与えられています。このインターフェースでIPsec通信をすることが可能になります。
access-list
「access-list」の設定によって、IPsecのトラフィックセレクタの指定を行います。
トラフィックセレクタとは、IPsecの対象となるパケットの条件を指定する情報のことです。access-listの設定を駆使して①「IPsecを適用するパケットの条件(PROTECT)」②「IPsecを適用せず破棄するパケットの条件(DISCARD)」③「IPsecを適用せずに中継するパケットの条件(BYPASS)」といった柔軟な通信のフィルタリング設定を行うことが出来ます。トラフィックセレクタの内容は、IPsecを行う両装置の間で対象となるように設定する必要があります。
まとめ
さて、今回は一通りIPsecのmainモードのコンフィグを確認しただけで終わってしまいました。まだまだIKEv1 aggressiveモードの設定や、NAT越えをするときの設定や、IKEv2の設定など・・・書くべきことがいろいろあります。これからブログのネタに困ったら、定期的にこのIPsec関連の記事を更新していこうと思っています・・。
参考サイト・参考文献:
参考IPSec VPN を用いた LAN-to-LAN 接続設定例
参考IPSecを始めから