経緯
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を有効化してないので有効化する
- ;tls-auth ta.key 0 # This file is secret
+ tls-auth ta.key 0 # This file is secret
- サーバサイドで使う暗号化方法を設定
- ;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で構築する, 記事の**"クライアント設定"**, 以降を参照せよ。