sql >> データベース >  >> RDS >> Mysql

OpenVPNを使用してクラウド内のデータベースクラスターへのアクセスを保護する

    インターネットは危険な場所です。特に、データを暗号化せずに残したり、適切なセキュリティを確保しなかったりする場合はなおさらです。データを保護する方法はいくつかあります。すべて異なるレベルで。強力なファイアウォールポリシー、データ暗号化、強力なパスワードポリシーを常に用意する必要があります。データを保護するもう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
    Ubuntuサーバー18.04にOpenVPNをインストールする方法

    最初のタスクは、データベースノードに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を使用したので、今度は同じことを行いますが、クライアント構成ファイルを使用します。

    ファイルclient.confを/usr/ share / doc / openvpn / examples / sample-config-files /から対応する場所にコピーし、必要に応じて変更します。

    $ 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>
    機能しています。これで、VPNを使用してトラフィックを保護し、データベースノードに接続できます。

    結論

    インターネット、オンプレミス、または混合環境でデータにアクセスする場合は、データを保護する必要があります。リモートアクセスを暗号化して保護する方法を知っている必要があります。

    ご覧のとおり、OpenVPNを使用すると、自己署名証明書を使用した暗号化された接続を介して、ローカルネットワークを使用してリモートデータベースにアクセスできます。したがって、OpenVPNはこのタスクに最適なオプションのように見えます。これはオープンソースソリューションであり、インストール/構成は非常に簡単です。基本的なOpenVPNサーバー構成を使用したため、OpenVPN公式ドキュメントでより複雑な構成を探して、OpenVPNサーバーを改善できます。


    1. SELECT FORXMLAUTOおよび戻りデータ型

    2. カンマ区切りの列で特定の値を照会することはできますか?

    3. 自動データ収集:MSSQLServerのデータベースファイルと論理ドライブ

    4. Postgresの間隔で可変期間を使用する