OpenVPNを起動するときに、共通鍵ファイルを使用する
前回で、基本的なつなぎ方とコマンドがわかったので、認証方式を変更します。
鍵ファイルを作成して共有することでパスワード認証と同様に共有鍵でクライアントを認証します。
クライアント・サーバーでお互いに同じファイルを共有し、同じファイルを持っていることで本人確認とします。
固有鍵を作成する。
事前に鍵を共有することで認証します。鍵の作成は openvpn コマンドに含まれています。
openvpn --genkey --secret static.key
実例
固有鍵を作ったときの例です。
root@:~# openvpn --genkey --secret static.key root@:~# cat static.key # # 2048 bit OpenVPN static key # -----BEGIN OpenVPN Static key V1----- 8a0487a4ab6a2cb694510238347ea9d7 71f28051d4b00ad49f6d85fc7ffabb4d bcaa5b5be249b3211dca11ff6ab03dd6 650c03577041a3b27eab9dce57c1b235 0aaa2275f5bff563236b796cc5402c73 7bf696a0f40685637bffb185f706371e 3fa2c8c88a3e178378e6b49ce8da0293 ebab45862b805c2528f217715f5069aa dfbd1c95ba44ce5e97e352fd6617fce5 a40d0fcafd87004cd831f7c3669ffb7a e3db41da10358febc6b1162c7ee42f6b 7862442659c229562ef39c96ed83c3d4 6173091a2e405d7fb1d40a890f99b85a f3b1912eb5e63a39f9c12cfd40b19280 7641dc52bfafe92d42f38e96356ba9d9 0cbefe27eb8e4909f49d057d26f990d2 -----END OpenVPN Static key V1-----
鍵ファイルを任意の場所に設置
今回は、次の場所に、を固定鍵を次の場所に設置しました。
cp secret.key /etc/openvpn/secret.key
サーバーを起動
鍵ファイルを使って認証をするサーバーを起動します。
サーバーの起動方法は前回と同じです。前回と異なるのは、鍵ファイルを指定します。
openvpn --dev tun1 --ifconfig 10.9.8.1 10.9.8.2 --secret /etc/openvpn/secret.key
実際の例です。
root@:/etc/openvpn# openvpn --dev tun1 --ifconfig 10.9.8.1 10.9.8.2 --secret /etc/openvpn/secret.key Fri Feb 14 14:34:47 2020 disabling NCP mode (--ncp-disable) because not in P2MP client or server mode Fri Feb 14 14:34:47 2020 OpenVPN 2.4.7 x86_64-openwrt-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [MH/PKTINFO] [AEAD] Fri Feb 14 14:34:47 2020 library versions: OpenSSL 1.1.1d 10 Sep 2019, LZO 2.10 Fri Feb 14 14:34:47 2020 WARNING: INSECURE cipher with block size less than 128 bit (64 bit). This allows attacks like SWEET32. Mitigate by using a --cipher with a larger block size (e.g. AES-256-CBC). Fri Feb 14 14:34:47 2020 WARNING: INSECURE cipher with block size less than 128 bit (64 bit). This allows attacks like SWEET32. Mitigate by using a --cipher with a larger block size (e.g. AES-256-CBC). Fri Feb 14 14:34:47 2020 TUN/TAP device tun1 opened Fri Feb 14 14:35:21 2020 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this Fri Feb 14 14:35:21 2020 Initialization Sequence Completed
クライアント側
クライアント側でも共有鍵を使って接続します。
鍵の転送
共有鍵はSCPなどで転送しておきます。
takuya@openvpn$ scp router:/etc/openvpn/secret.key ~/Desktop/openvpn secret.key
クライアント側で、共有鍵を使ってサーバーに接続します。
sudo openvpn --remote 192.168.1.1 --dev tun1 --ifconfig 10.9.8.2 10.9.8.1 --secret secret.key
こちらも、起動方法は、シンプルです。鍵ファイルを指定するオプションが前回に比べて増えます。
実際の接続例です。
takuya@openvpn$ sudo openvpn --remote 192.168.2.1 --dev tun1 --ifconfig 10.9.8.2 10.9.8.1 --secret secret.key Fri Feb 14 14:35:09 2020 OpenVPN 2.4.8 x86_64-apple-darwin17.7.0 [SSL (OpenSSL)] [LZO] [LZ4] [PKCS11] [MH/RECVDA] [AEAD] built on Nov 1 2019 Fri Feb 14 14:35:21 2020 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this Fri Feb 14 14:35:21 2020 Initialization Sequence Completed
もし鍵を指定せずに接続した場合
共有鍵をなしで接続しようとしたら接続開始ができなくて止まります。
takuya@openvpn$ sudo openvpn --remote 192.168.1.1 --dev tun1 --ifconfig 10.9.8.2 10.9.8.1 Fri Feb 14 14:37:52 2020 library versions: OpenSSL 1.1.1d 10 Sep 2019, LZO 2.10 Fri Feb 14 14:37:52 2020 ******* WARNING *******: All encryption and authentication features disabled -- All data will be tunnelled as clear text and will not be protected against man-in-the-middle changes. PLEASE DO RECONSIDER THIS CONFIGURATION! Fri Feb 14 14:37:52 2020 Opened utun device utun1 Fri Feb 14 14:37:52 2020 UDP link local (bound): [AF_INET][undef]:1194 Fri Feb 14 14:37:52 2020 UDP link remote: [AF_INET]192.168.1.1:1194 ## 接続試行をずっとしてる
サーバー側のログには、認証失敗のメッセージが出てきます。
root@:/etc/openvpn# openvpn --dev tun1 --ifconfig 10.9.8.1 10.9.8.2 --secret /etc/openvpn/secret.key Fri Feb 14 14:35:21 2020 Initialization Sequence Completed Fri Feb 14 14:38:02 2020 Authenticate/Decrypt packet error: missing authentication info Fri Feb 14 14:38:12 2020 Authenticate/Decrypt packet error: missing authentication info Fri Feb 14 14:38:22 2020 Authenticate/Decrypt packet error: missing authentication info Fri Feb 14 14:38:33 2020 Authenticate/Decrypt packet error: missing authentication info Fri Feb 14 14:38:43 2020 Authenticate/Decrypt packet error: missing authentication info
共有鍵を使う
ここで試したことは、共有鍵を使って認証してVPNのトンネルを接続が可能になる。 鍵を持っていない認証されてないユーザーを拒否する事ができています。
認証方式には、他にも数限りなく選択肢があります。OpenVPNで一般的なのはCAをつかった証明書ですが、証明書の作り方、それはOpenSSLとCAそのものの話なので、OpenVPNとはかなり別の話題です。
単純な認証であれば、共通鍵で十分だと思います。
その他にも
などが可能です。PAM通ればもうなんでもありですよね。PostgreSQLのテーブルに問い合わせるとかもできそう。時間コストに見合わないので流石にやらないけど。
次回
次回は、今回の共通鍵の 接続設定を ovpn ファイルしてみたいと思います。