序章

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"

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

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

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

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

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

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

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

  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はポート経由のUDPトラフィックも許可する必要があります 1194.

  1. ufw allow 1194/udp

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

  1. nano /etc/default/ufw

次の行を探します。

/ etc / default / ufw
DEFAULT_FORWARD_POLICY="DROP"

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

/ 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 キー名として。 別の名前を使用する場合は、参照するOpenVPN構成ファイルも更新する必要があります server.keyserver.crt.

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

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

保存して終了。

次に、組み込みのOpenSSLツールを使用してDiffie-Helmanパラメーターを生成します。 dhparam; 数分かかるかも知れません。

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

  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

プレス ENTER で値を設定するだけなので、各プロンプトを通過します vars ファイル。

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

ステップ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: active (exited) since... それ以外の Active: inactive (dead) 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は、同じ証明書とキーを使用するクライアントからサーバーへの同時接続を許可していません。 (見る duplicate-cn/etc/openvpn/server.conf.)

VPNに接続する予定のデバイスごとに個別の認証クレデンシャルを作成するには、デバイスごとにこの手順を完了する必要がありますが、名前を変更してください client1 以下のような別のものに client2 また iphone2. デバイスごとに個別のクレデンシャルを使用すると、必要に応じて、後でサーバーで個別に非アクティブ化できます。 このチュートリアルの残りの例では、 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-RSAにコピーします keys 以前に作成したディレクトリ。 拡張子をから変更することに注意してください .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.ovpnworkとして識別され、school.ovpnschoolとして識別されます。

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

  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

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

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

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

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

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

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

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

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

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

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

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

  1. scp root@your-server-ip:/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アドレスを変更する必要があります。