Ubuntu20.04で安全なOpenVPNサーバーをセットアップするための究極のガイド
仮想プライベートネットワーク(VPN)を使用すると、プライベートネットワークに直接接続しているかのように、オフィスネットワークやインターネットなどのリモートプライベートネットワークに安全かつプライベートに接続できます。
VPNは、サーバークライアントアーキテクチャで機能します。 VPNサーバーはマシン上に展開され、インターネットを介して公的にアクセス可能です。 VPNサーバーは、オフィスネットワークなどのプライベートLANへの接続を許可するように、またはインターネットへの接続を許可するように構成できます。ユーザーは、ローカルマシン上のVPNクライアントを使用してVPNサーバーに接続します。 VPNサーバーとクライアント間の通信は、安全なトンネリングプロトコルを使用して行われます。インターネットからは、トラフィックの宛先がVPNサーバーであるかのように見えます。ただし、トラフィックはサーバーを介してクライアントに渡されます。
VPNは、公共のWifiネットワークに安全に接続するなど、日常生活で多くの用途があります。これは、多くの場合、侵害されたり、Webサイトで許可されている国に拠点を置くVPNに接続することで、特定のWebサイトの地理的制限を回避したりします。
OpenVPNは広く使用されているVPN実装であり、幅広い構成とオプションを可能にします。データの暗号化にはSSL(Secure Sockets Layer)プロトコルを使用し、VPNクライアントの認証には事前共有キー、ユーザー名/パスワード、または証明書を使用します。この記事では、Ubuntu20.04でVPNサーバーとVPNクライアントをセットアップする方法を説明します。
インストール
OpenVPNは、パッケージの公式Ubuntuリポジトリで利用できます openvpn
。このパッケージは、OpenVPNサーバーとクライアントの両方をインストールします。
sudo apt install openvpn
前述のように、OpenVPNはSSL証明書を使用してサーバーとクライアント間のデータを暗号化します。 VPNの証明書を発行するには、独自の認証局(CA)を設定する必要があります。これは、OpenVPNが設定されているマシンとは別のマシンで設定する必要があることに注意してください。その理由は、同じサーバー上にあり、侵害された場合、攻撃者が秘密鍵にアクセスしてVPN接続を攻撃する可能性があるためです。
「Easy-RSA」というツールを使用して、認証局を設定します。これをインストールするには、CAマシン、OpenVPNサーバーマシン、およびクライアントマシンで以下を実行します。これは、CAをセットアップするためにこれら3つすべてで構成が必要になるためです。
sudo apt installeasy-rsa
ここで、最初にCAマシンで認証局を構成し、OpenVPNサーバーマシンで同じために必要ないくつかの構成手順を実行します。
認証局の設定
CAマシンでの初期設定
今、このパッケージはというコマンドをインストールします make-cadir
これは、認証局を構成するためのフォルダーを作成するために使用されます。これを使ってフォルダを作成し、フォルダに入りましょう。
make-cadir cert_authority && cd cert_authority
というファイルを開きます vars
このディレクトリに作成されます。このファイルには、変更する必要のあるいくつかの構成変数が含まれています。変更が必要な値は、コメントの後の91〜96行目にあります。 組織分野 これらのフィールドについて説明します。行のコメントを解除し、サンプル値の代わりに適切な値を入力します。
ファイルを保存して終了します。 vimエディターを使用している場合は、 ESC
、 タイプ :wq
を押して 入力
保存して終了します。
次に、 easyrsa
ディレクトリ内のプログラムを使用して、公開鍵と証明書の生成に使用される公開鍵インフラストラクチャ(PKI)を設定します。
./easyrsa init-pki
次のステップでは、CAキーと証明書を生成します。コマンドでパスワードの入力を求められたら、CAキーのパスワードを入力します。また、プロンプトが表示されたら、一般名を入力します。 これを空白のままにすると、デフォルト名のEasy-RSACA名が使用されます。
./easyrsa build-ca
出力からわかるように、証明書とキーが生成されています。このキーは、クライアントとサーバーの証明書に署名するために使用されるため、決して触れたり変更したりしないでください。
これで、PKIのセットアップが完了しました。次のステップは、OpenVPNサーバーとして使用するマシン上にサーバーキーと証明書を作成することです。この証明書は、後でCAマシンによって署名されます。
サーバーマシンでのサーバーキーと証明書の生成
サーバーマシンにはすでにEasyRSAがインストールされています。次に、以前にCAマシンで実行したサーバーマシンで3つの手順を実行します。を使用してCAディレクトリを作成する make-cadir
その中に入り、変数を変更します vars
ファイルを使用してPKIを生成する ./easyrsa init-pki
指図。
次に、コマンドを実行してサーバー証明書の要求とキーを生成する必要があります。
./easyrsa gen-req server nopass
オプションを渡したことに注意してください nopass
コマンドがサーバーキーのパスワードの入力を要求しないようにします。サーバーの共通名の入力を求められますが、これには何でも入力できます。デフォルト名の場合は空のままにします(サーバ) 使用する。
生成されたキーファイルを内に移動します / etc / openvpn
ディレクトリ。
sudo mv pki / private / server.key / etc / openvpn
証明書要求をCAマシンに送信します。コマンドを使用します scp
この目的のために。
scp pki / reqs / server.req user @ CA_MACHINE_HOSTNAME:/ directory
上のスクリーンショットでは、ホスト45.79.125.41がCAマシンです。 / rootディレクトリに証明書をコピーしました。
これで、サーバーの証明書がCAマシンにコピーされました。次のステップは、CAマシンに戻り、この証明書に署名することです。
CAでサーバー証明書に署名する
まず、サーバーからの証明書要求ファイルがCAマシンにコピーされているかどうかを確認しましょう。ファイルをコピーしたディレクトリ(私の例では/ root)に移動し、 ls
.
:〜#cd / root && ls cert_authority server.req
ご覧のとおり、ファイル server.req
が存在します。次に、CAディレクトリに移動し、このリクエストをインポートします。
cd cert_authority ./easyrsa import-req /root/server.req server
この要求に署名するには、次のコマンドを実行します。
./easyrsasign-reqサーバーサーバー
ここで、最初の引数はリクエストのタイプです。つまり、 サーバ、 2番目の引数は、以前はデフォルト値を使用していたサーバーマシンの一般名です。 サーバ。
フレーズを入力してください はい、 プロンプトが表示されたら、CAキーのパスワード。
これで、証明書要求ファイルを削除して、サーバー用に生成された証明書とCA公開証明書をサーバーマシンにコピーして戻すことができます。
rm /root/server.req scp pki / issued / server.crt [email protected]:/ root scp pki / ca.crt [email protected]:/ root
次に、VPNの安全な接続を確保するために、さらにいくつかの手順を実行する必要があります。
DHパラメータの生成
DH(Diffie-Hellman)鍵交換は、安全でないチャネルを介した暗号鍵の安全な交換を保証するアルゴリズムです。まず、受け取った証明書とCA公開証明書をに移動しましょう / etc / openvpn
.
mv /root/ca.crt /root/server.crt / etc / openvpn
サーバーマシンのCAフォルダーに移動し、次のコマンドを実行してDHパラメーターを生成します。生成に時間がかかる場合があります。
./easyrsa gen-dh
次に、生成されたファイルをに移動します / etc / openvpn
.
mv /root/cert_authority/pki/dh.pem / etc / openvpn
TAキーの生成
OpenVPNは、TLS認証キーを使用する別の追加のセキュリティ対策を使用します。 TLS認証キーを生成するには、次のコマンドを実行します。
openvpn --genkey --secret tls_auth.key
そして、キーをに移動します / etc / openvpn
.
mv tls_auth.key / etc / openvpn
これで、サーバーキーの構成と認証局のセットアップが完了しました。ここで、VPNサーバーの実際の構成に移りましょう。
OpenVPNサーバー構成
OpenVPNサーバーの構成ファイルは自動的に作成されませんが、からのテンプレート構成ファイルを使用できます。 openvpn
パッケージ。
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz / etc / openvpn / sudo gzip -d /etc/openvpn/server.conf.gz
vimまたは任意のエディターを使用してファイルを開きます。
cd / etc / openvpn vim server.conf
以前に生成したキーと証明書の一般名を入力する必要があります。行番号に移動します。 78.すべてのデフォルト名を使用したので、それらを変更せずに保持します。次に、85行目のDHパラメータファイルの名前を確認します。名前はdh.pemを使用しているので、変更しましょう。
次に、OpenVPNサーバーの権限を変更しましょう。 274行目と275行目に移動し、先頭を削除します ;
コメントを外します。
同様に、行192に移動し、セミコロンを削除します。このディレクティブにより、すべてのクライアントのトラフィックがVPNを通過できるようになります。
ファイルを保存して終了します。
フォルダ/ etc / openvpnの所有権をrootに変更します。
sudo chown -R root:root / etc / openvpn
ネットワークとファイアウォールのセットアップ
VPNクライアントとの間でパケットを転送できるようにするには、サーバーでIP転送を許可する必要があります。 28行目のコメントを外す /etc/sysctl.conf
:
ファイルを保存して終了します。
再起動 systemctl
これらの変更が行われるために。
sudo sysctl -p
VPNクライアントがVPNサーバーのIPアドレスを使用してインターネットにアクセスできるようにするには、UFWファイアウォールを使用してサーバーにネットワークアドレス変換(NAT)を設定する必要があります。まず、ファイアウォール構成でパケット転送を有効にしましょう。開ける / etc / default / ufw
19行目の変数をACCEPTに変更します。
ファイルを保存して終了します。
次に、次のルールをファイルに追加します /etc/ufw/before.rules
の前に フィルター ファイルの行。
* nat:POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.8.0.0/8 -o -j MASQUERADE COMMIT
の代わりにネットワークインターフェースを入力してください . あなたはコマンドであなたのネットワークインターフェースを見ることができます ifconfig
.
ファイアウォールでOpenVPNサービスのトラフィックを許可し、ポート1194を許可します。
sudo ufw allow openvpn && sudo ufw allow 1194
ファイアウォールサービスをリロードします。
sudo ufw reload
これで、次を実行してOpenVPNサーバーデーモンを再起動できます。
sudo service openvpn restart
次のコマンドを実行して、起動時に起動できるようにします。
sudo systemctl enable openvpn
これでOpenVPNサーバーが構成され、起動しました。次に、クライアント証明書の要求とキーの生成およびその他の構成に進みます。
OpenVPNクライアント構成
クライアントのキーと証明書要求を生成する必要があります。これを行う手順は、サーバーの場合と同じです。
クライアントキーと証明書の要求はクライアントマシンで作成してからCAマシンに転送できますが、サーバーマシンで作成することをお勧めします。サーバーでこれを行う利点は、サーバーで必要なすべての手順を実行するためのスクリプトを作成できることです。これにより、新しいクライアントがVPNに参加しやすくなります。
サーバー上のCAフォルダーに移動し、以下を実行します。
cd〜 / cert_authority ./easyrsa gen-req client nopass
前に行ったのと同様の方法で、プロンプトが表示されたら共通名を入力するか、空のままにしてデフォルトの共通名を使用します。 クライアント.
次に、生成されたクライアント証明書要求をCAマシンにコピーします。
scp pki / reqs / client.req [email protected]:/ root
このリクエストをCAマシンにインポートしましょう。
./easyrsa import-req / root / client.reqクライアント
そして今、それに署名しましょう:
./easyrsasign-reqクライアントクライアント
入力はい
続行するように求められたとき。求められたら、CAキーのパスワードを入力します。
これで、クライアントに要求されたファイルを削除し、要求をVPNサーバーマシンにコピーして戻すことができます。
rm /root/client.req scp pki / issued / client.crt [email protected]:/ root
というフォルダを作成しましょう クライアント
クライアントに関連するすべてのファイルをVPNサーバーに保持します。クライアントキーと証明書をこのフォルダーに移動します。
mkdir〜 / client sudo mv〜 / client.crt〜 / cert_authority / pki / private / client.key〜 / client
次に、サーバー構成ファイルを作成した方法と同様に、使用可能なテンプレートから構成ファイルを作成しましょう。
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf〜/ client
ファイルを開く client.conf
。 42行目で、代わりにサーバーマシンのホスト名またはIPアドレスを入力します my-server-1
.
ファイルの特権をダウングレードするには、先頭のセミコロンを削除して行61と62のコメントを解除します。
次に、88〜90行目と108行目をコメントアウトします。理由は、ファイルの場所を使用するのではなく、上記のファイルの内容を手動で追加するためです。これを行う目的は、クライアント構成ファイルが後でクライアントに転送されることです。この場合、実際にはクライアントキーと証明書ファイルはありません。したがって、それらの内容を構成ファイル自体にコピーします。
クライアント構成ファイルに以下を追加します。指定されたタグ内にそれぞれのファイルのファイル内容を入力します。
#ca.crtファイルの内容をここに貼り付けます#client.crtファイルの内容をここに貼り付けます#client.keyファイルの内容をここに貼り付けますkey-direction 1#tls_auth.keyファイルの内容をここに貼り付けます
ファイルを保存して終了します。このファイルの名前を client.conf
に client.ovpn
後者は、ネットワーク構成としてインポートできる構成ファイルに必要な拡張子です。
次に、ファイルを転送します client.ovpn
クライアント、つまりローカルマシンに。
走る scp
クライアントマシンで、サーバーマシンからローカルマシンにファイルを転送します。
scp user @ server_ip:/ path_to_file local_destination_path
最後に、この構成ファイルを使用してVPNサーバーに接続する必要があります。これは、コマンドラインとGUIの両方で実行できます。
コマンドラインからVPNクライアントを起動するには、次のコマンドを実行します。
sudo openvpn --config client.ovpn
これが、VPNクライアントを起動するために実行する必要がある唯一のコマンドです。
GUIを介してVPNクライアントを起動するには、次の手順を実行します。
クライアントマシンの[設定]»[ネットワーク]に移動します。
クリックしてください + [VPN]セクションのボタンをクリックし、オプションから[ファイルからインポート...]を選択します。
[追加]をクリックして、VPNの使用を開始します。
「ゲートウェイ」の下では、サーバーのIPアドレスであることに注意してください。
最後に、[クライアントVPN]ボタンを切り替えて、マシンでVPNを有効にします。
VPN接続の確立には数秒かかる場合があります。 VPNの新しい進行状況ロゴは、セットアップ中に画面の左上隅に表示され、セットアップされるとVPNロゴに変わります。
VPNが正しく機能しているかどうかを確認するには、次のコマンドを実行します。
curl //ipinfo.io/ip
サーバーマシンのIPアドレスを返す必要があります。または、Googleで「マイIP」を検索するだけでIPアドレスを確認することもできます。 VPNセットアップが正しく機能している場合は、VPNサーバーのIPアドレスが表示されます。
結論
この記事では、OpenVPNサーバー、認証局、およびOpenVPNクライアントを構成する方法について説明しました。 VPNにクライアントを追加するには、手順に従ってクライアントの証明書を生成して署名し、ここで作成したものと同じ構成ファイルを使用する必要がありますが、クライアントキーと証明書の値のみが変更されます。
インターネット接続が遅い場合、通信にUDPが使用されていると、かなりのパケット損失が発生する可能性があります。ユーザーは、回線のコメントを解除することでTCPに切り替えることができます proto tcp
とその行にコメントする proto udp
サーバー構成ファイル内。
また、他のエラーが発生した場合は、次のコマンドでログレベルを設定できます。 動詞
サーバーとクライアントの両方の構成ファイルのディレクティブ。 0から9までの値を入力できます。このディレクティブの値が高いほど、ログはより詳細になります。