CentOS7でOpenVPNサーバーをセットアップおよび構成する方法
序章
仮想プライベートネットワーク(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などの他のネットワークサービスとの接続の問題が発生する可能性があることに注意してください。
push "redirect-gateway def1 bypass-dhcp"
クライアントはISPが提供するデフォルトのDNSサーバーを使用できないため(トラフィックが再ルーティングされるため)、OpenVPNへの接続に使用できるDNSサーバーをクライアントに通知する必要があります。 さまざまなDNSサーバーを選択できますが、ここでは、次のIPを持つGoogleのパブリックDNSサーバーを使用します。 8.8.8.8
と 8.8.4.4
.
両方のコメントを外してこれを設定します push "dhcp-option DNS ..."
行とIPアドレスの更新:
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
OpenVPNは、起動後に特権なしで実行する必要があるため、nobodyのユーザーとグループで実行するように指示する必要があります。 これを有効にするには、コメントを外します user nobody
と group nobody
行:
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
:
topology subnet
また、サーバー構成ファイルに次の行を追加することをお勧めします。 これにより、着信クライアント証明書が本当にクライアントからのものであるかどうかが再確認され、後の手順で確立するセキュリティパラメータが強化されます。
remote-cert-eku "TLS Web Client Authentication"
最後に、OpenVPNは、ユーザーがTLS認証を有効にすることを強くお勧めします。これは、コンピューターネットワークを介した安全な通信を保証する暗号化プロトコルです。 これを行うには、静的暗号化キーを生成する必要があります(この例では次のように名前が付けられています myvpn.tlsauth
、好きな名前を選択できますが)。 このキーを作成する前に、構成ファイルの次の行にコメントを付けてください。 tls-auth ta.key 0
セミコロンを前に付けます。 それから加えて tls-crypt myvpn.tlsauth
その下の行に:
;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
デフォルトの証明書変数は、 vars
のファイル /etc/openvpn/easy-rsa
、そのファイルを開いて編集します。
- 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
:これは、所属する「組織単位」の名前である必要があります。通常は、部門またはチームの名前です。
残りの変数は、特定のユースケース以外では安全に無視できます。 変更を加えると、ファイルは次のようになります。
. . .
# 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 KEY_EMAIL=[email protected]
export KEY_CN=openvpn.example.com
export KEY_NAME="server"
export KEY_OU="Community"
. . .
ファイルを保存して閉じます。
キーと証明書の生成を開始するには、に移動します easy-rsa
ディレクトリと source
で設定した新しい変数で vars
ファイル:
- 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
次に、 openvpn
アクティブゾーン内でfirewalldによって許可されているサービスのリストにサービスを追加し、コマンドを再度実行してその設定を永続的にします。 --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
次に、ファイルの先頭に次の行を追加します。
net.ipv4.ip_forward = 1
最後に、ネットワークサービスを再起動して、IP転送を有効にします。
- sudo systemctl restart network.service
ルーティングとファイアウォールのルールを設定すると、サーバーでOpenVPNサービスを開始できます。
ステップ5—OpenVPNを開始する
OpenVPNは、を使用してsystemdサービスとして管理されます systemctl
. サーバーが稼働している限りいつでも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
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つのセキュリティ対策に関する記事を確認してください。