前書き

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

とはいえ、このチュートリアルでは、Debian 8上でオープンソースのSecure Socket Layer(SSL)VPNソリューションであるOpenVPNをセットアップする方法を説明します。

前提条件

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

  • 新鮮なDebian 8.1ドロップレット1つ

  • ルートユーザー

  • オプション:このチュートリアルの完了後、一般的なメンテナンスにはsudo対応の非ルートアカウントを使用します。 このチュートリアル

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

パッケージをインストールする前に、aptパッケージインデックスを更新します。

apt-get update

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

apt-get install openvpn easy-rsa

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

サンプルのVPNサーバー設定ファイルは、「+ / etc / openvpn +」に抽出する必要があるため、セットアップに組み込むことができます。 これは、1つのコマンドで実行できます。

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

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

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 」を「 dh2048.pem +」に変更します。

/etc/openvpn/server.conf

dh

次に、すべてのトラフィックを適切な場所にリダイレクトするようにします。 まだ `+ 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解決にhttps://opendns.com [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 nobody `と ` group nogroup +`の両方のコメントを外します。 完了すると、次のようになります。

/etc/openvpn/server.conf

user nobody
group nogroup

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

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

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

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

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

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

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

nano /etc/sysctl.conf

`+ sysctl +`ファイルの上部近くに、以下が表示されます:

/etc/openvpn/server.conf

# Uncomment the next line to enable packet forwarding for IPv4

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

/etc/openvpn/server.conf

# Uncomment the next line to enable packet forwarding for IPv4

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

手順4-ufwのインストールと構成

UFWはIPTablesのフロントエンドです。 いくつかのルールと設定を編集するだけです。 次に、ファイアウォールをオンにします。 UFWのその他の使用方法については、https://www.digitalocean.com/community/articles/how-to-setup-a-firewall-with-ufw-on-an-ubuntu-and-debian-cloud-を参照してください。 server [UbuntuおよびDebianクラウドサーバーでUFWを使用してファイアウォールを設定する方法]。

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

apt-get install ufw

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

ufw allow ssh

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

ufw allow 1194/udp

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

nano /etc/default/ufw

次の行を探します。

/ etc / default / ufw

DEFAULT_FORWARD_POLICY=""

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

/ etc / default / ufw

DEFAULT_FORWARD_POLICY=""

保存して終了。

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

nano /etc/ufw/before.rules

次に、* OPENVPNルール*の領域を追加します。

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










# Don't delete these required lines, otherwise there will be errors
*filter

保存して終了。

UFWに加えられた変更により、有効にすることができます。 コマンドプロンプトに入力します。

ufw enable

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

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

「+ y +」と答えます。 結果は次の出力になります。

Firewall is active and enabled on system startup

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

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は、証明書に基づく双方向認証をサポートします。つまり、相互信頼が確立される前に、クライアントはサーバー証明書を認証し、サーバーはクライアント証明書を認証する必要があります。 これを行うには、Easy RSAのスクリプトを使用します。

最初にEasy-RSA生成スクリプトをコピーします。

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

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

mkdir /etc/openvpn/easy-rsa/keys

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

nano /etc/openvpn/easy-rsa/vars

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

/ etc / openvpn / easy-rsa / vars

export KEY_COUNTRY=""
export KEY_PROVINCE=""
export KEY_CITY=""
export KEY_ORG=""
export KEY_EMAIL=""
export KEY_OU=""

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

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

/ etc / openvpn / easy-rsa / vars

# X509 Subject Field
export KEY_NAME=""

`+ KEY_NAME `のデフォルト値 ` EasyRSA `を目的のサーバー名に変更します。 このチュートリアルでは、名前「+」を使用します。

/ etc / openvpn / easy-rsa / vars

# X509 Subject Field
export KEY_NAME=""

保存して終了。

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

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

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

これで証明書が生成されました。次はキーを生成します。

最初に、 `+ easy-rsa +`ディレクトリに切り替えます。

cd /etc/openvpn/easy-rsa

これで、CA自体のセットアップを開始できます。 まず、公開キー基盤(PKI)を初期化します。

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

. ./vars

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

./clean-all

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

./build-ca

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

これで認証局がセットアップされました。

手順6-サーバーの証明書とキーを生成する

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

最初に、まだ `+ / etc / openvpn / easy-rsa `から作業して、サーバー名でキーを構築します。 これは以前に設定ファイルで ` KEY_NAME `として指定されていました。 このチュートリアルのデフォルトは「 server +」です。

./build-key-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]

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

OutputWrite out database with 1 new entries
Data Base Updated

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

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

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

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

ls /etc/openvpn

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

この時点で、OpenVPNサーバーは準備完了です。 起動してステータスを確認します。

service openvpn start
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つの一般的な証明書とキーを生成するのに適しています。

VPNに接続するデバイスごとに個別の認証資格情報を作成するには、デバイスごとにこの手順を完了する必要がありますが、以下の名前「+ client1 」を「 client2 」や「 iphone2 」などの別の名前に変更します。 必要に応じて、デバイスごとに個別の資格情報を使用して、後でサーバーで個別に非アクティブ化できます。 このチュートリアルの残りの例では、クライアントデバイスの名前の例として「 client1 +」を使用します。

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

./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」に変更することに注意してください。 これは慣習に一致するためです。

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

各クライアントについてこのセクションを再度繰り返し、「+ client1 +」を適切なクライアント名に置き換えます。

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

OpenVPNサーバーのIPアドレスを含めるように各クライアントファイルを変更して、接続先を認識させる必要があります。 nanoまたはお好みのテキストエディターを使用して、「+ client.ovpn +」を開きます。

nano /etc/openvpn/easy-rsa/keys/

最初に、 `+ remote `で始まる行を編集します。 「 my-server-1 」を「+」に変更します。

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

次に、ステップ1で「+ server.conf 」で行ったように、以下に示す領域を見つけて、「 user nobody 」と「 group 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 / .crt +

  • + / etc / openvpn / easy-rsa / keys / .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 *ディレクトリに配置します。

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

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

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

  • ` + client1 + `.crt

  • ` + client1 + `.key

  • + client.ovpn +

  • + ca.crt +

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

クライアントファイルを管理するにはいくつかの方法がありますが、最も簡単な方法は_unified_プロファイルを使用することです。 これは、 `+ 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

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

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

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

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

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

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

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

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

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

さまざまなプラットフォームには、このOpenVPNサーバーに接続するためのよりユーザーフレンドリーなアプリケーションがあります。 プラットフォーム固有の手順については、https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-14-04#step-5-のステップ5を参照してください。 –installing-the-client-profile [このチュートリアル]。

結論

おめでとうございます。 OpenVPNサーバーとクライアントファイルが機能するようになりました。

OpenVPNクライアントから、https://www.google.com/search?q = what%20is%20my%20ip [GoogleがパブリックIPを公開する]を使用して接続をテストできます。 クライアントで、OpenVPN接続を開始する前に1回ロードし、その後に1回ロードします。 IPアドレスが変更されます。