序章
OpenVPNは、トラフィックが盗聴されないようにするための優れたツールです。 これを使用して、ラップトップからDigitalOcean VPS(ドロップレット)への安全な接続、およびクラウドサーバー間の安全な接続を確保できます。 両方を同時に行うこともできます。
これは、絶対確実で、決定的な、完全に安全な、人生に依存する一連の指示ではありません。 ここでは3つのショートカットを使用します。これは、使いやすさとセキュリティの間の合理的なトレードオフであると思いますが、これらの指示に従った場合でも、私もDigitalOceanもVPSのセキュリティに責任を負いません。
暗号化のロックスターを引用するには、「構想からインストールまでのすべてのステップで何をしているのかを知る必要があります。」 — Bruce Schneier
この記事は、仮想プライベートネットワークのセットアップを開始するのに役立ちます。 あなたは警告されました。 'は、付録1 で、これらのショートカットを作成しないようにするためのショートカットと一般的な順序を示します。
相互に接続するクラウドサーバーを2つだけにしたい場合は、より単純な(ただし安全性は低い)チュートリアルを見つけることをお勧めします。ただし、これはセットアップの容易さとセキュリティの間の適切な妥協点です。
ノート: このチュートリアルでは、IPv4セキュリティについて説明します。 Linuxでは、IPv6のセキュリティはIPv4とは別に維持されます。 たとえば、「iptables」はIPv4アドレスのファイアウォールルールのみを維持しますが、「ip6tables」と呼ばれるIPv6の対応物があり、IPv6ネットワークアドレスのファイアウォールルールを維持するために使用できます。
VPSがIPv6用に構成されている場合は、IPv4とIPv6の両方のネットワークインターフェイスを適切なツールで保護することを忘れないでください。 IPv6ツールの詳細については、次のガイドを参照してください。LinuxVPSでIPv6を使用するようにツールを構成する方法
入門
このOpenVPNセットアップには少なくとも2つのドロップレットまたはVPSが必要であり、大きな変更を加えることなく最大約60VPSで動作します。 したがって、開始するには、2つの液滴を作成します。 このチュートリアルの残りの部分では、これらをドロップレット1およびドロップレット2と呼びます。
ドロップレット1について
•Ubuntu13.04x32でドロップレットを作成します。
これは、DigitalOceanが提供するUbuntuのどのバージョンでも変更なしで機能するはずですが、13.04でのみテストされました。
セキュアシェルを介してVPSに接続します。 パッケージを更新し、いくつかのものをインストールします。
aptitude update && aptitude dist-upgrade -y && aptitude install openvpn firehol -y && reboot
この間にシェルが紫色になった場合は、「パッケージメンテナーのバージョンのインストール」を2回選択するだけです。
一方、ドロップレット2では
•Ubuntu13.04x32でドロップレットを作成します。
繰り返しますが、これはどのバージョンのUbuntuでも機能するはずです。
セキュアシェルを介してVPSに接続します。 いくつかのインストールでパッケージを更新します。
aptitude update && aptitude dist-upgrade -y && aptitude install openvpn -y && reboot
繰り返しになりますが、この間にシェルが紫色になった場合は、「パッケージメンテナーのバージョンのインストール」を2回選択するだけです。
キーの生成
キーの生成は、Droplet1でのみ実行されます。 シェルに次のコマンドを入力します。
cd /etc/openvpn/ mkdir easy-rsa cd easy-rsa cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* .
次に、キー生成プロセスを大幅に高速化するいくつかのプリセットを入力します。 次のコマンドを入力します。
nano /etc/openvpn/easy-rsa/vars
先に進み、次の値を編集します(さらにいくつか存在しますが、これらに対して行う必要があるだけです)。
- KEY_COUNTRY
- KEY_PROVINCE
- KEY_CITY
- KEY_ORG and
- KEY_EMAIL
保護を強化するために、KEY_SIZEを2048以上に調整できます。
Control-O、Enter、およびControl-Xを使用して保存し、終了します。
認証局の証明書とキーを作成する
次に、次のコマンドを入力します。
source vars ./clean-all ./build-ca
すべての質問でEnterキーを押すことができるはずです。
注:戻ってさらにキーを作成する必要がある場合は、' source vars を再入力する必要がありますが、 don 'tは./clean-と入力します。 allまたはyou'は認証局を消去し、VPN設定全体を損ないます。
サーバー証明書とキーを作成する
次のコマンドを使用して、サーバー証明書とキーを生成します。
./build-key-server server
デフォルトではEnterキーを押すことができるはずですが、証明書の共通名が「サーバー」であることを確認してください。
パスフレーズを追加するように求められますが、入力せずにEnterキーを押すだけです。
「証明書に署名しますか?」というメッセージが表示されたら、 y と入力して、Enterキーを押します。
「1つの証明書要求のうち1つが認証されましたか?」と表示されたら、 y と入力して、Enterキーを押します。
クライアントキーを生成する
次に、クライアントの証明書とキーを生成します。 セキュリティ上の理由から、各クライアントは独自の証明書とキーを取得します。
最初のクライアントに「client1」という名前を付けているので、これを変更した場合は、後で数回調整する必要があります。 したがって、次のように入力します。
./build-key client1
サーバーキーと同様に、「証明書に署名しますか?」というメッセージが表示されたら、 y と入力し、Enterキーを押します。
「1つの証明書要求のうち1つが認証されましたか?」と表示されたら、 y と入力して、Enterキーを押します。
先に進み、必要な数のクライアントに対してこれを繰り返します。 後でこれに戻ることもできます(ただし、そうする場合は、もう一度「ソース変数」を忘れないでください)。
Diffie-Hellmanパラメーターを生成する
これは、認証後に暗号化パラメーターを決定するために使用されます。 次の行を入力するだけです。
./build-dh
キーを所定の位置にコピーします
次に、さまざまなキーと証明書をクラウドサーバーの所定の場所にコピーします。
cd /etc/openvpn/easy-rsa/keys cp ca.crt dh1024.pem server.crt server.key /etc/openvpn
キーを安全に保つことは非常に重要です。 ルートのみが読み取り権限を持っていることを再確認してください。 したがって、次のように入力します。
ls -lah /etc/openvpn
'が探しているのは、server.keyに-rw------- のアクセス許可(所有者は読み取り/書き込み、グループはなし、なし)があることです。みんな)。 変更する必要がある場合は、次のコマンドを使用します。
chmod 600 /etc/openvpn/server.key
クライアント証明書とキーを配布する
次の表は、どのファイルがどのクライアントに送られるかを示しています。
client1 | client2 |
---|---|
ca.crt | ca.crt |
client1.crt | client2.crt |
client1.key (SECRET) | client2.key (SECRET) |
セキュアコピーを使用して、ファイルを2番目のVPSに安全にコピーします。 (猫を飼ってから、SSHウィンドウ間でコピーして貼り付けることもできます。 ただし、これはファイルを安全にコピーするための優れた手法です。)
ドロップレット1について
次のコマンドを使用してSSHキーを生成します。
ssh-keygen -t rsa
デフォルトのファイル名を選択してから、安全なパスフレーズを要求します。これを設定する必要があります。 生成したSSH公開鍵を見つけて、次のように入力します。
cat ~/.ssh/id_rsa.pub
結果をクリップボードにコピーします。 次のような数行の文字と数字です。
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCo249TgbI1gYP42RbLcDhsNN28r/fNT6ljdFOZxhk+05UAPhxq8bASaqSXZI3K8EEI3wSpigaceNUu65pxLEsZWS8xTtjY4AVxZU2w8GIlnFDSQYr3M2A77ZAq5DqyhGmnnB3cPsIJi5Q6JQNaQ/Meg1v7mYR9prfEENJeXrDiXjxUqi41NlVdb5ZQnPL1EdKM+KN/EPjiTD5XY1q4ICmLJUB8RkffHwH2knEcBoSZW2cNADpMu/IqtxTZpFL0I1eIEtoCWg4mGIdIo8Dj/nzjheFjavDhiqvUEImt1vWFPxHEXt79Iap/VQp/yc80fhr2UqXmxOa0XS7oSGGfFuXz root@openvpn1
しかし、私のものではなく、あなた自身のものを使用してください。 id_rsa.pubを安全に保つ必要はありませんが、上記のキーを使用すると、VPSにアクセスできるようになります。
一方、ドロップレット2では
cd ~/.ssh
(エラーが発生した場合は、mkdir ~/.ssh
でフォルダーを作成してください)。
nano authorized_keys
クリップボードにある公開鍵を新しい行に貼り付け、保存して、Control-O、Enter、Control-Xで終了します。
ドロップレット1に戻る
次に、適切なキーを2番目のサーバーにコピーします。
scp /etc/openvpn/easy-rsa/keys/ca.crt \ /etc/openvpn/easy-rsa/keys/client1.crt \ /etc/openvpn/easy-rsa/keys/client1.key \ root@droplet2ip:~/
「接続を続行してもよろしいですか(はい/いいえ)?」というメッセージが表示されるので、はいと入力してEnterキーを押します。
次に、作成したパスフレーズを入力します。
ドロップレット2に再度切り替えます
次に、証明書とキーを最終的な場所に移動します。
cd ~ mv ca.crt client1.crt client1.key /etc/openvpn ls -l /etc/openvpn
キーは安全に保つ必要があるため、client1.keyに正しい権限( -rw ------- )があることを'に確認させてください。
繰り返しになりますが、必要に応じて、次のコマンドを使用して権限をリセットできます。
chmod 600 /etc/openvpn/client1.key
ネットワーキング
次は、VPNでのネットワーキングの興奮です。 ルーティングまたはブリッジングを使用してOpenVPNを使用できます。 違いが何であるかを知っているなら、あなたは私の助けを選ぶ必要はありません。 このチュートリアルでは、ルーティングを使用します。 'は、OpenVPN'のデフォルトのネットワーク範囲である10.8.0.0/24も使用します。 すでにこのネットワーク範囲をどこかで使用していない限り、これで問題ありません。 別の範囲が必要な場合は、プライベート範囲を選択し、それに応じて以降のすべての構成手順を調整してください。
ドロップレット1
OpenVPNサーバーでは、ルーティングを構成し、ファイアウォールも設定する必要があります。 firehol というツールを使用してiptablesを構成します。これにより、複雑なファイアウォールのセットアップが非常に簡単になります。 したがって、次のコマンドを入力します。
nano /etc/firehol/firehol.conf
任意のアドレスからの着信OpenVPN接続を許可できますが、これらの接続を接続するコンピューターのIPアドレスに制限します。 このIPアドレスのリストを今すぐ作成してください。
注:次の構成では、着信SSHおよびOpenVPN接続のみが許可されます。 着信接続を受信する必要がある他のサービスがある場合は、これらをサポートするようにファイアウォールを変更する必要があります。
version 5 interface eth0 inet client all accept // allow all outgoing connections server ssh accept // allow all incoming SSH connections server openvpn accept src "1.2.3.4 2.3.4.5" // allow incoming OpenVPN connections // from these designated addresses // NOTE: EDIT THESE ADDRESSES interface tun0 vpn server all accept // allow all incoming connections on the VPN client all accept // allow all outgoing connections on the router inet2vpn inface eth0 outface tun0 route all accept // route freely to the VPN router vpn2inet inface tun0 outface eth0 masquerade // use NAT masquerading from the VPN route all accept // route freely to the VPN
次に、次のコマンドでファイアウォールを開始します。
firehol start
ファイアウォールに問題がある場合は、VPSを再起動すると、ファイアウォールの構成がクリアされます。 ファイアウォールを永続的にするには、次のように入力します。
nano /etc/default/firehol
次の行を見つけます。
START_FIREHOL=NO
ここで、NOをYESに変更します。 Control-O、Enter、Control-Xで保存して終了します。
OpenVPNサーバー構成ファイル
ドロップレット1について
次のステップは、サンプルサーバー構成を所定の場所にコピーし、必要に応じて編集することです。
cd /etc/openvpn cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz . gunzip server.conf.gz nano /etc/openvpn/server.conf
OpenVPNサーバーはrootとして起動しますが、起動後に低い権限にドロップするように設定できます。これは、優れたセキュリティ対策です。 これを構成するには、次の行を見つけて、セミコロンを削除してコメントを解除します。
;user nobody ;group nogroup
相互に通信する必要のあるサーバーが複数ある場合は、次の行を見つけてセミコロンを削除します。
;client-to-client
DHキーのキーサイズを大きくした場合は、次の行を見つけます。
dh dh1024.pem
1024から2048(または選択した任意の数)に変更します。
OpenVPNサーバーからさまざまなクライアントに静的IPアドレスを割り当てるので、そのためには、次の行のコメントを解除します。
;client-config-dir ccd
Control-O、Enter、Control-Xで保存します。 次に、クライアント構成ディレクトリを作成します。
mkdir /etc/openvpn/ccd
ここで最初のクライアントの構成を追加します。
nano /etc/openvpn/ccd/client1
次のコマンドを入力して、client1をIPアドレス10.8.0.5に割り当てます。
ifconfig-push 10.8.0.5 10.8.0.6
Control-O、Enter、Control-Xで保存して終了します。
理解するためにネットワーキングの深い知識が必要な理由のために、追加のクライアントには次のアドレスを使用してください。
/ etc / openvpn / ccd / client2 ifconfig-push 10.8.0.9 10.8.0.10
/ etc / openvpn / ccd / client3: ifconfig-push 10.8.0.13 10.8.0.14
単純に、新しいセットごとに各IPに4を追加します。 より技術的な説明は付録2にあります。
これで、次のコマンドでOpenVPNサーバーを起動できます。
service openvpn start
少し待ってから、次のコマンドを入力して、OpenVPNが実行されていることを確認します。
ifconfig
また、ネットワークインターフェイスの中で、インターフェイスtun0が次のようになっていることがわかります。
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:140 errors:0 dropped:0 overruns:0 frame:0 TX packets:149 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:13552 (13.5 KB) TX bytes:14668 (14.6 KB)
次のように入力することもできます。
service openvpn status
OpenVPNが実行されている場合は、次のように表示されます。
* VPN 'server' is running
これらの両方が正常であれば、サーバーは稼働しており、次にクライアント接続を構成します。
OpenVPNクライアント構成ファイル
ドロップレット2について
まず、サンプルのクライアント構成ファイルを適切な場所にコピーしましょう。
cd /etc/openvpn cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf .
ほとんどが構成されていますが、OpenVPNサーバーのアドレスであるDroplet1を「伝える」必要があります。
nano /etc/openvpn/client.conf
次のような行を見つけます。
remote my-server-1 1194
そして、my-server-1をDroplet1のIPアドレスに変更します。 次に、クライアントキーと証明書が実際のファイル名と一致することを確認する必要があります。 次の行を検索します。
cert client.crt key client.key
コピーしたキーに合わせて調整します(例: client1.crtおよびclient1.key)。
Control-O、Enter、Control-Xで保存して終了します。
次に、VPNを起動しましょう。
service openvpn start
ここでも、次のコマンドでテストできます。
service openvpn status
ifconfig
VPNの両端が稼働しているので、ネットワークをテストする必要があります。 次のコマンドを使用します。
ping 10.8.0.1
成功すると、次のように表示されます。
PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data. 64 bytes from 10.8.0.1: icmp_req=1 ttl=64 time=0.102 ms 64 bytes from 10.8.0.1: icmp_req=2 ttl=64 time=0.056 ms
おめでとうございます、あなたは今やった!
暗号化する必要のないトラフィックは、公開されているIPアドレスを介して接続できます。 暗号化するクラウドサーバー間のトラフィックはすべて、インターネットネットワークアドレスに接続します。 ドロップレット1は10.8.0.1に接続します。 ドロップレット2は10.8.0.5、ドロップレット3は10.8.0.9などです。
特にクラウドサーバーが異なるデータセンターにある場合、暗号化されたトラフィックは暗号化されていないトラフィックよりも遅くなりますが、どちらのトラフィック方法も同時に利用できるため、それに応じて選択してください。
また、OpenVPNと暗号化全般について学ぶ良い機会です。 OpenVPN Webサイトには、このための優れたリソースがいくつかあります。
付録1
安全
ここで使用されているショートカットは3つありますが、セキュリティが最も重要な場合は実行しないでください。
- まず、キーはすべて、インターネット上にあり、完全に制御されていない仮想サーバー上でリモートで生成されました。 これを行う最も安全な方法は、安全な場所にあるスタンドアロン(インターネットに接続されていない)コンピューターで認証局のキーを生成することです。
- 次に、キーはその場で生成されるのではなく送信されました。 SSHは、ファイルを送信するための適度に安全な方法を提供しますが、SSHが完全に安全ではないさまざまなインスタンスがあります。 ホストで生成し、CSRをオフラインCAに転送し、そこで署名してから、署名された要求を送り返す場合、これはより安全です。
- 第三に、パスフレーズはキーに割り当てられていません。 これらはサーバーであり、無人で再起動する必要がある可能性が高いため、このトレードオフが行われました。
さらに、OpenVPNは、このチュートリアルの範囲を超えて、他の強化機能の負荷をサポートします。 openvpn.orgでの読み取りを行う必要があります。
付録2
ネットワーキングに関する注記
したがって、最初のクライアントはIPアドレスとして10.8.0.6を使用し、10.8.0.5はVPNトンネルエンドポイントです。 2番目のアドレスは、トラフィックをトンネル経由でルーティングするためにのみ使用されます。 これは、各クライアントがCIDR / 30ネットワークを使用しているためです。つまり、クライアントコンピューターごとに4つのIPアドレスが使用されます。
したがって、VPNサーバーは10.8.0.0/30ネットワークを使用します。
10.8.0.0 | 通信網 |
10.8.0.1 | サーバのIPアドレス |
10.8.0.2 | トンネルエンドポイント |
10.8.0.3 | ブロードキャスト |
そして、最初のクライアントであるclient1は、10.8.0.4/30ネットワークを使用します。
10.8.0.4 | 通信網 |
10.8.0.5 | サーバのIPアドレス |
10.8.0.6 | トンネルエンドポイント |
10.8.0.7 | ブロードキャスト |
等々...