前書き

https://en.wikipedia.org/wiki/Virtual_private_network [仮想プライベートネットワーク](VPN)を使用すると、プライベートネットワークにいるかのように信頼できないネットワークを通過できます。 ホテルやコーヒーショップのWiFiなど、信頼できないネットワークに接続すると、スマートフォンやラップトップからインターネットに安全かつ安全にアクセスできます。

HTTPS connectionsと組み合わせると、このセットアップによりワイヤレスログインとトランザクションを保護できます。 地理的な制限と検閲を回避し、信頼できないネットワークからの場所と暗号化されていないHTTPトラフィックを保護できます。

https://openvpn.net [OpenVPN]は、幅広い構成に対応するフル機能のオープンソースのSecure Socket Layer(SSL)VPNソリューションです。 このチュートリアルでは、CentOS 7サーバーでOpenVPNをセットアップし、クライアントマシンからアクセスできるように構成します。

前提条件

このチュートリアルを実行するには、次のものが必要です。

  • sudo非rootユーザーとfirewalldで設定されたファイアウォールを備えた1台のCentOS 7サーバー。これはhttps://www.digitalocean.com/community/tutorials/initial-server-setup-with-centos-7で実現できます。 [CentOS 7での初期サーバーセットアップ]ガイドおよびhttps://www.digitalocean.com/community/tutorials/additional-recommended-steps-for-new-centos-7-servers [新しいCentOS 7サーバーの追加の推奨手順] 。

  • 証明書に使用できるサーバーに解決されるドメインまたはサブドメイン。 これを設定するには、まずhttps://www.digitalocean.com/community/tutorials/how-to-point-to-digitalocean-nameservers-from-common-domain-registrars [ドメイン名を登録]する必要があります。次に、https://www.digitalocean.com/community/tutorials/how-to-set-up-a-host-name-with-digitalocean [DigitalOceanコントロールパネルでDNSレコードを追加]。 Aレコードを追加するだけで、このチュートリアルの要件を満たすことに注意してください。

  • OpenVPNサーバーへの接続に使用するクライアントマシン。 このチュートリアルでは、ローカルマシンをOpenVPNクライアントとして使用することをお勧めします。

これらの前提条件が整ったら、CentOS 7でOpenVPNサーバーのセットアップと構成を開始する準備ができました。

ステップ1-OpenVPNのインストール

開始するには、OpenVPNをサーバーにインストールします。 また、VPNで使用する内部認証局(CA)のセットアップに役立つ公開キーインフラストラクチャ管理ツールであるEasy RSAもインストールします。 また、Easy RSAを使用してSSLキーペアを生成し、VPN接続を保護します。

非ルートsudoユーザーとしてサーバーにログインし、パッケージリストを更新して、すべての最新バージョンを使用していることを確認します。

sudo yum update -y

追加パッケージのEnterprise Linux(EPEL)リポジトリは、非標準だが一般的なパッケージを含むFedoraプロジェクトによって管理される追加のリポジトリです。 OpenVPNはデフォルトのCentOSリポジトリでは使用できませんが、EPELで使用できるため、EPELをインストールします。

sudo yum install epel-release -y

次に、パッケージリストをもう一度更新します。

sudo yum update -y

次に、OpenVPNと `+ wget +`をインストールします。これらはEasy RSAのインストールに使用します。

sudo yum install -y openvpn wget

`+ wget +`を使用して、Easy RSAをダウンロードします。 このチュートリアルでは、easy-rsa-2を使用することをお勧めします。これは、このバージョンのドキュメントが他にもあるためです。 easy-rsa-2の最新バージョンのダウンロードリンクは、プロジェクトのhttps://github.com/OpenVPN/easy-rsa-old/releases [リリースページ]にあります。

wget -O /tmp/easyrsa https://github.com/OpenVPN/easy-rsa-old/archive/.tar.gz

次に、 `+ tar +`で圧縮ファイルを解凍します。

tar xfz /tmp/easyrsa

これにより、サーバーに「+ easy-rsa-old- 」という新しいディレクトリが作成されます。 「 / etc / openvpn」の下に新しいサブディレクトリを作成し、「+ easy-rsa」という名前を付けます。

sudo mkdir /etc/openvpn/easy-rsa

抽出されたEasy RSAファイルを新しいディレクトリにコピーします。

sudo cp -rf easy-rsa-old-/easy-rsa//* /etc/openvpn/easy-rsa

次に、ディレクトリの所有者をルート以外のsudoユーザーに変更します。

sudo chown  /etc/openvpn/easy-rsa/

これらのプログラムをインストールし、システムの適切な場所に移動したら、次のステップはOpenVPNのサーバー側の構成をカスタマイズすることです。

ステップ2-OpenVPNの構成

広く使用されている他の多くのオープンソースツールと同様に、利用可能な構成オプションは多数あります。 このセクションでは、基本的なOpenVPNサーバー構成のセットアップ方法について説明します。

OpenVPNのドキュメントディレクトリにはいくつかのサンプル設定ファイルがあります。 最初に、独自の設定ファイルの開始点としてサンプルの `+ server.conf`ファイルをコピーします。

sudo cp /usr/share/doc/openvpn-/sample/sample-config-files/server.conf /etc/openvpn

選択したテキストエディタで編集する新しいファイルを開きます。 この例ではnanoを使用します。サーバーにまだない場合は、「+ yum install nano +」コマンドでダウンロードできます。

sudo nano /etc/openvpn/server.conf

このファイルには変更が必要な行がいくつかありますが、そのほとんどは行の先頭にあるセミコロン「+; +」を削除してコメントを外すだけです。 これらの行の機能、およびこのチュートリアルで言及されていない他の行については、それぞれの上のコメントで詳しく説明されています。

まず、 `+ push” redirect-gateway def1 bypass-dhcp “+`を含む行を見つけてコメント解除します。 これを行うと、OpenVPNサーバーを介してすべてのトラフィックをリダイレクトするようにクライアントに指示します。 この機能を有効にすると、SSHなどの他のネットワークサービスとの接続の問題が発生する可能性があることに注意してください。

/etc/openvpn/server.conf

push "redirect-gateway def1 bypass-dhcp"

クライアントは(トラフィックが再ルーティングされるため)ISPが提供するデフォルトのDNSサーバーを使用できないため、OpenVPNへの接続に使用できるDNSサーバーを指定する必要があります。 別のDNSサーバーを選択することもできますが、ここでは、「+ 8.8.8.8+」と「8.8.4.4」のIPを持つGoogleのパブリックDNSサーバーを使用します。

`+ push” dhcp-option DNS …​ “+`行のコメントを外し、IPアドレスを更新することでこれを設定します:

/etc/openvpn/server.conf

push "dhcp-option DNS "
push "dhcp-option DNS "

OpenVPNは、起動後に特権なしで実行する必要があるため、* nobody *のユーザーとグループで実行するように指示する必要があります。 これを有効にするには、 `+ user nobody `および ` group nobody +`行のコメントを解除します。

/etc/openvpn/server.conf

user nobody
group nobody

次に、「+ topology subnet 」行のコメントを解除します。 これは、その下の「 server 10.8.0.0 255.255.255.0+」行とともに、OpenVPNインストールをサブネットワークとして機能するように構成し、使用するIPアドレスをクライアントマシンに指示します。 この場合、サーバーは「10.8.0.1」になり、最初のクライアントは「10.8.0.2」になります。

/etc/openvpn/server.conf

topology subnet

サーバー設定ファイルに次の行を追加することもお勧めします。 これにより、着信クライアント証明書が本当にクライアントからのものであることを二重にチェックし、後の手順で確立するセキュリティパラメータを強化します。

/etc/openvpn/server.conf

remote-cert-eku "TLS Web Client Authentication"

最後に、OpenVPNは、ユーザーがコンピューターネットワーク上で安全な通信を保証する暗号化プロトコルであるTLS認証を有効にすることを強くお勧めします。 これを行うには、静的暗号化キーを生成する必要があります(この例では「+ .tlsauth 」と名付けられていますが、好きな名前を選択できます)。 このキーを作成する前に、 ` tls-auth ta.key 0 `を含む設定ファイルの行にセミコロンを追加してコメントを付けます。 次に、その下の行に ` tls-crypt .tlsauth +`を追加します。

/etc/openvpn/server.conf

tls-auth ta.key 0
tls-crypt .tlsauth

OpenVPNサーバー設定ファイルを保存して終了し(nanoでは、 + CTRL-X ++ Y +、そして `+ ENTER +`を押して)、次のコマンドで静的暗号化キーを生成します:

sudo openvpn --genkey --secret /etc/openvpn/.tlsauth

サーバーが構成されたので、VPN接続に安全に接続するために必要なSSLキーと証明書のセットアップに進むことができます。

ステップ3-キーと証明書の生成

Easy RSAは、プログラムとともにインストールされる一連のスクリプトを使用して、キーと証明書を生成します。 証明書を生成する必要があるたびに再構成を回避するために、Easy RSAの構成を変更して、国、市、優先メールアドレスなど、証明書フィールドに使用するデフォルト値を定義できます。

Easy RSAが生成したキーと証明書を保存するディレクトリを作成することにより、キーと証明書を生成するプロセスを開始します。

sudo mkdir

デフォルトの証明書変数は `+ / etc / openvpn / easy-rsa `の ` vars +`ファイルで設定されているため、そのファイルを編集用に開きます。

sudo nano /etc/openvpn/easy-rsa/vars

ファイルの一番下までスクロールし、「+ export KEY_ +」で始まる値を情報に合わせて変更します。 最も重要なものは次のとおりです。

  • + KEY_CN +:ここで、サーバーに解決されるドメインまたはサブドメインを入力します。

  • + KEY_NAME +:ここに `+ server `を入力する必要があります。 他の何かを入力する場合、 ` server.key `と ` server.crt +`を参照する設定ファイルも更新する必要があります。

このファイルで変更する可能性のある他の変数は次のとおりです。

  • + KEY_COUNTRY +:この変数には、居住国の2文字の略語を入力します。

  • + KEY_PROVINCE +:これは、居住地の名前または略称でなければなりません。

  • + KEY_CITY +:ここに、住んでいる都市の名前を入力します。

  • + KEY_ORG +:これは組織または会社の名前でなければなりません。

  • + KEY_EMAIL +:セキュリティ証明書に接続するメールアドレスを入力します。

  • + KEY_OU +:これは、所属する「組織単位」の名前である必要があります。通常は、部門またはチームの名前です。

特定のユースケース以外では、残りの変数は安全に無視できます。 変更を行った後、ファイルは次のようになります。

/ etc / openvpn / easy-rsa / vars

. . .

# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY=""
export KEY_PROVINCE=""
export KEY_CITY=""
export KEY_ORG=""
export KEY_EMAIL=""
export KEY_EMAIL=
export KEY_CN=
export KEY_NAME=""
export KEY_OU=""
. . .

ファイルを保存して閉じます。

キーと証明書の生成を開始するには、 + easy-rsa +`ディレクトリに移動し、 `+ vars`ファイルで設定した新しい変数の + source`に移動します。

cd /etc/openvpn/easy-rsa
source ./vars

Easy RSAの `+ clean-all +`スクリプトを実行して、既にフォルダーにあるキーと証明書を削除し、認証局を生成します。

./clean-all

次に、 `+ build-ca `スクリプトを使用して認証局を構築します。 証明書フィールドの値を入力するように求められますが、以前に ` vars `ファイルに変数を設定した場合、すべてのオプションはデフォルトとしてすでに設定されています。 ` ENTER +`を押して、それぞれのデフォルトを受け入れることができます。

./build-ca

このスクリプトは、「+ ca.key 」というファイルを生成します。 これは、サーバーとクライアントの証明書に署名するために使用される秘密キーです。 失われた場合、この認証局からの証明書を信頼できなくなります。このファイルにアクセスできるユーザーは、知らないうちに新しい証明書に署名してVPNにアクセスできます。 このため、OpenVPNでは、可能な限りオフラインにできる場所に「 ca.key +」を保存することをお勧めします。新しい証明書を作成するときにのみ有効にする必要があります。

次に、 `+ build-key-server +`スクリプトを使用してサーバーのキーと証明書を作成します。

./build-key-server server

CAの構築と同様に、デフォルトとして設定した値が表示されるため、これらのプロンプトで「+ ENTER 」を押すことができます。 さらに、チャレンジパスワードとオプションの会社名を入力するよう求められます。 チャレンジパスワードを入力すると、クライアントからVPNに接続するときにパスワードが要求されます。 チャレンジパスワードを設定したくない場合は、この行を空白のままにして、「 ENTER 」を押します。 最後に、「 Y +」を入力して変更をコミットします。

サーバーキーと証明書を作成する最後の部分は、Diffie-Hellmanキー交換ファイルの生成です。 これを行うには、 `+ build-dh +`スクリプトを使用します。

./build-dh

これには数分かかる場合があります。

サーバーが鍵交換ファイルの生成を完了したら、サーバーの鍵と証明書を `+ keys `ディレクトリから ` openvpn +`ディレクトリにコピーします。

cd /etc/openvpn/easy-rsa/keys
sudo cp dh2048.pem ca.crt server.crt server.key /etc/openvpn

OpenVPNサーバーが認証するためには、各クライアントにも証明書が必要です。 これらのキーと証明書はサーバー上に作成され、クライアントにコピーする必要があります。これは後のステップで行います。 VPNに接続するクライアントごとに個別のキーと証明書を生成することをお勧めします。

ここではクライアントを1つだけ設定するため、「+ client +」と呼びましたが、必要に応じてよりわかりやすい名前に変更できます。

cd /etc/openvpn/easy-rsa
./build-key

最後に、バージョン対応のOpenSSL構成ファイルである `+ openssl-1.0.0.cnf `をバージョンレスの名前である ` openssl.cnf +`にコピーします。 そうしないと、OpenSSLがバージョンを検出できないため、設定をロードできないエラーが発生する可能性があります。

cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf

サーバーとクライアントに必要なすべてのキーと証明書が生成されたので、2台のマシン間のルーティングのセットアップに進むことができます。

ステップ4-ルーティング

これまで、サーバーにOpenVPNをインストールして構成し、クライアントがVPNにアクセスするために必要なキーと証明書を生成しました。 ただし、クライアントからの着信Webトラフィックの送信先に関する指示はまだOpenVPNに提供されていません。 ファイアウォールルールとルーティング構成を確立することにより、サーバーがクライアントトラフィックを処理する方法を規定できます。

このチュートリアルの開始時に前提条件を満たしていると仮定すると、サーバーにfirewalldがインストールされ、実行されているはずです。 OpenVPNがファイアウォールを通過できるようにするには、アクティブなファイアウォールゾーンを知る必要があります。 次のコマンドでこれを見つけます。

sudo firewall-cmd --get-active-zones
Outputtrusted
 Interfaces: tun0

次に、アクティブゾーン内のfirewalldで許可されているサービスのリストに「+ openvpn 」サービスを追加し、コマンドを再度実行し、「-permanent +」オプションを追加して、その設定を永続化します。

sudo firewall-cmd --zone=trusted --add-service openvpn
sudo firewall-cmd --zone=trusted --add-service openvpn --permanent

次のコマンドを使用して、サービスが正しく追加されたことを確認できます。

sudo firewall-cmd --list-services --zone=trusted
Outputopenvpn

次に、現在のランタイムインスタンスにマスカレードを追加し、 `+-permanent +`オプションを使用して再度追加して、将来のすべてのインスタンスにマスカレードを追加します。

sudo firewall-cmd --add-masquerade
sudo firewall-cmd --permanent --add-masquerade

次のコマンドを使用して、マスカレードが正しく追加されたことを確認できます。

sudo firewall-cmd --query-masquerade
Outputyes

次に、ルーティングをOpenVPNサブネットに転送します。 これを行うには、まずサーバーで使用されるプライマリネットワークインターフェイスを表す変数(この例では「++」)を作成し、その変数を使用してルーティングルールを永続的に追加します。

=$(ip route get 8.8.8.8 | awk 'NR==1 {print $(NF-2)}')
sudo firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $ -j MASQUERADE

firewalldをリロードして、ファイアウォールルールにこれらの変更を実装してください。

sudo firewall-cmd --reload

次に、IP転送を有効にします。 これにより、クライアントからのすべてのWebトラフィックがサーバーのIPアドレスにルーティングされ、クライアントのパブリックIPアドレスが事実上非表示になります。

編集のために `+ sysctl.conf +`を開きます:

sudo nano /etc/sysctl.conf

次に、ファイルの先頭に次の行を追加します。

/etc/sysctl.conf

net.ipv4.ip_forward = 1

最後に、ネットワークサービスを再起動して、IP転送を有効にします。

sudo systemctl restart network.service

ルーティングとファイアウォールのルールを設定したら、サーバーでOpenVPNサービスを開始できます。

ステップ5-OpenVPNの開始

OpenVPNは、 `+ systemctl `を使用してsystemdサービスとして管理されます。 サーバーが実行されている限り、いつでもVPNに接続できるように、OpenVPNが起動時に起動するように設定します。 これを行うには、OpenVPNサーバーを ` systemctl +`に追加して有効にします:

sudo systemctl -f enable [email protected]

次に、OpenVPNサービスを開始します。

sudo systemctl start [email protected]

次のコマンドを使用して、OpenVPNサービスがアクティブであることを再確認してください。 出力に `+ active(running)+`が表示されるはずです。

sudo systemctl status [email protected]
Output● [email protected] - OpenVPN Robust And Highly Flexible Tunneling Application On server
  Loaded: loaded (/usr/lib/systemd/system/[email protected]; enabled; vendor preset: disabled)
  Active: **active (running)** since Wed 2018-03-14 15:20:11 EDT; 7s ago
Main PID: 2824 (openvpn)
  Status: "Initialization Sequence Completed"
  CGroup: /system.slice/system-openvpn.slice/[email protected]
          └─2824 /usr/sbin/openvpn --cd /etc/openvpn/ --config server.conf
. . .

これで、OpenVPNのサーバー側の設定が完了しました。 次に、クライアントマシンを設定し、OpenVPNサーバーに接続します。

ステップ6-クライアントの構成

クライアントマシンのオペレーティングシステムに関係なく、ローカルで保存されたCA証明書のコピー、ステップ3で生成されたクライアントキーと証明書、およびステップ2の最後で生成した静的暗号化キーが必要です。

サーバー上で次のファイルを見つけます*。 一意のわかりやすい名前で複数のクライアントキーを生成した場合、キーと証明書の名前は異なります。 この記事では、「++」を使用しました。

/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/.crt
/etc/openvpn/easy-rsa/keys/.key
/etc/openvpn/.tlsauth

これらのファイルを*クライアントマシン*にコピーします。 SFTPまたはお好みの方法を使用できます。 テキストエディタでファイルを開いて、その内容をコピーしてクライアントマシンの新しいファイルに貼り付けることもできます。 使用する方法に関係なく、これらのファイルを保存する場所に注意してください。

次に、クライアントマシン上に `+ client.ovpn +`というファイルを作成します*。 これはOpenVPNクライアントの構成ファイルであり、サーバーへの接続方法を指示します。

sudo nano client.ovpn

次に、次の行を「+ client.ovpn 」に追加します。 これらの行の多くは、コメントを外したか、 ` server.conf +`ファイルに追加した行、またはデフォルトですでに含まれていた行を反映していることに注意してください。

client.ovpn

tls-client
ca ca.crt
cert .crt
key .key
tls-crypt tlsauth
remote-cert-eku "TLS Web Client Authentication"
proto udp
remote  1194 udp
dev tun
topology subnet
pull
user nobody
group nobody

これらの行を追加するときは、次のことに注意してください。

  • キーと証明書でクライアントに付けた名前を反映するように、最初の行を変更する必要があります。私たちの場合、これは単なる「++」です

  • また、IPアドレスを「+」からサーバーのIPアドレスに更新する必要があります。ポート ` 1194 +`は同じままにすることができます

  • キーと証明書ファイルへのパスが正しいことを確認してください

これで、このファイルをOpenVPNクライアントがサーバーに接続するために使用できます。 以下は、クライアントの接続方法に関するOS固有の手順です。

  • Windows:*

Windowsでは、GUIに付属する公式のhttp://openvpn.net/index.php/open-source/downloads.html[OpenVPN Community Editionバイナリ]が必要です。 `+ .ovpn `設定ファイルを適切なディレクトリ ` C:\ Program Files \ OpenVPN \ config +`に配置し、GUIで*接続*をクリックします。 Windows上のOpenVPN GUIは、管理者権限で実行する必要があります。

マックOS:

macOSでは、オープンソースアプリケーションhttps://code.google.com/p/tunnelblick/[Tunnelblick]は、WindowsのOpenVPN GUIに似たインターフェースを提供し、OpenVPNと必要なTUN / TAPドライバーが付属しています。 Windowsの場合と同じように、必要な手順は、 `+ .ovpn `設定ファイルを `〜/ Library / Application Support / Tunnelblick / Configurations `ディレクトリに配置することだけです。 または、 ` .ovpn +`ファイルをダブルクリックすることもできます。

  • Linux:*

Linuxでは、ディストリビューションの公式リポジトリからOpenVPNをインストールする必要があります。 その後、次を実行してOpenVPNを起動できます。

sudo openvpn --config

正常なクライアント接続を確立したら、https://www.google.com/search?q = what%20is%20my%20ip [GoogleをチェックしてパブリックIPを公開することにより、トラフィックがVPNを経由してルーティングされていることを確認できます]。

結論

これで、OpenVPNサーバーで実行されている完全に機能する仮想プライベートネットワークができました。 悪意のあるアクターがあなたのアクティビティを追跡することを心配することなく、ウェブを閲覧してコンテンツをダウンロードできます。

OpenVPNインストールをさらにカスタマイズするには、VPNに自動的に接続するようにクライアントを構成したり、クライアント固有のルールとアクセスポリシーを構成するなど、いくつかの手順を実行できます。 これらおよびその他のOpenVPNのカスタマイズについては、https://openvpn.net/index.php/open-source/documentation.html [OpenVPNの公式ドキュメント]を参照してください。 インターネット上で自分自身とマシンを保護する他の方法に興味がある場合は、https://www.digitalocean.com/community/tutorials/7-security-measures-to-protect-your-の記事をご覧ください。サーバー[サーバーを保護するための7つのセキュリティ対策]。