序章
仮想プライベートネットワーク(VPN)を使用すると、信頼できないネットワークを、プライベートネットワーク上にいるかのようにトラバースできます。 ホテルやコーヒーショップのWiFiなど、信頼できないネットワークに接続している場合は、スマートフォンやラップトップからインターネットに安全かつ確実にアクセスできます。
HTTPS接続と組み合わせると、この設定により、ワイヤレスログインとトランザクションを保護できます。 地理的な制限や検閲を回避し、場所と暗号化されていないHTTPトラフィックを信頼できないネットワークから保護することができます。
OpenVPN は、幅広い構成に対応するフル機能のオープンソースSecure Socket Layer(SSL)VPNソリューションです。 このチュートリアルでは、CentOS 7サーバーでOpenVPNをセットアップし、クライアントマシンからアクセスできるように構成します。
注: DigitalOcean DropletにOpenVPNサーバーをセットアップする場合は、多くのホスティングプロバイダーと同様に、帯域幅の超過に対して課金されることに注意してください。 このため、サーバーが処理しているトラフィックの量に注意してください。
詳細については、このページを参照してください。
前提条件
このチュートリアルに従うには、次のものが必要です。
- sudo非rootユーザーとfirewalldでセットアップされたファイアウォールを備えた1台のCentOS7サーバー。これは、CentOS7を使用した初期サーバーセットアップガイドと新しいCentOS7の追加の推奨手順で実現できます。サーバー。
- 証明書に使用できるサーバーに解決されるドメインまたはサブドメイン。 これを設定するには、最初にドメイン名を登録し、次にDigitalOceanコントロールパネルを介してDNSレコードを追加する必要があります。 Aレコードを追加するだけで、このチュートリアルの要件を満たすことに注意してください。
- OpenVPNサーバーへの接続に使用するクライアントマシン。 このチュートリアルでは、ローカルマシンをOpenVPNクライアントとして使用することをお勧めします。
これらの前提条件が整ったら、CentOS7でOpenVPNサーバーのセットアップと構成を開始する準備が整います。
ステップ1—OpenVPNのインストール
まず、サーバーにOpenVPNをインストールします。 また、VPNで使用する内部認証局(CA)の設定に役立つ公開鍵インフラストラクチャ管理ツールであるEasyRSAもインストールします。 また、Easy RSAを使用してSSLキーペアを生成し、VPN接続を保護します。
root以外のsudoユーザーとしてサーバーにログインし、パッケージリストを更新して、最新バージョンがすべて揃っていることを確認します。
sudo yum update -y
エンタープライズLinux用の追加パッケージ(EPEL)リポジトリは、Fedora Projectによって管理される追加のリポジトリであり、非標準ですが人気のあるパッケージが含まれています。 OpenVPNはデフォルトのCentOSリポジトリでは利用できませんが、EPELで利用できるので、EPELをインストールします。
sudo yum install epel-release -y
次に、パッケージリストをもう一度更新します。
sudo yum update -y
次に、OpenVPNとwget
をインストールします。これらは、EasyRSAのインストールに使用します。
sudo yum install -y openvpn wget
wget
を使用して、EasyRSAをダウンロードします。 このチュートリアルでは、easy-rsa-2を使用することをお勧めします。これは、このバージョンで利用可能なドキュメントが他にもあるためです。 easy-rsa-2の最新バージョンのダウンロードリンクは、プロジェクトのリリースページにあります。
wget -O /tmp/easyrsa https://github.com/OpenVPN/easy-rsa-old/archive/2.3.3.tar.gz
次に、tar
を使用して圧縮ファイルを抽出します。
tar xfz /tmp/easyrsa
これにより、サーバー上にeasy-rsa-old-2.3.3
という新しいディレクトリが作成されます。 /etc/openvpn
の下に新しいサブディレクトリを作成し、easy-rsa
という名前を付けます。
sudo mkdir /etc/openvpn/easy-rsa
抽出したEasyRSAファイルを新しいディレクトリにコピーします。
sudo cp -rf easy-rsa-old-2.3.3/easy-rsa/2.0/* /etc/openvpn/easy-rsa
次に、ディレクトリの所有者をroot以外のsudoユーザーに変更します。
sudo chown sammy /etc/openvpn/easy-rsa/
これらのプログラムがインストールされ、システム上の適切な場所に移動されたら、次のステップはOpenVPNのサーバー側の構成をカスタマイズすることです。
ステップ2—OpenVPNの設定
他の多くの広く使用されているオープンソースツールと同様に、利用可能な構成オプションは数十あります。 このセクションでは、基本的なOpenVPNサーバー構成をセットアップする方法について説明します。
OpenVPNのドキュメントディレクトリには、いくつかの設定ファイルの例があります。 まず、サンプルのserver.conf
ファイルを独自の構成ファイルの開始点としてコピーします。
sudo cp /usr/share/doc/openvpn-2.4.4/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 8.8.8.8" push "dhcp-option DNS 8.8.4.4"
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認証を有効にすることを強くお勧めします。これは、コンピューターネットワークを介した安全な通信を保証する暗号化プロトコルです。 これを行うには、静的暗号化キーを生成する必要があります(この例では、myvpn.tlsauth
という名前が付けられていますが、任意の名前を選択できます)。 このキーを作成する前に、tls-auth ta.key 0
を含む構成ファイルの行にセミコロンを付けて、コメントを付けてください。 次に、その下の行にtls-crypt myvpn.tlsauth
を追加します。
/etc/openvpn/server.conf
;tls-auth ta.key 0 tls-crypt myvpn.tlsauth
OpenVPNサーバー構成ファイルを保存して終了し(nanoでは、CTRL - X
、Y
、ENTER
を押して実行します)、次のコマンドで静的暗号化キーを生成します:
sudo openvpn --genkey --secret /etc/openvpn/myvpn.tlsauth
サーバーが構成されたので、VPN接続に安全に接続するために必要なSSLキーと証明書の設定に進むことができます。
ステップ3—キーと証明書の生成
Easy RSAは、プログラムにインストールされている一連のスクリプトを使用して、キーと証明書を生成します。 証明書を生成する必要があるたびに再構成することを回避するために、Easy RSAの構成を変更して、国、都市、優先電子メールアドレスなどの証明書フィールドに使用するデフォルト値を定義できます。
Easy RSAが生成したキーと証明書を格納するディレクトリを作成することから、キーと証明書を生成するプロセスを開始します。
sudo mkdir /etc/openvpn/easy-rsa/keys
デフォルトの証明書変数は、/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="US" export KEY_PROVINCE="NY" export KEY_CITY="New York" export KEY_ORG="DigitalOcean" export KEY_EMAIL="[email protected]" export [email protected] export KEY_CN=openvpn.example.com export KEY_NAME="server" export KEY_OU="Community" . . .
ファイルを保存して閉じます。
キーと証明書の生成を開始するには、easy-rsa
ディレクトリに移動し、vars
ファイルで設定した新しい変数のsource
に移動します。
cd /etc/openvpn/easy-rsa source ./vars
EasyRSAの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 client
最後に、バージョン管理された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がファイアウォールを通過できるようにするには、アクティブなfirewalldゾーンが何であるかを知る必要があります。 次のコマンドでこれを見つけます。
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サブネットにルーティングを転送します。 これを行うには、最初にサーバーで使用されるプライマリネットワークインターフェイスを表す変数(この例ではSHARK
)を作成し、次にその変数を使用してルーティングルールを永続的に追加します。
SHARK=$(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 $SHARK -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の最後に生成された静的暗号化キーが必要になります。
サーバーで次のファイルを見つけます。 一意のわかりやすい名前で複数のクライアントキーを生成した場合、キー名と証明書名は異なります。 この記事では、client
を使用しました。
/etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/easy-rsa/keys/client.crt /etc/openvpn/easy-rsa/keys/client.key /etc/openvpn/myvpn.tlsauth
これらのファイルをクライアントマシンにコピーします。 SFTPまたはお好みの方法を使用できます。 テキストエディタでファイルを開き、コンテンツをコピーしてクライアントマシンの新しいファイルに貼り付けることもできます。 使用する方法に関係なく、これらのファイルを保存する場所に注意してください。
次に、クライアントマシン上にclient.ovpn
というファイルを作成します。 これはOpenVPNクライアントの構成ファイルであり、サーバーへの接続方法を示しています。
sudo nano client.ovpn
次に、client.ovpn
に次の行を追加します。 これらの行の多くは、コメントを外したり、server.conf
ファイルに追加したもの、またはデフォルトですでにファイルに含まれているものを反映していることに注意してください。
client.ovpn
client tls-client ca /path/to/ca.crt cert /path/to/client.crt key /path/to/client.key tls-crypt /path/to/myvpn.tlsauth remote-cert-eku "TLS Web Client Authentication" proto udp remote your_server_ip 1194 udp dev tun topology subnet pull user nobody group nobody
これらの行を追加するときは、次の点に注意してください。
- キーと証明書にクライアントに付けた名前を反映するように、最初の行を変更する必要があります。 私たちの場合、これは
client
です。 - また、IPアドレスを
your_server_ip
からサーバーのIPアドレスに更新する必要があります。 ポート1194
は同じままでかまいません - キーファイルと証明書ファイルへのパスが正しいことを確認してください
このファイルは、OpenVPNクライアントがサーバーに接続するために使用できるようになりました。 以下は、クライアントを接続する方法に関するOS固有の手順です。
ウィンドウズ:
Windowsでは、GUIに付属する公式の OpenVPNCommunityEditionバイナリが必要になります。 .ovpn
構成ファイルを適切なディレクトリC:\Program Files\OpenVPN\config
に配置し、GUIで接続をクリックします。 Windows上のOpenVPNGUIは、管理者権限で実行する必要があります。
マックOS:
macOSでは、オープンソースアプリケーション Tunnelblick は、WindowsのOpenVPN GUIと同様のインターフェイスを提供し、OpenVPNと必要なTUN/TAPドライバーが付属しています。 Windowsと同様に、必要な唯一の手順は、.ovpn
構成ファイルを~/Library/Application Support/Tunnelblick/Configurations
ディレクトリに配置することです。 または、.ovpn
ファイルをダブルクリックすることもできます。
Linux:
Linuxでは、ディストリビューションの公式リポジトリからOpenVPNをインストールする必要があります。 次に、以下を実行してOpenVPNを呼び出すことができます。
sudo openvpn --config ~/path/to/client.ovpn
クライアント接続が正常に確立されたら、 GoogleをチェックしてパブリックIPを表示することにより、トラフィックがVPN経由でルーティングされていることを確認できます。
結論
これで、OpenVPNサーバーで完全に機能する仮想プライベートネットワークが実行されているはずです。 悪意のある攻撃者があなたの活動を追跡することを心配することなく、Webを閲覧してコンテンツをダウンロードできます。
VPNに自動的に接続するようにクライアントを構成したり、クライアント固有のルールとアクセスポリシーを構成したりするなど、OpenVPNのインストールをさらにカスタマイズするために実行できるいくつかの手順があります。 これらおよびその他のOpenVPNのカスタマイズについては、公式のOpenVPNドキュメントを参照してください。 インターネット上の自分自身とマシンを保護する他の方法に興味がある場合は、サーバーを保護するための7つのセキュリティ対策に関する記事を確認してください。