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がroot以外のユーザーがいる別のDebian9サーバー上にあることを前提としています。 sudo
特権と基本的なファイアウォール。
これらのサーバーの構成中にパスワード認証を無効にすると、このガイドの後半でサーバー間でファイルを転送するときに問題が発生する可能性があることに注意してください。 この問題を解決するには、各サーバーでパスワード認証を再度有効にすることができます。 または、サーバーごとに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
EasyRSAの最新バージョンをCAマシンとOpenVPNサーバーの両方にダウンロードします。 最新バージョンを入手するには、公式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
新しい証明書のフィールドのデフォルトを設定する設定を見つけます。 次のようになります。
. . .
#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"
. . .
これらの行のコメントを解除し、強調表示された値を好きなように更新しますが、空白のままにしないでください。
. . .
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
この後、 easyrsa
もう一度スクリプトを作成し、 build-ca
オプション。 これにより、CAが構築され、2つの重要なファイルが作成されます— ca.crt
と ca.key
—SSL証明書のパブリック側とプライベート側を構成します。
ca.crt
はCAの公開証明書ファイルであり、OpenVPNのコンテキストでは、サーバーとクライアントは、中間者攻撃を実行している人ではなく、同じ信頼のWebの一部であることを相互に通知するために使用します。 このため、サーバーとすべてのクライアントには、ca.crt
ファイル。ca.key
CAマシンがサーバーとクライアントのキーと証明書に署名するために使用する秘密キーです。 攻撃者があなたのCAにアクセスし、次にあなたのCAにアクセスした場合ca.key
ファイルを作成すると、証明書要求に署名してVPNにアクセスできるようになり、VPNのセキュリティが妨げられます。 これがあなたのca.key
ファイルはのみがCAマシン上にある必要があり、理想的には、追加のセキュリティ対策として証明書要求に署名しない場合は、CAマシンをオフラインに保つ必要があります。
CAと対話するたびにパスワードの入力を求められたくない場合は、次のコマンドを実行できます。 build-ca
とのコマンド nopass
このようなオプション:
- ./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/
そこから、 easyrsa
スクリプトと init-pki
オプション。 このコマンドはすでに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
file、共通名のファイルパスに従います。
- ./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ディレクトリに戻り、 easyrsa
スクリプトと gen-req
と nopass
オプション、およびクライアントの一般名:
- 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
を探してHMACセクションを見つけます tls-auth
指令。 この行はすでにコメント解除されているはずですが、そうでない場合は、「;」を削除してコメントを解除してください。
tls-auth ta.key 0 # This file is secret
次に、コメントアウトされたものを探して、暗号暗号に関するセクションを見つけます cipher
行。 The AES-256-CBC
暗号は、優れたレベルの暗号化を提供し、十分にサポートされています。 繰り返しになりますが、この行はすでにコメント解除されているはずですが、コメント化されていない場合は、その前にある「;」を削除してください。
cipher AES-256-CBC
この下に、 auth
HMACメッセージダイジェストアルゴリズムを選択するためのディレクティブ。 このため、 SHA256
良い選択です:
auth SHA256
次に、を含む行を見つけます dh
Diffie-Hellmanパラメーターを定義するディレクティブ。 EasyRSAに最近加えられたいくつかの変更により、Diffie-Hellmanキーのファイル名は、サンプルサーバー構成ファイルにリストされているものと異なる場合があります。 必要に応じて、ここにリストされているファイル名を削除して変更します 2048
したがって、前の手順で生成したキーと一致します。
dh dh.pem
最後に、 user
と group
設定を行い、それぞれの先頭にある「; 」を削除して、次の行のコメントを解除します。
user nobody
group nogroup
サンプルに加えた変更 server.conf
OpenVPNが機能するためには、この時点までのファイルが必要です。 以下に概説する変更はオプションですが、多くの一般的なユースケースでも必要です。
(オプション)DNSの変更をプッシュして、VPNを介してすべてのトラフィックをリダイレクトします
上記の設定により、2台のマシン間にVPN接続が作成されますが、接続でトンネルを使用するように強制されることはありません。 VPNを使用してすべてのトラフィックをルーティングする場合は、DNS設定をクライアントコンピューターにプッシュすることをお勧めします。
にはいくつかのディレクティブがあります server.conf
この機能を有効にするために変更する必要のあるファイル。 を見つける redirect-gateway
セクションを作成し、セミコロン「;」を先頭から削除します redirect-gateway
コメントを外す行:
push "redirect-gateway def1 bypass-dhcp"
このすぐ下で、 dhcp-option
セクション。 繰り返しますが、両方の行の前から「; 」を削除して、コメントを解除します。
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
通常はファイアウォールルールで許可されているため、これは一般的な選択肢です。
# Optional!
port 443
多くの場合、プロトコルはそのポートにも制限されています。 もしそうなら、変更します proto
UDPからTCPへ:
# Optional!
proto tcp
プロトコルをTCPにdo切り替える場合は、 explicit-exit-notify
からのディレクティブの値 1
に 0
、このディレクティブはUDPでのみ使用されるため。 TCPの使用中にこれを行わないと、OpenVPNサービスの開始時にエラーが発生します。
# Optional!
explicit-exit-notify 0
別のポートとプロトコルを使用する必要がない場合は、これら2つの設定をデフォルトのままにしておくことをお勧めします。
(オプション)デフォルト以外の資格情報を指す
中に別の名前を選択した場合 ./build-key-server
以前のコマンド、変更 cert
と key
適切なものを指すために表示される線 .crt
と .key
ファイル。 デフォルト名の「server」を使用した場合、これはすでに正しく設定されています。
cert server.crt
key server.key
終了したら、ファイルを保存して閉じます。
特定のユースケースでサーバーのOpenVPN構成に必要な変更を加えた後、サーバーのネットワークにいくつかの変更を加えることができます。
ステップ6—サーバーネットワーク構成の調整
OpenVPNがVPNを介してトラフィックを正しくルーティングできるように、サーバーのネットワーク構成のいくつかの側面を微調整する必要があります。 これらの最初のものは、 IP転送です。これは、IPトラフィックをルーティングする場所を決定するための方法です。 これは、サーバーが提供するVPN機能に不可欠です。
サーバーのデフォルトのIP転送設定を変更して、 /etc/sysctl.conf
ファイル:
- sudo nano /etc/sysctl.conf
内部で、設定されているコメント行を探します net.ipv4.ip_forward
. 行の先頭から「#」文字を削除して、この設定のコメントを解除します。
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ルールがロードされる前に読み取られ、配置されます。 ファイルの先頭に向かって、下に強調表示された行を追加します。 これにより、のデフォルトポリシーが設定されます POSTROUTING
チェーン nat
VPNからのトラフィックをテーブルに入れてマスカレードします。 交換することを忘れないでください eth0
の中に -A POSTROUTING
上記のコマンドで見つけたインターフェースを以下の行に示します。
#
# 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を無効にしてから再度有効にして再起動し、変更したすべてのファイルから変更をロードします。
- 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
OpenVPNを確認することもできます tun0
インターフェイスは次のように入力して利用できます。
- 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
選択したポートへ:
. . .
# 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
次に、コメントを外します user
と group
各行の先頭にある「;」を削除することによるディレクティブ:
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup
を設定するディレクティブを見つけます ca
, cert
、 と key
. ファイル自体に証明書とキーをまもなく追加するため、これらのディレクティブをコメントアウトします。
# 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
クライアント構成ファイルに直接:
# If a tls-auth key is used on the server
# then every client must also have the key.
#tls-auth ta.key 1
ミラーリング cipher
と auth
で設定した設定 /etc/openvpn/server.conf
ファイル:
cipher AES-256-CBC
auth SHA256
次に、 key-direction
ファイルのどこかにディレクティブ。 VPNをクライアントマシンで正しく機能させるには、
key-direction 1
最後に、コメントアウト行をいくつか追加します。 これらのディレクティブはすべてのクライアント構成ファイルに含めることができますが、有効にする必要があるのは、 /etc/openvpn/update-resolv-conf
ファイル。 このスクリプトは resolvconf
LinuxクライアントのDNS情報を更新するユーティリティ。
# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
クライアントがLinuxを実行していて、 /etc/openvpn/update-resolv-conf
ファイル、生成された後、クライアントの構成ファイルからこれらの行のコメントを解除します。
終了したら、ファイルを保存して閉じます。
次に、関連する証明書、キー、および暗号化ファイルを使用して基本構成をコンパイルする簡単なスクリプトを作成し、生成された構成を ~/client-configs/files
ディレクトリ。 と呼ばれる新しいファイルを開きます make_config.sh
以内 ~/client-configs
ディレクトリ:
- nano ~/client-configs/make_config.sh
内部に次のコンテンツを追加し、必ず変更してください sammy
サーバーのroot以外のユーザーアカウントのアカウントに:
#!/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—クライアント構成の生成
ガイドに従った場合は、という名前のクライアント証明書とキーを作成しました client1.crt
と client1.key
それぞれ、ステップ4で。 に移動して、これらの資格情報の構成ファイルを生成できます。 ~/client-configs
ディレクトリを作成し、前の手順の最後に作成したスクリプトを実行します。
- cd ~/client-configs
- sudo ./make_config.sh client1
これにより、という名前のファイルが作成されます client1.ovpn
あなたの中で ~/client-configs/files
ディレクトリ:
- ls ~/client-configs/files
Outputclient1.ovpn
このファイルを、クライアントとして使用する予定のデバイスに転送する必要があります。 たとえば、これはローカルコンピュータまたはモバイルデバイスである可能性があります。
この転送を実行するために使用される正確なアプリケーションは、デバイスのオペレーティングシステムと個人の好みによって異なりますが、信頼できる安全な方法は、バックエンドでSFTP(SSHファイル転送プロトコル)またはSCP(セキュアコピー)を使用することです。 これにより、暗号化された接続を介してクライアントのVPN認証ファイルが転送されます。
これは、を使用したSFTPコマンドの例です。 client1.ovpn
ローカルコンピューター(macOSまたはLinux)から実行できる例。 それは配置します .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
プロファイル)を選択し、接続を選択します。
接続が確立されている間はステータスウィンドウが開き、ログ出力が表示されます。クライアントが接続されるとメッセージが表示されます。
同じ方法で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行のコメントを解除します。
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
CentOSを使用している場合は、 group
からの指令 nogroup
に nobody
ディストリビューションの利用可能なグループと一致させるには:
group nobody
ファイルを保存して閉じます。
これで、をポイントするだけでVPNに接続できます。 openvpn
クライアント構成ファイルへのコマンド:
- 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/
次に、を実行します easyrsa
スクリプトと revoke
オプションの後に、取り消すクライアント名を続けます。
- ./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サーバーに指示します。
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に従ってください。