Tutorial

Ubuntu 20.04でOpenVPNサーバーをセットアップ・設定する方法

UbuntuSecurityVPNUbuntu 20.04

はじめに

仮想プライベートネットワーク(VPN)を使用すると、プライベートネットワークにいるかのように、安全でないネットワークを通過できます。ホテルやカフェのWiFiなどで、安全でないネットワークに接続した際、スマートフォンやノートからインターネットに確実かつ安全にアクセスできます。

HTTPS接続と組み合わせると、このセットアップによりワイヤレスログインとトランザクションを保護できます。地理的な制限と検閲を回避し、あなたのいる場所と暗号化されていないHTTPトラフィックを安全でないネットワークから保護できます。

OpenVPNは、は、幅広い設定に対応するフル機能のオープンソースのトランスポート層セキュリティ(Transport Layer Security: TLS)VPNソリューションです。 このチュートリアルでは、Ubuntu 20.04サーバーでOpenVPNをセットアップし、クライアントマシンからアクセスできるように設定します。

注: DigitalOcean DropletにOpenVPNサーバーをセットアップする場合は、多くのホストプロバイダー同様、帯域超過分が請求されることにご注意ください。 こうした理由から、サーバーが処理するトラフィックの量にご注意ください。     

詳しくは、このページをご覧ください。

前提条件

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

注: OpenVPNサーバーやローカルマシンをCAとして使用することは技術的に可能ですが、VPNをいくつかのセキュリティの脆弱性にさらすため、これは推奨されません。 OpenVPNの公式ドキュメントに従って、証明書要求のインポートと署名専用のスタンドアロンマシンにCAを配置する必要があります。このため、このガイドでは、CAが、sudo権限を持つroot以外のユーザーと基本的なファイアウォールが有効な別個のUbuntu 20.04サーバーにあると想定します。

OpenVPNサーバーへの接続に使用するクライアントマシン。このガイドでは、OpenVPNクライアントと呼びます。このチュートリアルの目的上、ローカルマシンをOpenVPNクライアントとして使用することをお勧めします。

これらの前提条件が整ったところで、Ubuntu 20.04でOpenVPNサーバーのセットアップと設定を開始します。

注: これらのサーバーの設定中にパスワード認証を無効にすると、このガイドの後半、サーバー間でファイル転送するときに問題が発生する可能性があることに注意してください。この問題を解決するには、各サーバーでパスワード認証を有効に戻します。代わりに、各サーバーのSSHの鍵ペアを生成し、OpenVPNサーバーの公開SSH鍵をCAマシンのauthorized_keysに追加し、またその逆も行う、という方法もあります。  これらのソリューションの実施方法については、Ubuntu 20.04でSSHの鍵を設定する方法をご覧ください。

ステップ1 — OpenVPNとEasyRSAのインストール

最初にOpenVPNとEasy-RSAをにインストールします。Easy-RSAは公開鍵基盤(Pubulic Key Infrastructure: PKI)管理ツールです。これを使用して、OpenVPNサーバーで認証要求を生成し、その認証要求をCAサーバーで検証・署名します。

まず、OpenVPNサーバーのパッケージインデックスを更新し、OpenVPNとEasy-RSAをインストールします。どちらのパッケージもUbuntuのデフォルトリポジトリにあるので、aptを使用してインストールします。

  • sudo apt update
  • sudo apt install openvpn easy-rsa

次に、root以外のユーザーとしてOpenVPNサーバーに新しいディレクトリ ~/easy-rsaを作成します。

  • mkdir ~/easy-rsa

作成したばかりの ~/easy-rsaディレクトリにインストールされたeasyrsaスクリプトからシンボリック・リンクを作成します。

  • ln -s /usr/share/easy-rsa/* ~/easy-rsa/

注: 他のガイドでは、easyrsaパッケージファイルをPKIディレクトリにコピーするよう指示しているものもありますが、このチュートリアルでは、シンボリック・リンクを採用します。その結果、easy-rsaパッケージの更新は、自動的にPKIのスクリプトに反映されます。

最後に、ディレクトリの所有者はsudok権限を持つroot以外のユーザーであることを確認し、chmodを使用してこのユーザーへのアクセスを制限します。

  • sudo chown sammy ~/easy-rsa
  • chmod 700 ~/easy-rsa

これらのプログラムがインストールされ、システムの正しい場所に移動したら、次のステップは、OpenVPNサーバーにPublic Key Infrastructure (PKI)を作成し、VPNに接続するクライアントやその他のサーバーのTLS証明書を要求・管理することです。

ステップ2 — OpenVPNのPKIの作成

OpenVPNサーバーの秘密の鍵と証明書を作成する前に、OpenVPNサーバーのローカルにPKIディレクトリを作成します。 このディレクトリを使用して、CAサーバーで直接証明書を作成する代わりに、サーバーとクライアントの証明書要求を管理します。

OpenVPNサーバーにPKIディレクトリを作成するには、varsというファイルにデフォルト値をいくつか入力します。まず、cdeasy-rsaディレクトリに移動し、nanoか好みのテキストエディターを使用してvarsファイルを作成・編集します。

  • cd ~/easy-rsa
  • nano vars

ファイルを開いたら、次の2行を貼り付けします。

~/easy-rsa/vars
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"

varsファイルを認証局として使用しないため、OpenVPNサーバーにあるこのvarファイルに必要なのはこの2行だけです。これにより、秘密の鍵と証明書要求が、今日の楕円曲線暗号(Elliptic Curve Cryptography: ECC)を使用するように設定され、ECCはクライアントとOpenVPNサーバーの鍵と安全な署名を生成します。         

OpenVPNとCAサーバーを ECCを使用するように設定すると、クライアントとサーバーが共有対称の鍵の確立を試みる際に、楕円曲線アルゴリズムを使用してやり取りできるようになります。  ECCは、古典的なRSAアルゴリズムのプレーンなDiffie-Hellmanよりも数字がはるかに小さく、計算が早くできるため、ECCを使用すれば鍵の交換時間がかなり短縮できます。

背景: クライアントがOpenVPNに接続するときは、非対称暗号化方式(または公開鍵/秘密の鍵)により、TLSハンドシェイクを行います。ただし、暗号化されたVPNトラフィックを送信する際、サーバーとクライアントは、共有鍵暗号化方式として知られる対称暗号化方式を使用します。

対称暗号化方式は非対称暗号化方式に比べて演算のオーバーヘッドがはるかに小さく、使用する数字も小さいため、今日のCPUは命令を統合して最適な対称暗号化演算を実施します。OpenVPNサーバーとクライアントは、非対称暗号化から対称暗号化への切り替えを行う際、Ellipic Curve Diffie-Hellman (ECDH) アルゴリズムを使用して、共有秘密の鍵に可能な限り速やかに同意します。

varsファイルへの入力が終わったら、PKIディレクトリの作成に進みます。それにはinit-pkiオプションを指定して、easyrsaスクリプト実行します。すでに前提条件の中で、CAサーバーでこのコマンドを実行していますが、OpenVPNサーバーとCAサーバーには個別のPKIディレクトリがあるため、ここで実行する必要があります。 

  • ./easyrsa init-pki

OpenVPNサーバーに認証局を作成する必要はありません。CAサーバーが担うのは、証明書の検証と署名だけです。 VPNサーバーのPKIは、証明書要求と公開証明書を保管する、便利な場所としてのみ使用されます。 

OpenVPNサーバーでPKIを初期化した後、次のステップに進み、OpenVPNサーバーの証明書要求と秘密の鍵を生成します。

ステップ3 — OpenVPNサーバーの証明書要求と公開鍵の作成

OpenVPNサーバーに前提条件がすべてインストールされているので、次のステップでは、OpenVPNサーバーに秘密の鍵と証明書署名要求(Certificate Signing Request: CSR)を生成します。その後、署名要求をCAに転送して、必要な証明書を作成します。署名証明書が登録されると、OpenVPNサーバーに返送して、インストールして使えるようにします。

起動するには、root以外のユーザーとしてOpenVPNサーバーの~/easyrsaディレクトリに移動します。

  • cd ~/easy-rsa

次に、gen-reqオプションとマシンのコモンネーム(Common Name: CN)を指定してeasyrsaを呼び出します。 CNはどんな名前でも構いませんが、説明的なものがよいでしょう。 このチュートリアルでは、OpenVPNサーバーのCNをserverとします。nopassオプションも加えましょう。これをしておかないと、要求ファイルがパスワード保護され、今後権限の問題につながる可能性があります。

注:CNをserver以外にした場合、以下の指示を多少調整する必要があります。たとえば、生成ファイルを/etc/openvpnディレクトリにコピーする際、正しい名前に読み換える必要があります。また、/etc/openvpn/server.confファイルが正確に.crtファイル、.keyファイルをポイントするように後で修正する必要があります。

  • ./easyrsa gen-req server nopass
Output
Common Name (eg: your user, host, or server name) [server]: Keypair and certificate request completed. Your files are: req: /home/sammy/easy-rsa/pki/reqs/server.req key: /home/sammy/easy-rsa/pki/private/server.key

これにより、サーバーの秘密の鍵と、server.reqという証明書要求ファイルが作成されます。サーバー鍵を/etc/openvpn/serverディレクトリにコピーします。

  • sudo cp /home/sammy/easy-rsa/pki/private/server.key /etc/openvpn/server/

これらのステップを完了して、OpenVPNサーバーの秘密の鍵が作成されました。また、OpenVPNサーバーのCSRも生成されました。これで、CAにCSRへの署名を要求する準備が整いました。このチュートリアルの次のセクションでは、CAサーバーの秘密の鍵でCSRに署名する方法を学びます。

ステップ4 — OpenVPNサーバーの証明書要求に署名する

前のステップでは、OpenVPNサーバーの証明書署名要求(CSR)と秘密の鍵を作成しました。次に、CAサーバーはserver証明書を把握し、それを認証する必要があります。 CAが証明書を認証してOpenVPNサーバーに戻せば、CAを信頼するクライアントもOpenVPNサーバーを信頼できるようになります。

OpenVPNサーバーで、root以外のユーザーとして、SCPなどの転送方式でserver.req証明書要求をCAサーバーにコピーします。CAサーバーはそれを署名に使用します。

  • scp /home/sammy/easy-rsa/pki/reqs/server.req sammy@your_ca_server_ip:/tmp

前提条件 Ubuntu 20.04に認証局(CA)をセットアップして設定する方法チュートリアルに従った場合、次のステップで、CA管理用に作成したroot以外のユーザーとしてCAサーバーにログインします。  PKを作成した~/easy-rsaディレクトリにcdで移動し、easyrsaスクリプトを使用して証明書要求をインポートします。

  • cd ~/easy-rsa
  • ./easyrsa import-req /tmp/server.req server
Output
. . . The request has been successfully imported with a short name of: server You may now use this name to perform signing operations on this request.

次に、easyrsaスクリプトを sign-reqオプションを指定して実行し、要求に署名し、続けて要求タイプとコモンネームを入力します。要求タイプは、clientserverかのどちらかです。OpenVPNサーバーの証明書要求を使用しているので、server要求タイプは必ず入力してください。

  • ./easyrsa sign-req server server

出力では、要求が信頼できるソースから来たものかどうか確認を求められます。yesと入力後、ENTERキーを押して確認します。

Output
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 3650 days: subject= commonName = server Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes . . . Certificate created at: /home/sammy/easy-rsa/pki/issued/server.crt

CA秘密の鍵を暗号化すると、この時点でパスワードを求められます。

これらの手順が完了し、CAサーバーの秘密の鍵を使用して、OpenVPNサーバーの証明書要求に署名しました。結果として生じるserver.crtファイルには、OpenVPNサーバーの公開暗号化鍵と、CAサーバーからの署名が含まれます。 署名の意図は、CAサーバーを信頼するすべての人に、OpenVPNサーバーも信頼して接続できると伝えることです。  

証明書の設定を完了するには、CAサーバーから<g id=“1” ctype=“x-CODE” equiv-text=“`”>server.crt</g>ファイルと<g id=“2” ctype=“x-CODE” equiv-text=“`”>ca.crt</g>ファイルを、OpenVPNサーバー にコピーします。 `“`

  • scp pki/issued/server.crt sammy@your_vpn_server_ip:/tmp
  • scp pki/ca.crt sammy@your_vpn_server_ip:/tmp

OpenVPNサーバーに戻ったので、/tmpから/etc/openvpn/serverにファイルをコピーします。

  • sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/server

これでOpenVPNサーバーは、接続を受け入れる準備がほぼできました。次のステップでは、サーバーのセキュリティを強化するために、追加の手順をいくつか行います。

ステップ5 — OpenVPN暗号データの設定 

セキュリティレイヤーを強化するため、サーバーと全クライアントがOpenVPNのtls-cryptディレクティブで使用する、共有する秘密の鍵を追加します。このオプションを使用すると、サーバーとクライアント間が接続を確立する際に使用されるTLS証明書を難読化できます。また、OpenVPNサーバーはこれを使用して受信パケットを手早くチェックします。パケットが事前共有鍵を使用して署名されていればサーバーはこれを処理し、署名されていなければサーバーは信頼されていないソースからのパケットであると理解し、復号の手間をかけずに破棄できます。

このオプションはOpenVPNサーバーが、サーバーリソースと連携しながら、認証されていないトラフィック、ポートスキャン、DOS攻撃に対応できるようにします。また、OpenVPNネットワークトラフィックの識別が難しくなります。

tls-crypt 事前共有鍵を生成するには、OpenVPNサーバーの~/easy-rsaディレクトリで次を実行します。

  • cd ~/easy-rsa
  • openvpn --genkey --secret ta.key

ta.keyというファイルが生成されます。このファイルを/etc/openvpn/server/ディレクトリにコピーします。

  • sudo cp ta.key /etc/openvpn/server

OpenVPNサーバーにこれらのファイルを配置し、VPN接続に使用するユーザーのクライアント証明書と鍵ファイルを作成する準備が整いました。

ステップ6 — クライアント証明書と鍵のペアを生成

クライアントマシンで秘密の鍵と証明書要求を生成し、それをCAに送信して署名させることもできますが、このガイドでは、OpenVPNサーバーで証明書要求を生成するプロセスの概要を説明します。この利点は、必要なすべての鍵と証明書を含むクライアント設定ファイルを自動的に生成するスクリプトが作成できることです。これにより、鍵、証明書、および設定ファイルをクライアントに転送する必要がなくなり、VPNへの参加プロセスが合理化されます。 

このガイドでは、単一のクライアント鍵と証明書のペアを生成します。 クライアントが複数ある場合、クライアントごとにこのプロセスを繰り返すことができます。ただし、クライアントごとに一意の名前の値をスクリプトに渡す必要があることに注意してください。このチュートリアルでは、最初の証明書/鍵ペアをclient1と呼びます。

まず、ホームディレクトリ内にディレクトリ構造を作成して、クライアント証明書と鍵ファイルを保存します。

  • mkdir -p ~/client-configs/keys

クライアントの証明書/鍵ペアと設定ファイルをこのディレクトリに保存するので、セキュリティ対策としてその権限をすぐにロックダウンする必要があります。

  • chmod -R 700 ~/client-configs

次に、EasyRSAディレクトリに戻り、 クライアントのコモンネームとともに、gen-reqnopassオプションを指定してeasyrsaスクリプトを実行します。

  • cd ~/easy-rsa
  • ./easyrsa gen-req client1 nopass

ENTERキーを押して、コモンネームを確認します。それから、client1.keyファイルを先ほど作成した ~/client-configs/keys/ディレクトリにコピーします。

  • cp pki/private/client1.key ~/client-configs/keys/

次に、安全な方法を使用して、client1.reqファイルをCAマシンに転送します。

  • scp pki/reqs/client1.req sammy@your_ca_server_ip:/tmp

CAサーバーにログインします。EasyRSAディレクトリに移動して、証明書要求をインポートします。

  • cd ~/easy-rsa
  • ./easyrsa import-req /tmp/client1.req client1

次に、前のステップでサーバーに対して行ったように要求に署名します。ただし、今回は、必ずリクエストタイプをclientに指定してください。

  • ./easyrsa sign-req client client1

プロンプトで、yesと入力して、証明書要求に署名する意図があり、信頼できるソースからのものであることを確認します。

Output
Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes

ここでも、CA鍵を暗号化した場合、パスワードの入力を求められます。

これにより、client1.crtという名前のクライアント証明書ファイルが作成されます。このファイルをサーバーに転送して戻します。

  • scp pki/issued/client1.crt sammy@your_server_ip:/tmp

OpenVPNサーバーに戻り、クライアント証明書を ~/client-configs/keys/ディレクトリにコピーします。

  • cp /tmp/client1.crt ~/client-configs/keys/

次に、ca.crtta.keyファイルを ~/client-configs/keys/ディレクトリにもコピーし、sudoユーザーに適切な権限を設定します。

  • cp ~/easy-rsa/ta.key ~/client-configs/keys/
  • sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/
  • sudo chown sammy.sammy ~/client-configs/keys/*

これにより、サーバーとクライアントの証明書と鍵がすべて生成され、OpenVPNサーバー上の適切なディレクトリに保存されます。これらのファイルを使用して実行する必要のあるアクションがまだいくつかありますが、それらについては後のステップで説明します。今は、OpenVPNの設定に進みます。

ステップ7 — OpenVPNの設定

OpenVPNには、広く使用されている他の多くのオープンソースツールと同様に、利用可能な設定オプションが多数あります。このセクションでは、このソフトウェアのドキュメントに含まれるサンプル設定ファイルの一つに基づいて、基本的なOpenVPNサーバー設定のセットアップ方法について説明します。

最初に、独自の設定ファイルの開始点としてサンプルのserver.confファイルをコピーします。

  • sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server/
  • sudo gunzip /etc/openvpn/server/server.conf.gz

お好みのテキストエディタで編集する新しいファイルを開きます。この例ではnanoを使用します。

  • sudo nano /etc/openvpn/server/server.conf

このファイルの数行を変更します。まず、tls-authディレクティブを検索して、設定のHMACセクションを見つけます。この行は、コメントを解除します。行頭に;を付けてコメントアウトします。その下に新しい行を追加し、その行にはtls-crypt ta.keyのみ入力します。   

/etc/openvpn/server/server.conf
;tls-auth ta.key 0 # This file is secret
tls-crypt ta.key

次に、cipher行を検索し、暗号に関係のセクションを見つけます。デフォルト値はAES-256-CBCに設定されていますが、AES-256-GCM暗号の方が暗号強度・性能に優れ、最新のOpenVPNクライアントで十分にサポートされています。   行頭に;を追記してこのデフォルト値の行をコメントアウトします。その下に1行追加し、最新の値AES-256-GCMを入力します。

/etc/openvpn/server/server.conf
;cipher AES-256-CBC
cipher AES-256-GCM

この下に、authディレクティブを追加して、HMACメッセージダイジェストアルゴリズムを選択します。このため、SHA256は、よい選択です。

/etc/openvpn/server/server.conf
auth SHA256

次に、Diffie-Hellmanパラメーターを定義するdhディレクティブを含む行を見つけます。すべての証明書をEllipic Curve Cryptographyに設定したので、Diffie-Hellmanのシードファイルは不要です。dh dh2048.pemdh dh.pemのような見た目の既存の行をコメントアウトします。Diffie-Hellman鍵のファイル名は、サンプルのサーバー設定ファイルの一覧表示と異なる場合があります。その下にdh noneの行を追加します。

/etc/openvpn/server/server.conf
;dh dh2048.pem
dh none

次に、OpenVPNが起動したら権限なしで稼働させるため、ユーザーnobody、グループnogroupとして稼働するように指示します。これを有効にするには、user nobody行とgroup nogroup行それぞれの行頭にある;を削除してコメントを解除します。

/etc/openvpn/server/server.conf
user nobody
group nogroup

(オプション)DNSの変更をプッシュして、VPNを介してすべてのトラフィックをリダイレクトする

上記の設定により、2台のマシン間にVPN接続が作成されますが、トンネルを使用する接続は強制されません。VPNを使用してすべてのトラフィックをルーティングする場合は、追加設定をクライアントコンピューターにプッシュします。

まず、push "redirect-gateway def1 bypass-dhcp"を含む行を検索し、コメントを解除します。これにより、クライアントにOpenVPNサーバーを介してトラフィックをリダイレクトするよう指示します。この機能を有効にすると、SSHのような他のネットワークサービスとの接続に問題が生じる可能性があることに注意してください。

/etc/openvpn/server/server.conf
push "redirect-gateway def1 bypass-dhcp"

すぐ下の行に、dhcp-optionセクションがあります。ここでも、2行とも行頭の;を削除してコメントを解除します。

/etc/openvpn/server/server.conf
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

これらの行は、クライアントに、一覧表のIPアドレスで無料のOpenDNSリゾルバを使用するように指示するものです。他のDNSリゾルバがよければ、ハイライトされたIPの部分を置き換えます。

これにより、クライアントはDNS設定を再設定し、VPNトンネルをデフォルトのゲートウェイとして使用します。

(オプション)ポートとプロトコルの調整

デフォルトでは、OpenVPNサーバーはポート1194とUDPプロトコルを使用してクライアント接続を受け入れます。制限されたネットワーク環境にいるかもしれないクライアントのために別のポートを使用する必要がある場合、portオプションを変更できます。OpenVPNサーバーでWebコンテンツをホストしていない場合は、 ファイアウォールで通常許可されているポート443が一般的な選択肢です。

OpenVPNがポート443でlistenするように変更するには、server.confファイルを開き、次のような行を検索します。

/etc/openvpn/server/server.conf
port 1194

ファイルを編集してポートを443にします。

/etc/openvpn/server/server.conf
# Optional!
port 443

多くの場合、プロトコルもそのポートに限定されています。その場合、port行の下のproto行を検索し、プロトコルをUDPからTCPに変更します。

/etc/openvpn/server/server.conf
# Optional!
proto tcp

プロトコルをTCPに切り替えた場合、このディレクティブはUDPのみで使用されるため、explicit-exit-notifyディレクティブの値を1から0に変更する必要があります。これを行わずにTCPを使用すると、OpenVPNサービスを開始するときにエラーが発生します。

ファイルの最後のexplicit-exit-notify行を検索し、値を0に変更します。

/etc/openvpn/server/server.conf
# Optional!
explicit-exit-notify 0

別のポートとプロトコルを使用する必要がない場合は、これら2つの設定をデフォルトのままにしておくことをお勧めします。

(オプション)デフォルト以外の資格情報をポイントする

先ほど./easyrsa gen-req serverコマンドで別の名前を選択した場合は、server.conf設定ファイルのcertkey行を変更して、適切な.crtファイルと.keyファイルをポイントするようにします。デフォルト名serverを使用した場合、資格情報はすでに正しく設定されています。

/etc/openvpn/server/server.conf
cert server.crt
key server.key

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

これで、OpenVPNの一般的な設定を完了しました。次のステップでは、サーバーのネットワークオプションをカスタマイズします。

ステップ8 — OpenVPNサーバーネットワーク設定の調整

サーバーのネットワーク設定を部分的に調整して、OpenVPNがトラフィックをVPN経由で正しくルーティングできるようにする必要があります。その一つ目であるIP転送は、IPトラフィックの経路を決定する方法です。これは、サーバーが提供するVPN機能に必要不可欠です。

OpenVPNサーバーのデフォルトIP転送設定を調整するには、nanoまたは好みのエディタを使用して/etc/sysctl.confファイルを開きます。

  • sudo nano /etc/sysctl.conf

次に、ファイルの最下行に次の行を追加します。

/etc/sysctl.conf
net.ipv4.ip_forward = 1

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

ファイルを読み取り、現在のセッションの新しい値を読み込むには、次のように入力します。

  • sudo sysctl -p
Output
net.ipv4.ip_forward = 1

OpenVPNサーバーは、あるイーサネットデバイスから別のデバイスへ、受信したトラフィックを転送できるようになりました。この設定により、サーバーは、仮想VPNインタフェースで接続するクライアントから他の物理的イーサネットデバイスへトラフィックを向かわせることができるようになります。この設定により、すべてのWebトラフィックはクライアントからサーバーのIPアドレスを介してルーティングされ、クライアントのパブリックIPアドレスが効果的に隠されます。

次のステップでは、ファイアウォールールをいくつか設定して、OpenVPNサーバーへ/からトラフィックが適切に流れるようにします。

ステップ9 — ファイアウォールの設定

これまでのところ、OpenVPNをサーバーにインストールし、設定し、クライアントがVPNにアクセスするために必要な鍵と証明書を生成しました。ただし、OpenVPNには、クライアントから受信するWebトラフィックの送り先についての指示が与えられていません。いくつかのファイアウォールルールとルーティング設定を確立することにより、サーバーがクライアントトラフィックをどのように処理するかを規定できます。

このチュートリアルの冒頭の前提条件に従ったなら、すでにufwがインストールされ、サーバーで実行されていることでしょう。ファイアウォールを介してOpenVPNを許可するには、マスカレードを有効にする必要があります。マスカレードはクライアント接続を正しくルーティングするための動的NAT(network address translation)をオンザフライで提供する、iptables の概念です。 

ファイアウォール設定ファイルを開いてマスカレードルールを追加する前に、マシンのパブリックネットワークインターフェースを見つける必要があります。  これを行うには、次を入力します。

  • ip route list default

パブリックインターフェイスは、このコマンドの出力で表示される、「dev」という単語に続く文字列です。たとえば、この結果は、以下で強調表示されているeth0というインターフェースを示します。

Output
default via 159.65.160.1 dev eth0 proto static

デフォルトルートに関連付けられたインターフェースがある場合、/etc/ufw/before.rulesファイルを開いて関連する設定を追加します。

  • sudo nano /etc/ufw/before.rules

UFWルールは、通常、ufwコマンドを使用して追加されます。ただし、before.rulesファイルに記載されているルールは、現行のUFWルールがロードされる前に読み込まれ、配置されます。ファイルの上部に向かって、強調表示された行を下に追加します。 これにより、natテーブル内のPOSTROUTING チェーンのデフォルトポリシーが設定され、VPNからのトラフィックがマスカレードされます。下の -A POSTROUTING行の eth0を、上記のコマンドで確認したインターフェースと置換してください。

/etc/ufw/before.rules
#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#

# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

# Don't delete these required lines, otherwise there will be errors
*filter
. . .

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

デフォルトで転送パケットも許可するようにUFWに指示する必要があります。これを実行するには、/etc/default/ufwファイルを開きます。

  • sudo nano /etc/default/ufw

ファイル内で、DEFAULT_FORWARD_POLICYディレクティブを検索して、値をDROPからACCEPTに変更します。

/etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"

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

次に、ファイアウォール自体を設定して、OpenVPNへのトラフィックを許可します。/etc/openvpn/server.confファイルで、ポートとプロトコルを変更しなかった場合、ポート1194へのUDPトラフィックを開く必要があります。ポートやプロトコルを変更した場合は、ここで選択した値に置き換えてください。

前提条件のチュートリアルに従って追加するのを忘れた場合に備えて、SSHポートも追加します。

  • sudo ufw allow 1194/udp
  • sudo ufw allow OpenSSH

これらのルールを追加した後、UFWを無効化・再有効化して再起動し、変更したすべてのファイルから変更を読み込みます。

  • sudo ufw disable
  • sudo ufw enable

サーバーは、OpenVPNトラフィックを正しく処理するように設定されました。ファイアウォールルールが整い、サーバーでOpenVPNサービスを開始できるようになりました。

ステップ10 — OpenVPNの起動

OpenVPNはsystemdサービスとして起動するので、systemctl を使用して管理できます。 サーバー稼働中はいつでもVPNに接続できるように、サーバー起動時にOpenVPNも起動するように設定します。これを行うには、OpenVPNサーバーをsystemctlに追加して有効にします。

  • sudo systemctl -f enable openvpn-server@server.service

次に、OpenVPNサービスを開始します。

  • sudo systemctl start openvpn-server@server.service

次のコマンドを使用して、OpenVPNサービスがアクティブであることを再確認してください。出力に active(running)が表示されます。

  • sudo systemctl status openvpn-server@server.service
Output
● openvpn-server@server.service - OpenVPN service for server Loaded: loaded (/lib/systemd/system/openvpn-server@.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2020-04-29 15:39:59 UTC; 6s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Main PID: 16872 (openvpn) Status: "Initialization Sequence Completed" Tasks: 1 (limit: 1137) Memory: 1.0M CGroup: /system.slice/system-openvpn\x2dserver.slice/openvpn-server@server.service └─16872 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --c> . . . . . . Apr 29 15:39:59 ubuntu-20 openvpn[16872]: Initialization Sequence Completed

これで、OpenVPNのサーバー側の設定が完了しました。次に、クライアントマシンを設定し、OpenVPNサーバーに接続します。

ステップ11 — クライアント設定基盤の作成

OpenVPNクライアント用の設定ファイルの作成は、すべてのクライアントが独自の設定を持たなければならず、それぞれがサーバーの設定ファイルで概説されている設定と整合する必要があるため、やや複雑になります。このステップでは、1つのクライアントでのみ使用できる単一の設定ファイルを作成するのではなく、設定ファイルをその場で生成するために使用できるクライアント設定基盤を構築するプロセスの概要を説明します。最初に「ベース」設定ファイルを作成してから、必要に応じて一意のクライアント設定ファイル、証明書、および鍵を生成できるスクリプトを作成します。

先に作成した client-configsディレクトリ内にクライアント設定ファイルを保存する新しいディレクトリを作成することから始めます。

  • mkdir -p ~/client-configs/files

次に、サンプルのクライアント設定ファイルを client-configsディレクトリにコピーして、基本設定として使用します。

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

nanoまたは好みのテキストエディタでこの新しいファイルを開きます。

  • nano ~/client-configs/base.conf

内部で、remoteディレクティブを検索します。これにより、クライアントはOpenVPNサーバーアドレス(OpenVPNサーバーのパブリックIPアドレス)をポイントします。OpenVPNサーバーがlistenしているポートを変更することにした場合は、選択したポートに1194も変更する必要があります。

~/client-configs/base.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
. . .

プロトコルがサーバー設定で使用している値と一致していることを確認してください。

~/client-configs/base.conf
proto udp

次に、各行の先頭にある;を削除して、 userおよびgroupディレクティブのコメントを解除します。

~/client-configs/base.conf
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

cacertkeyを設定したディレクティブを検索します。ファイル自体に証明書と鍵をすぐに追加するので、これらのディレクティブをコメントアウトします。

~/client-configs/base.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

同様に、 ta.keyをクライアント設定ファイルに直接追加する(そしてサーバーはtls-cryptを使用するように設定してある)ため、tls-authディレクティブをコメントアウトします。

~/client-configs/base.conf
# If a tls-auth key is used on the server
# then every client must also have the key.
;tls-auth ta.key 1

/etc/openvpn/server/server.conf ファイルで設定した cipher およびauth設定をミラーリングします。

~/client-configs/base.conf
cipher AES-256-GCM
auth SHA256

次に、ファイルのどこかにkey-directionを追加します。 クライアントマシンでVPNが正しく機能するように、必ずこれを「1」に設定してください。

~/client-configs/base.conf
key-direction 1

最後に、LinuxベースのVPNクライアントがDNS解決に使用するさまざまなメソッドを処理するように、数行をコメントアウトします。   さらに、類似しながら別個の2行をコメントアウトします。      1つめは、DNSの管理にsystemd-resolvedを使用しないクライアント向けの行です。これらのクライアントは、resolvconfユーティリティを参照してLinuxクライアントのDNS情報を更新ます。

~/client-configs/base.conf
; script-security 2
; up /etc/openvpn/update-resolv-conf
; down /etc/openvpn/update-resolv-conf

ここでsystemd-resolvedを使用してDNS解決をするクライアントについてもう一行追加します。

~/client-configs/base.conf
; script-security 2
; up /etc/openvpn/update-systemd-resolved
; down /etc/openvpn/update-systemd-resolved
; down-pre
; dhcp-option DOMAIN-ROUTE .

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

後ほど、このチュートリアルのステップ13 - クライアント設定のインストールで、LinuxクライアントでのDNS解決方法とコメント解除するセクションを決定する方法を学びます。

次に、関連する証明書、鍵、暗号化ファイルを使用して基本設定をコンパイルし、生成された設定を~/client-configs/files ディレクトリに配置するスクリプトを作成します。~/client-configsディレクトリ内でmake_config.shという新しいファイルを開きます。

  • nano ~/client-configs/make_config.sh

内部に、次のコンテンツを追加します。

~/client-configs/make_config.sh
#!/bin/bash

# First argument: Client identifier

KEY_DIR=~/client-configs/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf

cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '</key>\n<tls-crypt>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-crypt>') \
    > ${OUTPUT_DIR}/${1}.ovpn

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

次に進む前に、次のように入力して、このファイルのパーミッションを実行可能にします。

  • chmod 700 ~/client-configs/make_config.sh

このスクリプトは、作成したbase.confファイルのコピーを作成し、クライアント用に作成したすべての証明書と鍵ファイルを収集し、それらの内容を抽出し、それらを基本設定ファイルのコピーに追加し、このすべてのコンテンツを新しいクライアント設定ファイルにエクスポートします。つまり、クライアントの設定、証明書、および鍵ファイルを個別に管理する必要はなく、必要な情報はすべて1か所に保存されます。この利点は、将来クライアントを追加する必要がある場合、このスクリプトを実行するだけで設定ファイルをすばやく作成し、すべての重要な情報がアクセスしやすい単一の場所に保存されるようにできることです。

新しいクライアントを追加するときはいつでも、このスクリプトを実行してその設定ファイルを生成する前に、新しいクライアント用の新しい鍵と証明書を生成する必要があることに注意してください。次のステップで、このスクリプトを使用した練習を行います。

ステップ12 — クライアント設定の生成

ガイドに従って進めた場合、ステップ6で、client1.crt という名前のクライアント証明書とclient1.keyという名前の鍵を作成しました。~/client-configs ディレクトリに移動して、前のステップの最後に作成したスクリプトを実行すると、これらの資格情報の設定ファイルを生成できます。

  • cd ~/client-configs
  • ./make_config.sh client1

これにより、~/client-configs/filesディレクトリにclient1.ovpnという名前のファイルが作成されます。

  • ls ~/client-configs/files
Output
client1.ovpn

このファイルをクライアントとして使用する予定のデバイスに転送する必要があります。それはローカルコンピューターかモバイルデバイスかもしれません。

この転送に使用される正確なアプリケーションケーションは、デバイスのオペレーティングシステムと個人の好みによって異なりますが、信頼できる安全な方法は、バックエンドでSFTP(SSHファイル転送プロトコル)またはSCP(セキュアコピー)を使用することです。これにより、クライアントのVPN認証ファイルが暗号化された接続を介して転送されます。

ローカルコンピュータ(macOSまたはLinux)から実行できる SFTPコマンドの例を次に示します。これにより、前のステップで作成したclient1.ovpnファイルがホームディレクトリにコピーされます。

  • sftp sammy@openvpn_server_ip:client-configs/files/client1.ovpn ~/

サーバーからローカルコンピュータにファイルを安全に転送するためのツールとチュートリアルをいくつか次に示します。

ステップ13 — クライアント設定のインストール

このセクションでは、Windows、macOS、Linux、iOS、およびAndroidにクライアントVPNプロファイルをインストールする方法について説明します。各説明はどれも互いに依存性がないため、お使いのデバイスに該当するものに直接お進みください。

OpenVPN接続名は、.ovpnファイルと同名になります。 このチュートリアルでは、接続名 client1.ovpnは、最初に生成したクライアントファイル名と一致します。                   

Windows

インストール

OpenVPNのダウンロードページからOpenVPNクライアントアプリケーションをダウンロードします。Windowsのバージョンに適したインストーラーバージョンを選択します。

:OpenVPNをインストールするには管理者権限が必要です。

OpenVPNのインストール後、.ovpnファイルを次の場所にコピーします。

C:\Program Files\OpenVPN\config

OpenVPNを起動すると、プロファイルを自動的に探し出し、使用可能になります。

管理アカウントであっても、使用するたびにOpenVPNを管理者として実行する必要があります。VPNを使用するたびに右クリックしてRun as administratorを選択することなくこれを行うには、管理者権限のアカウントからこれを事前設定する必要があります。同時に、標準ユーザーはOpenVPNを使用するために管理者のパスワードを入力する必要があります。一方、標準ユーザーは、クライアントのOpenVPNアプリケーションケーションに管理者権限がない限り、サーバーに適切に接続できないため、昇格した権限が必要です。

OpenVPNアプリケーションを常に管理者として実行するように設定するには、ショートカットアイコンを右クリックして、Properties に進みます。Compatibilityタブの下部にあるChange settings for all usersボタンをクリックします。新しいウィンドウで、Run this program as an administratorをオンにします。

接続

 OpenVPN GUIを起動するたびに、Windowsはプログラムがコンピューターに変更を加えることを許可するかどうかを尋ねます。Yesをクリックします。OpenVPNクライアントアプリケーションケーションを起動すると、アプレットがシステムトレイに配置されるだけなので、必要に応じてVPNを接続および切断できます。実際にはVPN接続を確立しません。

OpenVPNが起動したら、システムトレイアプレットに移動し、OpenVPNアプレットアイコンを右クリックして接続を開始します。これにより、コンテキストメニューが開きます。メニューの上部にあるclient1client1.ovpnプロファイル)を選択し、Connectを選択します。   

接続が確立されている間、ステータスウィンドウにログ出力が表示され、クライアントが接続されるとメッセージが表示されます。

同じ方法でVPNから切断します。システムトレイアプレットに移動し、OpenVPNアプレットアイコンを右クリックして、クライアントプロファイルを選択し、Disconnectをクリックします。

macOS

インストール

Tunnelblickは、macOS用の無料のオープンソースOpenVPNクライアントです。Tunnelblick Downloadsページから最新のディスクイメージをダウンロードできます。ダウンロードした.dmgファイルをダブルクリックし、プロンプトに従ってインストールします。

インストールプロセスの終盤に近付くと、Tunnelblickは、設定ファイルがあるかどうかを尋ねます。I have configuration filesと答え、Tunnelblickを終了させます。Finderウィンドウを開き、client1.ovpnをダブルクリックします。Tunnelblickはクライアントプロファイルをインストールします。管理者権限が必要です。

接続

Applications フォルダのTunnelblickアイコンをダブルクリックして、Tunnelblickを起動します。Tunnelblickが起動すると、画面右上のメニューバーにTunnelblickアイコンが表示されます。アイコンをクリックしてから、 Connect client1メニュー項目をクリックして、VPN接続を開始します。

Linux

インストール

Linuxを使用している場合、ディストリビューションに応じて使用できるさまざまなツールがあります。デスクトップ環境またはウィンドウマネージャーが、接続ユーティリティも備えている可能性があります。

OpenVPNソフトウェアを使用するのが、最も一般的な接続方法です。

UbuntuまたはDebianでは、次のように入力して、サーバーにインストールしたのと同じようにインストールできます。 

  • sudo apt update
  • sudo apt install openvpn

CentOSでは、EPELリポジトリを有効にしてから、次のように入力してインストールできます。

  • sudo dnf install epel-release
  • sudo dnf install openvpn

systemd-resolvedを使用したクライアントの設定

まず/etc/resolv.confファイルをチェックして、DNS解決を処理するのにsystemd-resolvedが使用されているかどうかを判断します。

  • cat /etc/resolv.conf
Output
# This file is managed by man:systemd-resolved(8). Do not edit. . . . nameserver 127.0.0.53 options edns0

systemd-resolvedを使用したDNS解決が設定されている場合、nameserverオプションの後のIPアドレスは127.0.0.53になります。systemd-resolvedがファイルを管理する方法を説明する出力のようなファイルにもコメントが含まれています。IPアドレスが127.0.0.53ではない場合、systemd-resolvedを使用していない可能性が高いため、update-resolv-confスクリプトのあるLinuxクライアントを設定する次のセクションに進みます。

これらのクライアントをサポートするために、まずopenvpn-systemd-resolvedパッケージをインストールします。このパッケージはsystemd-resolvedがDNS解決にVPNサーバーを使用するように強制するスクリプトです。

  • sudo apt install openvpn-systemd-resolved

パッケージをインストールしたら、クライアントがこれを使用して、すべてのDNSクエリがVPNインターフェースを介して送信されるように設定します。クライアントのVPNファイルを開きます。

  • nano client1.ovpn

先に追加した次の行のコメントを解除します。

client1.ovpn
script-security 2
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre
dhcp-option DOMAIN-ROUTE .

update-resolv-confを使用したクライアントの設定

DNSの管理にsystemd-resolvedが使用されていない場合、ディストリビューションに/etc/openvpn/update-resolv-confスクリプトがあるかどうかを確認します。

  • ls /etc/openvpn
Output
update-resolv-conf

クライアントにupdate-resolv-confファイルがある場合は、先に転送したOpenVPNクライアント設定ファイルを編集します。 

  • nano client1.ovpn

追加した3行のコメントを解除してDNS設定を調整します。

client1.ovpn
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

CentOSを使用している場合、ディストリビューションの利用可能なグループに一致するように、groupディレクティブをnogroupからnobodyに変更します。

client1.ovpn
group nobody

ファイルを保存して閉じます。

接続

これで、openvpnコマンドをクライアント設定ファイルにポイントするだけで、VPNに接続できます。

  • sudo openvpn --config client1.ovpn

これでVPNに接続します。

注:クライアントがsystemd-resolvedを使用してDNSを管理している場合、次のようにsystemd-resolve --statusコマンドを実行して、設定が正しく適用されていることを確認してください。

  • systemd-resolve --status tun0

次のような出力が表示されます。

Output
Link 22 (tun0) . . . DNS Servers: 208.67.222.222 208.67.220.220 DNS Domain: ~.

OpenVPNサーバーで設定したDNSサーバーのIPアドレスが、出力にあるDNSドメイン~.設定を伴って表示されれば、クライアントはVPNサーバーのDNSリゾルバを使用するように正しく設定されています。また、DNS leak test.comのようなサイトを使用して、DNSクエリがVPNを介して送信されていることが確認できます。

iOS

インストール

iTunes App Storeから、OpenVPN Connect(公式iOS OpenVPNクライアントアプリケーション)を検索してインストールします。iOSクライアント設定をデバイスに転送するには、デバイスをコンピュータに直接接続します。

iTunesで転送を完了するプロセスの概要をここに示します。コンピューターでiTunesを開き、iPhone > appsをクリックします。File Sharingセクションまで下にスクロールして、OpenVPNアプリケーションをクリックします。 右側の空のウィンドウ OpenVPN Documents は、ファイル共有に使用します。.ovpnファイルをOpenVPNドキュメントウィンドウにドラッグします。iPhoneにVPNプロファイルを読み込む準備ができているiTunes

iPhoneでOpenVPNアプリケーションを起動します。新しいプロファイルをインポートする準備ができたという通知を受け取ります。緑色のプラス記号をタップしてインポートします。

インポート可能な新しいプロファイルを表示するOpenVPN iOSアプリケーション接続

これで、OpenVPNを新しいプロファイルで使用する準備ができました。Connect ボタンを Onの位置にスライドして、接続を開始します。同じボタンをOffにスライドして切断します。

:VPNスイッチはSettingsで設定中、VPN接続に使用できません。接続を試みると、OpenVPNアプリケーションを使用して接続するよう通知を受け取ります。

VPNに接続したOpenVPN iOSアプリケーション

Android

インストール

Google Playストアを開きます。公式のAndroid OpenVPNクライアントアプリケーションであるAndroid OpenVPN Connectを検索してインストールします。

AndroidデバイスをUSBでコンピュータに接続し、ファイルをコピーすることで、.ovpnプロファイルを転送できます。または、SDカードリーダーをお持ちの場合は、デバイスのSDカードを取り外してプロファイルをコピーし、Androidデバイスにカードを挿入し直すことができます。

OpenVPNアプリケーションを起動し、FILEメニューをタップしてプロファイルをインポートします。

OpenVPN Androidアプリケーションプロファイルのインポートメニュー選択

次に、保存されたプロファイルの場所(スクリーンショットは/storage/emulated/0/openvpnを使用)に移動し、.ovpnファイルを選択します。IMPORTボタンをタップして、このプロファイルのインポートを終了します。

インポートするVPNプロファイルを選択中のOpenVPN Androidアプリケーション

接続プロファイルを追加したら、次のような画面が表示されます。

新しいプロファイルを追加したOpenVPNAndroidアプリケーション

接続するには、使用するプロファイルに近いトグルボタンをタップします。OpenVPNサーバーを通じてルーティングされている接続とトラフィックのステータスをリアルタイム表示します。VPNに接続したOpenVPN Androidアプリケーション

切断するには、左上部のトグルボタンをもう一度タップします。VPNから切断するかどうか確認を求められます。

ステップ14 — VPN接続テスト(オプション)

[note]注:ステップ7でOpenVPNファイルのserver.confを編集した際、すべてのトラフィックがVPN経由でルーティングされるように選択した場合のみ、このVPN接続テスト方式は有効です。<$>

すべてのインストールが完了したら、簡単なチェックですべてが正常に機能していることを確認します。VPN接続を有効化せずに、ブラウザーを開いてDNSLeakTestにアクセスします。    

このサイトは、インターネットサービスプロバイダーによって割り当てられたIPアドレスと、世界中に表示されるIPアドレスを返します。同じWebサイトからDNS設定を確認するには、Extended Testをクリックすると、使用しているDNSサーバーがわかります。

次に、OpenVPNクライアントをDropletのVPNに接続し、ブラウザーを更新します。完全に異なるIPアドレス(VPNサーバーのIPアドレス)が表示され、このように表示されます。繰り返しますが、DNSLeakTestExtended Test は、DNS設定をチェックして、VPNがプッシュしたDNSリゾルバを使用していることを確認します。

ステップ15 — クライアント証明書の取り消し

OpenVPNサーバーへのさらなるアクセスを防ぐために、クライアント証明書を失効させることが必要になる場合があります。

これを行うには、前提条件チュートリアルUbuntu 20.04への認証局のセットアップと設定方法証明書の取り消しセクション内の例を参照してください。

これらの指示に従いクライアント証明書を取り消したら、生成したcrl.pemファイルをOpenVPNサーバーの/etc/openvpn/serverディレクトリにコピーします。

  • sudo cp /tmp/crl.pem /etc/openvpn/server/

次に、OpenVPNサーバー設定ファイルを開きます。

  • sudo nano /etc/openvpn/server/server.conf

ファイルの下部に、 crl-verify オプションを追加します。これは、接続が試行されるたびに作成した証明書失効リストをチェックするようOpenVPNサーバーに指示します。 

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

ファイルを保存して閉じます。

最後に、OpenVPNを再起動して証明書失効を実装します。

  • sudo systemctl restart openvpn-server@server.service

クライアントは、古い資格情報を使用してサーバーに正常に接続できなくなりました。

クライアントをさらに取り消す手順は、次の通りです。

  1. ./easyrsa revoke client_nameコマンドで証明書を取り消します。
  2. 新しいCRLを生成します。
  3. 新しい crl.pemファイルをOpenVPNサーバーに転送し、それを /etc/openvpn/server/ ディレクトリにコピーして、古いリストを上書きします。
  4. OpenVPNサービスを再起動します。

このプロセスを使用して、サーバーに対して以前に発行した証明書を取り消すことができます。

まとめ

これで完全に稼働する仮想プライベートネットワークがOpenVPNサーバーで作動するようになりました。悪意ある者によるアクティビティの追跡を心配することなく、Webを閲覧したり、コンテンツをダウンロードしたりできます。 

OpenVPNインストールをさらにカスタマイズするには、VPNに自動的に接続するようにクライアントを設定したり、クライアント固有のルールとアクセスポリシーを設定するなど、実行できる手順がいくつかあります。その他のOpenVPNのカスタマイズについては、OpenVPNの公式ドキュメントを参照してください。

クライアントをさらに設定するには、追加するデバイスごとにステップ611〜13を参照してください。クライアントのアクセス権を取り消すには、ステップ15を参照してください。

Creative Commons License