Debian8でOpenVPNサーバーをセットアップする方法
序章
OpenVPNは、パブリックインターネットを介してプライベートネットワークを安全に作成して参加できるオープンソースVPNアプリケーションです。 つまり、これにより、エンドユーザーは接続をマスクし、信頼できないネットワークをより安全にナビゲートできます。
そうは言っても、このチュートリアルでは、Debian8でオープンソースのSecureSocket Layer(SSL)VPNソリューションであるOpenVPNをセットアップする方法を説明します。
注: DigitalOcean DropletにOpenVPNサーバーをセットアップする場合は、多くのホスティングプロバイダーと同様に、帯域幅の超過に対して課金されることに注意してください。 このため、サーバーが処理しているトラフィックの量に注意してください。
詳細については、このページを参照してください。
前提条件
このチュートリアルでは、次のものがあることを前提としています。
- 1つの新しいDebian8.1ドロップレット
- rootユーザー
- オプション:このチュートリアルの完了後、一般的なメンテナンスにsudo対応のroot以外のアカウントを使用します。 このチュートリアルのステップ2と3に従ってセットアップできます。
ステップ1—OpenVPNをインストールする
パッケージをインストールする前に、aptパッケージインデックスを更新してください。
- apt-get update
これで、暗号化用のeasy-RSAとともにOpenVPNサーバーをインストールできます。
- 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つの変更を加える必要があります(それぞれについて詳しく説明します)。
- 高レベルの暗号化を備えた安全なサーバー
- Webトラフィックを宛先に転送する
- DNS要求がVPN接続の外部にリークするのを防ぎます
- セットアップ権限
まず、サーバーキーとクライアントキーを生成するときに使用されるRSAキーの長さを2倍にします。 メインのコメントブロックとさらにいくつかのチャンクの後に、次の行を検索します。
# 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.pem
に dh2048.pem
、その行は次のようになります。
dh dh2048.pem
次に、すべてのトラフィックを適切な場所にリダイレクトするようにします。 まだ 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トラフィックを宛先に渡します。 完了すると、次のようになります。
push "redirect-gateway def1 bypass-dhcp"
第三に、可能な場合はDNS解決にOpenDNSを使用するようにサーバーに指示します。 これにより、DNS要求がVPN接続の外部にリークするのを防ぐことができます。 以前に変更したブロックの直後に、以下を編集します。
# 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"
. 完了すると、次のようになります。
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
第四に、パーミッションをで定義します server.conf
:
# You can uncomment this out on
# non-Windows systems.
;user nobody
;group nogroup
両方のコメントを外す user nobody
と group nogroup
. 完了すると、次のようになります。
user nobody
group nogroup
デフォルトでは、OpenVPNは root ユーザーとして実行されるため、システムへの完全なルートアクセス権があります。 代わりに、OpenVPNをユーザーnobodyとグループnogroupに限定します。 これは、デフォルトのログイン機能を持たない非特権ユーザーであり、多くの場合、Webに面したサーバーなどの信頼できないアプリケーションを実行するために予約されています。
次に、変更を保存して終了します。
ステップ3—パケット転送を有効にする
このセクションでは、クライアントサービスからインターネットにトラフィックを転送するようにサーバーのカーネルに指示します。 それ以外の場合、トラフィックはサーバーで停止します。
次のコマンドを入力して、実行時にパケット転送を有効にします。
- echo 1 > /proc/sys/net/ipv4/ip_forward
次に、サーバーの再起動後もこの設定が維持されるように、これを永続的にする必要があります。 を開きます sysctl
nanoまたはお気に入りのテキストエディタを使用した構成ファイル。
- nano /etc/sysctl.conf
上部近く sysctl
ファイル、あなたは見るでしょう:
# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1
コメントを外す net.ipv4.ip_forward
. 完了すると、次のようになります。
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
変更を保存して終了します。
ステップ4—ufwをインストールして設定する
UFWはIPTablesのフロントエンドです。 いくつかのルールと構成の編集を行うだけで済みます。 次に、ファイアウォールをオンにします。 UFWのその他の使用法のリファレンスとして、UbuntuおよびDebianクラウドサーバーでUFWを使用してファイアウォールをセットアップする方法を参照してください。
まず、 ufw
パッケージ。
- apt-get install ufw
次に、SSHを許可するようにUFWを設定します。
- ufw allow ssh
このチュートリアルではOpenVPNoverUDPを使用するため、UFWはポート経由のUDPトラフィックも許可する必要があります 1194
.
- ufw allow 1194/udp
UFW転送ポリシーも設定する必要があります。 これは、プライマリ構成ファイルで行います。
- nano /etc/default/ufw
次の行を探します。
DEFAULT_FORWARD_POLICY="DROP"
これはから変更する必要があります DROP
に ACCEPT
. 完了すると、次のようになります。
DEFAULT_FORWARD_POLICY="ACCEPT"
保存して終了。
次に、接続されたクライアントのネットワークアドレス変換とIPマスカレードのためのUFWルールを追加します。
- nano /etc/ufw/before.rules
次に、 OPENVPNRULESのredに領域を追加します。
#
# 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を有効にできるようになりました。 コマンドプロンプトに入力します。
- 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は、証明書に基づく双方向認証をサポートしています。つまり、相互信頼が確立される前に、クライアントはサーバー証明書を認証する必要があり、サーバーはクライアント証明書を認証する必要があります。 これを行うには、EasyRSAのスクリプトを使用します。
まず、Easy-RSA生成スクリプトをコピーします。
- cp -r /usr/share/easy-rsa/ /etc/openvpn
次に、キーを格納するディレクトリを作成します。
- mkdir /etc/openvpn/easy-rsa/keys
次に、証明書のパラメータを設定します。 nanoまたはお気に入りのテキストエディタを使用して変数ファイルを開きます。
- nano /etc/openvpn/easy-rsa/vars
red でマークされている以下の変数は、好みに応じて変更する必要があります。
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.key
と server.crt
.
以下、同じファイルで、正しい証明書を指定します。 以前に変更されたブロックの直後にある行を探します。
# X509 Subject Field
export KEY_NAME="EasyRSA"
変化する KEY_NAME
のデフォルト値 EasyRSA
目的のサーバー名に変更します。 このチュートリアルでは、名前を使用します server
.
# X509 Subject Field
export KEY_NAME="server"
保存して終了。
次に、組み込みのOpenSSLツールを使用してDiffie-Helmanパラメーターを生成します。 dhparam
; 数分かかるかも知れません。
The -out
flagは、新しいパラメータを保存する場所を指定します。
- openssl dhparam -out /etc/openvpn/dh2048.pem 2048
これで証明書が生成され、キーを生成するときが来ました。
まず、に切り替えます easy-rsa
ディレクトリ。
- cd /etc/openvpn/easy-rsa
これで、CA自体のセットアップを開始できます。 まず、公開鍵インフラストラクチャ(PKI)を初期化します。
前のドット(。)とスペースに注意してください ./vars
指図。 これは、現在の作業ディレクトリ(ソース)を意味します。
- . ./vars
次の警告が出力されます。 警告で指定されたディレクトリは空ですので、心配しないでください。 NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
.
次に、インストールを妨げる可能性のある他のすべてのキーをクリアします。
- ./clean-all
最後に、OpenSSLコマンドを使用してCAを構築します。 このコマンドは、以前に入力された「識別名」変数の確認を求めるプロンプトを表示します。 プレス ENTER
既存の値を受け入れます。
- ./build-ca
プレス ENTER
で値を設定するだけなので、各プロンプトを通過します vars
ファイル。
これで認証局が設定されました。
ステップ6—サーバーの証明書とキーを生成する
このセクションでは、OpenVPNサーバーをセットアップして起動します。
まず、まだから働いています /etc/openvpn/easy-rsa
、サーバー名を使用してキーを作成します。 これは以前に次のように指定されました KEY_NAME
構成ファイル内。 このチュートリアルのデフォルトは server
.
- ./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]
次に、成功を示す次のプロンプトが表示されます。
OutputWrite out database with 1 new entries
Data Base Updated
手順7—サーバーの証明書とキーを移動する
証明書とキーをにコピーします /etc/openvpn
、OpenVPNはそのディレクトリでサーバーのCA、証明書、およびキーを検索するため。
- cp /etc/openvpn/easy-rsa/keys/{server.crt,server.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: 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
.
- ./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接続自体の識別子として使用します。 代わりに、複製する必要があります client.ovpn
VPNの名前タグをオペレーティングシステムに配置したいものに変更します。 例:work.ovpnはworkとして識別され、school.ovpnはschoolとして識別されます。
OpenVPNサーバーのIPアドレスが含まれるように各クライアントファイルを変更して、何に接続するかがわかるようにする必要があります。 開ける client.ovpn
nanoまたはお気に入りのテキストエディタを使用します。
- nano /etc/openvpn/easy-rsa/keys/client.ovpn
まず、で始まる行を編集します remote
. 変化する my-server-1
に your_server_ip
.
# 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 nobody
と group nogroup
、私たちがしたように server.conf
ステップ1で。 注:これはWindowsには適用されないため、スキップできます。 完了すると、次のようになります。
# 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.crt
と client.ovpn
ファイルはすべてのクライアントで同じです。 これらの2つのファイルもダウンロードしてください。 注意してください ca.crt
ファイルは他のディレクトリとは異なるディレクトリにあります。
/etc/openvpn/easy-rsa/keys/client.ovpn
/etc/openvpn/ca.crt
この転送を実行するために使用される正確なアプリケーションは、選択とデバイスのオペレーティングシステムによって異なりますが、アプリケーションでバックエンドでSFTP(SSHファイル転送プロトコル)またはSCP(セキュアコピー)を使用する必要があります。 これにより、暗号化された接続を介してクライアントのVPN認証ファイルが転送されます。
これは、次のコマンドを使用したSCPコマンドの例です。 client1
例。 ファイルを配置します client1.key
ローカルコンピュータのDownloadsディレクトリに移動します。
- 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
ファイル。 完了すると、次のようになります。
# 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サーバーに接続するためのよりユーザーフレンドリーなアプリケーションがあります。 プラットフォーム固有の手順については、このチュートリアルのステップ5を参照してください。
結論
おめでとう! これで、OpenVPNサーバーとクライアントファイルが機能します。
OpenVPNクライアントから、 Googleを使用して接続をテストし、パブリックIPを明らかにすることができます。 クライアントで、OpenVPN接続を開始する前と後に1回ロードします。 IPアドレスを変更する必要があります。