alixで稼働しているブロードバンドルータでOpenVPNサーバを稼働させてみました。 外出先からWindows XPが動くThinkpad x22とWillcom(PHS)のAX420Sを使って自宅マシンにアクセスできています。
実際のところはVNC+sshのポートフォワードでも家PCのデスクトップを操作する事ができます。 パスワード認証を止めてしまえば、SSL/TLS-VPNと同程度のセキュリティは確保できるでしょう。 ただ家の中に複数のサーバがあってSVNリポジトリへのコミットやら、直接ノートPCからアクセスできた方が便利な状況になったのでVPNを使う事にしました。
最近はIPv6も使っていますが、まだOpenVPNでのIPv6サポートは限定的なようです。 試しにIPv6アドレスで接続してみましたが、認証がちゃんと通りませんでした。 そこで今回は固定IPv4アドレスを使っています。
作業の概要
いまのところサンプルの設定ファイルを使って、共有鍵(static.key)を使った接続ができています。 「共有鍵方式は簡単!」とドキュメントにありますが、慣れの問題でデメリットを上回るほどのものではないと思いました。
このままではクライアントは1台だけしかサポートできないので、最近繰り返している手順を使って公開鍵方式を使った接続に変更します。
サーバ側の設定変更
サーバはalixで動くdebian lennyです。 パッケージからopenvpnを入れて、/etc/openvpn/server.confを編集しました。
secretで指定した共有鍵を指定している1行を削除して、tls-server, ca, cert, keyの4行を追加しました。
tls-server
dev tun
ifconfig 192.168.20.5 192.168.20.6
dh dh2048.pem
ca cacert.pem
cert newcert.pem
key newkey.pem
port 1194
user nobody
group nogroup
comp-lzo
ping 15
ping-restart 45
ping-timer-rem
persist-tun
persist-key
verb 3
あとは*.pemファイルを/etc/openvpnに配置して、パーミッションを適切にする事ぐらいでしょうか。とはいえrootだけが閲覧できるようにするのはnewkey.pemぐらいでしょう。
server.confにtls-serverを含めずに、/etc/default/openvpnを使う事もできます。
OPTARGS="--tls-server"
ただ設定個所が増えるのは良くないので、server.confにまとめるのが良いと思います。
クライアント側の設定
クライアントはThinkpad x22に入っているWindows XP SP3です。
OpenVPNが導入されているフォルダの中にcacert.pem, newkey.pem, newcert.pemをコピーします。
cacert.pem
client.ovpn
newcert.pem
newkey.pem
opensvn_static.key
続いて、client.ovpnファイルを編集します。secretの1行を削除して、先頭にtls-clientを加え、他にca, cert, keyの合計4行を追加しました。
tls-client
dev tun
proto udp
nobind
persist-key
persist-tun
comp-lzo
verb 3
port 1194
remote 219.xxx.xxx.xxx
ifconfig 192.168.20.6 192.168.20.5
ca cacert.pem
cert newcert.pem
key newkey.pem
keepalive 10 60
ping-timer-rem
route 192.168.20.0 255.255.255.0
route 192.168.10.0 255.255.255.0
route 192.168.1.0 255.255.255.0
remote行に指定するのは、ブロードバンドルータのalixにつながる固定IPv4アドレスです。 そこから繋がっているサブネットに対してルーティングするため、複数のroute行を最後に書いています。
クライアントのセキュリティ
正しく設定を終えれば、Windows上ではOpenVPN Clientを起動するだけでVPNが確立します。 ノートPCが盗まれたりした場合には、少しばかり心配になってきます。
今回はnewkey.pemにパスフレーズをつけておくのがお勧めです。 newkey.pemを作成する時に"-nodes"オプションを指定していてパスフレーズを付けていなかった場合には、次のように対応できます。
$ openssl rsa -in newkey.pem -out newkey_with_pass.pem -des3
ここで"newkey.pem"が既に存在しているパスフレーズのついていない秘密鍵ファイル、"newkey_with_pass.pem"が新たに作成されるパスフレーズのついた秘密鍵ファイルで、秘密鍵としての機能自体は同じです。
0 件のコメント:
コメントを投稿