ブログに戻る

Ubuntu 18.04でのOpenVPNの設定

Ubuntu 18.04でのOpenVPNの設定

はじめに

信頼できないネットワーク(ホテルやカフェのWiFiなど)に接続する際、スマートフォンやノートパソコンから安全にインターネットにアクセスしたいと思いませんか?幸いなことに、その願いを叶える方法があります。信頼できないネットワークであっても、プライベートネットワークにいるかのように安全に接続することができます。それには、仮想プライベートネットワーク(VPN).

VPNとは何ですか?

VPNはVirtual Private Network(仮想プライベートネットワーク)の略です。信頼できるサーバーへの安全なトンネルを開く機能を提供します。すべてのリクエストはこのサーバーを経由して送受信されます。そのメリットは、ホテルの無料WiFiなどの公共ネットワークを使用する際に、アクセスや取引の安全性を確保できる点にあります。

VPNを経由することで、すべてのデータが暗号化され、サーバーを介して処理されます。サードパーティのルーターなど、途中に存在するデバイスがトラフィックを意図しない宛先にリダイレクトすることはできません。また、接続が正常に確立されると、ユーザーはサーバーのネットワークの一部になります。通常はサーバーのローカルネットワーク内からしかアクセスできない他のサーバー、コンピューター、またはプリンターなどのデバイスにも、VPNトンネルを通じてアクセスできるようになります。ただし、すべてのデータを暗号化トンネル経由で送信する必要はないため、リクエストの定義された一部のみをVPNトンネル経由で送信するようにVPNクライアントを設定することも可能です。残りのトラフィックは、インターネット経由で通常通り処理されます。

このチュートリアルでは、Ubuntu 18.04上でOpenVPNサーバーをセットアップする手順を説明します。

要件

このチュートリアルを完了するには、次のサービスをホストするためのUbuntu 18.04サーバーへのアクセス権が必要です:OpenVPN。このガイドを開始する前に、sudo権限を持つ非rootユーザーを設定する必要もあります。サーバーのインストールは、当社のUbuntuサーバーのセットアップに関するチュートリアルに従うことで簡単に行えます。.

さらに、認証局(CA)として機能する別のコンピューターが必要になります。技術的には、OpenVPNサーバーまたはローカルコンピューターを認証局として使用できます。しかし、これはVPNをセキュリティの脆弱性にさらすことになるため、お勧めしません。OpenVPNの公式ドキュメントによると、証明書要求のインポートと署名専用の別のコンピューターに認証局を配置する必要があります。そのため、ここでは認証局が、sudo権限を持つ非rootユーザーと基本的なファイアウォールを備えた別のUbuntu 18.04サーバー上にあると想定します。このガイド全体を通して、各インストールのすべてのインストールおよび設定手順は可能な限りシンプルに説明します。また、当社のDockerでOpenVPNサーバーをセットアップする方法に関するチュートリアルもご覧いただけます。.

ステップ1 – OpenVPNとEasyRSAのインストール

まず、VPNサーバーのパッケージインデックスを更新し、OpenVPNをインストールします。OpenVPNはデフォルトのUbuntuリポジトリで提供されているため、aptを使用してインストールできます:

ステップ2:認証局の作成

OpenVPNサーバー用の信頼できる証明書を発行するために、シンプルな認証局(CA)を作成します。これを行うには、wgetを使用して、CAマシンとOpenVPNサーバーの両方に最新バージョンのEasyRSAをダウンロードします。最新バージョンを取得するには、公式のEasyRSA GitHubプロジェクトのリリース(Releases)ページにアクセスし、.tgzで終わるファイルのダウンロードリンクをコピーして、次のコマンドに貼り付けます:

次に、tarボールを展開します:

 OpenVPN EasyRSA software

この時点で、必要なすべてのソフトウェアがCAコンピューターとサーバーに正常にインストールされました。

ステップ3 – EasyRSA変数の設定とCAの構築

EasyRSAには、次のコマンドを使用してCAの多数の変数を定義するために編集できる設定ファイルが付属しています:

ディレクトリ内にvars.exampleという名前のファイルがあります。このファイルのコピーを作成し、拡張子なしでvarsという名前にします。

お好みのテキストエディタを使用して、この新しいファイルを開きます。

次に、新しい証明書のフィールドのデフォルト値を設定する設定を見つけます。以下のようになっているはずです。

以下に示すように、これらの変数をお好みの値に更新します。

準備ができたら、ファイルを保存して閉じます。次のステップでは、easyrsaスクリプトを呼び出し、init-pkiオプションを指定して実行し、CAサーバー上で公開鍵基盤(PKI)を初期化します。

easyrsa init-pki

次に、CAを操作するたびにパスワードを求められないように、nopassオプションを指定してbuild-caコマンドを実行します。

出力の中で、CAのコモンネーム(Common Name)を確認するように求められます。

 OpenVPN build-ca

これでCAのセットアップが完了し、証明書署名要求(CSR)への署名を開始する準備が整いました。

ステップ 4 – サーバー証明書、鍵、および暗号化ファイルの生成

CAの準備ができたら、サーバーから秘密鍵と証明書要求を生成し、それをCAに送信して署名を受け、必要な証明書を作成できます。まず、OpenVPNサーバー上のEasyRSAディレクトリに移動します。

そこから、init-pkiオプションを指定してeasyrsaスクリプトを実行します。このコマンドはCAコンピューター上ですでに実行していますが、ここでも実行する必要があります。これは、サーバーとCAのPKIディレクトリが異なるためです。

次に、再びeasyrsaスクリプトを呼び出します。今回はgen-reqオプションを指定し、その後にcomputer’sのジェネリック名を続けます。

これにより、サーバー用の秘密鍵と、server.reqという名前の証明書要求ファイルが作成されます。サーバーの鍵を/etc/openvpn/ディレクトリにコピーします。

安全な方法(以下の例ではSCPなど)を使用して、server.reqファイルをCAコンピューターに転送します。

次に、CAコンピューター上のEasyRSAディレクトリに移動します。

再びeasyrsaスクリプトを使用してserver.reqファイルをインポートし、ファイルパスの後にそのコモンネームを追加します。

次に、sign-reqオプションを指定してeasyrsaスクリプトを実行し、その後に要求タイプとコモンネームを続けて、要求に署名します。OpenVPNサーバーの証明書要求については、必ずserver要求タイプを使用してください。

出力は、リクエストが信頼できるソースからのものであることを確認するように求めます。yes と入力して Enter キーを押し、確認します。正確性を確保するために、以下に示す詳細を確認してください。このリクエストはまだパスワード検証されていないことに注意してください。

サブジェクトを要求し、3650日間のサーバー証明書として署名します:

 OpenVPN sign certificate for server

CAキーを暗号化している場合は、この時点でパスワードを求められます。次に、安全な方法を使用して、署名された証明書をVPNサーバーに転送します:

CAコンピューターからログアウトする前に、ca.rtファイルをサーバーに転送します:

次に、OpenVPNサーバーに再度ログインし、server.crtファイルとca.crtファイルを/etc/openvpn/ディレクトリにコピーします:

次に、EasyRSAディレクトリに移動します:

キー交換中に使用できる強力なDiffie-Hellmanキーを作成するには、次のコードを入力します:

完了したら、サーバーのTLSヘルスチェック機能を向上させるためにHMAC署名を生成します:

コマンドが完了したら、2つの新しいファイルを/etc/openvpn/ディレクトリにコピーします:

これで、サーバーに必要なすべての証明書とキーファイルが生成されます。これで、クライアントコンピューターがOpenVPNサーバーにアクセスするために使用する適切な証明書とキーを作成できます。

ステップ 4 – クライアント証明書とキーペアの生成

次に、クライアントキーといくつかの証明書を作成します。複数のクライアントがある場合は、クライアントごとにこのプロセスを繰り返すことができます。ただし、クライアントごとに一意の名前の値をスクリプトに渡す必要があることに注意してください。このチュートリアルでは、最初の証明書とキーのペアに client1 という名前を付けます。まず、クライアント証明書とキーファイルを保存するためのディレクトリ構造をホームディレクトリに作成します:

セキュリティ上の理由から、証明書/キーペアとクライアントの設定ファイルをこのディレクトリに保存するため、ここで権限を取り消す必要があります:

次に、EasyRSAディレクトリに戻り、gen-reqおよびnopassオプションとクライアントの一般的な名前を指定してeasyrsaスクリプトを実行します:

Enterキーを押してコモンネームを確認します。その後、client1.keyファイルを以前に作成した /client-configs/keys/ ディレクトリにコピーします:

次に、安全な方法を使用して、client1.reqファイルをCAコンピューターに転送します:

CAコンピューターにログインし、EasyRSAディレクトリに移動して、証明書要求をインポートします:

import client.req

次に、前のステップと同様に、サーバー上で要求に署名します。ただし、今回はクライアントの要求タイプを指定する必要があります:

プロンプトが表示されたら、yes と入力して、証明書要求に署名すること、および証明書要求が信頼できるソースからのものであることを確認します。続行するには“yes”と入力し、それ以外を入力すると破棄されます:

sign certificate

CAキーを暗号化している場合は、ここでもパスワードの入力を求められます。これにより、client1.crtという名前のクライアント証明書ファイルが作成されます。このファイルをサーバーに転送します:

OpenVPNサーバーにSSHで戻り、クライアント証明書を / client-configs / keys / ディレクトリにコピーします。

次に、ca.crtファイルとta.keyファイルを / client-configs / keys / ディレクトリにコピーします。

これで、サーバーとクライアントのすべての証明書とキーが生成され、サーバー上の対応するディレクトリに保存されました。これで、サーバー上でのOpenVPNのセットアップを続行できます。

 ステップ 5 – OpenVPNサービスの構成

クライアントとサーバーの証明書を生成した後、これらの資格情報を使用するようにOpenVPNサービスを構成できます。まず、OpenVPNのサンプル設定ファイルを設定ディレクトリにコピーし、それを解凍してセットアップのベースとして使用します。

お好みのテキストエディタでサーバー設定ファイルを開きます。

次に、tls-authコマンドを探してHMAC部分を見つけます。

コメントアウトされたパスワードの行を探して、パスワード部分を見つけます。AES-256-CBC暗号化は優れた暗号化レベルを提供し、広くサポートされています。この行はコメントアウトされていないはずですが、もしそうでない場合は、先頭の “;” を削除してください:

その下に、HMACメッセージダイジェストアルゴリズムを選択するためのauthコマンドを追加します。これにはSHA256が良い選択肢です。

次に、Diffie-Hellmanパラメータを定義するdhステートメントの行を探します。EasyRSAの最近の変更により、Diffie-Hellmanキーのファイル名が、サンプルのサーバー設定ファイルに記載されているファイル名と異なる場合があります。必要に応じて、前のステップのキーと一致するように2048を削除して、ここに記載されているファイル名を変更します。

最後に、userとgroupの設定を探し、各行の先頭にある “;” を削除します:

ここまでの、サンプルのserver.confファイルに加えた変更により、OpenVPNが動作するようになるはずです。

ステップ 6 – サーバーのネットワーク構成

VPN経由でトラフィックを適切にルーティングするために、IPフォワーディングを構成します。これは、サーバーが提供するVPN機能に不可欠です。

net.ipv4.ip_forwardを設定しているコメントアウトされた行を探します。行の先頭から “#” 文字を削除して、この設定のコメントを解除します。

完了したらファイルを保存して閉じます。ファイルを読み込んで現在のセッションの値を調整するには、次のように入力します。

sysctl -p

次に、マシンのパブリックネットワークインターフェースを追加します。

パブリックインターフェースは、このコマンドの出力内の “dev” という単語に続く文字列です。たとえば、この結果はens3という名前のインターフェースを示しています。

default ip route

関連する設定を追加するために、/etc/ufw/before.rulesファイルを開きます。

ファイルの先頭付近に、以下のハイライトされた行を追加して、natテーブルのPOSTROUTINGチェーンのデフォルトポリシーを設定し、VPNから送信されるトラフィックをマスカレードします。以下の -A POSTROUTING 行の ens3 を、上記のコマンドで見つかったインターフェースに変更してください。

完了したらファイルを保存して閉じます。次に、UFWに対してデフォルトで転送(フォワード)されたパケットも許可するように設定する必要があります。これを行うには、/etc/default/ufw ファイルを開きます。

内部で DEFAULT_FORWARD_POLICY ディレクティブを見つけ、値を DROP から ACCEPT に変更します。

完了したらファイルを保存して閉じます。次に、OpenVPNへのトラフィックを有効にするためにファイアウォールを調整します。/etc/openvpn/server.conf ファイルでポートとプロトコルを変更していない場合は、ポート1194へのUDPトラフィックを開放する必要があります。ポートやプロトコルを変更した場合は、ここで選択した値に置き換えてください。前提条件のチュートリアルに従った際にSSHポートを追加し忘れた場合は、ここでも追加してください。

これらのルールを追加した後、UFWを一度無効にしてから再度有効にし、再起動して変更したすべてのファイルから設定を読み込みます。

ufw commands

おめでとうございます。これでサーバーがOpenVPNトラフィックを正しく処理するように設定されました!

まとめ

このチュートリアルを最後まで進めたことで、安全にインターネットを閲覧できるようになりました。あなたの身元、位置情報、トラフィックを第三者の目から守ることができます。

快適なコンピューティングを!

 

 

author

Akshay Nagpal

著者 · CloudSigma

Preslav DobrevはCloudSigmaのクリエイティブデザイナーであり、従来型および革新的なマーケティングチャネルを活用した一貫性のあるビジネスアイデンティティに注力しています。彼は芸術的なビジョンと戦略的マーケティングを融合させ、インパクトのあるブランドナラティブを生み出すことに長けています。

コメント

コメントはまだありません。最初のコメントを投稿しましょう。