このチュートリアルの以前のバージョンはhttps://www.digitalocean.com/community/users/jellingwood[Justin Ellingwood]によって作成されました

前書き

ホテルや喫茶店のWiFiなどの信頼できないネットワークに接続したときに、スマートフォンやラップトップからインターネットに安全かつ安全にアクセスしたいですか? https://en.wikipedia.org/wiki/Virtual_private_network [仮想プライベートネットワーク](VPN)を使用すると、信頼できないネットワークをプライベートネットワーク上にいるかのようにプライベートかつ安全にトラバースできます。 トラフィックはVPNサーバーから出て、宛先への旅を続けます。

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

https://openvpn.net [OpenVPN]は、幅広い構成に対応するフル機能のオープンソースのSecure Socket Layer(SSL)VPNソリューションです。 このチュートリアルでは、Debian 10サーバー上にOpenVPNサーバーをセットアップし、Windows、macOS、iOS、Androidからのアクセスを構成します。 このチュートリアルでは、これらのセットアップごとにインストールと構成の手順をできる限り単純にします。

前提条件

このチュートリアルを完了するには、OpenVPNサービスをホストするDebian 10サーバーにアクセスする必要があります。 このガイドを開始する前に、 `+ sudo +`権限を持つ非* root *ユーザーを設定する必要があります。 Debian 10初期サーバーセットアップガイドに従って、適切な権限を持つユーザーをセットアップできます。 リンクされたチュートリアルでは、*ファイアウォール*も設定されます。これは、このガイド全体で適切な場所にあると想定されています。

さらに、認証局(CA)として機能する別のマシンが必要になります。 OpenVPNサーバーまたはローカルマシンをCAとして使用することは技術的には可能ですが、VPNをいくつかのセキュリティ脆弱性にさらすため、これは推奨されません。 OpenVPNの公式ドキュメントに従って、証明書リクエストのインポートと署名専用のスタンドアロンマシンにCAを配置する必要があります。 このため、このガイドでは、CAが `+ sudo +`特権を持つ非* root *ユーザーと基本的なファイアウォールを持つ別のDebian 10サーバーにあることを想定しています。

これらのサーバーの構成中にパスワード認証を無効にすると、このガイドの後半でサーバー間でファイルを転送するときに問題が発生する可能性があることに注意してください。 この問題を解決するには、各サーバーでパスワード認証を再度有効にします。 あるいは、サーバーごとにSSHキーペアを生成し、OpenVPNサーバーの公開SSHキーをCAマシンの `+ authorized_keys`ファイルに追加することもできます。 いずれかの実行方法の手順については、https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-10 [Debian 10でSSHキーを設定する方法]を参照してください。これらのソリューションの。

これらの前提条件が整ったら、このチュートリアルのステップ1に進むことができます。

ステップ1-OpenVPNとEasy RSAのインストール

最初に、* VPNサーバーの*パッケージインデックスを更新し、OpenVPNをインストールします。 OpenVPNはDebianのデフォルトリポジトリで利用できるため、インストールに `+ apt +`を使用できます。

sudo apt update
sudo apt install openvpn

OpenVPNはTLS / SSL VPNです。 これは、サーバーとクライアント間のトラフィックを暗号化するために証明書を利用することを意味します。 信頼できる証明書を発行するには、独自の単純な認証局(CA)をセットアップします。 これを行うには、プロジェクトの公式GitHubリポジトリからCA公開キー基盤(PKI)を構築するために使用するEasyRSAの最新バージョンをダウンロードします。

前提条件で述べたように、スタンドアロンサーバー上にCAを構築します。 このアプローチの理由は、攻撃者がサーバーに侵入できた場合、CA秘密キーにアクセスし、それを使用して新しい証明書に署名し、VPNにアクセスできるようになるためです。 したがって、スタンドアロンマシンからCAを管理すると、権限のないユーザーがVPNにアクセスするのを防ぐのに役立ちます。 また、さらなる予防措置として、キーの署名に使用されていない場合はCAサーバーをオフにしておくことをお勧めします。

CAおよびPKIインフラストラクチャの構築を開始するには、 `+ wget `を使用して、* CAマシンとOpenVPNサーバーの両方*でEasyRSAの最新バージョンをダウンロードします。 最新バージョンを入手するには、https://github.com/OpenVPN/easy-rsa/releases [公式EasyRSA GitHubプロジェクトの* Releases *ページ]にアクセスし、「。tgz +」で終わるファイルのダウンロードリンクをコピーします。 `、それを次のコマンドに貼り付けます:

wget -P ~/

次に、tarballを抽出します。

cd ~
tar xvf EasyRSA-unix-v.tgz

サーバーとCAマシンに必要なすべてのソフトウェアを正常にインストールしました。 EasyRSAが使用する変数の設定と、CAディレクトリの設定に進み、そこからサーバーとクライアントがVPNにアクセスするために必要なキーと証明書を生成します。

ステップ2-EasyRSA変数の構成とCAの構築

EasyRSAには、CAの多くの変数を定義するために編集できる構成ファイルがインストールされています。

  • CARマシン*で、Easy RSAディレクトリに移動します。

cd ~/EasyRSA-v/

このディレクトリ内には、 `+ vars.example`という名前のファイルがあります。 このファイルのコピーを作成し、ファイル拡張子なしでコピーに「+ vars +」という名前を付けます。

cp vars.example vars

任意のテキストエディターを使用してこの新しいファイルを開きます。

nano vars

新しい証明書のフィールドのデフォルトを設定する設定を見つけます。 これは次のようになります。

〜/ EasyRSA-v3.0.6 / vars

. . .

#set_var EASYRSA_REQ_COUNTRY    "US"
#set_var EASYRSA_REQ_PROVINCE   "California"
#set_var EASYRSA_REQ_CITY       "San Francisco"
#set_var EASYRSA_REQ_ORG        "Copyleft Certificate Co"
#set_var EASYRSA_REQ_EMAIL      "[email protected]"
#set_var EASYRSA_REQ_OU         "My Organizational Unit"

. . .

これらの行のコメントを外し、強調表示された値を任意の値に更新しますが、空白のままにしないでください。

〜/ EasyRSA-v3.0.6 / vars

. . .

set_var EASYRSA_REQ_COUNTRY    ""
set_var EASYRSA_REQ_PROVINCE   ""
set_var EASYRSA_REQ_CITY       ""
set_var EASYRSA_REQ_ORG        ""
set_var EASYRSA_REQ_EMAIL      ""
set_var EASYRSA_REQ_OU         ""

. . .

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

Easy RSAディレクトリ内には、CAの構築と管理に関連するさまざまなタスクを実行するために呼び出される「+ easyrsa」というスクリプトがあります。 `+ init-pki +`オプションを指定してこのスクリプトを実行し、CAサーバーで公開鍵インフラストラクチャを開始します。

./easyrsa init-pki
Output. . .
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home//EasyRSA-v/pki

この後、再度 `+ build-ca `オプションを付けて ` easyrsa `スクリプトを呼び出します。 これにより、CAが構築され、SSL証明書の公開側と非公開側を構成する2つの重要なファイル- ca.crtと+ ca.keyが作成されます。

  • `+ ca.crt `はCAの公開証明書ファイルであり、OpenVPNのコンテキストでは、サーバーとクライアントは、同じ信頼のWebの一部であり、man-in-the- -ミドル攻撃。 このため、サーバーとすべてのクライアントには、 ` ca.crt +`ファイルのコピーが必要です。

  • `+ ca.key `は、CAマシンがサーバーとクライアントのキーと証明書に署名するために使用する秘密キーです。 攻撃者がCAにアクセスし、その結果、 ` ca.key `ファイルにアクセスすると、証明書リクエストに署名してVPNにアクセスできるようになり、そのセキュリティが妨げられます。 これが、 ` ca.key +`ファイルがCAマシン上にのみ存在する必要がある理由であり、理想的には、追加のセキュリティ対策として証明書要求に署名しない場合はCAマシンをオフラインに保つ必要があります。

CAとやり取りするたびにパスワードの入力を求められたくない場合は、次のように、 `+ nopass `オプションを指定して ` build-ca +`コマンドを実行できます。

./easyrsa build-ca nopass

出力では、CAの_common name_を確認するよう求められます。

Output. . .
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

共通名は、認証局のコンテキストでこのマシンを参照するために使用される名前です。 CAの一般名には任意の文字列を入力できますが、簡単にするために、「+ ENTER +」を押してデフォルト名を受け入れます。

これで、CAが配置され、証明書要求への署名を開始する準備が整いました。

手順3-サーバー証明書、キー、および暗号化ファイルの作成

CAの準備ができたので、サーバーから秘密キーと証明書の要求を生成し、署名するために要求をCAに転送して、必要な証明書を作成できます。 暗号化プロセス中に使用される追加のファイルを自由に作成することもできます。

  • OpenVPNサーバー*のEasyRSAディレクトリに移動して開始します。

cd EasyRSA-v/

そこから、 `+ init-pki `オプションを指定して ` easyrsa +`スクリプトを実行します。 このコマンドは既にCAマシンで実行していますが、サーバーとCAには個別のPKIディレクトリがあるため、ここで実行する必要があります。

./easyrsa init-pki

次に、今度は「+ gen-req 」オプションの後にマシンの共通名を指定して、「 easyrsa 」スクリプトを再度呼び出します。 繰り返しになりますが、これはあなたが好きなものであれば何でもかまいませんが、説明的なものにするのに役立ちます。 このチュートリアルでは、OpenVPNサーバーの一般名は単に「サーバー」になります。 必ず ` nopass +`オプションも含めてください。 そうしないと、要求ファイルがパスワードで保護され、後でアクセス許可の問題が発生する可能性があります。

./easyrsa gen-req server nopass

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

sudo cp ~/EasyRSA-v/pki/private/server.key /etc/openvpn/

安全な方法(以下の例ではSCPなど)を使用して、 `+ server.req +`ファイルをCAマシンに転送します。

scp ~/EasyRSA-v/pki/reqs/server.req @:/tmp

次に、*ご使用のCARマシン*で、Easy RSAディレクトリに移動します。

cd EasyRSA-v/

もう一度 `+ easyrsa `スクリプトを使用して、ファイル名とその共通名に従って ` server.req +`ファイルをインポートします。

./easyrsa import-req /tmp/server.req server

次に、 `+ sign-req `オプションを指定して ` easyrsa `スクリプトを実行し、その後に_request type_と共通名を続けて、リクエストに署名します。 リクエストタイプは「 client」または「+ server」のいずれかです。OpenVPNサーバーの証明書リクエストの場合は、「+ server +」リクエストタイプを使用してください。

./easyrsa sign-req server server

出力では、リクエストが信頼できるソースからのものであることを確認するよう求められます。 「+ 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                = server


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

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

次に、安全な方法を使用して、署名された証明書をVPNサーバーに転送します。

scp pki/issued/server.crt @:/tmp

CAマシンからログアウトする前に、 `+ ca.crt +`ファイルもサーバーに転送します。

scp pki/ca.crt @:/tmp

次に、OpenVPNサーバーに再度ログインし、 `+ server.crt `および ` ca.crt `ファイルを ` / etc / openvpn / +`ディレクトリにコピーします。

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

次に、Easy RSAディレクトリに移動します。

cd EasyRSA-v/

そこから、次のように入力して、キー交換中に使用する強力なDiffie-Hellmanキーを作成します。

./easyrsa gen-dh

これには数分かかる場合があります。 それが完了したら、HMAC署名を生成して、サーバーのTLS整合性検証機能を強化します。

sudo openvpn --genkey --secret ta.key

コマンドが終了したら、2つの新しいファイルを `+ / etc / openvpn / +`ディレクトリにコピーします:

sudo cp ~/EasyRSA-v/ta.key /etc/openvpn/
sudo cp ~/EasyRSA-v/pki/dh.pem /etc/openvpn/

これで、サーバーに必要なすべての証明書とキーファイルが生成されました。 クライアントマシンがOpenVPNサーバーへのアクセスに使用する、対応する証明書とキーを作成する準備が整いました。

手順4-クライアント証明書とキーペアの生成

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

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

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

mkdir -p ~/client-configs/keys

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

chmod -R 700 ~/client-configs

次に、EasyRSAディレクトリに戻って、クライアントの一般名とともに、 `+ gen-req `および ` nopass `オプションを指定して ` easyrsa +`スクリプトを実行します。

cd ~/EasyRSA-v/
./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 @:/tmp

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

ssh @
cd EasyRSA-v/
./easyrsa import-req /tmp/client1.req client1

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

./easyrsa sign-req client client1

プロンプトで、「+ yes +」と入力して、証明書リクエストに署名するつもりであり、信頼できるソースからのものであることを確認します。

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

繰り返しますが、CAキーを暗号化した場合、ここでパスワードの入力を求められます。

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

scp pki/issued/client1.crt @:/tmp

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

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

次に、 `+ ca.crt `および ` ta.key `ファイルを ` / client-configs / keys / +`ディレクトリにもコピーします。

sudo cp ~/EasyRSA-v/ta.key ~/client-configs/keys/
sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/

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

ステップ5-OpenVPNサービスの構成

クライアントとサーバーの両方の証明書とキーが生成されたので、これらの資格情報を使用するようにOpenVPNサービスの構成を開始できます。

サンプルOpenVPN構成ファイルを構成ディレクトリにコピーすることから始めて、セットアップの基礎として使用するためにそれを抽出します。

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

任意のテキストエディターでサーバー構成ファイルを開きます。

sudo nano /etc/openvpn/server.conf

`+ tls-auth +`ディレクティブを探してHMACセクションを見つけます。 この行はすでにコメント解除されているはずですが、そうでない場合は「*; *」を削除してコメント解除します。

/etc/openvpn/server.conf

tls-auth ta.key 0 # This file is secret

次に、コメントアウトされた「+ cipher 」行を探して、暗号化暗号に関するセクションを見つけます。 ` AES-256-CBC`暗号は適切なレベルの暗号化を提供し、十分にサポートされています。 繰り返しますが、この行はすでにコメント解除されているはずですが、そうでない場合は、その前の「*; *」を削除するだけです。

/etc/openvpn/server.conf

cipher AES-256-CBC

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

/etc/openvpn/server.conf

次に、Diffie-Hellmanパラメータを定義する `+ dh `ディレクティブを含む行を見つけます。 EasyRSAに最近加えられたいくつかの変更のため、Diffie-Hellmanキーのファイル名は、サンプルのサーバー構成ファイルにリストされているものと異なる場合があります。 必要に応じて、「 2048+」を削除して、ここにリストされているファイル名を変更し、前の手順で生成したキーと一致するようにします。

/etc/openvpn/server.conf

dh dh.pem

最後に、「+ user」と「+ group」の設定を見つけ、それぞれの先頭にある「*; *」を削除して、これらの行のコメントを解除します。

/etc/openvpn/server.conf

user nobody
group nogroup

OpenVPNが機能するには、この時点までにサンプルの `+ server.conf +`ファイルに加えた変更が必要です。 以下に概説する変更はオプションですが、多くの一般的なユースケースにも必要です。

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

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

`+ server.conf `ファイルには、この機能を有効にするために変更する必要があるいくつかのディレクティブがあります。 ` redirect-gateway `セクションを探し、 ` redirect-gateway +`行の先頭からセミコロン「*; *」を削除してコメント解除します。

/etc/openvpn/server.conf

push "redirect-gateway def1 bypass-dhcp"

このすぐ下に、「+ dhcp-option +」セクションがあります。 再び、両方の行の前にある「*; *」を削除して、コメントを外します。

/etc/openvpn/server.conf

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

これは、クライアントがデフォルトゲートウェイとしてVPNトンネルを使用するようにDNS設定を再構成する際に役立ちます。

(オプション)ポートとプロトコルを調整します

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

/etc/openvpn/server.conf

# Optional!
port

多くの場合、プロトコルもそのポートに制限されます。 その場合、「+ proto +」をUDPからTCPに変更します。

/etc/openvpn/server.conf

# Optional!
proto

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

/etc/openvpn/server.conf

# Optional!
explicit-exit-notify

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

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

前の +。/ build-key-server +`コマンドで別の名前を選択した場合、適切な `+ .crt +`および `+を指すように表示される + cert + および + key + `行を変更します。 key + `ファイル。 デフォルト名の「サーバー」を使用した場合、これはすでに正しく設定されています。

/etc/openvpn/server.conf

cert .crt
key .key

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

特定のユースケースでサーバーのOpenVPN構成を変更する必要がある場合は、サーバーのネットワークにいくつかの変更を加えることができます。

ステップ6-サーバーのネットワーク構成の調整

OpenVPNがVPNを介してトラフィックを正しくルーティングできるように、サーバーのネットワーク構成にはいくつかの側面を調整する必要があります。 これらの最初のものは_IPフォワーディング_です。これは、IPトラフィックのルーティング先を決定する方法です。 これは、サーバーが提供するVPN機能に不可欠です。

`+ / etc / sysctl.conf +`ファイルを変更して、サーバーのデフォルトのIP転送設定を調整します。

sudo nano /etc/sysctl.conf

内部で、 `+ net.ipv4.ip_forward`を設定するコメント行を探します。 この設定のコメントを解除するには、行の先頭から「」文字を削除します。

/etc/sysctl.conf

net.ipv4.ip_forward=1

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

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

sudo sysctl -p
Outputnet.ipv4.ip_forward = 1

前提条件にリストされているhttps://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-10[Debian 10初期サーバーセットアップガイド]に従っている場合、UFWファイアウォールを設定する必要があります。 。 ファイアウォールを使用して不要なトラフィックをブロックするかどうか(ほとんどの場合、これを行う必要があります)にかかわらず、このガイドでは、サーバーに着信するトラフィックの一部を操作するファイアウォールが必要です。 マスカレードを有効にするには、ファイアウォールルールの一部を変更する必要があります。マスカレードは、オンザフライ動的ネットワークアドレス変換(NAT)を提供してクライアント接続を正しくルーティングするiptablesの概念です。

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

ip route | grep default

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

Outputdefault via 203.0.113.1 dev  proto static

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

sudo nano /etc/ufw/before.rules

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

/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
#





eth0
eth0



# 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=""

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

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

また、前提条件のチュートリアルを完了するときにSSHポートを追加しなかった場合は、ここにも追加します。

sudo ufw allow /
sudo ufw allow OpenSSH

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

sudo ufw disable
sudo ufw enable

サーバーは、OpenVPNトラフィックを正しく処理するように構成されました。

ステップ7-OpenVPNサービスの開始と有効化

サーバーでOpenVPNサービスを開始する準備ができました。 これは、systemdユーティリティ「+ systemctl +」を使用して行われます。

systemdユニットファイル名の後にインスタンス変数として構成ファイル名を指定して、OpenVPNサーバーを起動します。 サーバーの設定ファイルは「+ / etc / openvpn / .conf 」と呼ばれるため、ユニットファイルの呼び出し時に「+」をユニットファイルの最後に追加します。

sudo systemctl start [email protected]

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

sudo systemctl status [email protected]

すべてがうまくいった場合、出力は次のようになります。

Output● [email protected] - OpenVPN connection to server
  Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)
  Active:  since Wed 2019-07-17 03:39:24 UTC; 29s ago
    Docs: man:openvpn(8)
          https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
          https://community.openvpn.net/openvpn/wiki/HOWTO
Main PID: 3371 (openvpn)
  Status: "Initialization Sequence Completed"
   Tasks: 1 (limit: 3587)
  Memory: 1.2M
  CGroup: /system.slice/system-openvpn.slice/[email protected]
          └─3371 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --config /etc/openvpn/server.conf --writepid /run/openvpn/

次のように入力して、OpenVPNの `+ tun0 +`インターフェースが使用可能であることを確認することもできます。

ip addr show tun0

これにより、構成済みのインターフェースが出力されます。

Output3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 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::dd60:3a78:b0ca:1659/64 scope link stable-privacy
      valid_lft forever preferred_lft forever

サービスを開始した後、ブート時に自動的に開始されるように有効にします。

sudo systemctl enable [email protected]

これで、OpenVPNサービスが稼働します。 ただし、使用を開始する前に、まずクライアントマシンの構成ファイルを作成する必要があります。 このチュートリアルでは、クライアント用の証明書/キーペアを作成する方法を既に説明しました。次のステップでは、クライアント構成ファイルを簡単に生成するインフラストラクチャを作成する方法を示します。

手順8-クライアント構成インフラストラクチャの作成

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

内部で、 `+ remote `ディレクティブを見つけます。 これにより、クライアントはOpenVPNサーバーアドレス(OpenVPNサーバーのパブリックIPアドレス)をポイントします。 OpenVPNサーバーがリッスンしているポートを変更することにした場合は、選択したポートに「+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
. . .

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

〜/ client-configs / base.conf

proto

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

〜/ client-configs / base.conf

# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

+ a ++ cert、および` + key`を設定するディレクティブを見つけます。 ファイル自体に証明書とキーをすぐに追加するため、これらのディレクティブをコメント化します。

〜/ 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

同様に、 + to.key`をクライアント設定ファイルに直接追加するため、 + 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.conf `ファイルで設定した ` cipher `および ` auth +`設定をミラーリングします。

〜/ client-configs / base.conf

次に、ファイルのどこかに `+ key-direction +`ディレクティブを追加します。 クライアントマシンでVPNが正しく機能するには、これを「1」に設定する必要があります。

〜/ client-configs / base.conf

最後に、いくつかの*コメントアウト*行を追加します。 これらのディレクティブはすべてのクライアント設定ファイルに含めることができますが、 `+ / etc / openvpn / update-resolv-conf `ファイルとともに出荷されるLinuxクライアントに対してのみ有効にする必要があります。 このスクリプトは、 ` resolvconf +`ユーティリティを使用してLinuxクライアントのDNS情報を更新します。

〜/ client-configs / base.conf

クライアントがLinuxを実行しており、 `+ / etc / openvpn / update-resolv-conf +`ファイルがある場合は、生成後にクライアントの構成ファイルからこれらの行のコメントを外します。

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

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

nano ~/client-configs/make_config.sh

内部に、次のコンテンツを追加します。「++」をサーバーの非* root *ユーザーアカウントのものに変更してください。

〜/ client-configs / make_config.sh

#!/bin/bash

# First argument: Client identifier

KEY_DIR=/home//client-configs/keys
OUTPUT_DIR=/home//client-configs/files
BASE_CONFIG=/home//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-auth>') \
   ${KEY_DIR}/ta.key \
   <(echo -e '</tls-auth>') \
   > ${OUTPUT_DIR}/${1}.ovpn

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

次に進む前に、次のように入力して、このファイルを実行可能としてマークしてください。

chmod 700 ~/client-configs/make_config.sh

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

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

ステップ9-クライアント構成の生成

ガイドに従って進めた場合、ステップ4で、それぞれ「+ client1.crt 」および「 client1.key 」という名前のクライアント証明書とキーを作成しました。 `〜/ client-configs +`ディレクトリに移動し、前のステップの最後に作成したスクリプトを実行することで、これらの認証情報の設定ファイルを生成できます:

cd ~/client-configs
sudo ./make_config.sh

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

ls ~/client-configs/files
Outputclient1.ovpn

このファイルを、クライアントとして使用する予定のデバイスに転送する必要があります。 たとえば、これはローカルコンピューターまたはモバイルデバイスである可能性があります。

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

ローカルコンピューター(macOSまたはLinux)から実行できる `+`サンプルを使用したSFTPコマンドの例を次に示します。 ホームディレクトリに ` .ovpn +`ファイルを配置します:

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

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

ステップ10-クライアント構成のインストール

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

OpenVPN接続は、 `+ .ovpn `ファイルを呼び出したものと同じ名前になります。 このチュートリアルに関して言えば、これは、接続の名前が ` client1.ovpn +`であり、生成した最初のクライアントファイルと一致することを意味します。

Windows

インストール中

Windows用のOpenVPNクライアントアプリケーションをhttps://openvpn.net/index.php/open-source/downloads.html[OpenVPNのダウンロードページ]からダウンロードします。 Windowsのバージョンに適したインストーラーバージョンを選択します。

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

C:\Program Files\OpenVPN\config

OpenVPNを起動すると、プロファイルが自動的に表示され、使用可能になります。

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

OpenVPNアプリケーションを常に管理者として実行するように設定するには、ショートカットアイコンを右クリックして、[プロパティ]に移動します。 [互換性]タブの下部にある[すべてのユーザーの設定を変更]ボタンをクリックします。 新しいウィンドウで、[このプログラムを管理者として実行する]をオンにします。

接続中

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

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

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

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

マックOS

インストール中

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

インストールプロセスの最後に向かって、Tunnelblickは構成ファイルがあるかどうかを尋ねます。 回答*構成ファイル*があり、Tunnelblickを終了させます。 Finderウィンドウを開き、「+ client1.ovpn +」をダブルクリックします。 Tunnelblickはクライアントプロファイルをインストールします。 管理者権限が必要です。

接続中

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

Linux

インストール中

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

ただし、最も一般的な接続方法は、OpenVPNソフトウェアを使用することです。

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

sudo apt update
sudo apt install openvpn

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

sudo yum install epel-release
sudo yum install openvpn
設定中

ディストリビューションに `+ / etc / openvpn / update-resolv-conf +`スクリプトが含まれているかどうかを確認します。

ls /etc/openvpn
Outputupdate-resolv-conf

次に、転送したOpenVPNクライアント構成ファイルを編集します。

nano .ovpn

`+ update-resolv-conf`ファイルが見つかった場合は、追加した3行のコメントを解除してDNS設定を調整します。

client1.ovpn

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

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

client1.ovpn

group

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

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

sudo openvpn --config .ovpn

これにより、VPNに接続されます。

iOS

インストール中

iTunes App Storeから、https://itunes.apple.com/us/app/id590379981 [OpenVPN Connect](公式iOS OpenVPNクライアントアプリケーション)を検索してインストールします。 iOSクライアント構成をデバイスに転送するには、デバイスをコンピューターに直接接続します。

iTunesで転送を完了するプロセスの概要をここに示します。 コンピューターでiTunesを開き、* iPhone > * apps *をクリックします。 [ファイル共有]セクションまで下にスクロールして、OpenVPNアプリをクリックします。 右側の空のウィンドウ OpenVPN Documents *は、ファイルを共有するためのものです。 `+ .ovpn +`ファイルをOpenVPNドキュメントウィンドウにドラッグします。

image:https://assets.digitalocean.com/articles/openvpn_ubunutu/1.png [iPhoneにロードする準備ができているVPNプロファイルを示すiTunes]

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

image:https://assets.digitalocean.com/articles/openvpn_ubunutu/2.png [インポート可能な新しいプロファイルを表示するOpenVPN iOSアプリ]

接続中

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

image:https://assets.digitalocean.com/articles/openvpn_ubunutu/3.png [VPNに接続されたOpenVPN iOSアプリ]

アンドロイド

インストール中

Google Playストアを開きます。 公式のAndroid OpenVPNクライアントアプリケーションであるhttps://play.google.com/store/apps/details?id=net.openvpn.openvpn[Android OpenVPN Connect]を検索してインストールします。

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

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

image:https://assets.digitalocean.com/articles/openvpn_ubunutu/4.png [OpenVPN Androidアプリプロファイルインポートメニュー選択]

次に、保存されたプロファイルの場所に移動し(スクリーンショットでは `+ / sdcard / Download / +`を使用)、ファイルを選択します。 アプリは、プロファイルがインポートされたことをメモします。

image:https://assets.digitalocean.com/articles/openvpn_ubunutu/5.png [インポートするVPNプロファイルを選択するOpenVPN Androidアプリ]

接続中

接続するには、[接続]ボタンをタップするだけです。 OpenVPNアプリケーションを信頼するかどうかを尋ねられます。 * OK *を選択して接続を開始します。 VPNから切断するには、OpenVPNアプリに戻り、*切断*を選択します。

image:https://assets.digitalocean.com/articles/openvpn_ubunutu/6.png [VPNに接続できるOpenVPN Androidアプリ]

ステップ11-VPN接続のテスト(オプション)

すべてがインストールされたら、簡単なチェックですべてが正常に機能していることを確認します。 VPN接続を有効にせずに、ブラウザーを開いてhttps://www.dnsleaktest.com [DNSLeakTest]にアクセスします。

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

次に、OpenVPNクライアントをDropletのVPNに接続し、ブラウザーを更新します。 これで、完全に異なるIPアドレス(VPNサーバーのIPアドレス)が表示されるはずです。これが、世界に表示される方法です。 繰り返しますが、https://www.dnsleaktest.com [DNSLeakTest’s] * Extended Test *はDNS設定を確認し、VPNによってプッシュされたDNSリゾルバーを使用していることを確認します。

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

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

これを行うには、CAマシンのEasy RSAディレクトリに移動します。

cd EasyRSA-v/

次に、 `+ revoke `オプションを指定して ` easyrsa +`スクリプトを実行し、その後に取り消したいクライアント名を指定します:

./easyrsa revoke

これにより、 `+ yes +`を入力して失効の確認を求められます。

OutputPlease confirm you wish to revoke the certificate with the following subject:

subject=
   commonName                = client2


Type the word 'yes' to continue, or any other input to abort.
 Continue with revocation:

アクションを確認した後、CAはクライアントの証明書を完全に失効させます。 ただし、OpenVPNサーバーには現在、クライアントの証明書が失効しているかどうかを確認する方法がなく、クライアントは引き続きVPNにアクセスできます。 これを修正するには、CAマシンで証明書失効リスト(CRL)を作成します。

./easyrsa gen-crl

これにより、「+ crl.pem +」というファイルが生成されます。 このファイルをOpenVPNサーバーに安全に転送します。

scp ~/EasyRSA-v/pki/crl.pem @:/tmp

OpenVPNサーバーで、このファイルを `+ / etc / openvpn / +`ディレクトリにコピーします。

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

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

sudo nano /etc/openvpn/server.conf

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

/etc/openvpn/server.conf

crl-verify crl.pem

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

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

sudo systemctl restart [email protected]

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

追加のクライアントを取り消すには、次のプロセスに従います。

  1. `+。/ easyrsa revoke +`コマンドで証明書を取り消します

  2. 新しいCRLを生成します

  3. 新しい `+ crl.pem `ファイルをOpenVPNサーバーに転送し、それを ` / etc / openvpn +`ディレクトリにコピーして、古いリストを上書きします。

  4. OpenVPNサービスを再起動します。

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

結論

これで、あなたの身元、場所、およびトラフィックをスヌーパーや検閲者から保護しながら、インターネットを安全に横断しています。

より多くのクライアントを構成するには、追加デバイスごとに手順* 4 および 9-11 を実行するだけです。 クライアントへのアクセスを取り消すには、手順 12 *に従ってください。