Debian 11でOpenVPNサーバーをセットアップする方法
以下の文章を日本語で言い換えてください(選択肢は一つだけで結構です):
イントロダクション
チームは、信頼できないネットワークを介してリモート場所から内部リソースにプライベートかつ安全にアクセスする必要があります。仮想プライベートネットワーク(VPN)を使用することで、それが可能になります。VPNサーバーは、リモートユーザーがプライベートネットワークに接続しているかのように動作し、SSHジャンプサーバーと比べて、より柔軟で適切な解決策です。ユーザーを認証し、彼らのデバイスとプライベートネットワーク間に暗号化されたトンネルを作成し、ネットワーク全体とインターネットへの安全なポータルとして機能します(設定によっては)。
商用のVPNを考えるかもしれませんが、このチュートリアルにあるような無料のVPNを自分で運用することもできます。OpenVPNは、さまざまな設定に対応したフル機能のオープンソースのSecure Socket Layer(SSL)VPNソリューションです。このチュートリアルでは、Debian 11サーバー上にOpenVPNサーバーを設定し、Windows、macOS、Linux、iOS、および/またはAndroidからアクセスする方法を設定します。
Note
詳細については、このページをご覧ください。
必要な前提条件
このチュートリアルを完了するためには、次のものが必要です:
- Two Debian 11 servers: one to host your OpenVPN service, and one to serve as your certificate authority (CA).
- A non-root user with sudo privileges on both servers. You can follow our Debian 11 Initial Server Setup guide to set up a user with appropriate permissions. That tutorial will also set up a firewall, which is assumed to be in place on both servers throughout this guide.
- Easy-RSA installed on both servers. This is the utility you will use to manage the certificates for your VPN. Follow Steps 1–2 of this guide on your VPN server, and follow Steps 1–3 on your CA server.
運用上は、自分のOpenVPNサーバーやローカルマシンからCAを動かすことは技術的に可能ですが、インターネットに常時接続されている別のサーバーにCA(特にその秘密鍵)を保管する方が安全です。VPNサーバーを24時間365日インターネットに接続したままにする予定である場合、攻撃者による侵害のリスクが高まる可能性があります。公開サーバーにCAの秘密鍵を保管することは避けるべきであり、攻撃者が秘密鍵にアクセスできた場合、新しい証明書に署名することができ、VPNへのアクセス権限を得る可能性があります。公式のOpenVPNドキュメントによれば、CAは、証明書リクエストのインポートと署名に専用されたスタンドアロンサーバーに配置する必要があります。
最後に、これらのサーバーを設定する際にパスワード認証を無効にすると、このガイドの後半でこれらのサーバー間でファイルを転送する際に問題が発生する可能性があることに注意してください。この問題を解決するためには、各サーバーでパスワード認証を再度有効にすることができます。または、各サーバーに対してSSHキーペアを生成し、OpenVPNサーバーの公開SSHキーをCAマシンのauthorized_keysファイルに追加し、逆も行うことができます。これらの解決策のいずれかを実行する手順については、「Debian 11でSSHキーを設定する方法」を参照してください。
これらの前提条件が整っている場合には、このチュートリアルのステップ1に進むことができます。
ステップ1 – OpenVPNのインストール
まずはじめに、VPNサーバーのパッケージインデックスを更新し、OpenVPNをインストールしてください。OpenVPNはDebianのデフォルトのリポジトリに利用できるため、インストールにはaptコマンドを使用できます。
- sudo apt update
- sudo apt install openvpn
これでOKです。既に両方のサーバーに前提条件としてEasy-RSAをインストールし、CAも初期化されましたので、VPNサーバーの証明書を生成する準備が整いました。
ステップ2: サーバー証明書、鍵、暗号化ファイルの作成
OpenVPNサーバーでは、ルート以外のユーザーのホームディレクトリ内の/easy-rsaディレクトリに移動し、easyrsaスクリプトを実行します。その後、機械のための一般名を指定してgen-reqオプションを使用します。この一般名は何でも構いませんが、説明的なものにすると役立ちます。このチュートリアルでは、OpenVPNサーバーの一般名は単純に「サーバー」です。また、nopassオプションも含めるようにしてください。これを行わないと、リクエストファイルにパスワードが設定され、後で許可の問題が発生する可能性があります。
Note
- cd ~/easyrsa
- ./easyrsa gen-req server nopass
スクリプトは、証明書署名要求(CSR)に表示される共通名を入力するように促します。デフォルトでは、./easyrsa gen-req に渡した名前(たとえば、サーバー)が表示されます。デフォルトの名前を受け入れるには、ENTERキーを押すか、異なる名前を入力してください。
これにより、サーバーのプライベートキーとserver.reqという名前の証明書リクエストファイルが作成されます。サーバーキーを/etc/openvpn/ディレクトリにコピーしてください。
- sudo cp ~/easy-rsa/pki/private/server.key /etc/openvpn/
安全な方法(以下の例のようにSCPなど)を使用して、server.reqファイルをCAマシンに転送してください。
- scp ~/easy-rsa/pki/reqs/server.req sammy@your_CA_ip:/tmp
次に、CAマシンで、~/easy-rsaディレクトリに移動してください。
- cd ~/easy-rsa
「easyrsa」スクリプトを使用して、サーバー.reqファイルをインポートします。CSRを作成する際に入力したコモンネームをファイルパスに続けて入力してください。
- ./easyrsa import-req /tmp/server.req server
その後、sign-reqオプションを使用してeasyrsaを実行し、リクエストタイプとコモンネームでリクエストに署名してください。リクエストタイプはクライアントまたはサーバーのどちらかを使用できますので、OpenVPNサーバーの証明書リクエストの場合は必ずサーバーリクエストタイプを使用してください。
- ./easyrsa sign-req server server
以下の日本語での表現を1つ選んで言い換えてください:
「出力結果で、信頼できるソースからのリクエストであることを確認するように求められます。 ‘はい’ と入力してENTERキーを押して、これを確認してください」
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.
Request subject, to be signed as a server certificate for 825 days:
subject=
commonName = server
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
前提条件でリストされているチュートリアルに従ってCAキーを暗号化した場合、この時点でパスフレーズが要求されます。
次に、安全な方法を使用して署名された証明書をVPNサーバーに転送してください。
- scp pki/issued/server.crt sammy@your_server_ip:/tmp
VPNサーバーにもca.crtファイルを転送してください。
- scp pki/ca.crt sammy@your_server_ip:/tmp
あなたのOpenVPNサーバーは、server.crtに署名したエンティティを信頼できることを知るために、ca.crtが必要です。
次に、OpenVPNサーバー上で、server.crtとca.crtファイルを/etc/openvpn/ディレクトリにコピーしてください。
- sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/
その後、~/easy-rsaディレクトリに移動してください。
- cd ~/easy-rsa
そこから、キー交換中に使用する強力なDiffie-Hellmanキーを作成するために、次のように入力してください。
- ./easyrsa gen-dh
少し時間がかかるかもしれませんが、完了したらHMAC署名を生成して、サーバーのTLS整合性検証機能を強化してください。
- sudo openvpn –genkey secret ta.key
コマンドが完了したら、2つの新しいファイルを/etc/openvpn/ディレクトリにコピーしてください。
- sudo cp ~/easy-rsa/ta.key /etc/openvpn/
- sudo cp ~/easy-rsa/pki/dh.pem /etc/openvpn/
それにより、サーバーで必要なすべての証明書およびキーファイルが生成されました。OpenVPNサーバーにアクセスするために、クライアントマシンが使用する対応する証明書とキーを作成する準備が整いました。
ステップ3 — クライアント証明書とキーペアの生成
クライアントマシンで秘密鍵と証明書リクエストを生成し、それをCAに署名してもらうために送ることができますが、このガイドではVPNサーバで証明書リクエストを生成するプロセスを紹介します。これにより、必要なすべての鍵、証明書、および設定オプションを含むクライアント設定ファイルを自動的に生成するサーバースクリプトを作成できます。通常、メインのクライアント設定ファイルでは、別々の鍵と証明書ファイルのファイル名が指定され、それぞれのクライアントに複数のファイルを配布する必要があります。しかし、VPNに参加するプロセスを効率化するために、鍵と証明書の内容をメインの設定ファイル自体に含める方がはるかに良いです。その単一のクライアント設定ファイルは、ステップ8で生成します。
この手順ではまず、クライアントの鍵と証明書を生成します。複数のクライアントを持っている場合は、それぞれに対してこのプロセスを繰り返すことができます。ただし、各クライアントに対してスクリプトにユニークな名前値を渡す必要があります。このチュートリアル全体で、最初の証明書/鍵ペアは「client1」と呼ばれています。
VPNサーバー上では、クライアント証明書とキーファイルを格納するために、ホームディレクトリ内にディレクトリ構造を作成して始めましょう。
- mkdir -p ~/client-configs/keys
このディレクトリにクライアントの証明書/鍵ペアと設定ファイルを保存するため、セキュリティ対策として、そのパーミッションを今すぐロックダウンする必要があります。
- chmod -R 700 ~/client-configs
その後、「~/easy-rsa」ディレクトリに戻り、easyrsaスクリプトをgen-reqオプションとnopassオプションと共に実行し、クライアントのコモンネームを指定します。
- cd ~/easy-rsa
- ./easyrsa gen-req client1 nopass
【日本語での言い換え】
共通の名前を確認するためにENTERキーを押してください。それから、先ほど作成した/client-configs/keys/ディレクトリにclient1.keyファイルをコピーしてください。
- cp pki/private/client1.key ~/client-configs/keys/
次に、セキュアな方法を用いて、クライアント1の.reqファイルをあなたのCAマシンに転送してください。
- scp pki/reqs/client1.req sammy@your_CA_ip:/tmp
あなたのCAマシンで、~/easy-rsaディレクトリに移動し、証明書リクエストをインポートしてください。
- cd ~/easy-rsa
- ./easyrsa import-req /tmp/client1.req client1
前の手順でサーバーに対して行ったように、このリクエストにも署名をしてください。ただし、今回はクライアントのリクエストタイプを明確に指定するようにしてください。
- ./easyrsa sign-req client client1
プロンプトで、証明書リクエストに署名したい意図があることと、それが信頼できるソースから来たことを確認する場合は、はいと入力してください。
Type the word ‘yes’ to continue, or any other input to abort. Confirm request details: yes
再度、もしCAキーを暗号化している場合、ここでパスフレーズを入力するように求められます。
これにより、client1.crtという名前のクライアント証明書ファイルが作成されます。このファイルをサーバーに転送してください。
- scp pki/issued/client1.crt sammy@your_server_ip:/tmp
あなたのOpenVPNサーバー上で、クライアント証明書を/client-configs/keys/ディレクトリにコピーしてください。
- cp /tmp/client1.crt ~/client-configs/keys/
次に、ca.crtとta.keyファイルを/client-configs/keys/ディレクトリにもコピーしてください。
- sudo cp ~/easy-rsa/ta.key ~/client-configs/keys/
- sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/
それによって、サーバーとクライアントの証明書とキーがすべて生成され、適切なディレクトリに保存されました。これらのファイルを使用してまだいくつかのアクションを実行する必要がありますが、それはステップ8で行われます。今のところ、サーバーでOpenVPNを設定することに移ってください。
ステップ4 — OpenVPNサービスの設定
あなたのクライアント証明書とサーバー証明書、そしてキーの生成が完了しましたので、これらの資格情報を使用するためにOpenVPNサービスを設定できます。
最初に、セットアップの基盤として使用するために、サンプルのOpenVPN設定ファイルを設定ディレクトリにコピーしてください。
- sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/
ご希望のテキストエディタでサーバーの設定ファイルを開いてください。
- sudo nano /etc/openvpn/server.conf
tls-authディレクティブを探して、HMACセクションを見つけてください。この行はすでにコメント解除されているはずですが、そうでない場合は「;」を削除してコメント解除してください。
「/etc/openvpn/server.conf」
tls-auth ta.key 0 # This file is secret
次に、コメントアウトされた暗号行を探して、暗号化暗号に関するセクションを見つけてください。AES-256-CBC暗号は高い暗号化レベルを提供し、十分にサポートされています。また、この行は既にコメント解除されているはずですが、もしコメント解除されていない場合は、単に前にある「;」を削除してください。
「/etc/openvpn/server.conf」というファイルです。
cipher AES-256-CBC
以下に、HMACメッセージダイジェストアルゴリズムを選択するためのauthディレクティブを追加してください。この場合、SHA256が良い選択肢です。
/etc/openvpn/server.conf「/etc/openvpn/server.conf」
auth SHA256
次に、Diffie-Hellmanパラメータを定義するdhディレクティブを含む行を見つけてください。Easy-RSAに最近の変更が加えられたため、Diffie-Hellmanキーのファイル名は、例示されたサーバー設定ファイルに記載されているものとは異なる場合があります。必要な場合は、以前のステップで生成したキーと一致するよう、ここに記載されているファイル名から2048を削除して変更してください。
「/etc/openvpn/server.conf」
dh dh.pem
最終的に、ユーザーとグループの設定を見つけ、コメントを解除するために各行の先頭の「;」を削除してください。
「/etc/openvpn/server.conf」
user nobody
group nogroup
ここまでのサンプルserver.confファイルの変更は、OpenVPNの正常な動作のために必要です。以下に示す変更は、オプションですが、一般的な使用例にも必要です。
オプションで、VPNを介してすべてのトラフィックをリダイレクトするためにDNSの変更を推進してください。
上記の設定は、2つのマシン間にVPN接続を作成しますが、接続をトンネル経由に強制することはありません。すべてのトラフィックをVPN経由でルーティングする場合は、おそらくクライアントコンピュータにDNS設定をプッシュすることを希望するでしょう。
この機能を有効にするためには、server.confファイルにいくつかの指示があります。redirect-gatewayセクションを見つけ、redirect-gatewayの行の先頭にあるセミコロン「;」を削除してコメントアウトを解除してください。
/etc/openvpn/server.confを日本語で翻訳すると、以下のようになります。
「/etc/openvpn/server.conf」
push "redirect-gateway def1 bypass-dhcp"
この下に、dhcp-optionセクションがあります。再び、これらの両行の前の「;」を削除してコメント解除してください。
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
これにより、クライアントはVPNトンネルをデフォルトゲートウェイとして使用するために、DNS設定を再構成することができます。
ポートとプロトコルを調整します(オプション)。
デフォルトでは、OpenVPNサーバーはポート1194とUDPプロトコルを使用してクライアント接続を受け入れます。クライアントが制限のあるネットワーク環境にいるため、別のポートを使用する必要がある場合は、ポートオプションを変更することができます。OpenVPNサーバーでウェブコンテンツをホスティングしていない場合、ポート443は一般的な選択肢です。なぜなら、通常ファイアウォールのルールを通過することが許可されているからです。
/etc/openvpn/server.conf「/etc/openvpn/server.conf」
# Optional!
port 443
よくあることですが、そのポートにプロトコルが制限されていることもあります。その場合は、UDPからTCPにプロトコルを変更してください。
# Optional!
proto tcp
もしプロトコルをTCPに切り替える場合は、explicit-exit-notifyディレクティブの値を1から0に変更する必要があります。このディレクティブはUDPのみで使用されるため、TCPを使用しながら変更しないとOpenVPNサービスの開始時にエラーが発生します。
「/etc/openvpn/server.conf」
# Optional!
explicit-exit-notify 0
異なるポートとプロトコルを使用する必要がない場合は、これらの3つの設定をデフォルトのままにしておくのが最適です。
デフォルトではない資格情報を指定するオプションがあります。
もしもStep2の./easyrsa gen-req コマンドでサーバ証明書のために異なる名前を選択した場合は、表示される.certと.keyの行を適切な.crtと.keyファイルに向けて修正してください。もしデフォルトの名前である「server」を使用した場合は、既に正しく設定されています。
「/etc/openvpn/server.conf」
cert server.crt
key server.key
作業が終わったら、ファイルを保存して閉じてください。
あなたのサーバーのOpenVPN設定に必要な変更を経て、特定の利用方法に合わせて、サーバーのネットワーキングに変更を加えることができます。
ステップ5- サーバーネットワークの設定を調整する
OpenVPNがVPN経由でトラフィックを正しくルーティングできるように、サーバーのネットワーキング構成のいくつかの側面を調整する必要があります。その中で最初に必要なのはIPフォワーディングです。これはIPトラフィックをどこにルーティングするかを決定するための方法です。
/etc/sysctl.confファイルを修正して、サーバーのデフォルトのIPフォワーディング設定を調整してください。
- sudo nano /etc/sysctl.conf
中にある、net.ipv4.ip_forwardを設定しているコメント行を探してください。この設定を有効にするために、行の先頭の「#」を削除してコメントを外してください。
以下の内容を日本語で表現すると、次のようになります:
「/etc/sysctl.conf」
net.ipv4.ip_forward=1
完了したら、ファイルを保存して閉じてください。
ファイルを読み込んで現在のセッションに値を調整するには、以下のコマンドを入力してください。
- sudo sysctl -p
net.ipv4.ip_forward = 1
Debian 11の初期サーバーセットアップガイドに従ってUFWファイアウォールを設置している場合、ファイアウォールは既に機能しているはずです。不要なトラフィックをブロックするためにファイアウォールを使用するかどうかに関わらず(ほとんどの場合、使用することをおすすめします)、このガイドではサーバーへの一部のトラフィックを操作するためにファイアウォールが必要です。ファイアウォールのいくつかのルールを変更する必要があります。これにより、クライアントの接続を正しくルーティングするために、アドレス変換を提供するiptablesの概念であるマスカレードが有効になります。
ファイアウォールの設定ファイルを開く前に、まずマスカレードルールを追加するために自分のマシンのパブリックネットワークインターフェースを見つける必要があります。これを行うには、次のように入力してください。
- ip route | grep default
コマンドの出力に表示される「dev」に続く文字列があなたの公開インターフェースです。以下の出力例では、eth0という名前のインターフェースがハイライトされています。
default via 203.0.113.1 dev eth0 proto static
デフォルトルートに関連するインターフェースがある場合、適切な設定を追加するために/etc/ufw/before.rulesファイルを開いてください。
- sudo nano /etc/ufw/before.rules
通常、UFWのルールはufwコマンドを使用して追加されます。ただし、before.rulesファイルにリストされたルールは、通常のUFWのルールが読み込まれる前に読み込まれ、配置されます。ファイルの上部に、下記のハイライトされた行を追加してください。これにより、natテーブルのPOSTROUTINGチェーンのデフォルトポリシーが設定され、VPNからのトラフィックがマスカレードされます。以下の -A POSTROUTING 行のeth0を、上記のコマンドで見つけたインターフェースに置き換えることをお忘れなく。
#
# 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 (change to the interface you discovered!)
-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にデフォルトで転送パケットを許可するように指示する必要があります。これを行うには、/etc/default/ufw ファイルを開いてください。
- sudo nano /etc/default/ufw
中に入り、DEFAULT_FORWARD_POLICYの指示を見つけ、値をDROPからACCEPTに変更してください。
DEFAULT_FORWARD_POLICY="ACCEPT"
おわったら、ファイルを保存して閉じてください。
次に、ファイアウォール自体を調整して、OpenVPNへのトラフィックを許可してください。もし/etc/openvpn/server.confファイルでポートとプロトコルを変更していない場合は、UDPトラフィックをポート1194に開放する必要があります。もしポートおよび/またはプロトコルを変更した場合は、選択した値で置き換えてください。
また、前提チュートリアルの完了時にSSHポートを追加しなかった場合は、こちらでも追加してください。
- sudo ufw allow 1194/udp
- sudo ufw allow OpenSSH
これらのルールを追加した後で、UFWを無効にしてから再度有効にすることで、変更した全てのファイルからの変更をロードしてUFWを再起動してください。
- sudo ufw disable
- sudo ufw enable
あなたのサーバーは、OpenVPNトラフィックを正しく処理するように設定されました。
ステップ6 — OpenVPNサービスの起動と有効化
あなたのサーバーでOpenVPNサービスを開始する準備がようやく整いました。これはsystemdユーティリティのsystemctlを使用して行います。
- sudo systemctl start openvpn@server
このコマンドは、設定ファイルとして /etc/openvpn/server.conf を使用して openvpn サービスを起動します。もし openvpn@server2 と指定した場合、systemd はサービスの起動時にファイル名 /etc/openvpn/server2.conf を使用します。
タイプして、サービスが正常に開始されていることを二重チェックしてください。
- sudo systemctl status openvpn@server
もし全てうまくいけば、あなたの出力はこのようになるでしょう。
● openvpn@server.service – OpenVPN connection to server Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled) Active: active (running) since Wed 2022-12-21 03:39:24 UTC; 29s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Main PID: 3371 (openvpn) Status: “Initialization Sequence Completed” Tasks: 1 (limit: 3587) Memory: 1.2M CGroup: /system.slice/system-openvpn.slice/openvpn@server.service └─3371 /usr/sbin/openvpn –daemon ovpn-server –status /run/openvpn/server.status 10 –cd /etc/openvpn –config /etc/openvpn/server.conf –writepid /run/openvpn/
「OpenVPNのtun0インターフェースが利用可能であることも、次のように入力して確認することができます。」
- ip addr show tun0
これは設定されたインターフェースを出力します。
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100 link/none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 valid_lft forever preferred_lft forever inet6 fe80::dd60:3a78:b0ca:1659/64 scope link stable-privacy valid_lft forever preferred_lft forever
サービスを開始した後、自動的に起動するように有効にしてください。
- sudo systemctl enable openvpn@server
ご利用のOpenVPNサービスは、現在稼働しています。ただし、使用する前に、まずクライアントマシンのための設定ファイルを作成する必要があります。このチュートリアルではすでに、クライアントのための証明書/キーペアの作成方法について説明しました。次のステップでは、クライアント設定ファイルを生成するためのインフラストラクチャの作成方法を説明します。
ステップ7 – クライアント設定インフラの作成
OpenVPNクライアントの設定ファイルの作成はやや手間がかかる可能性があります。なぜなら、各クライアントは独自の設定ファイルを持ち、それぞれがサーバーの設定ファイルで指定された設定と一致している必要があるからです。1つのクライアントにしか使用できない単一の設定ファイルを作成する代わりに、この手順ではクライアント設定のインフラストラクチャを構築するプロセスを示しています。これにより、ベースの設定ファイルとクライアントの固有の証明書とキーを組み合わせて、クライアントの設定ファイルを動的に生成することができます。
はじめに、以前に作成したclient-configsディレクトリ内にクライアント設定ファイルを保存するための新しいディレクトリをOpenVPNサーバー上に作成してください。
- mkdir -p ~/client-configs/files
次に、クライアント設定ファイルの例をクライアント設定ディレクトリにコピーして、基本設定として使用してください。
- cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
あなたのテキストエディタで、この新しいファイルを開いてください。
- nano ~/client-configs/base.conf
内部で、リモートディレクティブを見つけてください。これにより、クライアントはあなたのOpenVPNサーバーアドレス(OpenVPNサーバーの公開IPアドレス)に接続されます。もしOpenVPNサーバーの待ち受けポートを変更することを決めた場合、1194を選択したポートに変更する必要があります。
~/client-configs/base.conf~/client-configs/base.confを日本語で言い換えてください。
. . .
# 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
. . .
サーバーの設定で使用している値とプロトコルが一致していることを確認してください。
proto udp
次に、ユーザーとグループの指示文の「;」を各行の先頭から削除して、コメントを解除してください。
以下のテキスト「~/client-configs/base.conf」を日本語で言い換えてください。1つのオプションで結構です。
~/クライアント設定/ベースファイル.conf
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup
直ぐに証明書と鍵の全内容を基本ファイルに追加するため、caファイル、certファイル、およびkeyファイルを設定する指示を見つけてください。これらの指示をコメントアウトしてください。
~/client-configs/base.conf→ユーザー/クライアント設定/base.conf
# SSL/TLS parms.
# See the server config file for more
# description. It's best to use
# a separate .crt/.key file pair
# for each client. A single ca
# file can be used for all clients.
#ca ca.crt
#cert client.crt
#key client.key
同様に、tls-authディレクティブをコメントアウトし、ta.keyを直接クライアントの設定ファイルに追加してください。
~/client-configs/base.conf → ~/client-configs/base.conf
# If a tls-auth key is used on the server
# then every client must also have the key.
#tls-auth ta.key 1
/etc/openvpn/server.conf ファイルで設定した暗号化と認証設定をミラーで反映してください。
~/client-configs/base.conf〜/client-configs/base.conf
cipher AES-256-CBC
auth SHA256
次に、ファイルのどこかにキー方向の指令を追加してください。クライアントマシンでVPNが正しく機能するために、これを「1」に設定する必要があります。
ホームディレクトリ/クライアント設定/ベース.conf
key-direction 1
最後に、コメントアウトされた行を数行追加してください。これらのディレクティブはクライアントの設定ファイルに含めることができますが、/etc/openvpn/update-resolv-conf ファイルが存在するLinuxクライアントでのみ有効にする必要があります。このスクリプトは、LinuxクライアントのDNS情報を更新するためにresolvconfユーティリティを使用しています。
# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
お客様のクライアントがLinuxを実行しており、/etc/openvpn/update-resolv-conf ファイルを持っている場合は、生成された後にクライアントの設定ファイルからこれらの行のコメントを解除してください。
終わりましたら、ファイルを保存して閉じてください。
次に、~/client-configs/filesディレクトリに証明書、キー、暗号化ファイル、および基本設定を含む新しい設定ファイルを作成するシンプルなスクリプトを作成します。~/client-configsディレクトリ内にmake_config.shという新しいファイルを開いてください。
- nano ~/client-configs/make_config.sh
内部で、次のコンテンツを追加してください。ただし、”sammy” をサーバーの非ルートユーザーアカウントに変更してください。
#!/bin/bash
# First argument: Client identifier
KEY_DIR=/home/sammy/client-configs/keys
OUTPUT_DIR=/home/sammy/client-configs/files
BASE_CONFIG=/home/sammy/client-configs/base.conf
cat ${BASE_CONFIG} \
<(echo -e '<ca>') \
${KEY_DIR}/ca.crt \
<(echo -e '</ca>\n<cert>') \
${KEY_DIR}/${1}.crt \
<(echo -e '</cert>\n<key>') \
${KEY_DIR}/${1}.key \
<(echo -e '</key>\n<tls-auth>') \
${KEY_DIR}/ta.key \
<(echo -e '</tls-auth>') \
> ${OUTPUT_DIR}/${1}.ovpn
終わったら、ファイルを保存して閉じてください。
次に進む前に、次のようにしてこのファイルを実行可能にマークしてください。
- chmod 700 ~/client-configs/make_config.sh
このスクリプトは、作成したbase.confファイルのコピーを作成し、クライアント用に作成したすべての証明書と鍵ファイルを収集し、その内容を抽出し、base構成ファイルのコピーに追加し、この内容を新しいクライアント構成ファイルにエクスポートします。つまり、クライアントの構成、証明書、および鍵ファイルを個別に管理する必要がなく、必要な情報はすべて1つの場所に保存されます。その利点は、将来においてクライアントを追加する必要がある場合、このスクリプトを中央の場所から実行するだけで、すべての必要な情報が1つの、簡単に配布可能なファイルに含まれた構成ファイルを迅速に作成できることです。
新しいクライアントを追加するたびに、このスクリプトを実行して設定ファイルを生成する前に、新しいキーと証明書を生成する必要があることに注意してください。次のステップで、このスクリプトを使用する練習ができます。
ステップ8 – クライアント設定の生成
もしガイドに従って進めたなら、ステップ3で、クライアント証明書としてclient1.crtとclient1.keyという名前のキーを作成しました。これらの認証情報に対する設定ファイルを生成するには、~/client-configsディレクトリに移動し、前のステップの最後に作成したスクリプトを実行してください。
- cd ~/client-configs
- sudo ./make_config.sh client1
あなたの~/client-configs/filesディレクトリにclient1.ovpnという名前のファイルが作成されます。
- ls ~/client-configs/files
client1.ovpn
あなたはクライアントとして使用するデバイスにこのファイルを転送する必要があります。例えば、これはあなたのローカルコンピューターまたはモバイルデバイスのどちらかです。
この転送を行うために使用される具体的なアプリケーションは、デバイスのオペレーティングシステムと個人の好みによって異なりますが、信頼性とセキュリティの高い方法は、バックエンドでSFTP(SSHファイル転送プロトコル)またはSCP(セキュアコピー)を使用することです。これにより、クライアントのVPN認証ファイルが暗号化された接続で転送されます。
以下は、ローカルコンピューター(macOSまたはLinux)から実行できるclient1.ovpnの例を使用したSFTPコマンドです。.ovpnファイルはホームディレクトリに配置されます。
- sftp sammy@your_server_ip:client-configs/files/client1.ovpn ~/
以下には、サーバーからローカルコンピュータにファイルを安全に転送するためのいくつかのツールとチュートリアルがあります。
- How To Use SFTP to Securely Transfer Files with a Remote Server
- WinSCP
- FileZilla
- Cyberduck
ステップ9:クライアントの設定をインストールします。
このセクションでは、Windows、macOS、Linux、iOS、AndroidにクライアントVPNプロファイルをインストールする方法について説明します。これらのクライアントの手順は互いに依存していないため、ご自身のデバイスに適用されるものに直接移動してください。
OpenVPNの接続名は、.ovpnファイルに指定した名前と同じになります。このチュートリアルに関しては、接続名はclient1.ovpnとなり、最初に生成したクライアントファイルと一致します。
ウィンドウズ
インストールする
OpenVPNのダウンロードページから、Windows用のOpenVPNクライアントアプリケーションをダウンロードしてください。Windowsのバージョンに合わせた適切なインストーラーバージョンを選択してください。
Note
OpenVPNをインストールした後、.ovpnファイルを以下にコピーしてください。
C:\Program Files\OpenVPN\config
もしもファイル転送プログラム(例:WinSCP)を管理者として実行していなければ、この場所への直接のファイル転送はできないかもしれません。管理者として実行するか、ファイルを管理者権限のないユーザーのホームディレクトリに転送し、それからローカルでC:\Program Files\OpenVPN\configにコピーし、管理者の場所へのコピーを許可するよう指示があった場合に承認してください。
OpenVPNを起動すると、自動的にプロファイルが認識され、利用可能になります。
OpenVPNを使用する場合は、管理者アカウントでも毎回管理者として実行する必要があります。VPNを使用するたびに右クリックして「管理者として実行」を選択する手間を省くために、管理者アカウントから予め設定する必要があります。また、一般ユーザーはOpenVPNを使用するために管理者のパスワードを入力する必要があります。一方で、クライアント側のOpenVPNアプリケーションに管理者権限がないと、一般ユーザーはサーバーに正しく接続できないため、昇格権限は必要です。
OpenVPNアプリを常に管理者として実行するには、ショートカットアイコンを右クリックしてプロパティに移動します。互換性タブの一番下にある「すべてのユーザーのために設定を変更」ボタンをクリックしてください。新しいウィンドウで、「このプログラムを管理者として実行する」にチェックを入れ、適用ボタンをクリックしてください。
接続します
毎回OpenVPN GUIを起動するたびに、Windowsはこのプログラムがコンピューターに変更を加えることを許可するかどうか尋ねます。はいをクリックしてください。OpenVPNクライアントアプリケーションを起動すると、VPN接続自体は行わず、システムトレイにアプレットを表示するだけです。必要に応じてVPN接続のオン・オフができます。
OpenVPNを起動した後、システムトレイのアプレットに入り、OpenVPNアプレットアイコンを右クリックして接続を開始します。これにより、コンテキストメニューが表示されます。メニューの上部にあるclient1(それはあなたのclient1.ovpnプロファイルです)を選択し、接続を選択してください。
接続が確立される間、ログの出力を表示するステータスウィンドウが開き、クライアントが接続された際にメッセージが表示されます。
同じ方法でVPNを切断してください:システムトレイのアプリケーションアイコンに入って、OpenVPNのアプレットアイコンを右クリックし、クライアントプロファイルを選択し、切断をクリックしてください。
以下は、macOSの文を日本語で書き換えます。
– AppleのオペレーティングシステムであるmacOS
インストールする (Insutōru suru)
Tunnelblickは、macOS用の無料でオープンソースのOpenVPNクライアントです。Tunnelblickのダウンロードページから最新のディスクイメージをダウンロードできます。ダウンロードした.dmgファイルをダブルクリックし、インストールするための案内に従ってください。
インストールの最後に、Tunnelblickは設定ファイルがあるか尋ねます。設定ファイルを持っていると答え、Tunnelblickに終了させてください。Finderウィンドウを開き、client1.ovpnをダブルクリックします。Tunnelblickはクライアントプロファイルをインストールします。管理者権限が必要です。
繋ぐ (つなぐ)
アプリケーションフォルダ内のTunnelblickアイコンをダブルクリックして、Tunnelblickを起動します。Tunnelblickが起動されると、画面右上のメニューバーに接続を制御するためのTunnelblickアイコンが表示されます。アイコンをクリックし、次にクライアント1のメニューアイテムを選択してVPN接続を開始します。
リナックス
インストールする (Insutōru suru)
もしもLinuxを使っている場合、ディストリビューションに応じてさまざまなツールを利用することができます。また、デスクトップ環境やウィンドウマネージャーにも接続ユーティリティが含まれることもあります。
ただし、最も普遍的な接続方法はOpenVPNソフトウェアを使用することです。
Debianでは、サーバーと同じようにタイプしてインストールすることができます。
- sudo apt update
- sudo apt install openvpn
CentOSでEPELリポジトリを有効化してから、以下のコマンドを入力してインストールすることができます。
- sudo yum install epel-release
- sudo yum install openvpn
設定する
あなたのディストリビューションに/etc/openvpn/update-resolv-confスクリプトが含まれているか確認してください。
- ls /etc/openvpn
update-resolv-conf
次に、転送したOpenVPNクライアント設定ファイルを編集してください。
- nano client1.ovpn
もしupdate-resolv-confファイルを見つけることができたら、DNS設定を調整するために追加した3つの行にコメントを外してください。
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
CentOSを使用している場合は、グループディレクティブをnogroupからnobodyに変更して、配布されているグループに合わせてください。
group nobody
ファイルを保存して閉じてください。
今では、クライアントの設定ファイルにオープンVPNコマンドを指定するだけで、VPNに接続することができます。
- sudo openvpn –config client1.ovpn
これでVPNに接続できます。 (Kore de VPN ni setsuzoku dekimasu.)
iOS – 日本語では「アイオーエス」と呼ばれています。
インストールする
あなたのiPhoneまたはiPadのApp Storeから、公式のiOS OpenVPNクライアントであるOpenVPN Connectを検索してインストールします。次に、Appleのサポート記事に従って、クライアント1.ovpnファイルをローカルマシンからiOSデバイスに転送し、特にOpenVPNアプリケーションにコピーします。
今、iOSデバイスでOpenVPNアプリを起動してください。新しいプロファイルをインポートする準備ができていることを認識します。それを追加するためにADDをタップしてください。
接続
新しいプロファイルと共にOpenVPNが使える準備ができました。接続するにはCONNECTをタップしてください。すると、iOSはシステムの設定を通じてVPN構成を追加する許可をOpenVPNに対して求めます。Allowをタップし、FaceIDまたはTouchIDを使用して変更を承認してください。
Note
アンドロイド (Andoroido)
インストールする
Google Playストアを開いてください。Android OpenVPN Connectを検索し、インストールしてください。Android OpenVPNの公式クライアントアプリケーションです。
Android デバイスをUSBでコンピュータに接続し、.ovpn プロファイルをコピーすることで、転送することができます。または、SDカードリーダーがある場合は、デバイスのSDカードを取り外し、プロファイルをコピーしてから、カードをAndroidデバイスに挿入することもできます。
つなぐ
OpenVPNアプリを開始すると、インポートプロファイル画面が表示されます。ファイルタブをタップし、次に参照をタップして、client1.ovpnファイルを見つけて選択します。
ファイルを選択した後、アプリはプロファイルのインポートを促します。OKをタップしてください。
インポートプロファイル画面で、インポート後に接続するチェックボックスを確認し、右上隅の「追加」をタップしてください。
OpenVPNアプリケーションへの信頼を確認されます。接続を開始するためには「OK」を選択してください。VPNから切断するには、プロフィールページのスイッチを切り替えてください。
ステップ10- VPN接続のテスト(オプション)
Note
すべてがインストールされたら、簡単なチェックで正常に動作していることを確認します。VPN接続が有効になっていない状態で、ブラウザを開きDNSLeakTestにアクセスしてください。
このサイトでは、インターネットサービスプロバイダーから割り当てられたIPアドレスと、世界中の他の人にどのように表示されるかが表示されます。同じウェブサイトでDNS設定を確認するには、「拡張テスト」をクリックし、使用しているDNSサーバーを確認することができます。
オープンVPNクライアントをオープンVPNサーバーに接続し、ブラウザを更新してください。これにより、完全に異なるIPアドレス(VPNサーバーのもの)が表示され、それがあなたの世界への姿勢となります。さらに、DNSLeakTestの拡張テストにより、DNS設定が確認され、VPNにプッシュされたDNSリゾルバが使用されていることも確認されます。
以下のことを覚えておいてください:VPNクライアントのトラフィックをすべてOpenVPNサーバー経由でルーティングする設定を選んだ場合、Silicon CloudのvServer上で動作しているOpenVPNサーバーを通じてVPN接続されたクライアントがインターネット上で行うすべてのアクセスは、Silicon Cloudの帯域幅を消費します。アクティブなクライアントが多数いる場合、帯域幅の超過料金が発生する可能性があります。
ステップ11 – クライアント証明書の取り消し
オープンVPNサーバへのアクセスをさらに防止するために、時折クライアント証明書を取り消す必要がある場合があります。
それを行うために、CAマシン上の~/easy-rsaディレクトリに移動してください。
- cd ~/easy-rsa
次に、easyrsaスクリプトを revoke オプションとともに実行し、取り消したいクライアントの名前を指定してください。
- ./easyrsa revoke client2
これによって、はいを入力してもらって取り消しを確認するように求められます。
Please confirm you wish to revoke the certificate with the following subject: subject= commonName = client2 Type the word ‘yes’ to continue, or any other input to abort. Continue with revocation: yes
もしCAの秘密鍵にパスフレーズが設定されている場合は、指示が出たら入力してください。
アクションを確認した後、CAはクライアントの証明書を完全に無効にします。ただし、OpenVPNサーバーには現在、クライアントの証明書が無効化されたかどうかを確認する手段がありません。そのため、CAマシン上に証明書失効リスト(CRL)を作成し、必要に応じてCAのパスフレーズを再入力してください。
- ./easyrsa gen-crl
以下のように日本語に自然に言い換えます。一つのオプションのみ提供いたします:
この操作により、crl.pemというファイルが生成されます。安全にこのファイルをあなたのOpenVPNサーバーに転送してください。
- scp ~/easy-rsa/pki/crl.pem sammy@your_server_ip:/tmp
あなたのOpenVPNサーバーに、このファイルを/etc/openvpn/ディレクトリにコピーしてください。
- sudo cp /tmp/crl.pem /etc/openvpn
その後、OpenVPNサーバーの設定ファイルを開いてください。
- sudo nano /etc/openvpn/server.conf
ファイルの下部に、接続試行時にOpenVPNサーバーが作成した証明書失効リストを確認するように指示する「crl-verify」オプションを追加してください。
「/etc/openvpn/server.conf」
. . .
crl-verify crl.pem
ファイルを保存して閉じてください。
最後に、証明書の無効化を実装するためにOpenVPNを再起動してください。
- sudo systemctl restart openvpn@server
お客様は、古い認証情報を使用してもサーバーへの接続が成功しないようにする必要があります。
追加の顧客を取り消すには、次の手続きに従ってください。
-
- 以下のコマンドを使用して、クライアント名を指定して証明書を取り消す
-
- 新しいCRLを生成する
-
- 生成した新しいcrl.pemファイルをOpenVPNサーバーに転送し、古いリストを上書きするために/etc/openvpnディレクトリにコピーする
- OpenVPNサービスを再起動する
あなたは、以前にサーバーに発行したすべての証明書を取り消すために、このプロセスを使用することができます。
結論
新しいVPNの導入により、リモートチームメンバーは直接プライベートネットワークに接続しているかのように、安全に内部リソースに接続することができます。現在インターネットでアクセス可能な一部のリソースについては、新たに設定した公開鍵基盤よりもロバスト性の低い方法(例:HTTPベーシック認証)でセキュリティを確保している可能性があります。VPNの背後にプライベートネットワークに移行しましょう。たった1台のサーバーといくつかのオープンソースソフトウェアで、重要なデータとインフラを保護する大きな一歩を踏み出しました。
VPNに似たセキュリティとプライバシーツールのもう一つの種類はウェブプロキシです。VPNと同様に、ウェブプロキシはエンドユーザーと彼らがアクセスしたいインターネットリソースの間に中間人として機能し、エンドユーザーに匿名性を提供します。ウェブプロキシはウェブトラフィックのみを対象としており、暗号化は提供しないものの、VPNが不要な場合には便利なツールとなる可能性があります。もし興味があれば、Ubuntu 22.04でプライベート接続のためにSquid Proxyを設定する方法についてのチュートリアルをご覧ください。