インターネットは危険な場所です。特に、データを暗号化せずに残したり、適切なセキュリティを確保しなかったりする場合はなおさらです。データを保護する方法はいくつかあります。すべて異なるレベルで。強力なファイアウォールポリシー、データ暗号化、強力なパスワードポリシーを常に用意する必要があります。データを保護するもう1つの方法は、VPN接続を使用してデータにアクセスすることです。
仮想プライベートネットワーク(またはVPN)は、プライベートネットワークとパブリックネットワークにセキュリティとプライバシーを追加し、データを保護するために使用される接続方法です。
OpenVPNは、通信を保護するためのフル機能のオープンソースSSLVPNソリューションです。異なるサーバーまたはデータセンター間のリモートアクセスまたは通信に使用できます。オンプレミスまたはクラウド、さまざまなオペレーティングシステムにインストールでき、多くのセキュリティオプションを使用して構成できます。
このブログでは、クラウド内のデータベースにアクセスするためのVPN接続を作成します。この目標を達成するには、インフラストラクチャと、このタスクに使用するハードウェアリソースの量に応じて、さまざまな方法があります。
たとえば、オンプレミスとクラウドに2つのVMを作成できます。これらは、ピアツーピアを介してローカルネットワークをデータベースクラウドネットワークに接続するためのブリッジになります。ピアVPN接続。
もう1つの簡単なオプションは、データベースノードにインストールされているVPNサーバーに接続することです。ローカルマシンで構成されたVPNクライアント接続を使用します。この場合、この2番目のオプションを使用します。クラウドで実行されているデータベースノードでOpenVPNサーバーを構成する方法がわかり、VPNクライアントを使用してサーバーにアクセスできるようになります。
データベースノードには、AmazonEC2インスタンスを使用します。次の構成:
- OS:Ubuntu Server 18.04
- パブリックIPアドレス:18.224.138.210
- プライベートIPアドレス:172.31.30.248 / 20
- 開いているTCPポート:22、3306、1194
最初のタスクは、データベースノードにOpenVPNサーバーをインストールすることです。実際、使用するデータベーステクノロジーは、ネットワークレイヤーで作業しているため重要ではありませんが、VPN接続を構成した後のテスト目的で、PerconaServer8.0を実行しているとします。
それでは、OpenVPNパッケージをインストールすることから始めましょう。
$ apt install openvpn easy-rsa
OpenVPNは証明書を使用してトラフィックを暗号化するため、このタスクにはEasyRSAが必要です。これは、ルート認証局を作成し、サブCAや証明書失効リストなどの証明書を要求して署名するCLIユーティリティです。
注:新しいEasyRSAバージョンが利用可能ですが、OpenVPNのインストールに焦点を当て続けるために、Ubuntu 18.04リポジトリatmで利用可能なEasyRSAバージョン(EasyRSAバージョン2.2.2- 2)。
前のコマンドは、OpenVPN構成用のディレクトリ/ etc / openvpn /と、EasyRSAスクリプトと構成を含むディレクトリ/ usr / share /easy-rsa/を作成します。
このタスクを簡単にするために、OpenVPNディレクトリにEasyRSAパスへのシンボリックリンクを作成しましょう(またはコピーすることもできます):
$ ln -s /usr/share/easy-rsa /etc/openvpn/
次に、EasyRSAを構成し、証明書を作成する必要があります。 EasyRSAの場所に移動し、「vars」ファイルのバックアップを作成します。
$ cd /etc/openvpn/easy-rsa
$ cp vars vars.bak
このファイルを編集し、情報に応じて次の行を変更します。
$ vi vars
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="[email protected]"
export KEY_OU="MyOrganizationalUnit"
次に、opensslファイルへの新しいシンボリックリンクを作成します。
$ cd /etc/openvpn/easy-rsa
$ ln -s openssl-1.0.0.cnf openssl.cnf
次に、varsファイルを適用します:
$ cd /etc/openvpn/easy-rsa
$ . vars
注:./ clean-allを実行すると、/ etc / openvpn / easy-rsa/keysでrm-rfを実行します
$ ./clean-all
そして、Diffie-Hellman鍵(DH)を作成します:
$ ./build-dh
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
.....................................................................................................................................................................+
この最後のアクションには数秒かかる場合があります。完了すると、EasyRSAディレクトリの「keys」ディレクトリ内に新しいDHファイルが作成されます。
$ ls /etc/openvpn/easy-rsa/keys
dh2048.pem
それでは、CA証明書を作成しましょう。
$ ./build-ca
Generating a RSA private key
..+++++
...+++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
...
これにより、ca.crt(公開証明書)とca.key(秘密鍵)が作成されます。 VPNに接続するには、すべてのサーバーで公開証明書が必要です。
$ ls /etc/openvpn/easy-rsa/keys
ca.crt ca.key
これでCAが作成されたので、サーバー証明書を作成しましょう。この場合、これを「openvpn-server」と呼びます:
$ ./build-key-server openvpn-server
Generating a RSA private key
.......................+++++
........................+++++
writing new private key to 'openvpn-server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
...
Certificate is to be certified until Dec 23 22:44:02 2029 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
これにより、OpenVPNサーバーのCRT、CSR、およびキーファイルが作成されます。
$ ls /etc/openvpn/easy-rsa/keys
openvpn-server.crt openvpn-server.csr openvpn-server.key
ここで、クライアント証明書を作成する必要があります。プロセスは非常に似ています:
$ ./build-key openvpn-client-1
Generating a RSA private key
.........................................................................................+++++
.....................+++++
writing new private key to 'openvpn-client-1.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
...
Certificate is to be certified until Dec 24 01:45:39 2029 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
これにより、OpenVPNクライアントのCRT、CSR、およびキーファイルが作成されます:
$ ls /etc/openvpn/easy-rsa/keys
openvpn-client-1.csr openvpn-client-1.crt openvpn-client-1.key
この時点で、すべての証明書の準備ができています。次のステップは、サーバーとクライアントの両方のOpenVPN構成を作成することです。
OpenVPNサーバーの構成
前述のように、OpenVPNのインストールにより/ etc / openvpnディレクトリが作成され、サーバーとクライアントの両方の役割の構成ファイルが追加されます。ここには、/にそれぞれの構成ファイルのサンプルがあります。 usr / share / doc / openvpn / examples / sample-config-files /なので、上記の場所にあるファイルをコピーして、必要に応じて変更できます。
この場合、OpenVPNサーバーであるため、サーバー構成ファイルのみを使用します。
$ cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ gunzip /etc/openvpn/server.conf.gz
では、基本的なサーバー構成ファイルを見てみましょう。
$ cat /etc/openvpn/server.conf
port 1194
# Which TCP/UDP port should OpenVPN listen on?
proto tcp
# TCP or UDP server?
dev tun
# "dev tun" will create a routed IP tunnel,"dev tap" will create an ethernet tunnel.
ca /etc/openvpn/easy-rsa/keys/ca.crt
# SSL/TLS root certificate (ca).
cert /etc/openvpn/easy-rsa/keys/openvpn-server.crt
# Certificate (cert).
key /etc/openvpn/easy-rsa/keys/openvpn-server.key
# Private key (key). This file should be kept secret.
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
# Diffie hellman parameters.
server 10.8.0.0 255.255.255.0
# Configure server mode and supply a VPN subnet.
push "route 172.31.16.0 255.255.240.0"
# Push routes to the client to allow it to reach other private subnets behind the server.
keepalive 20 120
# The keepalive directive causes ping-like messages to be sent back and forth over the link so that each side knows when the other side has gone down.
cipher AES-256-CBC
# Select a cryptographic cipher.
persist-key
persist-tun
# The persist options will try to avoid accessing certain resources on restart that may no longer be accessible because of the privilege downgrade.
status /var/log/openvpn/openvpn-status.log
# Output a short status file.
log /var/log/openvpn/openvpn.log
# Use log or log-append to override the default log location.
verb 3
# Set the appropriate level of log file verbosity.
注:環境に応じて証明書パスを変更してください。
次に、作成した構成ファイルを使用してOpenVPNサービスを開始します。
$ systemctl start [email protected]
$ netstat -pltn |grep openvpn
tcp 0 0 0.0.0.0:1194 0.0.0.0:* LISTEN 20002/openvpn
最後に、OpenVPNサーバーで、VPNトラフィックを許可するためにsysctl.confファイルにIP転送ラインを追加する必要があります。
$ echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
そして実行:
$ sysctl -p
net.ipv4.ip_forward = 1
では、この新しいVPNに接続するようにOpenVPNクライアントを構成する方法を見てみましょう。
OpenVPNクライアントの構成
前のポイントで、OpenVPNサンプル構成ファイルについて説明し、サーバー1を使用したので、今度は同じことを行いますが、クライアント構成ファイルを使用します。
$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/
VPNクライアントを構成するには、以前に作成した次の証明書も必要です。
ca.crt
openvpn-client-1.crt
openvpn-client-1.key
したがって、これらのファイルをローカルマシンまたはVMにコピーします。このファイルの場所をVPNクライアント構成ファイルに追加する必要があります。
では、基本的なクライアント構成ファイルを見てみましょう。
$ cat /etc/openvpn/client.conf
client
# Specify that we are a client
dev tun
# Use the same setting as you are using on the server.
proto tcp
# Use the same setting as you are using on the server.
remote 18.224.138.210 1194
# The hostname/IP and port of the server.
resolv-retry infinite
# Keep trying indefinitely to resolve the hostname of the OpenVPN server.
nobind
# Most clients don't need to bind to a specific local port number.
persist-key
persist-tun
# Try to preserve some state across restarts.
ca /Users/sinsausti/ca.crt
cert /Users/sinsausti/openvpn-client-1.crt
key /Users/sinsausti/openvpn-client-1.key
# SSL/TLS parms.
remote-cert-tls server
# Verify server certificate.
cipher AES-256-CBC
# Select a cryptographic cipher.
verb 3
# Set log file verbosity.
注:環境に応じて証明書パスを変更してください。
このファイルを使用して、Linux、macOS、WindowsなどのさまざまなオペレーティングシステムからOpenVPNサーバーに接続できます。
この例では、アプリケーションTunnelblickを使用してmacOSクライアントから接続します。 Tunnelblickは、macOS上のOpenVPN用の無料のオープンソースグラフィックユーザーインターフェイスです。 OpenVPNクライアントを簡単に制御できます。 OpenVPN、EasyRSA、tun/tapドライバーなどの必要なすべてのパッケージが付属しています。
OpenVPN構成ファイルの拡張子は.tblk、.ovpn、または.confであるため、Tunnelblickはそれらすべてを読み取ることができます。
構成ファイルをインストールするには、メニューバーのTunnelblickアイコン、または[VPNの詳細]ウィンドウの[構成]タブにある構成のリストにドラッグアンドドロップします。
次に、[接続]を押します。
これで、クライアントマシンにいくつかの新しいルートが必要になります:
$ netstat -rn # or route -n on Linux OS
Destination Gateway Flags Netif Expire
10.8.0.1/32 10.8.0.5 UGSc utun5
10.8.0.5 10.8.0.6 UH utun5
172.31.16/20 10.8.0.5 UGSc utun5
ご覧のとおり、VPNインターフェースを介してローカルデータベースネットワークへのルートがあるため、プライベートデータベースのIPアドレスを使用してデータベースサービスにアクセスできるはずです。
$ mysql -p -h172.31.30.248
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.18-9 Percona Server (GPL), Release '9', Revision '53e606f'
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
インターネット、オンプレミス、または混合環境でデータにアクセスする場合は、データを保護する必要があります。リモートアクセスを暗号化して保護する方法を知っている必要があります。
ご覧のとおり、OpenVPNを使用すると、自己署名証明書を使用した暗号化された接続を介して、ローカルネットワークを使用してリモートデータベースにアクセスできます。したがって、OpenVPNはこのタスクに最適なオプションのように見えます。これはオープンソースソリューションであり、インストール/構成は非常に簡単です。基本的なOpenVPNサーバー構成を使用したため、OpenVPN公式ドキュメントでより複雑な構成を探して、OpenVPNサーバーを改善できます。