GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu20.04でOpenVPNサーバーをセットアップする方法

Ubuntu 20.04 Focal Fossaは、最も使用されているLinuxディストリビューションの1つを長期的にサポートする最後の製品です。このチュートリアルでは、このオペレーティングシステムを使用してOpenVPNサーバーを作成する方法と、.ovpnを作成する方法を説明します。 クライアントマシンから接続するために使用するファイル。

このチュートリアルでは、次のことを学びます。

  • 認証局を生成する方法
  • サーバーとクライアントの証明書とキーを生成する方法
  • 認証局で証明書に署名する方法
  • Diffie-Hellmanパラメーターを作成する方法
  • tls-authキーを生成する方法
  • OpenVPNサーバーを構成する方法
  • VPNに接続するための.ovpnファイルを生成する方法

Ubuntu20.04でOpenVPNサーバーをセットアップする方法

使用されるソフトウェア要件と規則

システム ソフトウェア その他 規約
ソフトウェア要件とLinuxコマンドラインの規則
カテゴリ 使用する要件、規則、またはソフトウェアバージョン
Ubuntu 20.04 Focal Fossa
openvpn、ufw、easy-rsa
管理タスクを実行するためのルート権限
–指定されたLinuxコマンドは、rootユーザーとして直接、またはsudoを使用して、root権限で実行する必要があります。 コマンド
$ –特定のLinuxコマンドを通常の非特権ユーザーとして実行する必要があります

シナリオの設定

実際のVPN構成に進む前に、このチュートリアルで採用する規則とセットアップについて説明しましょう。

2台のマシンを使用します。どちらもUbuntu20.04 Focal Fossaを搭載しています。 。最初のもの、camachine 認証局をホストするために使用されます; 2番目のopenvpnmachine 実際のVPNとして設定するものになります サーバ。両方の目的で同じマシンを使用することは可能ですが、サーバーに違反している人が認証局に「なりすまして」、それを使用して不要な証明書に署名する可能性があるため、安全性は低くなります(この問題は、複数のサーバーを使用することを計画している場合、または他の目的で同じCAを使用することを計画している場合)。あるマシンと別のマシン間でファイルを移動するには、scpを使用します (セキュアコピー)コマンド。実行する10の主な手順は次のとおりです。

  1. 認証局の生成;
  2. サーバーキーと証明書リクエストの生成;
  3. CAを使用したサーバー証明書要求の署名;
  4. サーバーでのDiffie-Hellmanパラメーターの生成;
  5. サーバーでのtls-authキーの生成;
  6. OpenVPN構成;
  7. サーバー上のネットワークとファイアウォール(ufw)の構成;
  8. クライアントキーと証明書リクエストの生成;
  9. CAを使用したクライアント証明書の署名;
  10. VPNへの接続に使用されるクライアント.ovpnファイルの作成。

ステップ1-認証局(CA)の生成

私たちの旅の最初のステップは、認証局の作成です。 専用機で。非特権ユーザーとして、必要なファイルを生成します。開始する前に、easy-rsaをインストールする必要があります パッケージ:

 $ sudo apt-get update &&sudo apt-get -y install easy-rsa 

パッケージがインストールされていると、make-cadirを使用できます。 必要なツールと構成ファイルを含むディレクトリを生成するコマンド。この場合は、certificate_authorityと呼びます。 。作成したら、その中を移動します:

 $ make-cadircertificate_authority &&cdcertificate_authority 

ディレクトリ内に、varsというファイルがあります。 。このファイルでは、証明書の生成に使用されるいくつかの変数を定義できます。これらの変数のコメント付きセットは、91行にあります。 96へ 。コメントを削除して適切な値を割り当てるだけです:

 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]" 

変更が保存されたら、続行して PKIを生成できます (公開鍵インフラストラクチャ)、次のコマンドを使用して、pkiというディレクトリを作成します :

 $ ./easyrsa init-pki 

インフラストラクチャが整ったら、CAキーと証明書を生成できます。以下のコマンドを起動すると、パスフレーズを入力するように求められます caキーの場合 。当局とやり取りするたびに、同じパスワードを提供する必要があります。 一般名 証明書も提供する必要があります。これは任意の値にすることができます。プロンプトでEnterキーを押すだけで、デフォルトのものが使用されます。この場合はEasy-RSA CA

 $ ./easyrsa build-ca 

コマンドの出力は次のとおりです。

注:Easy-RSA構成の使用元:./ varsSSLの使用:openssl OpenSSL 1.1.1d 2019年9月10日新しいCAキーパスフレーズの再入力:新しいCAキーパスフレーズの再入力:RSA秘密キーの生成、長さ2048ビット(2プライム) )..........+++++.................................。 .................................. +++++ eは65537(0x010001)ロードできません/ home / egdoc / authentication_authority / pki / .rnd into RNG140296362980608:error:2406F079:random number generator:RAND_load_file:Cannot open file:../ crypto / rand / randfile.c:98:Filename =/ home / egdoc / authentication_authority / pki /.rnd証明書要求に組み込まれる情報の入力を求められます。入力しようとしているのは、識別名またはDNと呼ばれるものです。かなりの数のフィールドがありますが、一部のフィールドは空白のままにすることができます。デフォルト値があります。「。」を入力すると、フィールドは空白のままになります。-----共通名(例:ユーザー、ホスト、またはサーバー名)[Easy-RSA CA]:CAの作成が完了しましたこれで、インポートしてs証明書リクエストを点火します。公開用の新しいCA証明書ファイルは次の場所にあります:/home/egdoc/certificate_authority/pki/ca.crt 

build-ca コマンドは2つのファイルを生成しました。作業ディレクトリを基準にしたパスは次のとおりです。

  • pki / ca.crt
  • pki / private / ca.key

1つ目は公開証明書で、2つ目はサーバーとクライアントの証明書に署名するために使用されるキーであるため、可能な限り安全に保管する必要があります。

先に進む前に、少し注意してください。コマンドの出力で、エラーメッセージに気付いたかもしれません。エラーは強力ではありませんが、回避するための回避策は、openssl-easyrsa.cnfの3行目にコメントを付けることです。 生成された作業ディレクトリ内にあるファイル。この問題は、opensslgithubリポジトリで説明されています。変更後、ファイルは次のようになります。

#Easy-RSA3.1およびOpenSSLまたはLibreSSLRANDFILE=$ ENV ::EASYRSA_PKI/.rndで使用

そうは言っても、OpenVPNサーバーとして使用するマシンに移動して、サーバーキーと証明書を生成しましょう。

ステップ2–サーバーキーと証明書要求の生成

このステップでは、認証局によって署名されるサーバーキーと証明書要求を生成します。 OpenVPNサーバーとして使用するマシンに、openvpnをインストールする必要があります 、easy-rsa およびufw パッケージ:

 $ sudo apt-get update &&sudo apt-get -y install openvpn easy-rsa ufw 

サーバーキーと証明書要求を生成するために、認証局をホストしているマシンで使用したのと同じ手順を実行します。

  1. make-cadirを使用して作業ディレクトリを生成します コマンドを実行し、その中を移動します。
  2. varsに含まれる変数を設定します 証明書に使用されるファイル。
  3. ./easyrsa init-pkiを使用して公開鍵インフラストラクチャを生成します コマンド。

これらの準備手順の後、コマンドを発行してサーバー証明書とキーファイルを生成できます。

 $ ./easyrsa gen-req server nopass 

今回はnopassを使用したので オプションの場合、サーバーキーの生成中にパスワードの挿入を求めるプロンプトは表示されません。 。 一般名の入力を引き続き求められます サーバー証明書の場合 。この場合、使用されるデフォルト値はserverです。 。これがこのチュートリアルで使用するものです:

注:Easy-RSA構成の使用元:./ vars SSLの使用:openssl OpenSSL1.1.1d2019年9月10日RSA秘密鍵の生成....................+ ++++.................+++++新しい秘密鍵を'/home/egdoc/openvpnserver/pki/private/server.key.9rU3WfZMbW'に書き込む- ----証明書要求に組み込まれる情報の入力を求められます。入力しようとしているのは、識別名またはDNと呼ばれるものです。かなりの数のフィールドがありますが、空白のままにすることができます。一部のフィールドにはデフォルト値があります。「。」を入力すると、フィールドは空白のままになります。-----共通名(例:ユーザー、ホスト、またはサーバー名)[サーバー]:キーペアと証明書の要求完了しました。ファイルは次のとおりです。req:/home/egdoc/openvpnserver/pki/reqs/server.reqkey:/home/egdoc/openvpnserver/pki/private/server.key 

証明書署名要求 および秘密鍵 生成されます:

  • /home/egdoc/openvpnserver/pki/reqs/server.req
  • /home/egdoc/openvpnserver/pki/private/server.key

キーファイルは/etc/openvpn内に移動する必要があります ディレクトリ:

 $ sudo mv pki / private / server.key /etc/openvpn 

代わりに、証明書要求を認証局のマシンに送信して署名する必要があります。 scpを使用できます ファイルを転送するコマンド:

 $ scp pki / reqs / server.req egdoc @ camachine:/ home / egdoc / 

camachineに戻りましょう 証明書を承認します。

ステップ3–CAを使用したサーバー証明書への署名

認証局のマシンでは、前の手順でコピーしたファイルが$HOMEにあります。 ユーザーのディレクトリ:

 $ ls〜certificate_authority server.req 

最初に行うことは、証明書要求をインポートすることです。タスクを実行するには、import-reqを使用します easyrsaのアクション 脚本。その構文は次のとおりです。

 import-req   

私たちの場合、これは次のように解釈されます:

 $ ./easyrsa import-req〜/ server.req server 

このコマンドは、次の出力を生成します。

注:Easy-RSA構成の使用元:./ varsSSLの使用:openssl OpenSSL 1.1.1d 2019年9月10日リクエストは、serverという短い名前で正常にインポートされました。この名前を使用して、このリクエストの署名操作を実行できます。 

リクエストに署名するには、sing-reqを使用します アクション。最初の引数(この場合はサーバー)としてリクエストのタイプを受け取り、short_basename 前のコマンド(サーバー)で使用しました。実行します:

 $./easyrsasign-reqサーバーサーバー

証明書に署名することを確認し、認証局のキーに使用したパスワードを提供するように求められます。すべてが期待どおりに進むと、証明書が作成されます:

注:Easy-RSA構成の使用元:./ varsSSLの使用:openssl OpenSSL 1.1.1d 2019年9月10日次の証明書に署名しようとしています。正確性については、以下に示す詳細を確認してください。このリクエストは暗号的に検証されていないことに注意してください。信頼できるソースからのものであるか、送信者にリクエストのチェックサムを確認したことを確認してください。リクエストの件名、サーバー証明書として1080日間署名する:subject =commonName =serverType単語「yes」を続行するには、またはその他中止する入力。要求の詳細を確認します。yes/home/egdoc/certificate_authority/pki/safessl-easyrsa.cnfからの構成を使用します。/home/egdoc/certificate_authority/pki/private/ca.keyのパスフレーズを入力します。は次のとおりですcommonName:ASN.1 12:'server'証明書は3月20日まで認証されます02:12:082023 GMT(1080日)1つの新しいエントリでデータベースを書き出しますデータベースUpdatedCertificateは次の場所に作成されます:/ home / egdoc / certificate_authority / pki / issued / server.crt 

これで、以前に転送したリクエストファイルをopenvpnmachineから削除できます。 。生成された証明書をOpenVPNにコピーして戻します サーバーとCA公開証明書:

 $ rm〜/ server.req $ scp pki / {ca.crt、issued / server.crt} egdoc @ openvpnmachine:/ home / egdoc 

openvpnmachineに戻ります ホームディレクトリにファイルがあります。これで、それらを/etc/openvpnに移動できます。 :

 $ sudo mv〜/ {ca.crt、server.crt} / etc / openvpn 

ステップ4–Diffie-Hellmanパラメーターの生成

次のステップは、ディフィーヘルマンの生成です。 パラメーター。 ディフィーヘルマン 鍵交換は、公開された安全でないチャネルを介して暗号鍵を転送するために使用される方法です。キーを生成するコマンドは次のとおりです(完了するまでに時間がかかる場合があります):

 $ ./easyrsa gen-dh 

キーはpki内に生成されます dh.pemとしてのディレクトリ 。 /etc/openvpnに移動しましょう dh2048.pemとして :

 $ sudo mv pki / dh.pem /etc/openvpn/dh2048.pem 

ステップ5– tls-authキー(ta.key)の生成

セキュリティを向上させるために、 OpenVPN tls-authを実装します 。公式ドキュメントの引用:

tls-authディレクティブは、整合性検証のためにすべてのSSL/TLSハンドシェイクパケットに追加のHMAC署名を追加します。正しいHMAC署名を持たないUDPパケットは、それ以上処理せずにドロップできます。 tls-auth HMAC署名は、SSL/TLSによって提供されるセキュリティを超える追加レベルのセキュリティを提供します。次のことから保護できます。
– OpenVPNUDPポートでのDoS攻撃またはポートフラッディング。
–どのサーバーUDPポートがリスニング状態にあるかを判断するためのポートスキャン。
–バッファオーバーフローの脆弱性SSL /TLSの実装。
–許可されていないマシンからのSSL / TLSハンドシェイクの開始(このようなハンドシェイクは最終的に認証に失敗しますが、tls-authははるかに早い時点でそれらを遮断できます)。

tls_authキーを生成するには、次のコマンドを実行できます。

 $ openvpn --genkey --secret ta.key 

生成されたら、ta.keyを移動します /etc/openvpnへのファイル :

 $ sudo mv ta.key / etc / openvpn 

これでサーバーキーの設定は完了です。実際のサーバー構成に進むことができます。

ステップ6–OpenVPN構成

OpenVPN構成ファイルは、デフォルトでは/etc/openvpn内に存在しません 。生成するには、openvpnに付属しているテンプレートを使用します パッケージ。次のコマンドを実行してみましょう:

 $ zcat \ /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz \ | sudo tee /etc/openvpn/server.conf> / dev / null 

これで、/etc/openvpn/server.confを編集できます ファイル。関連する部品を以下に示します。最初に実行したいのは、参照されているキーと証明書の名前が、生成したものと一致していることを確認することです。このチュートリアルに従った場合は、間違いなく当てはまるはずです(78-80行 および85 ):

 ca ca.crtcert server.crtkey server.key#このファイルは秘密にしておく必要がありますdh2048.pem 

OpenVPNデーモンを低い権限で実行したいnobody ユーザーとnogroup グループ。構成ファイルの関連部分は、274行にあります。 および275 。先頭の;を削除する必要があります :

 user nobodygroup nogroup 

コメントを削除したいもう1つの行は、192です。 。これにより、すべてのクライアントがVPNを介してデフォルトゲートウェイをリダイレクトします。

「redirect-gatewaydef1bypass-dhcp」をプッシュします

200 および201 toを使用して、サーバーが特定のDNSサーバーをクライアントにプッシュできるようにすることもできます。構成ファイルにあるものは、opendns.comによって提供されたものです。 :

 push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" 

この時点で、/etc/openvpn ディレクトリには、生成した次のファイルが含まれている必要があります:

/etc/openvpn├──ca.crt├──dh2048.pem├──server.conf├──server.crt├──server.key└──ta.key

それらがすべてrootによって所有されていることを確認しましょう:

 $ sudo chown -R root:root / etc / openvpn 

次のステップであるネットワークオプションの構成に進むことができます。

ステップ7–ネットワークとufwのセットアップ

VPNを機能させるには、IP転送を有効にする必要があります 私たちのサーバー上。これを行うには、28行のコメントを解除します。 /etc/sysctl.confから ファイル:

#次の行のコメントを解除して、IPv4net.ipv4.ip_forward=1のパケット転送を有効にします

設定を再読み込みするには:

 $ sudo sysctl -p 

また、/etc/default/ufwを変更するufwファイアウォールでのパケット転送を許可する必要があります ファイル、およびDEFAULT_FORWARD_POLICYの変更 DROPから ACCEPTへ (19行 ):

#デフォルトの転送ポリシーをACCEPT、DROP、またはREJECTに設定します。 #これを変更する場合は、ルールを調整する必要があることに注意してくださいDEFAULT_FORWARD_POLICY ="ACCEPT" 

ここで、/etc/ufw/before.rulesの先頭に次のルールを追加する必要があります。 ファイル。ここでは、接続に使用されるインターフェースがeth0であると想定しています。 :

 * nat:POSTROUTING ACCEPT [0:0]-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADECOMMIT 

最後に、openvpnの着信トラフィックを許可する必要があります ufwファイアウォールマネージャーのサービス:

 $ sudo ufw allow openvpn 

この時点で、変更を適用するためにufwを再起動できます。この時点でファイアウォールが有効になっていない場合は、sshを確認してください。 サービスは常に許可されています。許可されていない場合、リモートで作業していると切断される可能性があります。

 $ sudo ufw disable &&sudo ufw enable 

これで、起動時にopenvpn.serviceを起動して有効にできます:

 $ sudo systemctl restart openvpn &&sudo systemctl enable openvpn 

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

これでサーバーのセットアップは完了です。次のステップは、クライアントキーと証明書要求の生成です。手順はサーバーで使用したものと同じです。名前として「サーバー」ではなく「クライアント」を使用し、キーと証明書要求を生成してから、後者をCAマシンに渡して署名します。

 $ ./easyrsa gen-req client nopass 

以前と同様に、一般名の入力を求められます。次のファイルが生成されます:

  • /home/egdoc/openvpnserver/pki/reqs/client.req
  • /home/egdoc/openvpnserver/pki/private/client.key

client.reqをコピーしましょう CAマシンへ:

 $ scp pki / reqs / client.req egdoc @ camachine:/ home / egdoc 

ファイルがコピーされたら、camachine 、リクエストをインポートします:

 $ ./easyrsa import-req〜/ client.req client 

次に、証明書に署名します:

 $./easyrsasign-reqクライアントクライアント

CAパスワードを入力すると、証明書はpki/issued/client.crtとして作成されます。 。リクエストファイルを削除して、署名された証明書をVPNサーバーにコピーして戻しましょう。

 $ rm〜/ client.req $ scp pki / issued / client.crt egdoc @ openvpnmachine:/ home / egdoc 

便宜上、すべてのクライアント関連のものを保持するディレクトリを作成し、その中にクライアントキーと証明書を移動しましょう:

 $ mkdir〜/ client $ mv〜/ client.crt pki / private / client.key〜/ client 

よし、もうすぐそこにいる。次に、クライアント構成テンプレート/usr/share/doc/openvpn/examples/sample-config-files/client.confをコピーする必要があります。 ~/client内 ディレクトリを作成し、ニーズに合わせて変更します:

 $ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf〜/ client 

ファイル内で変更する必要のある行は次のとおりです。 42の行 my-server-1の代わりに実際のサーバーのIPまたはホスト名を入力します :

 remote my-server-1 1194 

61行 および62 先頭の;を削除します 初期化後に特権をダウングレードする文字:

 user nobodygroup nogroup 

8890へ および108 CA証明書、クライアント証明書、クライアントキー、およびtls-authキーが参照されていることがわかります。ファイルの実際のコンテンツを専用の「タグ」のペアの間に配置するため、これらの行にコメントを付けたいと思います。

  • <ca></ca> CA証明書の場合
  • <cert></cert> クライアント証明書用
  • <key></key> クライアントキー用
  • <tls-auth></tls-auth> tls-authキーの場合

行にコメントが付けられたら、ファイルの下部に次のコンテンツを追加します。

 #ここにca.crtファイルの内容が表示されます #ここにclient.crtファイルの内容が表示されます #ここにクライアントの内容が表示されます.key file  key-direction 1 #ta.keyファイルの内容は次のとおりです 

ファイルの編集が終了したら、名前を.ovpnに変更します。 接尾辞:

 $ mv〜/ client / client.conf〜/ client / client.ovpn 

あとは、クライアントアプリケーションにファイルをインポートして、VPNに接続するだけです。たとえば、GNOMEデスクトップ環境を使用している場合は、ネットワークからファイルをインポートできます。 コントロールパネルのセクション。 VPNセクションで、+をクリックするだけです。 ボタンをクリックし、[ファイルからインポート]をクリックして、以前にクライアントマシンに転送した「.ovpn」ファイルを選択してインポートします。



.ovpnファイルをインポートするためのGNOMEインターフェース

結論

このチュートリアルでは、動作するOpenVPNセットアップを作成する方法を説明しました。認証局を生成し、対応するキーとともに生成したサーバー証明書とクライアント証明書に署名するために使用しました。サーバーを構成する方法とネットワークをセットアップする方法、パケット転送を許可する方法、およびufwファイアウォール構成に必要な変更を実行する方法を見ました。最後に、クライアント .ovpnを生成する方法を確認しました VPNに簡単に接続するためにクライアントアプリケーションからインポートできるファイル。お楽しみください!


Ubuntu
  1. Ubuntu18.04LTSでRsyslogサーバーをセットアップする方法

  2. UbuntuとLinuxMintでNTPサーバーをセットアップする方法

  3. Ubuntu 20.04でRsyslogサーバーをセットアップする-その方法は?

  1. 基本的なUbuntu20.04OpenVPNクライアント/サーバー接続のセットアップ

  2. 基本的なUbuntu22.04OpenVPNクライアント/サーバー接続のセットアップ

  3. Ubuntu18.04にOpenVPNをインストールする方法

  1. Ubuntu20.04でVSFTPDを使用してFTPサーバーをセットアップする方法

  2. Ubuntu18.04でVSFTPDを使用してFTPサーバーをセットアップする方法

  3. Ubuntu18.04でOpenVPNサーバーをセットアップする方法