openvpn v2.3からv2.4への更新


経緯

Amazon Linuxのパッケージアップデート

以前、以下の記事を参考にVPNサーバを構築していた

しばらくこれで動いていたのだが、パッケージを以下のように更新したところVPNクライアントでエラーが出るようになった。

(旧)openvpn-2.3.12-1.16.amzn1.x86_64
(新)openvpn-2.4.4-1.21.amzn1.x86_64

原因はおそらくopenvpn2.4からtls-auth認証を必須とするようになったからです。OpenVPN側のリリースノートの和訳がありました↓

2017/5/11にOpenVPN 2.4.2がリリースされました。

このバージョンはいくつかのバグフィックスに加えて、以下の2つのDOS攻撃対策が行われています。

  • 巨大なサイズのコントロールパケットを送り込むことにより、ASSERT() が発生して OpenVPN プロセスが停止させられる可能性があります(CVE-2017-7478)。対象となるバージョンは OpenVPN 2.3.12以降 です。なお、 --tls-auth か --tls-crypt が設定されている場合、攻撃を成功させるには攻撃側が正しいTLS鍵を>保持している必要があるため、危険性は大幅に低下します。
  • 認証済みクライアントがサーバーのパケットIDカウンタをロールオーバーを引き起こし、ASSERT() が発生して OpenVPN プロセスが停止させられる可能性があります(CVE-2017-7479)。この攻撃を成功させるには、クライアントはサーバーに対して最低でも 196GB のデータを送り付ける必要があります。

設定変更作業

サーバサイドの変更

tls-authの有効化, 暗号化アルゴリズムの設定

  • そもそもtls-authを有効化してないので有効化する
/etc/openvpn/server.conf
- ;tls-auth ta.key 0 # This file is secret
+ tls-auth ta.key 0 # This file is secret
  • サーバサイドで使う暗号化方法を設定
/etc/openvpn/server.conf
- ;cipher AES-256-CBC
+ cipher AES-256-CBC

アップデート時のopenvpn不具合(?)への対応

なぜか更新時にCRL(Certificate Revocation Lists);作成した証明書の失効リストが原因でエラーが出るので、以下のサイトの方法でCRLを再作成します(※サーバサイドを更新しただけでCRLが失効するのはなんかおかしいので、たぶんopenvpnの不具合だと思う…自信なし)。

とりあえずここまでで、openvpnを再起動すればサーバサイドの設定は終わりです。

クライアントサイドの変更

サーバサイドで設定したtls-auth用に, vpnux Client - OpenVPN client for Windowsの設定を追加します。

ここに関してはクラスメソッドさんのブログ記事が詳しいため、それを見ていただきたい。OpenVPN 2.4によるVPN接続環境をAWSで構築する, 記事の"クライアント設定", 以降を参照せよ