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倍にします。 メインのコメントブロックとさらにいくつかのチャンクの後に、次の行を検索します。
/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.pem
をdh2048.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 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=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
パッケージをインストールします。
apt-get install ufw
次に、SSHを許可するようにUFWを設定します。
ufw allow ssh
このチュートリアルではOpenVPNoverUDPを使用するため、UFWはポート1194
を介したUDPトラフィックも許可する必要があります。
ufw allow 1194/udp
UFW転送ポリシーも設定する必要があります。 これは、プライマリ構成ファイルで行います。
nano /etc/default/ufw
次の行を探します。
/ etc / default / ufw
DEFAULT_FORWARD_POLICY="DROP"
これは、DROP
からACCEPT
に変更する必要があります。 完了すると、次のようになります。
/ etc / default / ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
保存して終了。
次に、接続されたクライアントのネットワークアドレス変換とIPマスカレードのためのUFWルールを追加します。
nano /etc/ufw/before.rules
次に、 OPENVPNRULESのredに領域を追加します。
/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を有効にできるようになりました。 コマンドプロンプトに入力します。
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 でマークされている以下の変数は、好みに応じて変更する必要があります。
/ 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
フラグは、新しいパラメーターを保存する場所を指定します。
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
vars
ファイルに値を設定しただけなので、ENTER
を押して各プロンプトを通過します。
これで認証局が設定されました。
ステップ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: 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.conf
のduplicate-cn
を参照してください。)
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-RSAkeys
ディレクトリにコピーします。 拡張子を.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アドレスが含まれるように各クライアントファイルを変更して、何に接続するかがわかるようにする必要があります。 nanoまたはお気に入りのテキストエディタを使用してclient.ovpn
を開きます。
nano /etc/openvpn/easy-rsa/keys/client.ovpn
まず、remote
で始まる行を編集します。 my-server-1
をyour_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 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/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ディレクトリに配置します。
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
変更を保存して終了します。 コードで証明書を追加します。
まず、認証局を追加します。
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アドレスを変更する必要があります。