序章

OpenVPNは、パブリックインターネットを介してプライベートネットワークを安全に作成して参加できるオープンソースVPNアプリケーションです。 つまり、これにより、エンドユーザーは接続をマスクし、信頼できないネットワークをより安全にナビゲートできます。

そうは言っても、このチュートリアルでは、Debian8でオープンソースのSecureSocket Layer(SSL)VPNソリューションであるOpenVPNをセットアップする方法を説明します。

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

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

前提条件

このチュートリアルでは、次のものがあることを前提としています。

  • 1つの新しいDebian8.1ドロップレット
  • rootユーザー
  • オプション:このチュートリアルの完了後、一般的なメンテナンスにsudo対応のroot以外のアカウントを使用します。 このチュートリアルのステップ2と3に従ってセットアップできます。

ステップ1—OpenVPNをインストールする

パッケージをインストールする前に、aptパッケージインデックスを更新してください。

  1. apt-get update

これで、暗号化用のeasy-RSAとともにOpenVPNサーバーをインストールできます。

  1. apt-get install openvpn easy-rsa

ステップ2—OpenVPNを構成する

サンプルのVPNサーバー構成ファイルを/etc/openvpnに抽出して、セットアップに組み込む必要があります。 これは、1つのコマンドで実行できます。

  1. gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf

抽出したら、nanoまたはお気に入りのテキストエディタを使用してサーバー構成ファイルを開きます。

  1. nano /etc/openvpn/server.conf

このファイルでは、4つの変更を加える必要があります(それぞれについて詳しく説明します)。

  1. 高レベルの暗号化を備えた安全なサーバー
  2. Webトラフィックを宛先に転送する
  3. DNS要求がVPN接続の外部にリークするのを防ぎます
  4. セットアップ権限

まず、サーバーキーとクライアントキーを生成するときに使用されるRSAキーの長さを2倍にします。 メインのコメントブロックとさらにいくつかのチャンクの後に、次の行を検索します。

/etc/openvpn/server.conf
# Diffie hellman parameters.
# Generate your own with:
#   openssl dhparam -out dh1024.pem 1024
# Substitute 2048 for 1024 if you are using
# 2048 bit keys.
dh dh1024.pem

dh1024.pemdh2048.pemに変更して、次のようにします。

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

次に、すべてのトラフィックを適切な場所にリダイレクトするようにします。 まだserver.confで、さらにコメントブロックをスクロールして、次のセクションを探します。

/etc/openvpn/server.conf
# If enabled, this directive will configure
# all clients to redirect their default
# network gateway through the VPN, causing
# all IP traffic such as web browsing and
# and DNS lookups to go through the VPN
# (The OpenVPN server machine may need to NAT
# or bridge the TUN/TAP interface to the internet
# in order for this to work properly).
;push "redirect-gateway def1 bypass-dhcp"

push "redirect-gateway def1 bypass-dhcp"のコメントを解除して、VPNサーバーがクライアントのWebトラフィックを宛先に渡すようにします。 完了すると、次のようになります。

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

第三に、可能な場合はDNS解決にOpenDNSを使用するようにサーバーに指示します。 これにより、DNS要求がVPN接続の外部にリークするのを防ぐことができます。 以前に変更したブロックの直後に、以下を編集します。

/etc/openvpn/server.conf
# Certain Windows-specific network settings
# can be pushed to clients, such as DNS
# or WINS server addresses.  CAVEAT:
# http://openvpn.net/faq.html#dhcpcaveats
# The addresses below refer to the public
# DNS servers provided by opendns.com.
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"

push "dhcp-option DNS 208.67.222.222"push "dhcp-option DNS 208.67.220.220"のコメントを外します。 完了すると、次のようになります。

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

第4に、server.confでアクセス許可を定義します。

/etc/openvpn/server.conf
# You can uncomment this out on
# non-Windows systems.
;user nobody
;group nogroup

user nobodygroup nogroupの両方のコメントを解除します。 完了すると、次のようになります。

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

デフォルトでは、OpenVPNは root ユーザーとして実行されるため、システムへの完全なrootアクセス権があります。 代わりに、OpenVPNをユーザーnobodyとグループnogroupに限定します。 これは、デフォルトのログイン機能を持たない非特権ユーザーであり、多くの場合、Webに面したサーバーなどの信頼できないアプリケーションを実行するために予約されています。

次に、変更を保存して終了します。

ステップ3—パケット転送を有効にする

このセクションでは、クライアントサービスからインターネットにトラフィックを転送するようにサーバーのカーネルに指示します。 それ以外の場合、トラフィックはサーバーで停止します。

次のコマンドを入力して、実行時にパケット転送を有効にします。

  1. echo 1 > /proc/sys/net/ipv4/ip_forward

次に、サーバーの再起動後もこの設定が維持されるように、これを永続的にする必要があります。 nanoまたはお気に入りのテキストエディタを使用して、sysctl構成ファイルを開きます。

  1. nano /etc/sysctl.conf

sysctlファイルの上部に、次のように表示されます。

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

net.ipv4.ip_forwardのコメントを外します。 完了すると、次のようになります。

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

変更を保存して終了します。

ステップ4—ufwをインストールして設定する

UFWはIPTablesのフロントエンドです。 いくつかのルールと構成の編集を行うだけで済みます。 次に、ファイアウォールをオンにします。 UFWのその他の使用法のリファレンスとして、UbuntuおよびDebianクラウドサーバーでUFWを使用してファイアウォールをセットアップする方法を参照してください。

まず、ufwパッケージをインストールします。

  1. apt-get install ufw

次に、SSHを許可するようにUFWを設定します。

  1. ufw allow ssh

このチュートリアルではOpenVPNoverUDPを使用するため、UFWはポート1194を介したUDPトラフィックも許可する必要があります。

  1. ufw allow 1194/udp

UFW転送ポリシーも設定する必要があります。 これは、プライマリ構成ファイルで行います。

  1. nano /etc/default/ufw

次の行を探します。

/ etc / default / ufw
DEFAULT_FORWARD_POLICY="DROP"

これは、DROPからACCEPTに変更する必要があります。 完了すると、次のようになります。

/ etc / default / ufw
DEFAULT_FORWARD_POLICY="ACCEPT"

保存して終了。

次に、接続されたクライアントのネットワークアドレス変換とIPマスカレードのためのUFWルールを追加します。

  1. nano /etc/ufw/before.rules

次に、 OPENVPNRULESredに領域を追加します。

/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
-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に加えられた変更により、UFWを有効にできるようになりました。 コマンドプロンプトに入力します。

  1. ufw enable

UFWを有効にすると、次のプロンプトが返されます。

Command may disrupt existing ssh connections. Proceed with operation (y|n)?

yと答えてください。 結果は次のようになります。

Firewall is active and enabled on system startup

UFWのプライマリファイアウォールルールを確認するには:

  1. ufw status

statusコマンドは、次のエントリを返す必要があります。

Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
1194/udp                   ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)
1194/udp (v6)              ALLOW       Anywhere (v6)

ステップ5—認証局を構成および構築する

OpenVPNは証明書を使用してトラフィックを暗号化します。

このセクションでは、2つのステップで独自の認証局(CA)をセットアップします。(1)変数をセットアップし、(2)CAを生成します。

OpenVPNは、証明書に基づく双方向認証をサポートしています。つまり、相互信頼が確立される前に、クライアントはサーバー証明書を認証する必要があり、サーバーはクライアント証明書を認証する必要があります。 これを行うには、EasyRSAのスクリプトを使用します。

まず、Easy-RSA生成スクリプトをコピーします。

  1. cp -r /usr/share/easy-rsa/ /etc/openvpn

次に、キーを格納するディレクトリを作成します。

  1. mkdir /etc/openvpn/easy-rsa/keys

次に、証明書のパラメータを設定します。 nanoまたはお気に入りのテキストエディタを使用して変数ファイルを開きます。

  1. nano /etc/openvpn/easy-rsa/vars

red でマークされている以下の変数は、好みに応じて変更する必要があります。

/ etc / openvpn / easy-rsa / vars
export KEY_COUNTRY="US"
export KEY_PROVINCE="TX"
export KEY_CITY="Dallas"
export KEY_ORG="My Company Name"
export KEY_EMAIL="[email protected]"
export KEY_OU="MYOrganizationalUnit"

同じvarsファイルで、以下に示すこの1行も編集します。 簡単にするために、キー名としてserverを使用します。 別の名前を使用する場合は、server.keyおよびserver.crtを参照するOpenVPN構成ファイルも更新する必要があります。

以下、同じファイルで、正しい証明書を指定します。 以前に変更されたブロックの直後にある行を探します。

/ etc / openvpn / easy-rsa / vars
# X509 Subject Field
export KEY_NAME="EasyRSA"

KEY_NAMEのデフォルト値であるEasyRSAを目的のサーバー名に変更します。 このチュートリアルでは、serverという名前を使用します。

/ etc / openvpn / easy-rsa / vars
# X509 Subject Field
export KEY_NAME="server"

保存して終了。

次に、dhparamと呼ばれる組み込みのOpenSSLツールを使用してDiffie-Helmanパラメーターを生成します。 ちょっと時間かかります。

-outフラグは、新しいパラメーターを保存する場所を指定します。

  1. openssl dhparam -out /etc/openvpn/dh2048.pem 2048

これで証明書が生成され、キーを生成するときが来ました。

まず、easy-rsaディレクトリに切り替えます。

  1. cd /etc/openvpn/easy-rsa

これで、CA自体のセットアップを開始できます。 まず、公開鍵インフラストラクチャ(PKI)を初期化します。

./varsコマンドの前にあるドット(。)スペースに注意してください。 これは、現在の作業ディレクトリ(ソース)を意味します。

  1. . ./vars

次の警告が出力されます。 警告で指定されたディレクトリは空ですので、心配しないでください。 NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys

次に、インストールを妨げる可能性のある他のすべてのキーをクリアします。

  1. ./clean-all

最後に、OpenSSLコマンドを使用してCAを構築します。 このコマンドは、以前に入力された「識別名」変数の確認を求めるプロンプトを表示します。 ENTERを押して、既存の値を受け入れます。

  1. ./build-ca

varsファイルに値を設定しただけなので、ENTERを押して各プロンプトを通過します。

これで認証局が設定されました。

ステップ6—サーバーの証明書とキーを生成する

このセクションでは、OpenVPNサーバーをセットアップして起動します。

まず、/etc/openvpn/easy-rsaから引き続き作業し、サーバー名を使用してキーを作成します。 これは、構成ファイルでKEY_NAMEとして以前に指定されていました。 このチュートリアルのデフォルトはserverです。

  1. ./build-key-server server

この場合も、出力は識別名の確認を求めます。 ENTERを押して、定義済みのデフォルト値を受け入れます。 今回は、さらに2つのプロンプトが表示されます。

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

両方とも空白のままにする必要があるため、Enterキーを押してそれぞれを通過します。

最後に2つの追加クエリを実行するには、肯定的な(y)応答が必要です。

Sign the certificate? [y/n]
1 out of 1 certificate requests certified, commit? [y/n]

次に、成功を示す次のプロンプトが表示されます。

Output
Write out database with 1 new entries Data Base Updated

手順7—サーバーの証明書とキーを移動する

ここで、証明書とキーを/etc/openvpnにコピーします。これは、OpenVPNがそのディレクトリでサーバーのCA、証明書、およびキーを検索するためです。

  1. cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn

次の方法で、コピーが成功したことを確認できます。

  1. ls /etc/openvpn

サーバーの証明書とキーファイルが表示されます。

この時点で、OpenVPNサーバーを使用する準備が整いました。 起動して状態を確認してください。

  1. service openvpn start
  2. service openvpn status

statusコマンドは、次のような効果を返します。

Output
* openvpn.service - OpenVPN service Loaded: loaded (/lib/systemd/system/openvpn.service; enabled) Active: active (exited) since Thu 2015-06-25 02:20:18 EDT; 9s ago Process: 2505 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 2505 (code=exited, status=0/SUCCESS)

最も重要なことは、上記の出力から、Active: inactive (dead) since...の代わりにActive: active (exited) since...が見つかるはずです。

これでOpenVPNサーバーが動作可能になりました。 ステータスメッセージにVPNが実行されていないことが示されている場合は、/var/log/syslogファイルで次のようなエラーがないか確認してください。

Options error: --key fails with 'server.key': No such file or directory

このエラーは、server.key/etc/openvpnに正しくコピーされなかったことを示しています。 ファイルを再コピーして、再試行してください。

ステップ8—クライアントの証明書とキーを生成する

これまでに、OpenVPNサーバーをインストールして構成し、認証局を作成し、サーバー独自の証明書とキーを作成しました。 このステップでは、サーバーのCAを使用して、VPNに接続する各クライアントデバイスの証明書とキーを生成します。

キーと証明書の作成

VPNに接続する各クライアントが、独自の証明書とキーを持つことが理想的です。 これは、すべてのクライアントデバイス間で使用する1つの一般的な証明書とキーを生成するよりも望ましい方法です。

注:デフォルトでは、OpenVPNは、同じ証明書とキーを使用するクライアントからサーバーへの同時接続を許可していません。 (/etc/openvpn/server.confduplicate-cnを参照してください。)

VPNに接続するデバイスごとに個別の認証クレデンシャルを作成するには、デバイスごとにこの手順を完了する必要がありますが、以下の名前client1client2iphone2。 デバイスごとに個別のクレデンシャルを使用すると、必要に応じて、後でサーバーで個別に非アクティブ化できます。 このチュートリアルの残りの例では、クライアントデバイスの名前の例としてclient1を使用します。

サーバーのキーで行ったように、client1の例用にキーを作成します。 まだ/etc/openvpn/easy-rsaで作業しているはずです。

  1. ./build-key client1

ここでも、識別名変数と、空白のままにする必要があるこれら2つのプロンプトを変更または確認するように求められます。 ENTERを押して、デフォルトを受け入れます。

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

以前と同様に、ビルドプロセスの最後にあるこれら2つの確認には、(y)応答が必要です。

Sign the certificate? [y/n]
1 out of 1 certificate requests certified, commit? [y/n]

次に、キーのビルドが成功したことを確認する次の出力が表示されます。

Write out database with 1 new entries.
Data Base Updated

次に、生成されたキーを、前に作成したEasy-RSAkeysディレクトリにコピーします。 拡張子を.confから.ovpnに変更することに注意してください。 これは慣例に一致するためです。

  1. cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client.ovpn

client1を全体を通して適切なクライアント名に置き換えて、クライアントごとにこのセクションをもう一度繰り返すことができます。

注:複製されたclient.ovpnの名前は、クライアントデバイスに関連付けられている必要はありません。 クライアント側のOpenVPNアプリケーションは、ファイル名をVPN接続自体の識別子として使用します。 代わりに、client.ovpnを、VPNの名前タグをオペレーティングシステムに配置するものに複製する必要があります。 例: work.ovpnworkschool.ovpnschoolなどとして識別されます。

OpenVPNサーバーのIPアドレスが含まれるように各クライアントファイルを変更して、何に接続するかがわかるようにする必要があります。 nanoまたはお気に入りのテキストエディタを使用してclient.ovpnを開きます。

  1. nano /etc/openvpn/easy-rsa/keys/client.ovpn

まず、remoteで始まる行を編集します。 my-server-1your_server_ipに変更します。

/etc/openvpn/easy-rsa/keys/client.ovpn
# 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

次に、以下に示す領域を見つけて、手順1のserver.confで行ったように、user nobodygroup nogroupのコメントを解除します。 注:これはWindowsには適用されないため、スキップできます。 完了すると、次のようになります。

/etc/openvpn/easy-rsa/keys/client.ovpn
# Downgrade privileges after initialization (non-Windows only)
user nobody
group no group

クライアントデバイスへの証明書とキーの転送

上記の手順で、クライアントの証明書とキーを作成し、OpenVPNサーバーの/etc/openvpn/easy-rsa/keysディレクトリに保存されていることを思い出してください。

クライアントごとに、クライアント証明書、キー、およびプロファイルテンプレートファイルをローカルコンピューターまたは別のクライアントデバイス上のフォルダーに転送する必要があります。

この例では、client1デバイスには、次のサーバーにある証明書とキーが必要です。

  • /etc/openvpn/easy-rsa/keys/client1.crt
  • /etc/openvpn/easy-rsa/keys/client1.key

ca.crtファイルとclient.ovpnファイルはすべてのクライアントで同じです。 これらの2つのファイルもダウンロードしてください。 ca.crtファイルは他のファイルとは異なるディレクトリにあることに注意してください。

  • /etc/openvpn/easy-rsa/keys/client.ovpn
  • /etc/openvpn/ca.crt

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

これは、client1の例を使用したSCPコマンドの例です。 ファイルclient1.keyをローカルコンピューターのDownloadsディレクトリに配置します。

  1. scp [email protected]:/etc/openvpn/easy-rsa/keys/client1.key Downloads/

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

このセクションの最後で、クライアントデバイスに次の4つのファイルがあることを確認してください。

  • “ client1 .crt
  • “ client1 .key
  • client.ovpn
  • ca.crt

ステップ9—クライアントデバイス用の統合OpenVPNプロファイルの作成

クライアントファイルを管理する方法はいくつかありますが、最も簡単な方法は統合プロファイルを使用することです。 これは、client.ovpnテンプレートファイルを変更して、サーバーの認証局、およびクライアントの証明書とそのキーを含めることによって作成されます。 マージすると、単一のclient.ovpnプロファイルのみをクライアントのOpenVPNアプリケーションにインポートする必要があります。

以下に示す領域では、コメントアウトするために示されている3行が必要です。これにより、代わりに証明書とキーをclient.ovpnファイルに直接含めることができます。 完了すると、次のようになります。

/etc/openvpn/easy-rsa/keys/client.ovpn
# SSL/TLS parms.
# . . .
;ca ca.crt
;cert client.crt
;key client.key

変更を保存して終了します。 コードで証明書を追加します。

まず、認証局を追加します。

  1. echo '<ca>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
  2. cat /etc/openvpn/ca.crt >> /etc/openvpn/easy-rsa/keys/client.ovpn
  3. echo '</ca>' >> /etc/openvpn/easy-rsa/keys/client.ovpn

次に、証明書を追加します。

  1. echo '<cert>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
  2. cat /etc/openvpn/easy-rsa/keys/client1.crt >> /etc/openvpn/easy-rsa/keys/client.ovpn
  3. echo '</cert>' >> /etc/openvpn/easy-rsa/keys/client.ovpn

最後に、キーを追加します。

  1. echo '<key>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
  2. cat /etc/openvpn/easy-rsa/keys/client1.key >> /etc/openvpn/easy-rsa/keys/client.ovpn
  3. echo '</key>' >> /etc/openvpn/easy-rsa/keys/client.ovpn

これで、統合されたクライアントプロファイルができました。 次に、scpを使用して、client.ovpnファイルを2番目のシステムにコピーできます。

ステップ10—クライアントプロファイルのインストール

さまざまなプラットフォームに、このOpenVPNサーバーに接続するためのよりユーザーフレンドリーなアプリケーションがあります。 プラットフォーム固有の手順については、このチュートリアルのステップ5を参照してください。

結論

おめでとう! これで、OpenVPNサーバーとクライアントファイルが機能します。

OpenVPNクライアントから、 Googleを使用して接続をテストし、パブリックIPを明らかにすることができます。 クライアントで、OpenVPN接続を開始する前と後に1回ロードします。 IPアドレスを変更する必要があります。