VPN は、信頼できないネットワークからでもインターネットや特定のサービスにアクセスできる仮想プライベート ネットワークです。基本的には、あたかもプライベート ネットワークに物理的に接続されているかのようです。たとえば、デバイスによって生成されたトラフィックが誰かに傍受されることを恐れずに、銀行口座にアクセスしたり、支払いを行ったりできます。
OpenVPN は、TLS (Transport Layer Security) および SSL (Secure Sockets Layer) プロトコルに基づく VPN です。 OpenVPN はいくつかの証明書を使用して、サーバーとクライアント間のトラフィックを暗号化します。
このチュートリアルでは、Ubuntu 18.04 を搭載したサーバーで OpenVPN を構成する方法を説明します。
このチュートリアルを実装するには、サーバー マシンと、証明書の有効性を評価する CA (認証局) として機能する別のマシンが必要です。
SSH 接続を介してサーバーと CA に接続する必要があります。まだ行っていない場合は、ガイドに従って SSH プロトコルで安全に接続することをお勧めします。
OpenVPN のインストール
サーバーにアクセスします。
OpenVPN は Ubuntu の公式 Ubuntu リポジトリで既に利用可能であるため、他に何も追加する必要はありません。
タイプ:
sudo apt update
sudo apt install openvpn
この時点で、OpenVPN はサーバーに正常にインストールされています。
EasyRSA のインストール
両方のマシンで次のように入力して、サーバーと CA に EasyRSA をダウンロードします。
wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz
最新バージョンは https://github.com/OpenVPN/easy-rsa/releases からダウンロードできます
$ cd ~
$ sudo tar xvf EasyRSA-3.0.4.tgz
ダウンロードしたバージョンによって名前が異なる場合があります
サーバーの構成
次のように入力してサーバー構成を完了します:
$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ sudo gzip -d /etc/openvpn/server.conf.gz
$ sudo nano /etc/openvpn/server.conf
HMAC ("tls-auth") を参照するセクションを見つけます。行がコメント化されている場合は、「;」を削除してください。
暗号化 (「暗号」) に関するセクションを見つけます。コメントされている場合は、「;」を削除してください。すぐ下に「auth SHA256」というテキストを含む新しい行を追加します。
Diffie-Hellman パラメータを定義する「dh」セクションを見つけて、名前から「2048」を削除します (「dh dh.pem」は
「ユーザー」セクションと「グループ」セクションを見つけて、「;」を削除します。行のコメントを外します。
CA での EasyRSA の構成
EasyRSA をインストールすると、CA の変数を定義する構成ファイルが CA に作成されます。タイプ:
$ cd ~/EasyRSA-3.0.4/
$ cp vars.example vars
$ nano vars
下の図に示されている手順の「#」を削除してください:
「easyrsa」スクリプトを開始して、公開鍵基盤 (PKI) を初期化します:
$ sudo ./easyrsa init-pki
$ sudo ./easyrsa build-ca nopass
このコマンドで 2 つのファイルが作成されます:
ca.crt:サーバーとクライアントが同じ信頼できるネットワークの一部であることを相互に通知するために使用する公開 CA 証明書。
ca.key:CA マシンがサーバーとクライアントの鍵と証明書に署名するために使用する秘密鍵。このファイルは、CA マシン (サード パーティがアクセスできない) にのみ保持する必要があります。そうしないと、ネットワーク セキュリティが危険にさらされる可能性があります。
名前を入力する必要があります。空白のままにして、Enter キーを押します。
CA からのサーバー証明書の要求
CA マシンが構成されたので、サーバーに秘密鍵と証明書要求を生成させ、それらを CA マシンに送信して署名してもらいます:
$ cd ~/EasyRSA-3.0.4
$ ./easyrsa init-pki
$ ./easyrsa gen-req server nopass
簡単にするために、マシンの名前は「サーバー」のままにしておき、後で何度も変更するのを避けます。
サーバー用の秘密鍵と「server.req」という証明書要求を作成しました:
$ sudo cp ~/EasyRSA-v3.0.6/pki/private/server.key /etc/openvpn/
server.req ファイルを CA マシンにコピーします:
$ sudo scp ~/EasyRSA-3.0.4/pki/reqs/server.req [email protected]_CA_ip:/tmp
証明書の生成と署名
EasyRSA フォルダー内の CA で、コピーしたばかりのファイルをインポートして署名します。
$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa import-req /tmp/server.req server
$ sudo ./easyrsa sign-req server server
「yes」と入力して Enter キーを押します。
署名済み証明書と ca.crt を VPN サーバーに転送します:
$ sudo scp pki/issued/server.crt [email protected]_server_ip:/tmp
$ sudo scp pki/ca.crt [email protected]_server_ip:/tmp
その後、サーバーで
受け取ったファイルを適切なディレクトリにコピーします:
$ sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/
$ cd ~/EasyRSA-3.0.4/
Diffie-Hellman に基づいて強力な交換キーを生成します。
$ sudo ./easyrsa gen-dh
$ sudo openvpn --genkey --secret ta.key
生成されたファイルを「/ etc / openvpn /」フォルダーにコピーします
$ sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/
$ sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/
クライアントの構成
クライアントの証明書とキーを格納するフォルダーを作成します (このガイドでは 1 つのクライアントのみを説明するため、ここでは「client1」と呼びますが、異なるクライアントを使用してクライアントごとに操作を繰り返す必要があります)。宗派)
$ sudo mkdir -p ~/client-configs/keys
$ sudo chmod -R 700 ~/client-configs
$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa gen-req client1 nopass
Enter キーを押して、提案された標準名を受け入れます。
$ sudo cp pki/private/client1.key ~/client-configs/keys/
クライアントのキーを以前に作成したフォルダーにコピーします。
$ sudo scp pki/reqs/client1.req [email protected]_CA_IP:/tmp
client1.req ファイルを CA マシンに送信します。
証明書要求を CA にインポートします:
$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa import-req /tmp/client1.req client1
$ sudo ./easyrsa sign-req client client1
「はい」と入力して署名を承認します。
client1.crt をサーバーにアップロードします:
scp pki/issued/client1.crt [email protected]_SERVER:/tmp
サーバーで、次のファイルを適切なフォルダーにコピーします。
$ sudo mkdir -p ~/client-configs/keys
$ sudo chmod -R 700 ~/client-configs
$ sudo cp /tmp/client1.crt ~/client-configs/keys/
$ sudo cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/
$ sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/
これで、サーバーとクライアントの証明書とキーの両方が生成されました。
IP ルーティングとファイアウォールの構成
IP 転送ルールを変更します:
$ sudo nano /etc/sysctl.conf
「net.ipv4.ip_forward」セクションを見つけて「#」を削除し、命令を「コメントなし」にします。
クライアント接続を正しくルーティングするために、いくつかのファイアウォール ルールを変更してください。
$ ip route | grep default
「dev」の後に名前を保存します (下図では「eth0」という名前):
$ sudo nano /etc/ufw/before.rules
下の図のようにコマンドを追加し、「eth0」をネットワーク インターフェイスの名前に置き換えます。
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES
保存して終了します。次に、UFW 構成ファイルを編集します。
$ sudo nano /etc/default/ufw
パラメータ「DEFAULT_FORWARD_POLICY」の値を「ACCEPT」に変更します。
$ sudo ufw allow 1194/udp
UDP トラフィック用にポート 1194 を追加します。
$ sudo ufw allow OpenSSH
UFW を再起動します:
$ sudo ufw disable
$ sudo ufw enable
OpenVPN サービスを開始します:
$ sudo systemctl start openvpn
サービスのステータスを確認してください:
$ sudo systemctl status openvpn
サーバーの起動時にサービスを設定します。
$ sudo systemctl enable openvpn
クライアントの構成ファイルを作成します:
$ sudo mkdir -p ~/client-configs/files
$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
$ sudo nano ~/client-configs/base.conf
「リモート」セクションを見つけて、「リモート IP_Server 1194」と表示されていることを確認してください
IP_Server:サーバー IP を記述します
1194:以前に選択されたポート。
「proto」セクションを見つけて、サーバーが UDP に設定されていることを確認します (「;」でコメント化された TCP 行が見つかります)。
「ユーザー」セクションと「グループ」セクションを見つけて、「;」を削除します。それらを「コメントなし」にします。
セクション "ca.crt" - "client.crt" - "client.key" - "ta.key" を見つけて、先頭に "#" を付けてコメントします
「cipher」セクションを見つけて、「cipher AES-256-CBC」ステートメントの下に「auth SHA256」ステートメントを追加します。
任意の時点で「キー方向 1」命令を追加してください。
これらのコメント行をいつでも追加してください。クライアントが Linux マシンの場合は、「コメントなし」にしてください。
# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
保存して終了します。
クライアントの構成を生成しています
サーバーで、クライアントの構成を自動的にコンパイルするスクリプトを作成します。
nano ~/client-configs/make_config.sh
テキストをコピーして貼り付けます:
#!/bin/bash
# First argument: Client identifier
KEY_DIR=~/client-configs/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
cat ${BASE_CONFIG} \
<(echo -e '<ca>') \
${KEY_DIR}/ca.crt \
<(echo -e '</ca>\n<cert>') \
${KEY_DIR}/${1}.crt \
<(echo -e '</cert>\n<key>') \
${KEY_DIR}/${1}.key \
<(echo -e '</key>\n<tls-auth>') \
${KEY_DIR}/ta.key \
<(echo -e '</tls-auth>') \
> ${OUTPUT_DIR}/${1}.ovpn
保存して終了します。
chmod 700 ~/client-configs/make_config.sh
ここで、クライアント クライアントの「構成」を生成してみてください。
$ cd ~/client-configs
$ sudo ./make_config.sh client1
「client1.ovpn」というファイルが作成されます。
このファイルを使用するデバイスに転送します。これは、接続のために VPN ソフトウェアによって使用されます。
クライアント証明書の取り消し
$ cd EasyRSA-3.0.4/
$ sudo ./easyrsa revoke client1
クライアント1 承認が取り消されるクライアントの名前です
「yes」と入力して確認します。
crl.pem ファイルを生成してサーバーにアップロードします。
$ sudo ./easyrsa gen-crl
$ sudo scp ~/EasyRSA-3.0.4/pki/crl.pem [email protected]_Server:/tmp
サーバー マシンの構成を更新して、失効を確認してください。
$ sudo cp /tmp/crl.pem /etc/openvpn
$ sudo nano /etc/openvpn/server.conf
ファイルの最後に「crl-verify crl.pem」を追加します。
保存して終了します。
$ sudo systemctl restart [email protected]
サーバーを再起動して変更を実装します。