BSDRP 1.52のipsec-toolsをパッチ済みパッケージで置き換える
Posted on 2014/10/09(Thu) 00:05 in technical
Summary
先日設定したBSDRP にL2TP/IPsecを導入することを考えます。
FreeBSDで提供されているipsec-toolsは、パッチを当てない限り、任意に指定した送信元IPアドレスに応じたPSK(Pre-Shared-Key)しか選択できません。
従って、非固定IPとなるノードからIPsecの接続要求を処理するには、
- 証明書を用いた認証
- 誰でも共通のPSKを使うようにパッチを当てる
という2つの方法があります。
今回は後者の方法を題材に、BSDRPに新しいパッケージを追加する方法を簡単に見ていきます。
パッケージの確認
まず、BSDRPで使用されているパッケージの構成情報を確認します。:
# pkg info ipsec-tools-0.8.1_7 | head -35 ipsec-tools-0.8.1_7 Name : ipsec-tools Version : 0.8.1_7 Installed on : Sun Sep 14 11:19:31 UTC 2014 Origin : security/ipsec-tools Architecture : freebsd:10:x86:64 Prefix : /usr/local Categories : security Maintainer : vanhu@FreeBSD.org WWW : http://ipsec-tools.sourceforge.net/ Comment : KAME racoon IKE daemon, ipsec-tools version Options : ADMINPORT : off DEBUG : on DOCS : off DPD : on FRAG : on GSSAPI : off HYBRID : on IDEA : on IPV6 : on LDAP : on NATT : on NATTF : off PAM : off RADIUS : on RC5 : on SAUNSPEC : off STATS : off Shared Libs required: libldap-2.4.so.2 Shared Libs provided: libracoon.so.0 libipsec.so.0 Flat size : 2.17MiB
通報
コンパイルオプションの違いを確認しておきましょう。
パッケージの作成
同じような環境でportsからパッケージを作ります。
今回は、パッケージが "Architecture : freebsd:10:x86:64" と書かれていたので、 それっぽいVMイメージ を拾ってきて起動したらパッケージを作りましょう。
もちろん、普通にFreeBSD 10系をインストールしても大丈夫です。
パッチ So, save this as /usr/ports/security/ipsec-tools/files/patch-zz-local-1.diff を突っ込んだら、パッケージの作成自体はいつも通り。:
# portsnap fetch extract # cd /usr/ports/security/ipsec-tools # vi files/patch-zz-local-1.diff # make package
通報
この時、さっき確認したコンパイルオプションと同じになるように設定します。理由があれば変えても良いと思いますが。
出来上がるとこんな感じだと思います。:
# ls -l work/pkg/ total 608 -rw-r--r-- 1 root wheel 557648 Oct 8 22:35 ipsec-tools-0.8.1_7.txz
設定
パッケージの更新を手動で行う場合のモデルケースとしてipsec-toolsを使っているだけなので、 パッチを当てた該当部分のみ動作確認が取れるよう、適当に設定します。
警告
フォアグラウンドで確認するので、まだサービスとしては起動しません。
/usr/local/etc/racoon/racoon.conf:
path include "/usr/local/etc/racoon"; path pre_shared_key "/usr/local/etc/racoon/psk.txt"; path certificate "/usr/local/etc/ipsec.d/certs"; remote anonymous { exchange_mode main,aggressive; doi ipsec_doi; situation identity_only; my_identifier address; lifetime time 2 min; # sec,min,hour initial_contact on; proposal_check obey; # obey, strict or claim proposal { encryption_algorithm 3des; hash_algorithm sha1; authentication_method pre_shared_key; dh_group 2; } } sainfo anonymous { pfs_group 2; lifetime time 1 hour; encryption_algorithm 3des, blowfish 448, rijndael ; authentication_algorithm hmac_sha1, hmac_md5 ; compression_algorithm deflate ; }
/usr/local/etc/racoon/psk.txt:
* password
/usr/local/etc/racoon/setkey.conf:
flush; spdflush; spdadd 0.0.0.0/0[0] 0.0.0.0/0[1701] udp -P in ipsec esp/transport//require; spdadd 0.0.0.0/0[1701] 0.0.0.0/0[0] udp -P out ipsec esp/transport//require;
警告
L2TP/IPsecを想定しているけど、IPsecのWildcard PSKの動作確認までしかしないので、mpd5の設定は要らない。
Phase1の鍵交換が失敗することを確認する
racoonを起動します:
# cd /usr/local/etc/racoon/ # setkey -f setkey.conf # setkey -PD 0.0.0.0/0[any] 0.0.0.0/0[1701] udp in ipsec esp/transport//require spid=1 seq=1 pid=1746 refcnt=1 0.0.0.0/0[1701] 0.0.0.0/0[any] udp out ipsec esp/transport//require spid=2 seq=0 pid=1746 refcnt=1 # racoon -f racoon.conf -F
失敗しているの図
パッチを当てていない場合は、このようになる。:
2014-10-08 22:59:59: [192.168.56.1] ERROR: couldn't find the pskey for 192.168.56.1. 2014-10-08 22:59:59: [192.168.56.1] ERROR: failed to process ph1 packet (side: 1, status: 4). 2014-10-08 22:59:59: [192.168.56.1] ERROR: phase1 negotiation failed.
パッケージのインストール
BSDRPは組み込み向けイメージということもあり、書き込み可能なスペースが限られているので、
今回は/var/tmpにscpでパッケージをファイル転送する感じで進めます。
/を書き込み可能な形で再マウントし、(元々インストール済みのパッケージなので)強制的に上書きインストールします。:
# cd /var/tmp # mount -uw / # pkg add -f ./ipsec-tools-0.8.1_7_wildcard-psk_amd64.txz pkg: package ipsec-tools is already installed, forced install Installing ipsec-tools-0.8.1_7: 100%
Phase1の鍵交換が成功することを確認する
同じようにracoonをフォアグラウンドで動かしてみます。:
# cd /usr/local/etc/racoon/ # racoon -f racoon.conf -F
成功しているの図
パッチを当てた後なら、こうなる。:
2014-10-08 23:15:26: INFO: ISAKMP-SA established 192.168.56.101[500]-192.168.56.1[500] spi:e60469b4bfffed0f:3463b7b92d13c5ef 2014-10-08 23:15:26: INFO: respond new phase 2 negotiation: 192.168.56.101[500]<=>192.168.56.1[500] 2014-10-08 23:15:26: WARNING: trns_id mismatched: my:3DES peer:AES 2014-10-08 23:15:26: WARNING: trns_id mismatched: my:3DES peer:AES 2014-10-08 23:15:26: WARNING: trns_id mismatched: my:BLOWFISH peer:AES 2014-10-08 23:15:26: WARNING: trns_id mismatched: my:BLOWFISH peer:AES 2014-10-08 23:15:26: INFO: IPsec-SA established: ESP/Transport 192.168.56.101[500]->192.168.56.1[500] spi=226122172(0xd7a59bc) 2014-10-08 23:15:26: INFO: IPsec-SA established: ESP/Transport 192.168.56.101[500]->192.168.56.1[500] spi=1770247511(0x6983d557)
めでたしめでたし
どうしても必要なパッケージがある場合は、後から追加することも可能ですね、ということを確認しただけでした。
僕は後でminiupnpd(UPnPとpfを連携させるデーモン)を入れておこうと思います。
余談
BSDRPはstrongswan-5.2.0_1が入っているので、そもそもipsec-toolsを使わず、
strongswanを使って%any設定をすればいいと思っていたのですが、
Strongswan for FreeBSD supports IKEv2 but NOT IKEv1. とか言われてFreeBSDのstrongswanではIKEv1がサポートされていないオチが待っていたのでこういう感じになりました。
おわりん。