GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu18.04でOpenVPNサーバーをセットアップする方法

信頼できないパブリックWi-Fiネットワークに接続しているときにインターネットに安全かつ確実にアクセスする場合でも、地理的に制限されたコンテンツをバイパスする場合でも、リモートで作業しているときに同僚が会社のネットワークに安全に接続できるようにする場合でも、VPNを使用するのが最善のソリューションです。

VPNを使用すると、リモートVPNサーバーに接続して、トラフィックデータを非公開にすることで、接続を暗号化して安全にし、匿名でWebを閲覧できます。

選択できる商用VPNプロバイダーはたくさんありますが、プロバイダーがアクティビティをログに記録していないことを本当に確信することはできません。最も安全なオプションは、独自のVPNサーバーをセットアップすることです。

このチュートリアルでは、Ubuntu 18.04にOpenVPNをインストールして構成することにより、独自のVPNサーバーをセットアップするプロセスについて説明します。また、クライアント証明書を生成し、構成ファイルを作成する方法も示します

OpenVPNは、フル機能のオープンソースのSecure Socket Layer(SSL)VPNソリューションです。 SSL/TLSプロトコルを使用してOSIレイヤー2または3の安全なネットワーク拡張を実装します。

前提条件#

このチュートリアルを完了するには、次のものが必要です。

  • OpenVPNインスタンスをホストするためのUbuntu18.04サーバーへのsudoアクセス。
  • サーバーには基本的なUFWファイアウォールが構成されている必要があります。
  • CA(認証局)として機能する専用のマシンを分離します。 CA専用のマシンを使用したくない場合は、OpenVPNサーバーまたはローカルマシンでCAを構築できます。 CAの構築が完了したら、CAディレクトリを安全な場所またはオフラインの場所に移動することをお勧めします。

このチュートリアルでは、CAが別のUbuntu18.04マシン上にあることを前提としています。サーバーをCAとして使用している場合は、同じ手順(わずかな変更を加えたもの)が適用されます。

別のCAマシンを使用している理由は、攻撃者がサーバーに侵入するのを防ぐためです。攻撃者がなんとかCA秘密鍵にアクセスした場合、それを使用して新しい証明書に署名し、VPNサーバーへのアクセスを許可する可能性があります。

EasyRSAを使用したCAの構築#

新しいOpenVPNサーバーをセットアップするときの最初のステップは、公開鍵インフラストラクチャ(PKI)を構築することです。そのためには、以下を作成する必要があります。

  • 認証局(CA)の証明書と秘密鍵。
  • CAによって発行されたサーバー用の個別の証明書と秘密鍵のペア。
  • CAによって発行されたクライアントごとに個別の証明書と秘密鍵のペア。

セキュリティ上の理由から前提条件で述べたように、スタンドアロンマシン上にCAを構築します。

CA、証明書要求、および署名証明書を作成するには、EasyRSAという名前のCLIユーティリティを使用します。

CAマシンで次の手順を実行します 。

  1. まず、次のwgetコマンドを使用して、プロジェクトのGithubリポジトリからEasyRSAの最新リリースをダウンロードします。

    cd && wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz
  2. ダウンロードが完了したら、次のコマンドでアーカイブを抽出します。

    tar xzf EasyRSA-nix-3.0.5.tgz
  3. EasyRSAディレクトリに切り替えて、varsという名前の構成ファイルを作成します。 vars.exampleをコピーして ファイル:

    cd ~/EasyRSA-3.0.5/cp vars.example vars
  4. ファイルを開き、コメントを外して、情報に一致するように次のエントリを更新します。

    nano ~/EasyRSA-3.0.5/vars
    〜/ EasyRSA-3.0.5 / vars
    set_var EASYRSA_REQ_COUNTRY    "US"
    set_var EASYRSA_REQ_PROVINCE   "Pennsylvania"
    set_var EASYRSA_REQ_CITY       "Pittsburgh"
    set_var EASYRSA_REQ_ORG        "Linuxize"
    set_var EASYRSA_REQ_EMAIL      "[email protected]"
    set_var EASYRSA_REQ_OU         "Community"
  5. 最初にCAキーペアを生成する前に、次のコマンドで新しいPKIを初期化する必要があります。

    ./easyrsa init-pki
    init-pki complete; you may now create a CA or requests.
    Your newly created PKI dir is: /home/causer/EasyRSA-3.0.5/pki
  6. 次のステップは、CAを構築することです:

    ./easyrsa build-ca

    証明書に署名するたびにパスワードの入力を求められたくない場合は、build-caを実行してください nopassを使用したコマンド オプション:./easyrsa build-ca nopass

    ...
    Enter PEM pass phrase:
    Verifying - Enter PEM pass phrase:
    -----
    ...
    -----
    Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
    
    CA creation complete and you may now import and sign cert requests.
    Your new CA certificate file for publishing is at:
    /home/causer/EasyRSA-3.0.5/pki/ca.crt

    CAキーのパスワードを設定し、CAの一般名を入力するように求められます。

    完了すると、スクリプトは2つのファイルを作成します—CA公開証明書ca.crt およびCA秘密鍵ca.key

    認証局(CA)が作成されたので、これを使用して、1つまたは複数のOpenVPNサーバーおよびクライアントの証明書要求に署名できます。

OpenVPNとEasyRSAのインストール#

次のステップは、Ubuntuのリポジトリで利用可能なOpenVPNパッケージをインストールし、EasyRSAの最新バージョンをダウンロードすることです。

次の手順は、OpenVPNサーバーで実行されます 。

  1. OpenVPNのインストールは非常に簡単です。OpenVPNサーバーで次のコマンドを実行するだけです。 :

    sudo apt updatesudo apt install openvpn
  2. EasyRSAの最新リリースをダウンロードします:

    cd && wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz

    ダウンロードが完了したら、次のコマンドを入力してアーカイブを抽出します。

    tar xzf EasyRSA-nix-3.0.5.tgz

    CAマシンでPKIをすでに初期化していますが、OpenVPNサーバーで新しいPKIを作成する必要もあります。これを行うには、以前と同じコマンドを使用します。

    cd ~/EasyRSA-3.0.5/./easyrsa init-pki

    それでも2つのEasyRSAインストールが必要な理由がわからない場合は、このEasyRSAインスタンスを使用して、CAマシンのEasyRSAインスタンスを使用して署名される証明書要求を生成するためです。 。

    複雑に聞こえるかもしれませんが、少し混乱しますが、チュートリアル全体を読むと、実際には複雑ではないことがわかります。

Diffie-HellmanおよびHMACキーの作成#

このセクションでは、鍵交換中に使用される強力なDiffie-Hellman鍵と、接続にセキュリティの層を追加するためのHMAC署名ファイルを生成します。

  1. まず、OpenVPNサーバーのEasyRSAディレクトリに移動します 。

    cd ~/EasyRSA-3.0.5/
  2. Diffie-Hellman鍵を生成します:

    ./easyrsa gen-dh

    スクリプトは2048ビット長のDHパラメータを生成します。これは、特にリソースが少ないサーバーでは、時間がかかる場合があります。完了すると、次のメッセージが画面に印刷されます。

    DH parameters of size 2048 created at /home/serveruser/EasyRSA-3.0.5/pki/dh.pem

    dh.pemをコピーします /etc/openvpnへのファイル ディレクトリ:

    sudo cp ~/EasyRSA-3.0.5/pki/dh.pem /etc/openvpn/
  3. HMAC署名を生成します:

    openvpn --genkey --secret ta.key

    完了したら、ta.keyをコピーします /etc/openvpnへのファイル ディレクトリ:

    sudo cp ~/EasyRSA-3.0.5/ta.key /etc/openvpn/

サーバー証明書と秘密鍵の作成#

このセクションでは、OpenVPNサーバーの秘密鍵と証明書のリクエストを生成する方法について説明します。

  1. OpenVPNサーバーのEasyRSAディレクトリに移動します サーバーの新しい秘密鍵と証明書要求ファイルを生成します:

    cd ~/EasyRSA-3.0.5/./easyrsa gen-req server1 nopass

    nopassを使用しています パスワードを入力せずにOpenVPNサーバーを起動したいので引数。この例でも、server1を使用しています サーバー名(エンティティ)識別子として。サーバーに別の名前を選択する場合は、サーバー名が使用されている以下の手順を調整することを忘れないでください。

    このコマンドは、秘密鍵(server1.key)の2つのファイルを作成します。 )および証明書要求ファイル(server1.req

    -----
    Common Name (eg: your user, host, or server name) [server1]:
    
    Keypair and certificate request completed. Your files are:
    req: /home/serveruser/EasyRSA-3.0.5/pki/reqs/server1.req
    key: /home/serveruser/EasyRSA-3.0.5/pki/private/server1.key
  2. 秘密鍵を/etc/openvpnにコピーします ディレクトリ:

    sudo cp ~/EasyRSA-3.0.5/pki/private/server1.key /etc/openvpn/
  3. 証明書要求ファイルをCAマシンに転送します:

    scp ~/EasyRSA-3.0.5/pki/reqs/server1.req causer@your_ca_ip:/tmp

    この例では、scpを使用しています ファイルを転送するには、rsyncを使用することもできます oversshまたはその他の安全な方法。

  4. CAマシンにログインします 、EasyRSAディレクトリに切り替えて、証明書要求ファイルをインポートします。

    cd ~/EasyRSA-3.0.5./easyrsa import-req /tmp/server1.req server1

    最初の引数は証明書要求ファイルへのパスであり、2番目の引数はサーバーの短い(エンティティ)名です。この場合、サーバー名はserver1です。 。

    The request has been successfully imported with a short name of: server1
    You may now use this name to perform signing operations on this request.

    このコマンドは、リクエストファイルをpki/reqsにコピーするだけです。 ディレクトリ。

  5. CAマシンのEasyRSAディレクトリにある間 次のコマンドを実行して、リクエストに署名します。

    cd ~/EasyRSA-3.0.5./easyrsa sign-req server server1

    最初の引数はserverのいずれかです。 またはclient 2つ目は、サーバーの短い(エンティティ)名です。

    リクエストが信頼できるソースからのものであることを確認するよう求められます。 yesと入力します enterを押します 確認する:

    You are about to sign the following certificate.
    Please check over the details shown below for accuracy. Note that this request
    has not been cryptographically verified. Please be sure it came from a trusted
    source or that you have verified the request checksum with the sender.
    
    Request subject, to be signed as a server certificate for 1080 days:
    
    subject=
        commonName                = server1
    
    Type the word 'yes' to continue, or any other input to abort.
    Confirm request details: yes
    ...

    CAキーがパスワードで保護されている場合は、パスワードの入力を求められます。検証が完了すると、スクリプトはSSL証明書を生成し、その証明書へのフルパスを出力します。

    ...
    Certificate is to be certified until Sep 17 10:54:48 2021 GMT (1080 days)
    
    Write out database with 1 new entries
    Data Base Updated
    
    Certificate created at: /home/causer/EasyRSA-3.0.5/pki/issued/server1.crt
  6. 次のステップは、署名された証明書server1.crtを転送することです およびca.crt ファイルをOpenVPNサーバーに戻します。ここでも、scpを使用できます 、rsync またはその他の安全な方法:

    scp ~/EasyRSA-3.0.5/pki/issued/server1.crt serveruser@your_server_ip:/tmpscp ~/EasyRSA-3.0.5/pki/ca.crt serveruser@your_server_ip:/tmp
  7. OpenVPNサーバーにログインします 、server1.crtを移動します およびca.crt ファイルを/etc/openvpn/に追加します ディレクトリ:

    sudo mv /tmp/{server1,ca}.crt /etc/openvpn/

このセクションで概説されている手順を完了すると、OpenVPNサーバーに次の新しいファイルが作成されます。 :

  • /etc/openvpn/ca.crt
  • /etc/openvpn/dh.pem
  • /etc/openvpn/ta.key
  • /etc/openvpn/server1.crt
  • /etc/openvpn/server1.key

OpenVPNサービスの構成#

これで、サーバー証明書がCAによって署名され、OpenVPNサーバーに転送されました。 、OpenVPNサービスを構成する時が来ました。

OpenVPNインストールパッケージで提供されるサンプル構成ファイルを開始点として使用し、独自のカスタム構成オプションを追加します。

構成ファイルを/etc/openvpn/に抽出することから始めます ディレクトリ:

sudo sh -c "gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server1.conf"

お気に入りのテキストエディタでファイルを開きます:

sudo nano /etc/openvpn/server1.conf
  • 証明書、キー、およびDHパラメータディレクティブを見つけて、ファイル名を変更します。

    /etc/openvpn/server1.conf
    cert server1.crt
    key server1.key 
    
    dh dh.pem
  • VPNを介してクライアントトラフィックをリダイレクトするには、redirect-gatewayを見つけてコメントを外します およびdhcp-option オプション:

    /etc/openvpn/server1.conf
    push "redirect-gateway def1 bypass-dhcp"
    
    push "dhcp-option DNS 208.67.222.222"
    push "dhcp-option DNS 208.67.220.220"

    デフォルトでは、OpenDNSリゾルバーが使用されます。変更して、CloudFlare、Google、またはその他の必要なDNSリゾルバーを使用できます。

  • userを見つけます およびgroup ディレクティブを作成し、「;」を削除してこれらの設定のコメントを解除します 各行の先頭にある」:

    /etc/openvpn/server1.conf
    user nobody
    group nogroup
  • ファイルの最後に次の行を追加します。このディレクティブは、メッセージ認証アルゴリズム(HMAC)をSHA1からSHA256に変更します

    /etc/openvpn/server1.conf
    auth SHA256

完了すると、サーバー構成ファイル(コメントを除く)は次のようになります。

/etc/openvpn/server1.conf
port 1194
proto udp
dev tun
ca ca.crt
cert server1.crt
key server1.key  # This file should be kept secret
dh dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
verb 3
explicit-exit-notify 1
auth SHA256

OpenVPNサービスの開始#

このチュートリアルでは、server1.confを使用しました 構成ファイルとして。この構成でOpenVPNサービスを開始するには、systemdユニットのファイル名の後に構成ファイル名を指定する必要があります。

OpenVPNサーバー 次のコマンドを実行して、OpenVPNサービスを開始します。

sudo systemctl start openvpn@server1

次のように入力して、サービスが正常に開始されたかどうかを確認します。

sudo systemctl status openvpn@server1

サービスがアクティブで実行中の場合、出力は次のようになります。

[email protected] - OpenVPN connection to server1
   Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)
   Active: active (running) since Mon 2018-10-08 20:11:57 UTC; 6min ago
     Docs: man:openvpn(8)
           https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
           https://community.openvpn.net/openvpn/wiki/HOWTO
 Main PID: 26739 (openvpn)
   Status: "Initialization Sequence Completed"

次のコマンドを使用して、サービスが起動時に自動的に開始するようにします。

sudo systemctl enable openvpn@server1
Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /lib/systemd/system/[email protected].
OpenVPNサービスの開始に失敗した場合は、sudo journalctl -u openvpn@server1を使用してログを確認してください

OpenVPNサーバーは新しいtunデバイスtun0を作成します 。デバイスが使用可能かどうかを確認するには、次のipコマンドを使用します。

ip a show tun0

出力は次のようになります。

4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq state UNKNOWN group default qlen 100
    link/none 
    inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::1627:9a20:bca8:e6a5/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever

この時点で、OpenVPNサーバーが構成され、正しく実行されています。

ファイアウォールとサーバーのネットワーク構成#

ネットワークパケットを適切に転送するには、IP転送を有効にする必要があります。

次の手順は、OpenVPNサーバーで実行されます 。

/etc/sysctl.confを開きます ファイルを作成し、net.ipv4.ip_forward = 1という行を追加またはコメント解除します。 :

sudo nano /etc/sysctl.conf
/etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

終了したら、ファイルを保存して閉じます。

次のコマンドを実行して、新しい設定を適用します。

sudo sysctl -p
net.ipv4.ip_forward = 1

前提条件を満たしている場合は、サーバーでUFWファイアウォールがすでに実行されているはずです。

次に、マスカレードを有効にするファイアウォールルールを追加する必要があります。これにより、トラフィックがVPNを離れることができ、VPNクライアントがインターネットにアクセスできるようになります。

ルールを追加する前に、UbuntuOpenVPNサーバーのパブリックネットワークインターフェイスを知っておく必要があります。次のコマンドを実行すると、インターフェイスを簡単に見つけることができます。

ip -o -4 route show to default | awk '{print $5}'

この場合、インターフェースの名前はens3です。 以下の出力に示すように。インターフェースの名前はおそらく別のものになります。

ens3

デフォルトでは、UFWを使用すると、転送されたパケットはドロップされます。これを変更し、転送されたパケットを許可するようにファイアウォールに指示する必要があります。

UFW構成ファイルを開き、DEFAULT_FORWARD_POLICYを見つけます。 キーを押して、値をDROPから変更します ACCEPTへ :

sudo nano /etc/default/ufw
/ etc / default / ufw
...
# Set the default forward policy to ACCEPT, DROP or REJECT.  Please note that
# if you change this you will most likely want to adjust your rules
DEFAULT_FORWARD_POLICY="ACCEPT"
...

次に、POSTROUTINGのデフォルトポリシーを設定する必要があります NATテーブルでチェーンし、マスカレードルールを設定します。

これを行うには、/etc/ufw/before.rulesを開きます ファイルを作成し、以下に示すように黄色で強調表示された行を追加します。

sudo nano /etc/ufw/before.rules

ens3を置き換えることを忘れないでください -A POSTROUTING 前のコマンドで見つけたパブリックネットワークインターフェイスの名前と一致する行。 COMMITで始まる最後の行の後に行を貼り付けます 。

/etc/ufw/before.rules
...
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT

#NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]

# Forward traffic through ens3 - Change to public network interface
-A POSTROUTING -s 10.8.0.0/16 -o ens3 -j MASQUERADE

# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT

完了したら、ファイルを保存して閉じます。

また、ポート1194でUDPトラフィックを開く必要があります これはデフォルトのOpenVPNポートです。これを行うには、次のコマンドを実行します。

sudo ufw allow 1194/udp

SSHポートを開くのを忘れた場合は、ロックアウトされないように、次のコマンドを実行してポートを開きます。

sudo ufw allow OpenSSH

最後に、UFWを無効にしてから再度有効にして、UFWルールをリロードします。

sudo ufw disablesudo ufw enable

変更を確認するには、次のコマンドを実行してPOSTROUTINGルールを一覧表示します。

sudo iptables -nvL POSTROUTING -t nat
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MASQUERADE  all  --  *      ens3    10.8.0.0/16          0.0.0.0/0  

クライアント構成インフラストラクチャの作成#

このチュートリアルでは、個別のSSL証明書を作成し、VPNクライアントごとに異なる構成ファイルを生成します。

クライアントの秘密鍵と証明書の要求は、クライアントマシンまたはサーバーのいずれかで生成できます。簡単にするために、サーバーで証明書要求を生成し、それをCAに送信して署名します。

クライアント証明書と構成ファイルを生成するプロセス全体は次のとおりです。

  1. OpenVPNサーバーで秘密鍵と証明書のリクエストを生成します。
  2. 署名するリクエストをCAマシンに送信します。
  3. 署名されたSSL証明書をOpenVPNサーバーにコピーし、構成ファイルを生成します。
  4. 構成ファイルをVPNクライアントのマシンに送信します。

クライアントファイルを保存するための一連のディレクトリを作成することから始めます。

mkdir -p ~/openvpn-clients/{configs,base,files}
  • base ディレクトリには、すべてのクライアントファイル間で共有されるベースファイルと構成が保存されます。
  • configs ディレクトリには、生成されたクライアント構成が保存されます。
  • files ディレクトリには、クライアント固有の証明書とキーのペアが保存されます。

ca.crtをコピーします およびta.key ~/openvpn-clients/baseへのファイル ディレクトリ:

cp ~/EasyRSA-3.0.5/ta.key ~/openvpn-clients/base/cp /etc/openvpn/ca.crt ~/openvpn-clients/base/

次に、サンプルVPNクライアント構成ファイルをクライアントにコピーします-~/openvpn-clients/base ディレクトリ。このファイルを基本構成として使用します:

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/openvpn-clients/base/

次に、サーバーの設定と構成に一致するようにファイルを編集する必要があります。テキストエディタで構成ファイルを開きます:

nano ~/openvpn-clients/base/client.conf
  • リモートディレクティブを見つけて、デフォルトのプレースホルダーをOpenVPNサーバーのパブリックIPアドレスに変更します。

    〜/ openvpn-clients / base / client.conf
    # The hostname/IP and port of the server.
    # You can have multiple remote entries
    # to load balance between the servers.
    remote YOUR_SERVER_IP 1194
  • caを見つけてコメントします 、cert 、およびkey ディレクティブ。証明書とキーは構成ファイル内に追加されます:

    〜/ openvpn-clients / base / client.conf
    # SSL/TLS parms.
    # See the server config file for more
    # description.  It's best to use
    # a separate .crt/.key file pair
    # for each client.  A single ca
    # file can be used for all clients.
    # ca ca.crt
    # cert client.crt
    # key client.key
  • サーバー設定と一致するように、ファイルの最後に次の行を追加します。

    〜/ openvpn-clients / base / client.conf
    auth SHA256

完了すると、サーバー構成ファイルは次のようになります。

〜/ openvpn-clients / base / client.conf
client
dev tun
proto udp
remote YOUR_SERVER_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
verb 3
auth SHA256
key-direction 1

次に、基本構成とファイルをクライアントの証明書とキーとマージする簡単なbashスクリプトを作成し、生成された構成を~/openvpn-clients/configsに保存します。 ディレクトリ。

テキストエディタを開き、次のスクリプトを作成します。

nano ~/openvpn-clients/gen_config.sh
〜/ openvpn-clients / gen_config.sh
#!/bin/bash

FILES_DIR=$HOME/openvpn-clients/files
BASE_DIR=$HOME/openvpn-clients/base
CONFIGS_DIR=$HOME/openvpn-clients/configs

BASE_CONF=${BASE_DIR}/client.conf
CA_FILE=${BASE_DIR}/ca.crt
TA_FILE=${BASE_DIR}/ta.key

CLIENT_CERT=${FILES_DIR}/${1}.crt
CLIENT_KEY=${FILES_DIR}/${1}.key

# Test for files
for i in "$BASE_CONF" "$CA_FILE" "$TA_FILE" "$CLIENT_CERT" "$CLIENT_KEY"; do
    if [[ ! -f $i ]]; then
        echo " The file $i does not exist"
        exit 1
    fi

    if [[ ! -r $i ]]; then
        echo " The file $i is not readable."
        exit 1
    fi
done

# Generate client config
cat > ${CONFIGS_DIR}/${1}.ovpn <<EOF
$(cat ${BASE_CONF})
<key>
$(cat ${CLIENT_KEY})
</key>
<cert>
$(cat ${CLIENT_CERT})
</cert>
<ca>
$(cat ${CA_FILE})
</ca>
<tls-auth>
$(cat ${TA_FILE})
</tls-auth>
EOF

次のchmodを実行して、ファイルを保存し、実行可能にします。 コマンド:

chmod u+x ~/openvpn-clients/gen_config.sh
クライアント証明書の秘密鍵と構成の作成#

クライアントの秘密鍵と証明書の要求を生成するプロセスは、サーバーの鍵と証明書の要求を生成するときと同じです。

前のセクションですでに説明したように、OpenVPNサーバーでクライアントの秘密鍵と証明書のリクエストを生成します。この例では、最初のVPNクライアントの名前はclient1になります。 。

  1. OpenVPNサーバーのEasyRSAディレクトリに移動します クライアント用の新しい秘密鍵と証明書要求ファイルを生成します:

    cd ~/EasyRSA-3.0.5/./easyrsa gen-req client1 nopass

    このコマンドは、秘密鍵(client1.key)の2つのファイルを作成します。 )および証明書要求ファイル(client1.req

    Common Name (eg: your user, host, or server name) [client1]:
    
    Keypair and certificate request completed. Your files are:
    req: /home/serveruser/EasyRSA-3.0.5/pki/reqs/client1.req
    key: /home/serveruser/EasyRSA-3.0.5/pki/private/client1.key
  2. 秘密鍵client1.keyをコピーします ~/openvpn-clients/filesへ 前のセクションで作成したディレクトリ:

    cp ~/EasyRSA-3.0.5/pki/private/client1.key ~/openvpn-clients/files/
  3. 証明書要求ファイルをCAマシンに転送します:

    scp ~/EasyRSA-3.0.5/pki/reqs/client1.req causer@your_ca_ip:/tmp

    この例では、scpを使用しています ファイルを転送するには、rsyncを使用することもできます oversshまたはその他の安全な方法。

  4. CAマシンにログインします 、EasyRSAディレクトリに切り替えて、証明書要求ファイルをインポートします。

    cd ~/EasyRSA-3.0.5./easyrsa import-req /tmp/client1.req client1

    最初の引数は証明書要求ファイルへのパスであり、2番目の引数はクライアント名です。

    The request has been successfully imported with a short name of: client1
    You may now use this name to perform signing operations on this request.
  5. CAマシンのEasyRSAディレクトリ内から 次のコマンドを実行して、リクエストに署名します。

    cd ~/EasyRSA-3.0.5./easyrsa sign-req client client1

    リクエストが信頼できるソースからのものであることを確認するよう求められます。 yesと入力します enterを押します 確認する:

    CAキーがパスワードで保護されている場合は、パスワードの入力を求められます。検証が完了すると、スクリプトはSSL証明書を生成し、その証明書へのフルパスを出力します。

    ...
    Certificate created at: /home/causer/EasyRSA-3.0.5/pki/issued/client1.crt
  6. 次に、署名された証明書client1.crtを転送します ファイルをOpenVPNサーバーに戻します。 scpを使用できます 、rsync またはその他の安全な方法:

    scp ~/EasyRSA-3.0.5/pki/issued/client1.crt serveruser@your_server_ip:/tmp
  7. OpenVPNサーバーにログインします 、client1.crtを移動します ~/openvpn-clients/filesにファイルを追加します ディレクトリ:

    mv /tmp/client1.crt ~/openvpn-clients/files
  8. 最後のステップは、gen_config.shを使用してクライアント構成を生成することです。 脚本。 ~/openvpn-clientsに切り替えます ディレクトリを作成し、クライアント名を引数として使用してスクリプトを実行します:

    cd ~/openvpn-clients./gen_config.sh client1

    スクリプトは、client1.ovpnという名前のファイルを作成します ~/client-configs/configsにあります ディレクトリ。ディレクトリを一覧表示して確認できます:

    ls ~/openvpn-clients/configs
    client1.ovpn

この時点で、クライアント構成が作成されます。これで、クライアントとして使用する予定のデバイスに構成ファイルを転送できます。

たとえば、scpを使用して構成ファイルをローカルマシンに転送するには 次のコマンドを実行する必要があります:

scp ~/openvpn-clients/configs/client1.ovpn your_local_ip:/

クライアントを追加するには、同じ手順を繰り返します。

クライアントの接続#

Linux#

ディストリビューションまたはデスクトップ環境は、OpenVPNサーバーに接続するためのツールまたはグラフィックユーザーインターフェイスを提供する場合があります。このチュートリアルでは、openvpnを使用してサーバーに接続する方法を示します。 ツール。

  • UbuntuとDebianにOpenVPNをインストールする

    sudo apt updatesudo apt install openvpn
  • CentOSとFedoraにOpenVPNをインストールする

    sudo yum install epel-releasesudo yum install openvpn

パッケージがインストールされたら、VPNサーバーに接続するにはopenvpnを使用します コマンドを実行し、クライアント構成ファイルを指定します:

sudo openvpn --config client1.ovpn

macOS#

Tunnelblickは、OSXおよびmacOSでのOpenVPN用の無料のオープンソースグラフィックユーザーインターフェイスです。

Windows#

OpenVPNアプリケーションの最新ビルドをダウンロードしてインストールします。OpenVPNのダウンロードページ。

.ovpnをコピーします ファイルをOpenVPN構成フォルダー(\Users\<Name>\OpenVPN\Config または\Program Files\OpenVPN\config

OpenVPNアプリケーションを起動します。

OpenVPNシステムトレイアイコンを右クリックすると、コピーしたOpenVPN構成ファイルの名前がメニューに表示されます。 [接続]をクリックします。

AndroidとiOS#

OpenVPNによって開発されたVPNアプリケーションは、AndroidとiOSの両方で利用できます。アプリケーションをインストールし、クライアントの.ovpをインポートします ファイル。

  • Android OpenVPN Connect
  • iOS OpenVPN Connect

クライアント証明書の取り消し#

証明書を取り消すとは、署名された証明書を無効にして、OpenVPNサーバーへのアクセスに使用できなくなることを意味します。

クライアント証明書を取り消すには、以下の手順に従います。

  1. CAマシンにログインします EasyRSAディレクトリに切り替えます:

    cd EasyRSA-3.0.5
  2. revokeを使用してeasyrsaスクリプトを実行します 引数の後に、取り消すクライアント名を続けます:

    ./easyrsa revoke client1

    証明書を取り消すかどうかを確認するよう求められます。 yesと入力します enterを押します 確認する:

    Please confirm you wish to revoke the certificate with the following subject:
    
    subject=
        commonName                = client1
    
    Type the word 'yes' to continue, or any other input to abort.
    Continue with revocation: yes
    ...

    CAキーがパスワードで保護されている場合は、パスワードの入力を求められます。 Once verified the script will revoke the certificate.

    ...
    Revocation was successful. You must run gen-crl and upload a CRL to your
    infrastructure in order to prevent the revoked cert from being accepted.
  3. Use the gen-crl option to generate a certificate revocation list (CRL):

    ./easyrsa gen-crl
    An updated CRL has been created.
    CRL file: /home/causer/EasyRSA-3.0.5/pki/crl.pem
  4. Upload the CRL file to the OpenVPN server:

    scp ~/EasyRSA-3.0.5/pki/crl.pem serveruser@your_server_ip:/tmp
  5. Login to your OpenVPN server server and move the file to the /etc/openvpn ディレクトリ:

    sudo mv /tmp/crl.pem /etc/openvpn
  6. Open the OpenVPN server configuration file:

    sudo nano /etc/openvpn/server1.conf

    Paste the following line at the end of the file

    /etc/openvpn/server1.conf
    crl-verify crl.pem

    Save and close the file.

  7. Restart the OpenVPN service for the revocation directive to take effect:

    sudo systemctl restart openvpn@server1

    At this point, the client should no longer be able to access the OpenVPN server using the revoked certificate.

If you need revoke additional client certificates just repeat the same steps.


Ubuntu
  1. Ubuntu /DebianLAMPサーバーをセットアップする方法

  2. Ubuntu20.04でリバースプロキシとしてNginxを設定する方法

  3. Debian10でOpenVPNサーバーをセットアップする方法

  1. Ubuntu22.04でWireGuardを設定する方法

  2. Ubuntu16.04でTeamSpeakサーバーをセットアップする方法

  3. Ubuntu18.04にOpenVPNをインストールする方法

  1. Ubuntu18.04にSquidプロキシサーバーをセットアップしてインストールする方法

  2. Ubuntu20.04でOpenVPNサーバーをセットアップする方法

  3. Ubuntu20.04でNginxサーバーブロックを設定する方法