序章

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

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

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

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

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

前提条件

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

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

これらのサーバーの構成中にパスワード認証を無効にすると、このガイドの後半でサーバー間でファイルを転送するときに問題が発生する可能性があることに注意してください。 この問題を解決するには、各サーバーでパスワード認証を再度有効にすることができます。 または、サーバーごとにSSHキーペアを生成してから、OpenVPNサーバーの公開SSHキーをCAマシンのに追加することもできます。 authorized_keys ファイルおよびその逆。 これらのソリューションのいずれかを実行する方法については、 Debian9で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 EasyRSAの最新バージョンをCAマシンとOpenVPNサーバーの両方にダウンロードします。 最新バージョンを入手するには、公式EasyRSA GitHubプロジェクトリリースページに移動し、末尾がファイルのダウンロードリンクをコピーします。 .tgz、次にそれを次のコマンドに貼り付けます。

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

次に、tarballを抽出します。

  1. cd ~
  2. tar xvf EasyRSA-3.0.4.tgz

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

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

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

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

  1. cd ~/EasyRSA-3.0.4/

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

  1. cp vars.example vars

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

  1. nano vars

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

〜/ EasyRSA-3.0.4 / 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-3.0.4 / 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      "[email protected]"
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-3.0.4/pki

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

  • ca.crt はCAの公開証明書ファイルであり、OpenVPNのコンテキストでは、サーバーとクライアントは、中間者攻撃を実行している人ではなく、同じ信頼のWebの一部であることを相互に通知するために使用します。 このため、サーバーとすべてのクライアントには、 ca.crt ファイル。
  • ca.key CAマシンがサーバーとクライアントのキーと証明書に署名するために使用する秘密キーです。 攻撃者があなたのCAにアクセスし、次にあなたのCAにアクセスした場合 ca.key ファイルを作成すると、証明書要求に署名してVPNにアクセスできるようになり、VPNのセキュリティが妨げられます。 これがあなたの ca.key ファイルはのみがCAマシン上にある必要があり、理想的には、追加のセキュリティ対策として証明書要求に署名しない場合は、CAマシンをオフラインに保つ必要があります。

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

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

そこから、 easyrsa スクリプトと init-pki オプション。 このコマンドはすでに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-3.0.4/pki/private/server.key /etc/openvpn/

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

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

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

  1. cd EasyRSA-3.0.4/

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

  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 3650 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.crtca.crt あなたのファイルに /etc/openvpn/ ディレクトリ:

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

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

  1. cd EasyRSA-3.0.4/

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

  1. ./easyrsa gen-dh

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

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

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

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

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

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

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

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

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

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

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

  1. chmod -R 700 ~/client-configs

次に、EasyRSAディレクトリに戻り、 easyrsa スクリプトと gen-reqnopass オプション、およびクライアントの一般名:

  1. cd ~/EasyRSA-3.0.4/
  2. ./easyrsa gen-req client1 nopass

プレス ENTER 一般名を確認します。 次に、 client1.key ファイルに /client-configs/keys/ 以前に作成したディレクトリ:

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

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

  1. scp pki/reqs/client1.req sammy@your_CA_ip:/tmp

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

  1. ssh sammy@your_CA_IP
  2. cd EasyRSA-3.0.4/
  3. ./easyrsa import-req /tmp/client1.req client1

次に、前の手順でサーバーに対して行ったように、要求に署名します。 ただし、今回は必ず指定してください client リクエストの種類:

  1. ./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. このファイルをサーバーに転送します。

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

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

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

次に、 ca.crtta.key にファイル /client-configs/keys/ ディレクトリも:

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

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

ステップ5—OpenVPNサービスの設定

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

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

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

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

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

を探してHMACセクションを見つけます tls-auth 指令。 この行はすでにコメント解除されているはずですが、そうでない場合は、「;」を削除してコメントを解除してください。

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

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

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

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

/etc/openvpn/server.conf
auth SHA256

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

/etc/openvpn/server.conf
dh dh.pem

最後に、 usergroup 設定を行い、それぞれの先頭にある「; 」を削除して、次の行のコメントを解除します。

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

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

(オプション)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"

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

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

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

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

多くの場合、プロトコルはそのポートにも制限されています。 もしそうなら、変更します proto UDPからTCPへ:

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

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

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

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

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

中に別の名前を選択した場合 ./build-key-server 以前のコマンド、変更 certkey 適切なものを指すために表示される線 .crt.key ファイル。 デフォルト名の「server」を使用した場合、これはすでに正しく設定されています。

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

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

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

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

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

サーバーのデフォルトのIP転送設定を変更して、 /etc/sysctl.conf ファイル:

  1. sudo nano /etc/sysctl.conf

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

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

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

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

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

前提条件に記載されているDebian9初期サーバーセットアップガイドに従っている場合は、UFWファイアウォールを設置する必要があります。 ファイアウォールを使用して不要なトラフィックをブロックするかどうかに関係なく(ほとんどの場合、これを実行する必要があります)、このガイドでは、サーバーに着信するトラフィックの一部を操作するためのファイアウォールが必要です。 一部のファイアウォールルールは、マスカレードを有効にするように変更する必要があります。これは、クライアント接続を正しくルーティングするためのオンザフライの動的ネットワークアドレス変換(NAT)を提供するiptablesの概念です。

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

  1. ip route | grep default

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

Output
default via 203.0.113.1 dev eth0 onlink

デフォルトルートに関連付けられたインターフェースがある場合は、 /etc/ufw/before.rules 関連する構成を追加するファイル:

  1. sudo nano /etc/ufw/before.rules

UFWルールは通常、 ufw 指図。 にリストされているルール before.rules ただし、ファイルは、従来のUFWルールがロードされる前に読み取られ、配置されます。 ファイルの先頭に向かって、下に強調表示された行を追加します。 これにより、のデフォルトポリシーが設定されます POSTROUTING チェーン nat VPNからのトラフィックをテーブルに入れてマスカレードします。 交換することを忘れないでください eth0 の中に -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
#

# 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 ファイル:

  1. sudo nano /etc/default/ufw

内部で、 DEFAULT_FORWARD_POLICY ディレクティブと値をから変更します DROPACCEPT:

/ etc / default / ufw
DEFAULT_FORWARD_POLICY="ACCEPT"

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

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

前提条件のチュートリアルに従うときにSSHポートを追加するのを忘れた場合は、ここにも追加してください。

  1. sudo ufw allow 1194/udp
  2. sudo ufw allow OpenSSH

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

  1. sudo ufw disable
  2. sudo ufw enable

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

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

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

systemdユニットのファイル名の後にインスタンス変数として設定ファイル名を指定して、OpenVPNサーバーを起動します。 サーバーの構成ファイルは次のように呼び出されます /etc/openvpn/server.conf、追加 @server それを呼び出すときにあなたのユニットファイルの終わりに:

  1. sudo systemctl start openvpn@server

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

  1. sudo systemctl status openvpn@server

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

Output
[email protected] - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled) Active: active (running) since Tue 2016-05-03 15:30:05 EDT; 47s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Process: 5852 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid (code=exited, sta Main PID: 5856 (openvpn) Tasks: 1 (limit: 512) CGroup: /system.slice/system-openvpn.slice/[email protected] └─5856 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid

OpenVPNを確認することもできます tun0 インターフェイスは次のように入力して利用できます。

  1. ip addr show tun0

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

Output
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue 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

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

  1. sudo systemctl enable openvpn@server

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

ステップ8—クライアント構成インフラストラクチャを作成する

OpenVPNクライアントの構成ファイルの作成は、すべてのクライアントが独自の構成を持っている必要があり、それぞれがサーバーの構成ファイルで概説されている設定と一致している必要があるため、多少複雑になる可能性があります。 この手順では、1つのクライアントでのみ使用できる単一の構成ファイルを作成するのではなく、構成ファイルをオンザフライで生成するために使用できるクライアント構成インフラストラクチャを構築するプロセスの概要を説明します。 最初に「基本」構成ファイルを作成し、次にスクリプトを作成して、必要に応じて一意のクライアント構成ファイル、証明書、およびキーを生成できるようにします。

クライアント構成ファイルを格納する新しいディレクトリを作成することから始めます。 client-configs 以前に作成したディレクトリ:

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

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

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

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

  1. 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 your_server_ip 1194
. . .

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

〜/ client-configs / base.conf
proto udp

次に、コメントを外します usergroup 各行の先頭にある「;」を削除することによるディレクティブ:

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

を設定するディレクティブを見つけます ca, 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

同様に、コメントアウトします tls-auth 追加するディレクティブ ta.key クライアント構成ファイルに直接:

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

ミラーリング cipherauth で設定した設定 /etc/openvpn/server.conf ファイル:

〜/ client-configs / base.conf
cipher AES-256-CBC
auth SHA256

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

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

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

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

クライアントがLinuxを実行していて、 /etc/openvpn/update-resolv-conf ファイル、生成された後、クライアントの構成ファイルからこれらの行のコメントを解除します。

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

次に、関連する証明書、キー、および暗号化ファイルを使用して基本構成をコンパイルする簡単なスクリプトを作成し、生成された構成を ~/client-configs/files ディレクトリ。 と呼ばれる新しいファイルを開きます make_config.sh 以内 ~/client-configs ディレクトリ:

  1. nano ~/client-configs/make_config.sh

内部に次のコンテンツを追加し、必ず変更してください sammy サーバーのroot以外のユーザーアカウントのアカウントに:

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

# First argument: Client identifier

KEY_DIR=/home/sammy/client-configs/keys
OUTPUT_DIR=/home/sammy/client-configs/files
BASE_CONFIG=/home/sammy/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

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

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

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

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

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

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

ガイドに従った場合は、という名前のクライアント証明書とキーを作成しました client1.crtclient1.keyそれぞれ、ステップ4で。 に移動して、これらの資格情報の構成ファイルを生成できます。 ~/client-configs ディレクトリを作成し、前の手順の最後に作成したスクリプトを実行します。

  1. cd ~/client-configs
  2. sudo ./make_config.sh client1

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

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

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

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

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

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

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

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

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

OpenVPN接続はあなたが呼んだものと同じ名前になります .ovpn ファイル。 このチュートリアルに関して、これは接続に名前が付けられていることを意味します client1.ovpn、生成した最初のクライアントファイルに合わせます。

ウィンドウズ

インストール

OpenVPNのダウンロードページからWindows用のOpenVPNクライアントアプリケーションをダウンロードします。 ご使用のバージョンのWindowsに適切なインストーラーバージョンを選択してください。

ノート

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

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クライアントです。 最新のディスクイメージは、TunnelblickDownloadsページからダウンロードできます。 ダウンロードしたものをダブルクリックします .dmg ファイルを作成し、プロンプトに従ってインストールします。

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

接続する

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

Linux

インストール

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

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

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

  1. sudo apt update
  2. sudo apt install openvpn

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

  1. sudo yum install epel-release
  2. sudo yum install openvpn

構成

ディストリビューションに /etc/openvpn/update-resolv-conf 脚本:

  1. ls /etc/openvpn
Output
update-resolv-conf

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

  1. nano client1.ovpn

あなたが見つけることができた場合 update-resolv-conf ファイルで、DNS設定を調整するために追加した3行のコメントを解除します。

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

CentOSを使用している場合は、 group からの指令 nogroupnobody ディストリビューションの利用可能なグループと一致させるには:

client1.ovpn
group nobody

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

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

  1. sudo openvpn --config client1.ovpn

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

iOS

インストール

iTunes App Storeから、公式iOSOpenVPNクライアントアプリケーションであるOpenVPNConnectを検索してインストールします。 iOSクライアント構成をデバイスに転送するには、デバイスをコンピューターに直接接続します。

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

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

接続する

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

ノート

設定の下のVPNスイッチを使用してVPNに接続することはできません。 試してみると、OpenVPNアプリを使用してのみ接続するように通知が届きます。

アンドロイド

インストール

GooglePlayストアを開きます。 公式のAndroidOpenVPNクライアントアプリケーションであるAndroidOpenVPNConnectを検索してインストールします。

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

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

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

接続する

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

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

注: VPN接続をテストするこの方法は、手順5ですべてのトラフィックをVPN経由でルーティングすることを選択した場合にのみ機能します。

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

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

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

ステップ12—クライアント証明書を取り消す

場合によっては、OpenVPNサーバーへのそれ以上のアクセスを防ぐために、クライアント証明書を取り消す必要があります。

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

  1. cd EasyRSA-3.0.4/

次に、を実行します easyrsa スクリプトと revoke オプションの後に、取り消すクライアント名を続けます。

  1. ./easyrsa revoke client2

これにより、次のように入力して失効を確認するように求められます yes:

Output
Please 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: yes

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

  1. ./easyrsa gen-crl

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

  1. scp ~/EasyRSA-3.0.4/pki/crl.pem sammy@your_server_ip:/tmp

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

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

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

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

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

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

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

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

  1. sudo systemctl restart openvpn@server

クライアントは、古いクレデンシャルを使用してサーバーに正常に接続できなくなります。

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

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

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

結論

これで、インターネットを安全に移動して、身元、場所、トラフィックをスヌーパーや検閲者から保護できます。 この時点で証明書を発行する必要がなくなった場合は、証明書を追加または取り消す必要があるまで、CAマシンの電源を切るか、インターネットから切断することをお勧めします。 これは、攻撃者がVPNにアクセスするのを防ぐのに役立ちます。

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