信頼できないパブリックWi-Fiネットワークに接続しているときにインターネットに安全かつ確実にアクセスする場合でも、地理的に制限されたコンテンツをバイパスする場合でも、リモートで作業しているときに同僚が会社のネットワークに安全に接続できるようにする場合でも、VPNを使用するのが最善のソリューションです。
VPNを使用すると、リモートVPNサーバーに接続して、トラフィックデータを非公開にすることで、接続を暗号化して安全にし、匿名でWebを閲覧できます。
選択できる商用VPNプロバイダーはたくさんありますが、プロバイダーがアクティビティをログに記録していないことを本当に確信することはできません。最も安全なオプションは、独自のVPNサーバーをセットアップすることです。
このチュートリアルでは、Ubuntu 18.04にOpenVPNをインストールして構成することにより、独自のVPNサーバーをセットアップするプロセスについて説明します。また、クライアント証明書を生成し、構成ファイルを作成する方法も示します
OpenVPNは、フル機能のオープンソースのSecure Socket Layer(SSL)VPNソリューションです。 SSL/TLSプロトコルを使用してOSIレイヤー2または3の安全なネットワーク拡張を実装します。
前提条件#
このチュートリアルを完了するには、次のものが必要です。
- OpenVPNインスタンスをホストするためのUbuntu18.04サーバーへのsudoアクセス。
- サーバーには基本的なUFWファイアウォールが構成されている必要があります。
- CA(認証局)として機能する専用のマシンを分離します。 CA専用のマシンを使用したくない場合は、OpenVPNサーバーまたはローカルマシンでCAを構築できます。 CAの構築が完了したら、CAディレクトリを安全な場所またはオフラインの場所に移動することをお勧めします。
このチュートリアルでは、CAが別のUbuntu18.04マシン上にあることを前提としています。サーバーをCAとして使用している場合は、同じ手順(わずかな変更を加えたもの)が適用されます。
別のCAマシンを使用している理由は、攻撃者がサーバーに侵入するのを防ぐためです。攻撃者がなんとかCA秘密鍵にアクセスした場合、それを使用して新しい証明書に署名し、VPNサーバーへのアクセスを許可する可能性があります。
EasyRSAを使用したCAの構築#
新しいOpenVPNサーバーをセットアップするときの最初のステップは、公開鍵インフラストラクチャ(PKI)を構築することです。そのためには、以下を作成する必要があります。
- 認証局(CA)の証明書と秘密鍵。
- CAによって発行されたサーバー用の個別の証明書と秘密鍵のペア。
- CAによって発行されたクライアントごとに個別の証明書と秘密鍵のペア。
セキュリティ上の理由から前提条件で述べたように、スタンドアロンマシン上にCAを構築します。
CA、証明書要求、および署名証明書を作成するには、EasyRSAという名前のCLIユーティリティを使用します。
CAマシンで次の手順を実行します 。
-
まず、次のwgetコマンドを使用して、プロジェクトのGithubリポジトリからEasyRSAの最新リリースをダウンロードします。
cd && wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz
-
ダウンロードが完了したら、次のコマンドでアーカイブを抽出します。
tar xzf EasyRSA-nix-3.0.5.tgz
-
EasyRSAディレクトリに切り替えて、
vars
という名前の構成ファイルを作成します。vars.example
をコピーして ファイル:cd ~/EasyRSA-3.0.5/
cp vars.example vars
-
ファイルを開き、コメントを外して、情報に一致するように次のエントリを更新します。
〜/ EasyRSA-3.0.5 / varsnano ~/EasyRSA-3.0.5/vars
set_var EASYRSA_REQ_COUNTRY "US" set_var EASYRSA_REQ_PROVINCE "Pennsylvania" set_var EASYRSA_REQ_CITY "Pittsburgh" set_var EASYRSA_REQ_ORG "Linuxize" set_var EASYRSA_REQ_EMAIL "[email protected]" set_var EASYRSA_REQ_OU "Community"
-
最初にCAキーペアを生成する前に、次のコマンドで新しいPKIを初期化する必要があります。
./easyrsa init-pki
init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /home/causer/EasyRSA-3.0.5/pki
-
次のステップは、CAを構築することです:
./easyrsa build-ca
証明書に署名するたびにパスワードの入力を求められたくない場合は、
build-ca
を実行してくださいnopass
を使用したコマンド オプション:./easyrsa build-ca nopass
。... Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- ... ----- Common Name (eg: your user, host, or server name) [Easy-RSA CA]: CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /home/causer/EasyRSA-3.0.5/pki/ca.crt
CAキーのパスワードを設定し、CAの一般名を入力するように求められます。
完了すると、スクリプトは2つのファイルを作成します—CA公開証明書
ca.crt
およびCA秘密鍵ca.key
。認証局(CA)が作成されたので、これを使用して、1つまたは複数のOpenVPNサーバーおよびクライアントの証明書要求に署名できます。
OpenVPNとEasyRSAのインストール#
次のステップは、Ubuntuのリポジトリで利用可能なOpenVPNパッケージをインストールし、EasyRSAの最新バージョンをダウンロードすることです。
次の手順は、OpenVPNサーバーで実行されます 。
-
OpenVPNのインストールは非常に簡単です。OpenVPNサーバーで次のコマンドを実行するだけです。 :
sudo apt update
sudo apt install openvpn
-
EasyRSAの最新リリースをダウンロードします:
cd && wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz
ダウンロードが完了したら、次のコマンドを入力してアーカイブを抽出します。
tar xzf EasyRSA-nix-3.0.5.tgz
CAマシンでPKIをすでに初期化していますが、OpenVPNサーバーで新しいPKIを作成する必要もあります。これを行うには、以前と同じコマンドを使用します。
cd ~/EasyRSA-3.0.5/
./easyrsa init-pki
それでも2つのEasyRSAインストールが必要な理由がわからない場合は、このEasyRSAインスタンスを使用して、CAマシンのEasyRSAインスタンスを使用して署名される証明書要求を生成するためです。 。
複雑に聞こえるかもしれませんが、少し混乱しますが、チュートリアル全体を読むと、実際には複雑ではないことがわかります。
Diffie-HellmanおよびHMACキーの作成#
このセクションでは、鍵交換中に使用される強力なDiffie-Hellman鍵と、接続にセキュリティの層を追加するためのHMAC署名ファイルを生成します。
-
まず、OpenVPNサーバーのEasyRSAディレクトリに移動します 。
cd ~/EasyRSA-3.0.5/
-
Diffie-Hellman鍵を生成します:
./easyrsa gen-dh
スクリプトは2048ビット長のDHパラメータを生成します。これは、特にリソースが少ないサーバーでは、時間がかかる場合があります。完了すると、次のメッセージが画面に印刷されます。
DH parameters of size 2048 created at /home/serveruser/EasyRSA-3.0.5/pki/dh.pem
dh.pem
をコピーします/etc/openvpn
へのファイル ディレクトリ:sudo cp ~/EasyRSA-3.0.5/pki/dh.pem /etc/openvpn/
-
HMAC署名を生成します:
openvpn --genkey --secret ta.key
完了したら、
ta.key
をコピーします/etc/openvpn
へのファイル ディレクトリ:sudo cp ~/EasyRSA-3.0.5/ta.key /etc/openvpn/
サーバー証明書と秘密鍵の作成#
このセクションでは、OpenVPNサーバーの秘密鍵と証明書のリクエストを生成する方法について説明します。
-
OpenVPNサーバーのEasyRSAディレクトリに移動します サーバーの新しい秘密鍵と証明書要求ファイルを生成します:
cd ~/EasyRSA-3.0.5/
./easyrsa gen-req server1 nopass
nopass
を使用しています パスワードを入力せずにOpenVPNサーバーを起動したいので引数。この例でも、server1
を使用しています サーバー名(エンティティ)識別子として。サーバーに別の名前を選択する場合は、サーバー名が使用されている以下の手順を調整することを忘れないでください。このコマンドは、秘密鍵(
server1.key
)の2つのファイルを作成します。 )および証明書要求ファイル(server1.req
。----- Common Name (eg: your user, host, or server name) [server1]: Keypair and certificate request completed. Your files are: req: /home/serveruser/EasyRSA-3.0.5/pki/reqs/server1.req key: /home/serveruser/EasyRSA-3.0.5/pki/private/server1.key
-
秘密鍵を
/etc/openvpn
にコピーします ディレクトリ:sudo cp ~/EasyRSA-3.0.5/pki/private/server1.key /etc/openvpn/
-
証明書要求ファイルをCAマシンに転送します:
scp ~/EasyRSA-3.0.5/pki/reqs/server1.req causer@your_ca_ip:/tmp
この例では、
scp
を使用しています ファイルを転送するには、rsync
を使用することもできます oversshまたはその他の安全な方法。 -
CAマシンにログインします 、EasyRSAディレクトリに切り替えて、証明書要求ファイルをインポートします。
cd ~/EasyRSA-3.0.5
./easyrsa import-req /tmp/server1.req server1
最初の引数は証明書要求ファイルへのパスであり、2番目の引数はサーバーの短い(エンティティ)名です。この場合、サーバー名は
server1
です。 。The request has been successfully imported with a short name of: server1 You may now use this name to perform signing operations on this request.
このコマンドは、リクエストファイルを
pki/reqs
にコピーするだけです。 ディレクトリ。 -
CAマシンのEasyRSAディレクトリにある間 次のコマンドを実行して、リクエストに署名します。
cd ~/EasyRSA-3.0.5
./easyrsa sign-req server server1
最初の引数は
server
のいずれかです。 またはclient
2つ目は、サーバーの短い(エンティティ)名です。リクエストが信頼できるソースからのものであることを確認するよう求められます。
yes
と入力しますenter
を押します 確認する:You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a server certificate for 1080 days: subject= commonName = server1 Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes ...
CAキーがパスワードで保護されている場合は、パスワードの入力を求められます。検証が完了すると、スクリプトはSSL証明書を生成し、その証明書へのフルパスを出力します。
... Certificate is to be certified until Sep 17 10:54:48 2021 GMT (1080 days) Write out database with 1 new entries Data Base Updated Certificate created at: /home/causer/EasyRSA-3.0.5/pki/issued/server1.crt
-
次のステップは、署名された証明書
server1.crt
を転送することです およびca.crt
ファイルをOpenVPNサーバーに戻します。ここでも、scp
を使用できます 、rsync
またはその他の安全な方法:scp ~/EasyRSA-3.0.5/pki/issued/server1.crt serveruser@your_server_ip:/tmp
scp ~/EasyRSA-3.0.5/pki/ca.crt serveruser@your_server_ip:/tmp
-
OpenVPNサーバーにログインします 、
server1.crt
を移動します およびca.crt
ファイルを/etc/openvpn/
に追加します ディレクトリ:sudo mv /tmp/{server1,ca}.crt /etc/openvpn/
このセクションで概説されている手順を完了すると、OpenVPNサーバーに次の新しいファイルが作成されます。 :
-
/etc/openvpn/ca.crt
-
/etc/openvpn/dh.pem
-
/etc/openvpn/ta.key
-
/etc/openvpn/server1.crt
-
/etc/openvpn/server1.key
OpenVPNサービスの構成#
これで、サーバー証明書がCAによって署名され、OpenVPNサーバーに転送されました。 、OpenVPNサービスを構成する時が来ました。
OpenVPNインストールパッケージで提供されるサンプル構成ファイルを開始点として使用し、独自のカスタム構成オプションを追加します。
構成ファイルを/etc/openvpn/
に抽出することから始めます ディレクトリ:
sudo sh -c "gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server1.conf"
お気に入りのテキストエディタでファイルを開きます:
sudo nano /etc/openvpn/server1.conf
-
証明書、キー、およびDHパラメータディレクティブを見つけて、ファイル名を変更します。
/etc/openvpn/server1.confcert server1.crt key server1.key dh dh.pem
-
VPNを介してクライアントトラフィックをリダイレクトするには、
/etc/openvpn/server1.confredirect-gateway
を見つけてコメントを外します およびdhcp-option
オプション:push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220"
デフォルトでは、OpenDNSリゾルバーが使用されます。変更して、CloudFlare、Google、またはその他の必要なDNSリゾルバーを使用できます。
-
user
を見つけます およびgroup
ディレクティブを作成し、「;
」を削除してこれらの設定のコメントを解除します 各行の先頭にある」:user nobody group nogroup
-
ファイルの最後に次の行を追加します。このディレクティブは、メッセージ認証アルゴリズム(HMAC)をSHA1からSHA256に変更します
/etc/openvpn/server1.confauth SHA256
完了すると、サーバー構成ファイル(コメントを除く)は次のようになります。
/etc/openvpn/server1.confport 1194
proto udp
dev tun
ca ca.crt
cert server1.crt
key server1.key # This file should be kept secret
dh dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
verb 3
explicit-exit-notify 1
auth SHA256
OpenVPNサービスの開始#
このチュートリアルでは、server1.conf
を使用しました 構成ファイルとして。この構成でOpenVPNサービスを開始するには、systemdユニットのファイル名の後に構成ファイル名を指定する必要があります。
OpenVPNサーバー 次のコマンドを実行して、OpenVPNサービスを開始します。
sudo systemctl start openvpn@server1
次のように入力して、サービスが正常に開始されたかどうかを確認します。
sudo systemctl status openvpn@server1
サービスがアクティブで実行中の場合、出力は次のようになります。
● [email protected] - OpenVPN connection to server1
Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)
Active: active (running) since Mon 2018-10-08 20:11:57 UTC; 6min ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Main PID: 26739 (openvpn)
Status: "Initialization Sequence Completed"
次のコマンドを使用して、サービスが起動時に自動的に開始するようにします。
sudo systemctl enable openvpn@server1
Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /lib/systemd/system/[email protected].
OpenVPNサービスの開始に失敗した場合は、sudo journalctl -u openvpn@server1
を使用してログを確認してください
OpenVPNサーバーは新しいtunデバイスtun0
を作成します 。デバイスが使用可能かどうかを確認するには、次のipコマンドを使用します。
ip a show tun0
出力は次のようになります。
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::1627:9a20:bca8:e6a5/64 scope link stable-privacy
valid_lft forever preferred_lft forever
この時点で、OpenVPNサーバーが構成され、正しく実行されています。
ファイアウォールとサーバーのネットワーク構成#
ネットワークパケットを適切に転送するには、IP転送を有効にする必要があります。
次の手順は、OpenVPNサーバーで実行されます 。
/etc/sysctl.conf
を開きます ファイルを作成し、net.ipv4.ip_forward = 1
という行を追加またはコメント解除します。 :
sudo nano /etc/sysctl.conf
/etc/sysctl.conf # Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
終了したら、ファイルを保存して閉じます。
次のコマンドを実行して、新しい設定を適用します。
sudo sysctl -p
net.ipv4.ip_forward = 1
前提条件を満たしている場合は、サーバーでUFWファイアウォールがすでに実行されているはずです。
次に、マスカレードを有効にするファイアウォールルールを追加する必要があります。これにより、トラフィックがVPNを離れることができ、VPNクライアントがインターネットにアクセスできるようになります。
ルールを追加する前に、UbuntuOpenVPNサーバーのパブリックネットワークインターフェイスを知っておく必要があります。次のコマンドを実行すると、インターフェイスを簡単に見つけることができます。
ip -o -4 route show to default | awk '{print $5}'
この場合、インターフェースの名前はens3
です。 以下の出力に示すように。インターフェースの名前はおそらく別のものになります。
ens3
デフォルトでは、UFWを使用すると、転送されたパケットはドロップされます。これを変更し、転送されたパケットを許可するようにファイアウォールに指示する必要があります。
UFW構成ファイルを開き、DEFAULT_FORWARD_POLICY
を見つけます。 キーを押して、値をDROP
から変更します ACCEPT
へ :
sudo nano /etc/default/ufw
/ etc / default / ufw ...
# Set the default forward policy to ACCEPT, DROP or REJECT. Please note that
# if you change this you will most likely want to adjust your rules
DEFAULT_FORWARD_POLICY="ACCEPT"
...
次に、POSTROUTING
のデフォルトポリシーを設定する必要があります NATテーブルでチェーンし、マスカレードルールを設定します。
これを行うには、/etc/ufw/before.rules
を開きます ファイルを作成し、以下に示すように黄色で強調表示された行を追加します。
sudo nano /etc/ufw/before.rules
ens3
を置き換えることを忘れないでください -A POSTROUTING
前のコマンドで見つけたパブリックネットワークインターフェイスの名前と一致する行。 COMMIT
で始まる最後の行の後に行を貼り付けます 。
...
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
#NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Forward traffic through ens3 - Change to public network interface
-A POSTROUTING -s 10.8.0.0/16 -o ens3 -j MASQUERADE
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
完了したら、ファイルを保存して閉じます。
また、ポート1194
でUDPトラフィックを開く必要があります これはデフォルトのOpenVPNポートです。これを行うには、次のコマンドを実行します。
sudo ufw allow 1194/udp
SSHポートを開くのを忘れた場合は、ロックアウトされないように、次のコマンドを実行してポートを開きます。
sudo ufw allow OpenSSH
最後に、UFWを無効にしてから再度有効にして、UFWルールをリロードします。
sudo ufw disable
sudo ufw enable
変更を確認するには、次のコマンドを実行してPOSTROUTINGルールを一覧表示します。
sudo iptables -nvL POSTROUTING -t nat
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * ens3 10.8.0.0/16 0.0.0.0/0
クライアント構成インフラストラクチャの作成#
このチュートリアルでは、個別のSSL証明書を作成し、VPNクライアントごとに異なる構成ファイルを生成します。
クライアントの秘密鍵と証明書の要求は、クライアントマシンまたはサーバーのいずれかで生成できます。簡単にするために、サーバーで証明書要求を生成し、それをCAに送信して署名します。
クライアント証明書と構成ファイルを生成するプロセス全体は次のとおりです。
- OpenVPNサーバーで秘密鍵と証明書のリクエストを生成します。
- 署名するリクエストをCAマシンに送信します。
- 署名されたSSL証明書をOpenVPNサーバーにコピーし、構成ファイルを生成します。
- 構成ファイルをVPNクライアントのマシンに送信します。
クライアントファイルを保存するための一連のディレクトリを作成することから始めます。
mkdir -p ~/openvpn-clients/{configs,base,files}
base
ディレクトリには、すべてのクライアントファイル間で共有されるベースファイルと構成が保存されます。-
configs
ディレクトリには、生成されたクライアント構成が保存されます。 files
ディレクトリには、クライアント固有の証明書とキーのペアが保存されます。
ca.crt
をコピーします およびta.key
~/openvpn-clients/base
へのファイル ディレクトリ:
cp ~/EasyRSA-3.0.5/ta.key ~/openvpn-clients/base/
cp /etc/openvpn/ca.crt ~/openvpn-clients/base/
次に、サンプルVPNクライアント構成ファイルをクライアントにコピーします-~/openvpn-clients/base
ディレクトリ。このファイルを基本構成として使用します:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/openvpn-clients/base/
次に、サーバーの設定と構成に一致するようにファイルを編集する必要があります。テキストエディタで構成ファイルを開きます:
nano ~/openvpn-clients/base/client.conf
-
リモートディレクティブを見つけて、デフォルトのプレースホルダーをOpenVPNサーバーのパブリックIPアドレスに変更します。
〜/ openvpn-clients / base / client.conf# The hostname/IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote YOUR_SERVER_IP 1194
-
ca
を見つけてコメントします 、cert
、およびkey
ディレクティブ。証明書とキーは構成ファイル内に追加されます:# SSL/TLS parms. # See the server config file for more # description. It's best to use # a separate .crt/.key file pair # for each client. A single ca # file can be used for all clients. # ca ca.crt # cert client.crt # key client.key
-
サーバー設定と一致するように、ファイルの最後に次の行を追加します。
〜/ openvpn-clients / base / client.confauth SHA256
完了すると、サーバー構成ファイルは次のようになります。
〜/ openvpn-clients / base / client.confclient
dev tun
proto udp
remote YOUR_SERVER_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
verb 3
auth SHA256
key-direction 1
次に、基本構成とファイルをクライアントの証明書とキーとマージする簡単なbashスクリプトを作成し、生成された構成を~/openvpn-clients/configs
に保存します。 ディレクトリ。
テキストエディタを開き、次のスクリプトを作成します。
nano ~/openvpn-clients/gen_config.sh
〜/ openvpn-clients / gen_config.sh #!/bin/bash
FILES_DIR=$HOME/openvpn-clients/files
BASE_DIR=$HOME/openvpn-clients/base
CONFIGS_DIR=$HOME/openvpn-clients/configs
BASE_CONF=${BASE_DIR}/client.conf
CA_FILE=${BASE_DIR}/ca.crt
TA_FILE=${BASE_DIR}/ta.key
CLIENT_CERT=${FILES_DIR}/${1}.crt
CLIENT_KEY=${FILES_DIR}/${1}.key
# Test for files
for i in "$BASE_CONF" "$CA_FILE" "$TA_FILE" "$CLIENT_CERT" "$CLIENT_KEY"; do
if [[ ! -f $i ]]; then
echo " The file $i does not exist"
exit 1
fi
if [[ ! -r $i ]]; then
echo " The file $i is not readable."
exit 1
fi
done
# Generate client config
cat > ${CONFIGS_DIR}/${1}.ovpn <<EOF
$(cat ${BASE_CONF})
<key>
$(cat ${CLIENT_KEY})
</key>
<cert>
$(cat ${CLIENT_CERT})
</cert>
<ca>
$(cat ${CA_FILE})
</ca>
<tls-auth>
$(cat ${TA_FILE})
</tls-auth>
EOF
次のchmod
を実行して、ファイルを保存し、実行可能にします。 コマンド:
chmod u+x ~/openvpn-clients/gen_config.sh
クライアントの秘密鍵と証明書の要求を生成するプロセスは、サーバーの鍵と証明書の要求を生成するときと同じです。
前のセクションですでに説明したように、OpenVPNサーバーでクライアントの秘密鍵と証明書のリクエストを生成します。この例では、最初のVPNクライアントの名前はclient1
になります。 。
-
OpenVPNサーバーのEasyRSAディレクトリに移動します クライアント用の新しい秘密鍵と証明書要求ファイルを生成します:
cd ~/EasyRSA-3.0.5/
./easyrsa gen-req client1 nopass
このコマンドは、秘密鍵(
client1.key
)の2つのファイルを作成します。 )および証明書要求ファイル(client1.req
。Common Name (eg: your user, host, or server name) [client1]: Keypair and certificate request completed. Your files are: req: /home/serveruser/EasyRSA-3.0.5/pki/reqs/client1.req key: /home/serveruser/EasyRSA-3.0.5/pki/private/client1.key
-
秘密鍵
client1.key
をコピーします~/openvpn-clients/files
へ 前のセクションで作成したディレクトリ:cp ~/EasyRSA-3.0.5/pki/private/client1.key ~/openvpn-clients/files/
-
証明書要求ファイルをCAマシンに転送します:
scp ~/EasyRSA-3.0.5/pki/reqs/client1.req causer@your_ca_ip:/tmp
この例では、
scp
を使用しています ファイルを転送するには、rsync
を使用することもできます oversshまたはその他の安全な方法。 -
CAマシンにログインします 、EasyRSAディレクトリに切り替えて、証明書要求ファイルをインポートします。
cd ~/EasyRSA-3.0.5
./easyrsa import-req /tmp/client1.req client1
最初の引数は証明書要求ファイルへのパスであり、2番目の引数はクライアント名です。
The request has been successfully imported with a short name of: client1 You may now use this name to perform signing operations on this request.
-
CAマシンのEasyRSAディレクトリ内から 次のコマンドを実行して、リクエストに署名します。
cd ~/EasyRSA-3.0.5
./easyrsa sign-req client client1
リクエストが信頼できるソースからのものであることを確認するよう求められます。
yes
と入力しますenter
を押します 確認する:CAキーがパスワードで保護されている場合は、パスワードの入力を求められます。検証が完了すると、スクリプトはSSL証明書を生成し、その証明書へのフルパスを出力します。
... Certificate created at: /home/causer/EasyRSA-3.0.5/pki/issued/client1.crt
-
次に、署名された証明書
client1.crt
を転送します ファイルをOpenVPNサーバーに戻します。scp
を使用できます 、rsync
またはその他の安全な方法:scp ~/EasyRSA-3.0.5/pki/issued/client1.crt serveruser@your_server_ip:/tmp
-
OpenVPNサーバーにログインします 、
client1.crt
を移動します~/openvpn-clients/files
にファイルを追加します ディレクトリ:mv /tmp/client1.crt ~/openvpn-clients/files
-
最後のステップは、
gen_config.sh
を使用してクライアント構成を生成することです。 脚本。~/openvpn-clients
に切り替えます ディレクトリを作成し、クライアント名を引数として使用してスクリプトを実行します:cd ~/openvpn-clients
./gen_config.sh client1
スクリプトは、
client1.ovpn
という名前のファイルを作成します~/client-configs/configs
にあります ディレクトリ。ディレクトリを一覧表示して確認できます:ls ~/openvpn-clients/configs
client1.ovpn
この時点で、クライアント構成が作成されます。これで、クライアントとして使用する予定のデバイスに構成ファイルを転送できます。
たとえば、scp
を使用して構成ファイルをローカルマシンに転送するには 次のコマンドを実行する必要があります:
scp ~/openvpn-clients/configs/client1.ovpn your_local_ip:/
クライアントを追加するには、同じ手順を繰り返します。
クライアントの接続#
Linux#
ディストリビューションまたはデスクトップ環境は、OpenVPNサーバーに接続するためのツールまたはグラフィックユーザーインターフェイスを提供する場合があります。このチュートリアルでは、openvpn
を使用してサーバーに接続する方法を示します。 ツール。
-
UbuntuとDebianにOpenVPNをインストールする
sudo apt update
sudo apt install openvpn
-
CentOSとFedoraにOpenVPNをインストールする
sudo yum install epel-release
sudo yum install openvpn
パッケージがインストールされたら、VPNサーバーに接続するにはopenvpn
を使用します コマンドを実行し、クライアント構成ファイルを指定します:
sudo openvpn --config client1.ovpn
macOS#
Tunnelblickは、OSXおよびmacOSでのOpenVPN用の無料のオープンソースグラフィックユーザーインターフェイスです。
Windows#
OpenVPNアプリケーションの最新ビルドをダウンロードしてインストールします。OpenVPNのダウンロードページ。
.ovpn
をコピーします ファイルをOpenVPN構成フォルダー(\Users\<Name>\OpenVPN\Config
または\Program Files\OpenVPN\config
。
OpenVPNアプリケーションを起動します。
OpenVPNシステムトレイアイコンを右クリックすると、コピーしたOpenVPN構成ファイルの名前がメニューに表示されます。 [接続]をクリックします。
AndroidとiOS#
OpenVPNによって開発されたVPNアプリケーションは、AndroidとiOSの両方で利用できます。アプリケーションをインストールし、クライアントの.ovp
をインポートします ファイル。
- Android OpenVPN Connect
- iOS OpenVPN Connect
クライアント証明書の取り消し#
証明書を取り消すとは、署名された証明書を無効にして、OpenVPNサーバーへのアクセスに使用できなくなることを意味します。
クライアント証明書を取り消すには、以下の手順に従います。
-
CAマシンにログインします EasyRSAディレクトリに切り替えます:
cd EasyRSA-3.0.5
-
revoke
を使用してeasyrsaスクリプトを実行します 引数の後に、取り消すクライアント名を続けます:./easyrsa revoke client1
証明書を取り消すかどうかを確認するよう求められます。
yes
と入力しますenter
を押します 確認する:Please confirm you wish to revoke the certificate with the following subject: subject= commonName = client1 Type the word 'yes' to continue, or any other input to abort. Continue with revocation: yes ...
CAキーがパスワードで保護されている場合は、パスワードの入力を求められます。 Once verified the script will revoke the certificate.
... Revocation was successful. You must run gen-crl and upload a CRL to your infrastructure in order to prevent the revoked cert from being accepted.
-
Use the
gen-crl
option to generate a certificate revocation list (CRL):./easyrsa gen-crl
An updated CRL has been created. CRL file: /home/causer/EasyRSA-3.0.5/pki/crl.pem
-
Upload the CRL file to the OpenVPN server:
scp ~/EasyRSA-3.0.5/pki/crl.pem serveruser@your_server_ip:/tmp
-
Login to your OpenVPN server server and move the file to the
/etc/openvpn
ディレクトリ:sudo mv /tmp/crl.pem /etc/openvpn
-
Open the OpenVPN server configuration file:
sudo nano /etc/openvpn/server1.conf
Paste the following line at the end of the file
/etc/openvpn/server1.confcrl-verify crl.pem
Save and close the file.
-
Restart the OpenVPN service for the revocation directive to take effect:
sudo systemctl restart openvpn@server1
At this point, the client should no longer be able to access the OpenVPN server using the revoked certificate.
If you need revoke additional client certificates just repeat the same steps.