適用於 Debian、Ubuntu、Fedora、CentOS、Arch Linux、Oracle Linux、Rocky Linux 和 AlmaLinux 的 OpenVPN 安裝程式。
該腳本可讓您在短短幾秒鐘內設定自己的安全 VPN 伺服器。
您還可以查看wireguard-install,這是一個簡單的安裝程序,可提供更簡單、更安全、更快和更現代的 VPN 協定。
首先,取得腳本並使其可執行:
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 用戶端進行連接。
如果您有任何疑問,請先查看常見問題。請在打開問題之前閱讀所有內容。
請不要向我發送電子郵件或私人訊息尋求協助。唯一獲得幫助的地方就是問題。其他人也許能夠提供幫助,並且將來其他用戶也可能會遇到與您相同的問題。我的時間不只是為你免費提供的,你並不特別。
也可以以自動方式無頭運行腳本,例如無需等待使用者輸入。
用法範例:
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 腳本將新使用者foo
新增至現有 OpenVPN 設定中
#! /bin/bash
export MENU_OPTION= " 1 "
export CLIENT= " foo "
export PASS= " 1 "
./openvpn-install.sh
nobody
/ nogroup
身分運行該腳本支援以下 Linux 發行版:
支援 | |
---|---|
阿爾瑪Linux 8 | ✅ |
亞馬遜Linux 2 | ✅ |
架構Linux | ✅ |
作業系統7 | ✅ |
CentOS 流 >= 8 | ✅? |
Debian >= 10 | ✅? |
軟呢帽 >= 35 | ✅? |
甲骨文Linux 8 | ✅ |
洛基 Linux 8 | ✅ |
烏班圖 >= 18.04 | ✅? |
需要注意的是:
amd64
架構上進行了測試。systemd
。 該腳本基於 Nyr 及其貢獻者的偉大工作。
自 2016 年以來,這兩個腳本已經出現分歧,不再相似,尤其是在幕後。該腳本的主要目標是增強安全性。但從那時起,腳本被完全重寫,並添加了許多功能。不過,該腳本僅與最近的發行版相容,因此如果您需要使用非常舊的伺服器或用戶端,我建議使用 Nyr 的腳本。
更多問答請參閱 FAQ.md。
Q:您推薦哪一家提供者?
答:我推薦這些:
Q:您推薦哪種 OpenVPN 用戶端?
答:如果可能的話,官方 OpenVPN 2.4 用戶端。
openvpn
軟體套件。有一個針對基於 Debian/Ubuntu 的發行版的官方 APT 儲存庫。Q:使用您的腳本可以安全地免受 NSA 的侵害嗎?
答:請檢查您的威脅模型。即使此腳本考慮到安全性並使用最先進的加密,如果您想躲避 NSA,也不應該使用 VPN。
Q:有 OpenVPN 文件嗎?
答:是的,請參閱 OpenVPN 手冊,其中引用了所有選項。
更多問答請參閱 FAQ.md。
基於此腳本一次提供現成可用的 OpenVPN 伺服器的解決方案可用於:
openvpn-terraform-install
中使用 Terraformopenvpn-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
我們強制執行 TLS 1.2,這是目前 OpenVPN 可用的最佳協定。
自 OpenVPN 2.3.3 起支援 TLS 1.2。
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,是密碼塊鏈模式中 Blowfish 的縮寫。
不再建議使用 BF-CBC,因為它的區塊大小為 64 位元。正如 SWEET32 所證明的那樣,這種較小的區塊大小允許基於衝突的攻擊。有關詳細信息,請參閱 https://community.openvpn.net/openvpn/wiki/SWEET32。 INRIA 的安全研究人員發布了針對 64 位元分組密碼(例如 3DES 和 Blowfish)的攻擊。他們表明,當相同的資料發送得足夠頻繁時,他們能夠恢復明文,並展示他們如何利用跨站點腳本漏洞來足夠頻繁地發送感興趣的資料。這適用於 HTTPS,也適用於 OpenVPN 上的 HTTP。請參閱 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 中使用 256 位元金鑰而不是 128 位元金鑰。 (資料來源: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
是 OpenVPN 2.4 的功能,除了驗證之外,它還提供加密功能(與tls-auth
不同)。它對隱私更加友好。
該腳本支援兩者並預設使用tls-crypt
。
如果你願意的話可以說謝謝!
非常感謝貢獻者和 Nyr 的原創作品。
該專案已獲得 MIT 許可