開発者ドキュメント

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

このチュートリアルの以前のバージョンは、 JustinEllingwoodによって作成されました。

序章

ホテルやコーヒーショップのWiFiなどの信頼できないネットワークに接続しているときに、スマートフォンやラップトップからインターネットに安全かつ確実にアクセスしたいですか? 仮想プライベートネットワーク(VPN)を使用すると、信頼できないネットワークをプライベートネットワーク上にいるかのようにプライベートかつ安全にトラバースできます。 トラフィックはVPNサーバーから出て、宛先への移動を続けます。

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

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

注: DigitalOcean DropletにOpenVPNサーバーをセットアップする場合は、多くのホスティングプロバイダーと同様に、帯域幅の超過に対して課金されることに注意してください。 このため、サーバーが処理しているトラフィックの量に注意してください。

詳細については、このページを参照してください。

前提条件

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

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

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

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

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

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

  1. sudo apt update
  2. sudo apt install openvpn

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

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

CAおよびPKIインフラストラクチャの構築を開始するには、wgetを使用して、CAマシンとOpenVPNサーバーの両方のに最新バージョンのEasyRSAをダウンロードします。 最新バージョンを入手するには、公式のEasyRSA GitHubプロジェクトリリースページに移動し、.tgzで終わるファイルのダウンロードリンクをコピーして、次のコマンドに貼り付けます。

  1. wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz

次に、tarballを抽出します。

  1. cd ~
  2. tar xvf EasyRSA-unix-v3.0.6.tgz

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

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

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

CAマシンで、EasyRSAディレクトリに移動します。

  1. cd ~/EasyRSA-v3.0.6/

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

  1. cp vars.example vars

お好みのテキストエディタを使用して、この新しいファイルを開きます。

  1. 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      "me@example.net"
#set_var EASYRSA_REQ_OU         "My Organizational Unit"

. . .

これらの行のコメントを解除し、強調表示された値を好きなように更新しますが、空白のままにしないでください。

〜/ EasyRSA-v3.0.6 / vars
. . .

set_var EASYRSA_REQ_COUNTRY    "US"
set_var EASYRSA_REQ_PROVINCE   "NewYork"
set_var EASYRSA_REQ_CITY       "New York City"
set_var EASYRSA_REQ_ORG        "DigitalOcean"
set_var EASYRSA_REQ_EMAIL      "admin@example.com"
set_var EASYRSA_REQ_OU         "Community"

. . .

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

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

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

この後、build-caオプションを指定して、easyrsaスクリプトを再度呼び出します。 これにより、CAが構築され、SSL証明書のパブリック側とプライベート側を構成するca.crtca.keyの2つの重要なファイルが作成されます。

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

  1. ./easyrsa build-ca nopass

出力では、CAの一般名を確認するように求められます。

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

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

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

ステップ3—サーバー証明書、キー、および暗号化ファイルを作成する

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

OpenVPNサーバーのEasyRSAディレクトリに移動することから始めます。

  1. cd EasyRSA-v3.0.6/

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

  1. ./easyrsa init-pki

次に、easyrsaスクリプトを再度呼び出します。今回は、gen-reqオプションに続けて、マシンの一般名を指定します。 繰り返しになりますが、これは好きなものにすることができますが、説明的なものにすることが役立つ場合があります。 このチュートリアル全体を通して、OpenVPNサーバーの一般名は単に「サーバー」になります。 nopassオプションも必ず含めてください。 そうしないと、リクエストファイルがパスワードで保護され、後で権限の問題が発生する可能性があります。

:ここで「サーバー」以外の名前を選択した場合は、以下の手順の一部を調整する必要があります。 たとえば、生成されたファイルを/etc/openvpnディレクトリにコピーする場合は、正しい名前に置き換える必要があります。 また、後で/etc/openvpn/server.confファイルを変更して、正しい.crtおよび.keyファイルを指すようにする必要があります。

  1. ./easyrsa gen-req server nopass

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

  1. sudo cp ~/EasyRSA-v3.0.6/pki/private/server.key /etc/openvpn/

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

  1. scp ~/EasyRSA-v3.0.6/pki/reqs/server.req sammy@your_CA_ip:/tmp

次に、 CAマシンで、EasyRSAディレクトリに移動します。

  1. cd EasyRSA-v3.0.6/

easyrsaスクリプトを再度使用して、server.reqファイルをインポートし、共通名のファイルパスをたどります。

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

次に、easyrsaスクリプトをsign-reqオプションで実行し、続いてリクエストタイプと共通名を実行して、リクエストに署名します。 リクエストタイプはclientまたはserverのいずれかであるため、OpenVPNサーバーの証明書リクエストには、必ずserverリクエストタイプを使用してください。

  1. ./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: yes

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

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

  1. scp pki/issued/server.crt sammy@your_server_ip:/tmp

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

  1. scp pki/ca.crt sammy@your_server_ip:/tmp

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

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

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

  1. cd EasyRSA-v3.0.6/

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

  1. ./easyrsa gen-dh

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

  1. sudo openvpn --genkey --secret ta.key

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

  1. sudo cp ~/EasyRSA-v3.0.6/ta.key /etc/openvpn/
  2. sudo cp ~/EasyRSA-v3.0.6/pki/dh.pem /etc/openvpn/

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

ステップ4—クライアント証明書とキーペアの生成

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

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

クライアント証明書とキーファイルを保存するために、ホームディレクトリ内にディレクトリ構造を作成することから始めます。

  1. mkdir -p ~/client-configs/keys

クライアントの証明書/キーのペアと構成ファイルをこのディレクトリに保存するため、セキュリティ対策として、今すぐアクセス許可をロックダウンする必要があります。

  1. chmod -R 700 ~/client-configs

次に、EasyRSAディレクトリに戻り、[X53X]

モバイルバージョンを終了