Debian、Ubuntu、Fedora、CentOS、Arch Linux、Oracle Linux、Rocky Linux、AlmaLinux 用の OpenVPN インストーラー。
このスクリプトを使用すると、わずか数秒で独自の安全な VPN サーバーをセットアップできます。
また、よりシンプル、より安全、高速で最新の VPN プロトコルのシンプルなインストーラーである Wireguard-install もチェックしてください。
まず、スクリプトを取得して実行可能にします。
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh
次に、それを実行します。
./openvpn-install.sh
root としてスクリプトを実行し、TUN モジュールを有効にする必要があります。
初めて実行するときは、アシスタントに従って、VPN サーバーをセットアップするためにいくつかの質問に答える必要があります。
OpenVPN がインストールされたら、スクリプトを再度実行すると、次の選択肢が表示されます。
ホーム ディレクトリには.ovpn
ファイルがあります。これらはクライアント構成ファイルです。サーバーからそれらをダウンロードし、お気に入りの OpenVPN クライアントを使用して接続します。
ご質問がある場合は、まず FAQ にアクセスしてください。問題を開く前にすべてをお読みください。
助けを求める電子メールやプライベートメッセージを私に送らないでください。助けを得る唯一の場所は問題です。他の人が助けてくれる可能性があり、将来的には他のユーザーもあなたと同じ問題に遭遇する可能性があります。私の時間はあなたのためだけに無料で使えるものではありません、あなたは特別ではありません。
自動化された方法で、たとえばユーザー入力を待たずにスクリプトをヘッドレスで実行することも可能です。
使用例:
AUTO_INSTALL=y ./openvpn-install.sh
# or
export AUTO_INSTALL=y
./openvpn-install.sh
ユーザー入力の必要性を渡すことにより、デフォルトの変数セットが設定されます。
インストールをカスタマイズする場合は、上に示すように、それらをエクスポートするか、同じ行に指定できます。
APPROVE_INSTALL=y
APPROVE_IP=y
IPV6_SUPPORT=n
PORT_CHOICE=1
PROTOCOL_CHOICE=1
DNS=1
COMPRESSION_ENABLED=n
CUSTOMIZE_ENC=n
CLIENT=clientname
PASS=1
サーバーが NAT の背後にある場合は、 ENDPOINT
変数を使用してそのエンドポイントを指定できます。エンドポイントがその背後にあるパブリック IP アドレスである場合は、 ENDPOINT=$(curl -4 ifconfig.co)
を使用できます (スクリプトはデフォルトでこれに設定されます)。エンドポイントは IPv4 またはドメインにすることができます。
選択に応じて他の変数 (暗号化、圧縮) を設定できます。スクリプトのinstallQuestions()
関数で検索できます。
Easy-RSA ではユーザー入力が必要となるため、パスワードで保護されたクライアントはヘッドレス インストール方法ではサポートされません。
ヘッドレス インストールは、たとえば Ansible/Terraform/Salt/Chef/Puppet などの状態プロビジョナーによって、同じパラメータを使用して複数回実行しても安全であるという点で、多かれ少なかれ冪等です。 Easy-RSA PKI がまだ存在しない場合のみインストールおよび再生成され、OpenVPN がまだインストールされていない場合は OpenVPN およびその他のアップストリームの依存関係のみがインストールされます。すべてのローカル設定が再作成され、ヘッドレス実行ごとにクライアント ファイルが再生成されます。
新しいユーザーの追加を自動化することも可能です。ここで重要なのは、スクリプトを呼び出す前に、残りの必須変数とともにMENU_OPTION
変数の (文字列) 値を指定することです。
次の Bash スクリプトは、既存の OpenVPN 構成に新しいユーザーfoo
を追加します。
#! /bin/bash
export MENU_OPTION= " 1 "
export CLIENT= " foo "
export PASS= " 1 "
./openvpn-install.sh
nobody
/ nogroup
なしで実行このスクリプトは、次の Linux ディストリビューションをサポートしています。
サポート | |
---|---|
アルマリナックス 8 | ✅ |
アマゾン リナックス 2 | ✅ |
Arch Linux | ✅ |
CentOS 7 | ✅ |
CentOS ストリーム >= 8 | ✅ ? |
Debian >= 10 | ✅ ? |
フェドーラ >= 35 | ✅ ? |
オラクル Linux 8 | ✅ |
ロッキーリナックス8 | ✅ |
Ubuntu >= 18.04 | ✅ ? |
注意すべき点:
amd64
アーキテクチャでのみテストされています。systemd
が必要です。 このスクリプトは、Nyr とその貢献者の素晴らしい成果に基づいています。
2016 年以降、2 つのスクリプトは分岐し、特に内部では似ていなくなりました。スクリプトの主な目的はセキュリティの強化でした。しかしそれ以来、スクリプトは完全に書き直され、多くの機能が追加されました。ただし、このスクリプトは最近のディストリビューションとのみ互換性があるため、非常に古いサーバーまたはクライアントを使用する必要がある場合は、Nyr のスクリプトを使用することをお勧めします。
その他の Q&A は FAQ.md にあります。
Q:どのプロバイダーをお勧めしますか?
A:以下をお勧めします。
Q:どの OpenVPN クライアントをお勧めしますか?
A:可能であれば、公式の OpenVPN 2.4 クライアント。
openvpn
パッケージ。 Debian/Ubuntu ベースのディストリビューション用の公式 APT リポジトリがあります。Q:あなたのスクリプトを使用すると、NSA から安全になりますか?
A:脅威モデルを見直してください。このスクリプトがセキュリティを考慮し、最先端の暗号化を使用しているとしても、NSA から身を隠したい場合は VPN を使用すべきではありません。
Q: OpenVPN のドキュメントはありますか?
A:はい、すべてのオプションを参照している OpenVPN マニュアルを参照してください。
その他の Q&A は FAQ.md にあります。
このスクリプトに基づいてすぐに使用できる OpenVPN サーバーを一度にプロビジョニングするソリューションは、次の用途に使用できます。
openvpn-terraform-install
で Terraform を使用する AWSopenvpn-ephemeral
変更について話し合う場合、特に大きな変更の場合は、PR を送信する前に問題を開いてください。
Shellcheck と shfmt を使用して、bash スタイルのガイドラインとグッドプラクティスを強制します。 GitHub Actionsでコミット/PRごとに実行されるので、ここで設定を確認できます。
警告これは OpenVPN 2.5 以降では更新されていません。
OpenVPN のデフォルト設定は暗号化に関してかなり弱いです。このスクリプトはそれを改善することを目的としています。
OpenVPN 2.4 は、暗号化に関する素晴らしいアップデートでした。 ECDSA、ECDH、AES GCM、NCP、および tls-crypt のサポートが追加されました。
以下で説明するオプションの詳細については、OpenVPN マニュアルを参照してください。非常に完成度が高いです。
OpenVPN の暗号化関連のほとんどは Easy-RSA によって管理されています。デフォルトのパラメータは vars.example ファイルにあります。
デフォルトでは、OpenVPN は圧縮を有効にしません。このスクリプトは、LZ0 および LZ4 (v1/v2) アルゴリズムのサポートを提供します。後者の方が効率的です。
ただし、VORACLE 攻撃が圧縮を利用するため、圧縮を使用することはお勧めできません。
OpenVPN はデフォルトで TLS 1.0 を受け入れますが、これは約 20 年前のものです。
tls-version-min 1.2
では、OpenVPN で現在利用可能な最良のプロトコルである TLS 1.2 を強制します。
TLS 1.2 は OpenVPN 2.3.3 以降サポートされています。
OpenVPN は、デフォルトで 2048 ビットのキーを持つ RSA 証明書を使用します。
OpenVPN 2.4 では ECDSA のサポートが追加されました。楕円曲線暗号はより高速、軽量、より安全です。
このスクリプトは以下を提供します。
prime256v1
/ secp384r1
/ secp521r1
曲線2048
/ 3072
/ 4096
ビットキーデフォルトでは、 prime256v1
を使用した ECDSA になります。
OpenVPN はデフォルトで署名ハッシュとしてSHA-256
使用し、スクリプトも同様に使用します。現時点では他に選択肢はありません。
デフォルトでは、OpenVPN はデータ チャネル暗号としてBF-CBC
使用します。 Blowfish は古く (1993 年) の弱いアルゴリズムです。 OpenVPN の公式ドキュメントでもそれを認めています。
デフォルトは BF-CBC (Cipher Block Chaining モードの Blowfish の略称) です。
BF-CBC のブロック サイズは 64 ビットであるため、BF-CBC の使用は推奨されなくなりました。 SWEET32 で実証されているように、この小さなブロック サイズにより、衝突に基づく攻撃が可能になります。詳細については、https://community.openvpn.net/openvpn/wiki/SWEET32 を参照してください。 INRIA のセキュリティ研究者は、3DES や Blowfish などの 64 ビット ブロック暗号に対する攻撃を発表しました。彼らは、同じデータが十分な頻度で送信される場合に平文を復元できることを示し、クロスサイト スクリプティングの脆弱性を利用して目的のデータを十分な頻度で送信する方法を示します。これは HTTPS 経由で機能しますが、HTTP-over-OpenVPN でも機能します。より適切で詳細な説明については、https://sweet32.info/ を参照してください。
OpenVPN のデフォルト暗号である BF-CBC は、この攻撃の影響を受けます。
実際、AES は今日の標準です。これは現在利用可能な最も高速で安全な暗号です。 SEED と Camellia は今のところ脆弱ではありませんが、AES よりも遅く、比較的信頼性が低くなります。
現在サポートされている暗号のうち、OpenVPN では現在、AES-256-CBC または AES-128-CBC の使用を推奨しています。 OpenVPN 2.4 以降も GCM をサポートします。 2.4 以降の場合は、AES-256-GCM または AES-128-GCM の使用をお勧めします。
AES-256 は AES-128 より 40% 遅く、AES で 128 ビット キーではなく 256 ビット キーを使用する本当の理由はありません。 (出典: 1、2)。さらに、AES-256 はタイミング攻撃に対してより脆弱です。
AES-GCM は AEAD 暗号であり、データの機密性、完全性、信頼性の保証を同時に提供します。
スクリプトは次の暗号をサポートしています。
AES-128-GCM
AES-192-GCM
AES-256-GCM
AES-128-CBC
AES-192-CBC
AES-256-CBC
デフォルトはAES-128-GCM
です。
OpenVPN 2.4 では、「NCP」と呼ばれる機能(交渉可能な暗号パラメータ)が追加されました。これは、HTTPS と同様に暗号スイートを提供できることを意味します。デフォルトではAES-256-GCM:AES-128-GCM
に設定されており、OpenVPN 2.4 クライアントで使用する場合は--cipher
パラメータをオーバーライドします。簡単にするために、スクリプトは--cipher
と--ncp-cipher
両方を上で選択した暗号に設定します。
OpenVPN 2.4 は、デフォルトで利用可能な最良の暗号をネゴシエートします (例: ECDHE+AES-256-GCM)
スクリプトは、証明書に応じて次のオプションを提案します。
TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384
TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256
TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384
デフォルトはTLS-ECDHE-*-WITH-AES-128-GCM-SHA256
です。
OpenVPN はデフォルトで 2048 ビットの DH キーを使用します。
OpenVPN 2.4 では、ECDH キーのサポートが追加されました。楕円曲線暗号はより高速、軽量、より安全です。
また、クラシック DH キーの生成には非常に長い時間がかかる場合があります。 ECDH キーは一時的なものであり、オンザフライで生成されます。
スクリプトには次のオプションが用意されています。
prime256v1
/ secp384r1
/ secp521r1
曲線2048
/ 3072
/ 4096
ビットキーデフォルトはprime256v1
です。
OpenVPN wiki の--auth
について:
メッセージ ダイジェスト アルゴリズム alg を使用して、HMAC でデータ チャネル パケットと (有効な場合) tls-auth 制御チャネル パケットを認証します。 (デフォルトは SHA1 です)。 HMAC は、データ文字列、セキュア ハッシュ アルゴリズム、およびキーを使用してデジタル署名を生成する、一般的に使用されるメッセージ認証アルゴリズム (MAC) です。
AEAD 暗号モード (GCM など) が選択されている場合、指定された --auth アルゴリズムはデータ チャネルに対して無視され、代わりに AEAD 暗号の認証方法が使用されます。 alg は依然として tls-auth に使用されるダイジェストを指定していることに注意してください。
スクリプトには次の選択肢があります。
SHA256
SHA384
SHA512
デフォルトはSHA256
です。
tls-auth
とtls-crypt
OpenVPN wiki のtls-auth
について:
TLS 制御チャネルの上に HMAC 認証の追加レイヤーを追加して、DoS 攻撃や TLS スタックに対する攻撃を軽減します。
簡単に言うと、--tls-auth は OpenVPN の TCP/UDP ポート上で一種の「HMAC ファイアウォール」を有効にし、誤った HMAC 署名を持つ TLS 制御チャネル パケットが応答せずに即座にドロップされる可能性があります。
tls-crypt
について:
キーファイルのキーを使用して、すべての制御チャネル パケットを暗号化して認証します。 (詳細な背景については、--tls-auth を参照してください。)
制御チャネル パケットの暗号化 (および認証):
- TLS 接続に使用される証明書を非表示にすることでプライバシーを強化します。
- OpenVPN トラフィック自体を識別することが難しくなります。
- 事前共有キーを決して知らない (つまり、前方秘匿性がない) 攻撃者に対して、「貧乏人の」ポスト量子セキュリティを提供します。
したがって、どちらも追加のセキュリティ層を提供し、DoS 攻撃を軽減します。 OpenVPN ではデフォルトでは使用されません。
tls-crypt
は、( tls-auth
とは異なり) 認証に加えて暗号化を提供する OpenVPN 2.4 の機能です。よりプライバシーに配慮したものとなります。
スクリプトは両方をサポートしており、デフォルトでtls-crypt
を使用します。
必要に応じて感謝を伝えることができます。
貢献者と Nyr のオリジナル作品に感謝します。
このプロジェクトは MIT ライセンスの下にあります