Debian9でOpenVPNサーバーをセットアップする方法
序章
ホテルやコーヒーショップのWiFiなどの信頼できないネットワークに接続しているときに、スマートフォンやラップトップからインターネットに安全かつ確実にアクセスしたいですか? 仮想プライベートネットワーク(VPN)を使用すると、信頼できないネットワークをプライベートネットワーク上にいるかのようにプライベートかつ安全にトラバースできます。 トラフィックはVPNサーバーから出て、宛先への移動を続けます。
HTTPS接続と組み合わせると、この設定により、ワイヤレスログインとトランザクションを保護できます。 地理的な制限や検閲を回避し、場所と暗号化されていないHTTPトラフィックを信頼できないネットワークから保護することができます。
OpenVPN は、幅広い構成に対応するフル機能のオープンソースのSecure Socket Layer(SSL)VPNソリューションです。 このチュートリアルでは、Debian 9サーバー上にOpenVPNサーバーをセットアップし、Windows、macOS、iOS、Androidからのアクセスを構成します。 このチュートリアルでは、これらの各セットアップのインストールと構成の手順を可能な限り簡単にします。
注: DigitalOcean DropletにOpenVPNサーバーをセットアップする場合は、多くのホスティングプロバイダーと同様に、帯域幅の超過に対して課金されることに注意してください。 このため、サーバーが処理しているトラフィックの量に注意してください。
詳細については、このページを参照してください。
前提条件
このチュートリアルを完了するには、OpenVPNサービスをホストするためのDebian9サーバーにアクセスする必要があります。 このガイドを開始する前に、root以外のユーザーにsudo
権限を設定する必要があります。 Debian 9初期サーバーセットアップガイドに従って、適切な権限を持つユーザーをセットアップできます。 リンクされたチュートリアルでは、ファイアウォールも設定されます。これは、このガイド全体で使用されていると想定されています。
さらに、認証局(CA)として機能する別のマシンが必要になります。 OpenVPNサーバーまたはローカルマシンをCAとして使用することは技術的には可能ですが、VPNがセキュリティの脆弱性にさらされる可能性があるため、これはお勧めしません。 公式のOpenVPNドキュメントに従って、証明書要求のインポートと署名専用のスタンドアロンマシンにCAを配置する必要があります。 このため、このガイドでは、CAがsudo
権限と基本的なファイアウォールを持つroot以外のユーザーもいる別のDebian9サーバー上にあることを前提としています。
これらのサーバーの構成中にパスワード認証を無効にすると、このガイドの後半でサーバー間でファイルを転送するときに問題が発生する可能性があることに注意してください。 この問題を解決するには、各サーバーでパスワード認証を再度有効にすることができます。 または、サーバーごとにSSHキーペアを生成してから、OpenVPNサーバーの公開SSHキーをCAマシンのauthorized_keys
ファイルに追加することもできます。その逆も可能です。 これらのソリューションのいずれかを実行する方法については、 Debian9でSSHキーを設定する方法を参照してください。
これらの前提条件が整ったら、このチュートリアルのステップ1に進むことができます。
ステップ1—OpenVPNとEasyRSAのインストール
まず、 VPNサーバーのパッケージインデックスを更新し、OpenVPNをインストールします。 OpenVPNはDebianのデフォルトのリポジトリで利用できるので、インストールにapt
を使用できます。
sudo apt update sudo apt install openvpn
OpenVPNはTLS/SSLVPNです。 これは、サーバーとクライアント間のトラフィックを暗号化するために証明書を利用することを意味します。 信頼できる証明書を発行するには、独自の単純な認証局(CA)を設定します。 これを行うには、プロジェクトの公式GitHubリポジトリから、CA公開鍵インフラストラクチャ(PKI)の構築に使用するEasyRSAの最新バージョンをダウンロードします。
前提条件で述べたように、スタンドアロンサーバー上にCAを構築します。 このアプローチの理由は、攻撃者がサーバーに侵入できた場合、攻撃者がCA秘密鍵にアクセスし、それを使用して新しい証明書に署名し、VPNにアクセスできるようになるためです。 したがって、スタンドアロンマシンからCAを管理すると、許可されていないユーザーがVPNにアクセスするのを防ぐのに役立ちます。 また、さらなる予防策として、キーの署名に使用されていないときは、CAサーバをオフにしておくことをお勧めします。
CAおよびPKIインフラストラクチャの構築を開始するには、wget
を使用して、CAマシンとOpenVPNサーバーの両方のに最新バージョンのEasyRSAをダウンロードします。 最新バージョンを入手するには、公式のEasyRSA GitHubプロジェクトのリリースページに移動し、.tgz
で終わるファイルのダウンロードリンクをコピーして、次のコマンドに貼り付けます。
wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz
次に、tarballを抽出します。
cd ~ tar xvf EasyRSA-3.0.4.tgz
これで、サーバーとCAマシンに必要なすべてのソフトウェアが正常にインストールされました。 EasyRSAが使用する変数の構成と、サーバーとクライアントがVPNにアクセスするために必要なキーと証明書を生成するCAディレクトリの設定に進みます。
ステップ2—EasyRSA変数の構成とCAの構築
EasyRSAには、CAのいくつかの変数を定義するために編集できる構成ファイルがインストールされています。
CAマシンで、EasyRSAディレクトリに移動します。
cd ~/EasyRSA-3.0.4/
このディレクトリ内には、vars.example
という名前のファイルがあります。 このファイルのコピーを作成し、ファイル拡張子なしでコピーにvars
という名前を付けます。
cp vars.example vars
お好みのテキストエディタを使用して、この新しいファイルを開きます。
nano vars
新しい証明書のフィールドのデフォルトを設定する設定を見つけます。 次のようになります。
〜/ EasyRSA-3.0.4 / vars
. . . #set_var EASYRSA_REQ_COUNTRY "US" #set_var EASYRSA_REQ_PROVINCE "California" #set_var EASYRSA_REQ_CITY "San Francisco" #set_var EASYRSA_REQ_ORG "Copyleft Certificate Co" #set_var EASYRSA_REQ_EMAIL "[email protected]" #set_var EASYRSA_REQ_OU "My Organizational Unit" . . .
これらの行のコメントを解除し、強調表示された値を好きなように更新しますが、空白のままにしないでください。
〜/ EasyRSA-3.0.4 / vars
. . . set_var EASYRSA_REQ_COUNTRY "US" set_var EASYRSA_REQ_PROVINCE "NewYork" set_var EASYRSA_REQ_CITY "New York City" set_var EASYRSA_REQ_ORG "DigitalOcean" set_var EASYRSA_REQ_EMAIL "[email protected]" set_var EASYRSA_REQ_OU "Community" . . .
終了したら、ファイルを保存して閉じます。
EasyRSAディレクトリ内には、easyrsa
というスクリプトがあり、CAの構築と管理に関連するさまざまなタスクを実行するために呼び出されます。 init-pki
オプションを指定してこのスクリプトを実行し、CAサーバーで公開鍵インフラストラクチャを開始します。
./easyrsa init-pki
Output. . . init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /home/sammy/EasyRSA-3.0.4/pki
この後、build-ca
オプションを指定して、easyrsa
スクリプトを再度呼び出します。 これにより、CAが構築され、SSL証明書のパブリック側とプライベート側を構成するca.crt
とca.key
の2つの重要なファイルが作成されます。
ca.crt
は、CAの公開証明書ファイルであり、OpenVPNのコンテキストでは、サーバーとクライアントは、中間者攻撃を実行している人ではなく、同じ信頼のWebの一部であることを相互に通知するために使用します。 -中間者攻撃。 このため、サーバーとすべてのクライアントにはca.crt
ファイルのコピーが必要になります。ca.key
は、CAマシンがサーバーとクライアントのキーと証明書に署名するために使用する秘密キーです。 攻撃者がCAにアクセスし、次にca.key
ファイルにアクセスすると、攻撃者は証明書要求に署名してVPNにアクセスできるようになり、セキュリティが妨げられます。 これが、ca.key
ファイルがCAマシン上にのみあるべきであり、理想的には、追加のセキュリティ対策として証明書要求に署名しない場合、CAマシンをオフラインに保つ必要がある理由です。
CAを操作するたびにパスワードの入力を求められたくない場合は、次のようにnopass
オプションを指定してbuild-ca
コマンドを実行できます。
./easyrsa build-ca nopass
出力では、CAの一般名を確認するように求められます。
Output. . . Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
一般名は、認証局のコンテキストでこのマシンを参照するために使用される名前です。 CAの一般名には任意の文字列を入力できますが、簡単にするために、ENTER
を押してデフォルト名を受け入れます。
これで、CAが配置され、証明書要求への署名を開始する準備が整いました。
ステップ3—サーバー証明書、キー、および暗号化ファイルを作成する
CAの準備ができたので、サーバーから秘密鍵と証明書の要求を生成し、その要求をCAに転送して署名し、必要な証明書を作成できます。 また、暗号化プロセス中に使用されるいくつかの追加ファイルを自由に作成できます。
OpenVPNサーバーのEasyRSAディレクトリに移動することから始めます。
cd EasyRSA-3.0.4/
そこから、init-pki
オプションを指定してeasyrsa
スクリプトを実行します。 このコマンドはすでにCAマシンで実行されていますが、サーバーとCAには別々のPKIディレクトリがあるため、ここで実行する必要があります。
./easyrsa init-pki
次に、easyrsa
スクリプトを再度呼び出します。今回は、gen-req
オプションに続けて、マシンの一般名を指定します。 繰り返しになりますが、これは好きなものにすることができますが、説明的なものにすることが役立つ場合があります。 このチュートリアル全体を通して、OpenVPNサーバーの一般名は単に「サーバー」になります。 nopass
オプションも必ず含めてください。 そうしないと、リクエストファイルがパスワードで保護され、後で権限の問題が発生する可能性があります。
注:ここで「サーバー」以外の名前を選択した場合は、以下の手順の一部を調整する必要があります。 たとえば、生成されたファイルを/etc/openvpn
ディレクトリにコピーする場合は、正しい名前に置き換える必要があります。 また、後で/etc/openvpn/server.conf
ファイルを変更して、正しい.crt
および.key
ファイルを指すようにする必要があります。
./easyrsa gen-req server nopass
これにより、サーバーの秘密鍵とserver.req
という証明書要求ファイルが作成されます。 サーバーキーを/etc/openvpn/
ディレクトリにコピーします。
sudo cp ~/EasyRSA-3.0.4/pki/private/server.key /etc/openvpn/
安全な方法(以下の例ではSCPなど)を使用して、server.req
ファイルをCAマシンに転送します。
scp ~/EasyRSA-3.0.4/pki/reqs/server.req sammy@your_CA_ip:/tmp
次に、 CAマシンで、EasyRSAディレクトリに移動します。
cd EasyRSA-3.0.4/
easyrsa
スクリプトを再度使用して、server.req
ファイルをインポートし、共通名のファイルパスをたどります。
./easyrsa import-req /tmp/server.req server
次に、easyrsa
スクリプトをsign-req
オプションで実行し、続いてリクエストタイプと共通名を実行して、リクエストに署名します。 リクエストタイプはclient
またはserver
のいずれかであるため、OpenVPNサーバーの証明書リクエストには、必ずserver
リクエストタイプを使用してください。
./easyrsa sign-req server server
出力では、リクエストが信頼できるソースからのものであることを確認するように求められます。 yes
と入力し、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 3650 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
CAマシンからログアウトする前に、ca.crt
ファイルもサーバーに転送します。
scp pki/ca.crt sammy@your_server_ip:/tmp
次に、OpenVPNサーバーに再度ログインし、server.crt
およびca.crt
ファイルを/etc/openvpn/
ディレクトリにコピーします。
sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/
次に、EasyRSAディレクトリに移動します。
cd EasyRSA-3.0.4/
そこから、次のように入力して、鍵交換中に使用する強力なDiffie-Hellman鍵を作成します。
./easyrsa gen-dh
これが完了するまでに数分かかる場合があります。 完了したら、HMAC署名を生成して、サーバーのTLS整合性検証機能を強化します。
sudo openvpn --genkey --secret ta.key
コマンドが終了したら、2つの新しいファイルを/etc/openvpn/
ディレクトリにコピーします。
sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/ sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/
これで、サーバーに必要なすべての証明書とキーファイルが生成されました。 これで、クライアントマシンがOpenVPNサーバーにアクセスするために使用する対応する証明書とキーを作成する準備が整いました。
ステップ4—クライアント証明書とキーペアの生成
クライアントマシンで秘密鍵と証明書の要求を生成し、それをCAに送信して署名することもできますが、このガイドでは、サーバーで証明書の要求を生成するプロセスの概要を説明します。 これの利点は、必要なすべてのキーと証明書を含むクライアント構成ファイルを自動的に生成するスクリプトを作成できることです。 これにより、キー、証明書、および構成ファイルをクライアントに転送する必要がなくなり、VPNに参加するプロセスが合理化されます。
このガイドでは、単一のクライアントキーと証明書のペアを生成します。 複数のクライアントがある場合は、クライアントごとにこのプロセスを繰り返すことができます。 ただし、すべてのクライアントのスクリプトに一意の名前の値を渡す必要があることに注意してください。 このチュートリアル全体を通して、最初の証明書/キーのペアはclient1
と呼ばれます。
クライアント証明書とキーファイルを保存するために、ホームディレクトリ内にディレクトリ構造を作成することから始めます。
mkdir -p ~/client-configs/keys
クライアントの証明書/キーのペアと構成ファイルをこのディレクトリに保存するため、セキュリティ対策として、今すぐアクセス許可をロックダウンする必要があります。
chmod -R 700 ~/client-configs
次に、EasyRSAディレクトリに戻り、[X53X]およびnopass
オプションを使用して、クライアントの一般名とともにeasyrsa
スクリプトを実行します。
cd ~/EasyRSA-3.0.4/ ./easyrsa gen-req client1 nopass
ENTER
を押して一般名を確認します。 次に、client1.key
ファイルを前に作成した/client-configs/keys/
ディレクトリにコピーします。
cp pki/private/client1.key ~/client-configs/keys/
次に、安全な方法を使用してclient1.req
ファイルをCAマシンに転送します。
scp pki/reqs/client1.req sammy@your_CA_ip:/tmp
CAマシンにログインし、EasyRSAディレクトリに移動して、証明書要求をインポートします。
ssh sammy@your_CA_IP cd EasyRSA-3.0.4/ ./easyrsa import-req /tmp/client1.req client1
次に、前の手順でサーバーに対して行ったように、要求に署名します。 ただし、今回は必ずclient
リクエストタイプを指定してください。
./easyrsa sign-req client client1
プロンプトで、yes
と入力して、証明書要求に署名する予定であり、信頼できるソースからのものであることを確認します。
OutputType 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
SSHでOpenVPNサーバーに戻り、クライアント証明書を/client-configs/keys/
ディレクトリにコピーします。
cp /tmp/client1.crt ~/client-configs/keys/
次に、ca.crt
ファイルとta.key
ファイルも/client-configs/keys/
ディレクトリにコピーします。
sudo cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/ sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/
これで、サーバーとクライアントの証明書とキーがすべて生成され、サーバーの適切なディレクトリに保存されます。 これらのファイルで実行する必要のあるアクションはまだいくつかありますが、それらは後のステップで実行されます。 今のところ、サーバーでのOpenVPNの構成に進むことができます。
ステップ5—OpenVPNサービスの設定
クライアントとサーバーの両方の証明書とキーが生成されたので、これらの資格情報を使用するようにOpenVPNサービスの構成を開始できます。
サンプルのOpenVPN構成ファイルを構成ディレクトリにコピーすることから始め、セットアップの基礎として使用するためにそれを抽出します。
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gzip -d /etc/openvpn/server.conf.gz
好みのテキストエディタでサーバー構成ファイルを開きます。
sudo nano /etc/openvpn/server.conf
tls-auth
ディレクティブを探して、HMACセクションを見つけます。 この行はすでにコメント解除されているはずですが、そうでない場合は、「;」を削除してコメントを解除してください。
/etc/openvpn/server.conf
tls-auth ta.key 0 # This file is secret
次に、コメントアウトされたcipher
行を探して、暗号化暗号に関するセクションを見つけます。 AES-256-CBC
暗号は、優れたレベルの暗号化を提供し、十分にサポートされています。 繰り返しになりますが、この行はすでにコメント解除されているはずですが、コメント化されていない場合は、その前にある「;」を削除してください。
/etc/openvpn/server.conf
cipher AES-256-CBC
この下に、auth
ディレクティブを追加して、HMACメッセージダイジェストアルゴリズムを選択します。 このためには、SHA256
が適切な選択です。
/etc/openvpn/server.conf
auth SHA256
次に、Diffie-Hellmanパラメーターを定義するdh
ディレクティブを含む行を見つけます。 EasyRSAに最近加えられたいくつかの変更により、Diffie-Hellmanキーのファイル名は、サンプルサーバー構成ファイルにリストされているものと異なる場合があります。 必要に応じて、2048
を削除して、ここにリストされているファイル名を変更し、前の手順で生成したキーと一致するようにします。
/etc/openvpn/server.conf
dh dh.pem
最後に、user
とgroup
の設定を見つけ、それぞれの先頭にある「; 」を削除して、これらの行のコメントを解除します。
/etc/openvpn/server.conf
user nobody group nogroup
OpenVPNが機能するためには、これまでにサンプルserver.conf
ファイルに加えた変更が必要です。 以下に概説する変更はオプションですが、多くの一般的なユースケースでも必要です。
(オプション)DNSの変更をプッシュして、VPNを介してすべてのトラフィックをリダイレクトします
上記の設定により、2台のマシン間にVPN接続が作成されますが、接続でトンネルを使用するように強制されることはありません。 VPNを使用してすべてのトラフィックをルーティングする場合は、DNS設定をクライアントコンピューターにプッシュすることをお勧めします。
server.conf
ファイルには、この機能を有効にするために変更する必要のあるディレクティブがいくつかあります。 redirect-gateway
セクションを見つけ、redirect-gateway
行の先頭からセミコロン「;」を削除してコメントを解除します。
/etc/openvpn/server.conf
push "redirect-gateway def1 bypass-dhcp"
このすぐ下に、dhcp-option
セクションがあります。 繰り返しますが、両方の行の前から「; 」を削除して、コメントを解除します。
/etc/openvpn/server.conf
push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220"
これは、クライアントがDNS設定を再構成して、VPNトンネルをデフォルトゲートウェイとして使用するのに役立ちます。
(オプション)ポートとプロトコルを調整します
デフォルトでは、OpenVPNサーバーはポート1194
とUDPプロトコルを使用してクライアント接続を受け入れます。 クライアントが存在する可能性のあるネットワーク環境が制限されているために別のポートを使用する必要がある場合は、port
オプションを変更できます。 OpenVPNサーバーでWebコンテンツをホストしていない場合は、ポート443
が一般的な選択肢です。これは、通常、ファイアウォールルールで許可されているためです。
/etc/openvpn/server.conf
# Optional! port 443
多くの場合、プロトコルはそのポートにも制限されています。 その場合は、proto
をUDPからTCPに変更します。
/etc/openvpn/server.conf
# Optional! proto tcp
プロトコルをTCPにdo切り替える場合、このディレクティブは1
から0
にのみ使用されるため、explicit-exit-notify
ディレクティブの値を変更する必要があります。 UDPによる。 TCPの使用中にこれを行わないと、OpenVPNサービスの開始時にエラーが発生します。
/etc/openvpn/server.conf
# Optional! explicit-exit-notify 0
別のポートとプロトコルを使用する必要がない場合は、これら2つの設定をデフォルトのままにしておくことをお勧めします。
(オプション)デフォルト以外の資格情報を指す
以前に./build-key-server
コマンドで別の名前を選択した場合は、適切な.crt
および.key
ファイル。 デフォルト名の「server」を使用した場合、これはすでに正しく設定されています。
/etc/openvpn/server.conf
cert server.crt key server.key
終了したら、ファイルを保存して閉じます。
特定のユースケースでサーバーのOpenVPN構成に必要な変更を加えた後、サーバーのネットワークにいくつかの変更を加えることができます。
ステップ6—サーバーネットワーク構成の調整
OpenVPNがVPNを介してトラフィックを正しくルーティングできるように、サーバーのネットワーク構成のいくつかの側面を微調整する必要があります。 これらの最初のものは、 IP転送です。これは、IPトラフィックをルーティングする場所を決定するための方法です。 これは、サーバーが提供するVPN機能に不可欠です。
/etc/sysctl.conf
ファイルを変更して、サーバーのデフォルトのIP転送設定を調整します。
sudo nano /etc/sysctl.conf
内部で、net.ipv4.ip_forward
を設定するコメント行を探します。 行の先頭から「#」文字を削除して、この設定のコメントを解除します。
/etc/sysctl.conf
net.ipv4.ip_forward=1
終了したら、ファイルを保存して閉じます。
ファイルを読み取り、現在のセッションの値を調整するには、次のように入力します。
sudo sysctl -p
Outputnet.ipv4.ip_forward = 1
前提条件に記載されているDebian9初期サーバーセットアップガイドに従っている場合は、UFWファイアウォールを設置する必要があります。 ファイアウォールを使用して不要なトラフィックをブロックするかどうかに関係なく(ほとんどの場合、これを実行する必要があります)、このガイドでは、サーバーに着信するトラフィックの一部を操作するためのファイアウォールが必要です。 一部のファイアウォールルールは、マスカレードを有効にするように変更する必要があります。これは、クライアント接続を正しくルーティングするためのオンザフライの動的ネットワークアドレス変換(NAT)を提供するiptablesの概念です。
ファイアウォール構成ファイルを開いてマスカレードルールを追加する前に、まずマシンのパブリックネットワークインターフェイスを見つける必要があります。 これを行うには、次のように入力します。
ip route | grep default
パブリックインターフェイスは、このコマンドの出力内にある「dev」という単語に続く文字列です。 たとえば、この結果はeth0
という名前のインターフェイスを示しており、以下で強調表示されています。
Outputdefault via 203.0.113.1 dev eth0 onlink
デフォルトルートに関連付けられたインターフェイスがある場合は、/etc/ufw/before.rules
ファイルを開いて、関連する構成を追加します。
sudo nano /etc/ufw/before.rules
UFWルールは通常、ufw
コマンドを使用して追加されます。 ただし、before.rules
ファイルにリストされているルールは、従来のUFWルールがロードされる前に読み取られ、配置されます。 ファイルの先頭に向かって、下に強調表示された行を追加します。 これにより、nat
テーブルのPOSTROUTING
チェーンのデフォルトポリシーが設定され、VPNからのトラフィックがすべて偽装されます。 以下の-A POSTROUTING
行のeth0
を、上記のコマンドで見つけたインターフェースに置き換えることを忘れないでください。
/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 (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
に変更します。
/ etc / default / ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
終了したら、ファイルを保存して閉じます。
次に、ファイアウォール自体を調整して、OpenVPNへのトラフィックを許可します。 /etc/openvpn/server.conf
ファイルのポートとプロトコルを変更しなかった場合は、ポート1194
へのUDPトラフィックを開く必要があります。 ポートやプロトコルを変更した場合は、ここで選択した値に置き換えてください。
前提条件のチュートリアルに従うときにSSHポートを追加するのを忘れた場合は、ここにも追加してください。
sudo ufw allow 1194/udp sudo ufw allow OpenSSH
これらのルールを追加した後、UFWを無効にしてから再度有効にして再起動し、変更したすべてのファイルから変更をロードします。
sudo ufw disable sudo ufw enable
これで、OpenVPNトラフィックを正しく処理するようにサーバーが構成されました。
ステップ7—OpenVPNサービスの開始と有効化
これで、サーバーでOpenVPNサービスを開始する準備が整いました。 これは、systemdユーティリティsystemctl
を使用して行われます。
systemdユニットのファイル名の後にインスタンス変数として設定ファイル名を指定して、OpenVPNサーバーを起動します。 サーバーの構成ファイルは/etc/openvpn/server.conf
と呼ばれるため、呼び出すときにユニットファイルの最後に@server
を追加します。
sudo systemctl start openvpn@server
次のように入力して、サービスが正常に開始されたことを再確認します。
sudo systemctl status openvpn@server
すべてがうまくいった場合、出力は次のようになります。
Output● [email protected] - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled) Active: active (running) since Tue 2016-05-03 15:30:05 EDT; 47s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Process: 5852 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid (code=exited, sta Main PID: 5856 (openvpn) Tasks: 1 (limit: 512) CGroup: /system.slice/system-openvpn.slice/[email protected] └─5856 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid
次のように入力して、OpenVPNtun0
インターフェイスが使用可能であることを確認することもできます。
ip addr show tun0
これにより、構成済みのインターフェースが出力されます。
Output4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue 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
サービスを開始した後、起動時に自動的に開始するようにサービスを有効にします。
sudo systemctl enable openvpn@server
これでOpenVPNサービスが稼働しています。 ただし、使用を開始する前に、まずクライアントマシンの構成ファイルを作成する必要があります。 このチュートリアルでは、クライアントの証明書とキーのペアを作成する方法についてはすでに説明しました。次のステップでは、クライアント構成ファイルを簡単に生成するインフラストラクチャを作成する方法を示します。
ステップ8—クライアント構成インフラストラクチャを作成する
OpenVPNクライアントの構成ファイルの作成は、すべてのクライアントが独自の構成を持っている必要があり、それぞれがサーバーの構成ファイルで概説されている設定と一致している必要があるため、多少複雑になる可能性があります。 この手順では、1つのクライアントでのみ使用できる単一の構成ファイルを作成するのではなく、構成ファイルをオンザフライで生成するために使用できるクライアント構成インフラストラクチャを構築するプロセスの概要を説明します。 最初に「基本」構成ファイルを作成し、次にスクリプトを作成して、必要に応じて一意のクライアント構成ファイル、証明書、およびキーを生成できるようにします。
以前に作成したclient-configs
ディレクトリ内にクライアント構成ファイルを保存する新しいディレクトリを作成することから始めます。
mkdir -p ~/client-configs/files
次に、サンプルのクライアント構成ファイルをclient-configs
ディレクトリーにコピーして、基本構成として使用します。
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
この新しいファイルをテキストエディタで開きます。
nano ~/client-configs/base.conf
内部で、remote
ディレクティブを見つけます。 これにより、クライアントはOpenVPNサーバーアドレス(OpenVPNサーバーのパブリックIPアドレス)を指し示します。 OpenVPNサーバーがリッスンしているポートを変更する場合は、1194
も選択したポートに変更する必要があります。
〜/ 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 . . .
プロトコルがサーバー構成で使用している値と一致していることを確認してください。
〜/ client-configs / base.conf
proto udp
次に、各行の先頭にある「; 」を削除して、user
およびgroup
ディレクティブのコメントを解除します。
〜/ client-configs / base.conf
# Downgrade privileges after initialization (non-Windows only) user nobody group nogroup
ca
、cert
、およびkey
を設定するディレクティブを見つけます。 ファイル自体に証明書とキーをまもなく追加するため、これらのディレクティブをコメントアウトします。
〜/ client-configs / 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
同様に、ta.key
をクライアント構成ファイルに直接追加するため、tls-auth
ディレクティブをコメントアウトします。
〜/ 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
ファイルで設定したcipher
およびauth
設定をミラーリングします。
〜/ client-configs / base.conf
cipher AES-256-CBC auth SHA256
次に、ファイルのどこかにkey-direction
ディレクティブを追加します。 VPNをクライアントマシンで正しく機能させるには、これを「1」に設定する必要があります。
〜/ client-configs / base.conf
key-direction 1
最後に、コメントアウト行をいくつか追加します。 これらのディレクティブはすべてのクライアント構成ファイルに含めることができますが、/etc/openvpn/update-resolv-conf
ファイルとともに出荷されるLinuxクライアントに対してのみ有効にする必要があります。 このスクリプトは、resolvconf
ユーティリティを使用して、LinuxクライアントのDNS情報を更新します。
〜/ client-configs / base.conf
# 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
をサーバーのroot以外のユーザーアカウントのコンテンツに変更してください。
〜/ client-configs / make_config.sh
#!/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
ファイルのコピーを作成し、クライアント用に作成したすべての証明書とキーファイルを収集し、それらの内容を抽出して、基本構成ファイルのコピーに追加し、エクスポートします。このすべてのコンテンツを新しいクライアント構成ファイルに入れます。 つまり、クライアントの構成、証明書、およびキーファイルを個別に管理する必要はなく、必要なすべての情報が1か所に保存されます。 これの利点は、将来クライアントを追加する必要がある場合に、このスクリプトを実行するだけで構成ファイルをすばやく作成し、すべての重要な情報が単一のアクセスしやすい場所に確実に保存されることです。
新しいクライアントを追加するときはいつでも、このスクリプトを実行してその構成ファイルを生成する前に、そのクライアントの新しいキーと証明書を生成する必要があることに注意してください。 次のステップで、このスクリプトを使用して練習します。
ステップ9—クライアント構成の生成
ガイドに従って、ステップ4でそれぞれclient1.crt
およびclient1.key
という名前のクライアント証明書とキーを作成しました。 ~/client-configs
ディレクトリに移動し、前の手順の最後に作成したスクリプトを実行することで、これらの資格情報の構成ファイルを生成できます。
cd ~/client-configs sudo ./make_config.sh client1
これにより、~/client-configs/files
ディレクトリにclient1.ovpn
という名前のファイルが作成されます。
ls ~/client-configs/files
Outputclient1.ovpn
このファイルを、クライアントとして使用する予定のデバイスに転送する必要があります。 たとえば、これはローカルコンピュータまたはモバイルデバイスである可能性があります。
この転送を実行するために使用される正確なアプリケーションは、デバイスのオペレーティングシステムと個人の好みによって異なりますが、信頼できる安全な方法は、バックエンドでSFTP(SSHファイル転送プロトコル)またはSCP(セキュアコピー)を使用することです。 これにより、暗号化された接続を介してクライアントのVPN認証ファイルが転送されます。
これは、ローカルコンピューター(macOSまたはLinux)から実行できるclient1.ovpn
の例を使用したSFTPコマンドの例です。 .ovpn
ファイルをホームディレクトリに配置します。
sftp sammy@your_server_ip:client-configs/files/client1.ovpn ~/
サーバーからローカルコンピューターにファイルを安全に転送するためのいくつかのツールとチュートリアルを次に示します。
ステップ10—クライアント構成のインストール
このセクションでは、Windows、macOS、Linux、iOS、およびAndroidにクライアントVPNプロファイルをインストールする方法について説明します。 これらのクライアント命令はいずれも相互に依存していないため、デバイスに該当する方にスキップしてください。
OpenVPN接続は、.ovpn
ファイルと呼んだものと同じ名前になります。 このチュートリアルに関して、これは、接続の名前がclient1.ovpn
であり、生成した最初のクライアントファイルと一致していることを意味します。
ウィンドウズ
インストール
OpenVPNのダウンロードページからWindows用のOpenVPNクライアントアプリケーションをダウンロードします。 ご使用のバージョンのWindowsに適切なインストーラーバージョンを選択してください。
ノート
OpenVPNをインストールするには、管理者権限が必要です。
OpenVPNをインストールした後、.ovpn
ファイルを次の場所にコピーします。
C:\Program Files\OpenVPN\config
OpenVPNを起動すると、プロファイルが自動的に表示され、利用できるようになります。
管理者アカウントであっても、OpenVPNを使用するたびに管理者として実行する必要があります。 VPNを使用するたびに右クリックして管理者として実行を選択せずにこれを行うには、管理者アカウントからこれを事前設定する必要があります。 これは、標準ユーザーがOpenVPNを使用するために管理者のパスワードを入力する必要があることも意味します。 一方、標準ユーザーは、クライアント上のOpenVPNアプリケーションに管理者権限がない限り、サーバーに適切に接続できないため、昇格された権限が必要です。
OpenVPNアプリケーションを常に管理者として実行するように設定するには、そのショートカットアイコンを右クリックして、プロパティに移動します。 互換性タブの下部にあるボタンをクリックして、すべてのユーザーの設定を変更します。 新しいウィンドウで、このプログラムを管理者として実行するをチェックします。
接続する
OpenVPN GUIを起動するたびに、Windowsはプログラムがコンピューターに変更を加えることを許可するかどうかを尋ねます。 はいをクリックします。 OpenVPNクライアントアプリケーションを起動すると、アプレットはシステムトレイに配置されるだけなので、必要に応じてVPNを接続および切断できます。 実際にはVPN接続を確立しません。
OpenVPNが開始されたら、システムトレイアプレットに移動し、OpenVPNアプレットアイコンを右クリックして接続を開始します。 これにより、コンテキストメニューが開きます。 メニューの上部にあるclient1(client1.ovpn
プロファイル)を選択し、Connectを選択します。
接続が確立されている間はステータスウィンドウが開き、ログ出力が表示されます。クライアントが接続されるとメッセージが表示されます。
同じ方法でVPNから切断します。システムトレイアプレットに移動し、OpenVPNアプレットアイコンを右クリックして、クライアントプロファイルを選択し、切断をクリックします。
マックOS
インストール
Tunnelblick は、macOS用の無料のオープンソースOpenVPNクライアントです。 最新のディスクイメージは、TunnelblickDownloadsページからダウンロードできます。 ダウンロードした.dmg
ファイルをダブルクリックし、プロンプトに従ってインストールします。
インストールプロセスの終わりに向かって、Tunnelblickは構成ファイルがあるかどうかを尋ねます。 簡単にするために、いいえと答えて、Tunnelblickを終了させます。 Finderウィンドウを開き、client1.ovpn
をダブルクリックします。 Tunnelblickはクライアントプロファイルをインストールします。 管理者権限が必要です。
接続する
Applications フォルダーのTunnelblickをダブルクリックして、Tunnelblickを起動します。 Tunnelblickが起動すると、画面右上のメニューバーに接続を制御するためのTunnelblickアイコンが表示されます。 アイコンをクリックし、接続メニュー項目をクリックしてVPN接続を開始します。 client1接続を選択します。
Linux
インストール
Linuxを使用している場合は、ディストリビューションに応じてさまざまなツールを使用できます。 デスクトップ環境またはウィンドウマネージャーには、接続ユーティリティも含まれている場合があります。
ただし、最も一般的な接続方法は、OpenVPNソフトウェアを使用することです。
Ubuntuまたは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
Outputupdate-resolv-conf
次に、転送したOpenVPNクライアント構成ファイルを編集します。
nano client1.ovpn
update-resolv-conf
ファイルが見つかった場合は、DNS設定を調整するために追加した3行のコメントを解除します。
client1.ovpn
script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf
CentOSを使用している場合は、group
ディレクティブをnogroup
からnobody
に変更して、ディストリビューションの使用可能なグループに一致させます。
client1.ovpn
group nobody
ファイルを保存して閉じます。
これで、openvpn
コマンドをクライアント構成ファイルにポイントするだけで、VPNに接続できます。
sudo openvpn --config client1.ovpn
これにより、VPNに接続されます。
iOS
インストール
iTunes App Storeから、公式iOSOpenVPNクライアントアプリケーションであるOpenVPNConnectを検索してインストールします。 iOSクライアント構成をデバイスに転送するには、デバイスをコンピューターに直接接続します。
iTunesで転送を完了するプロセスの概要をここに示します。 コンピュータでiTunesを開き、 iPhone > appsをクリックします。 ファイル共有セクションまで下にスクロールして、OpenVPNアプリをクリックします。 右側の空白のウィンドウOpenVPNDocuments は、ファイルを共有するためのものです。 .ovpn
ファイルをOpenVPNドキュメントウィンドウにドラッグします。
次に、iPhoneでOpenVPNアプリを起動します。 新しいプロファイルをインポートする準備ができたという通知が届きます。 緑色のプラス記号をタップしてインポートします。
接続する
これで、OpenVPNを新しいプロファイルで使用する準備が整いました。 ConnectボタンをOnの位置にスライドさせて接続を開始します。 同じボタンをオフにスライドさせて切断します。
ノート
設定の下のVPNスイッチを使用してVPNに接続することはできません。 試してみると、OpenVPNアプリを使用してのみ接続するように通知が届きます。
アンドロイド
インストール
GooglePlayストアを開きます。 公式のAndroidOpenVPNクライアントアプリケーションであるAndroidOpenVPNConnectを検索してインストールします。
.ovpn
プロファイルを転送するには、AndroidデバイスをUSBでコンピューターに接続し、ファイルをコピーします。 または、SDカードリーダーをお持ちの場合は、デバイスのSDカードを取り外し、プロファイルをコピーしてから、カードをAndroidデバイスに挿入し直すことができます。
OpenVPNアプリを起動し、メニューをタップしてプロファイルをインポートします。
次に、保存したプロファイルの場所に移動し(スクリーンショットでは、/sdcard/Download/
を使用)、ファイルを選択します。 アプリは、プロファイルがインポートされたことを記録します。
接続する
接続するには、接続ボタンをタップするだけです。 OpenVPNアプリケーションを信頼するかどうかを尋ねられます。 OKを選択して接続を開始します。 VPNから切断するには、OpenVPNアプリに戻り、切断を選択します。
ステップ11— VPN接続のテスト(オプション)
注: VPN接続をテストするこの方法は、手順5ですべてのトラフィックをVPN経由でルーティングすることを選択した場合にのみ機能します。
すべてがインストールされたら、簡単なチェックですべてが正しく機能していることを確認します。 VPN接続を有効にせずに、ブラウザを開いてDNSLeakTestに移動します。
このサイトは、インターネットサービスプロバイダーによって割り当てられたIPアドレスを、世界中に表示されたとおりに返します。 同じWebサイトでDNS設定を確認するには、拡張テストをクリックすると、使用しているDNSサーバーが表示されます。
次に、OpenVPNクライアントをサーバーのVPNに接続し、ブラウザーを更新します。 これで、完全に異なるIPアドレス(VPNサーバーのIPアドレス)が表示されるはずです。これが、世界に表示される方法です。 繰り返しになりますが、DNSLeakTestの Extended Test は、DNS設定をチェックし、VPNによってプッシュされたDNSリゾルバーを使用していることを確認します。
ステップ12—クライアント証明書を取り消す
場合によっては、OpenVPNサーバーへのそれ以上のアクセスを防ぐために、クライアント証明書を取り消す必要があります。
これを行うには、CAマシンのEasyRSAディレクトリに移動します。
cd EasyRSA-3.0.4/
次に、revoke
オプションを指定してeasyrsa
スクリプトを実行し、その後に取り消したいクライアント名を続けます。
./easyrsa revoke client2
これにより、yes
と入力して、失効を確認するように求められます。
OutputPlease 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はクライアントの証明書を完全に取り消します。 ただし、現在、OpenVPNサーバーには、クライアントの証明書が取り消されているかどうかを確認する方法がなく、クライアントは引き続きVPNにアクセスできます。 これを修正するには、CAマシンに証明書失効リスト(CRL)を作成します。
./easyrsa gen-crl
これにより、crl.pem
というファイルが生成されます。 このファイルをOpenVPNサーバーに安全に転送します。
scp ~/EasyRSA-3.0.4/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
ファイルの下部にcrl-verify
オプションを追加します。これにより、接続が試行されるたびに作成した証明書失効リストを確認するようにOpenVPNサーバーに指示されます。
/etc/openvpn/server.conf
crl-verify crl.pem
ファイルを保存して閉じます。
最後に、OpenVPNを再起動して、証明書の失効を実装します。
sudo systemctl restart openvpn@server
クライアントは、古いクレデンシャルを使用してサーバーに正常に接続できなくなります。
追加のクライアントを取り消すには、次のプロセスに従います。
./easyrsa revoke client_name
コマンドで証明書を取り消します- 新しいCRLを生成する
- 新しい
crl.pem
ファイルをOpenVPNサーバーに転送し、それを/etc/openvpn
ディレクトリにコピーして、古いリストを上書きします。 - OpenVPNサービスを再起動します。
このプロセスを使用して、サーバーに対して以前に発行した証明書を取り消すことができます。
結論
これで、インターネットを安全に移動して、身元、場所、トラフィックをスヌーパーや検閲者から保護できます。 この時点で証明書を発行する必要がなくなった場合は、証明書を追加または取り消す必要があるまで、CAマシンの電源を切るか、インターネットから切断することをお勧めします。 これは、攻撃者がVPNにアクセスするのを防ぐのに役立ちます。
より多くのクライアントを構成するには、追加のデバイスごとに手順4および9-11に従うだけです。 クライアントへのアクセスを取り消すには、手順12に従ってください。