返回部落格

在 Ubuntu 18.04 上設定 OpenVPN

在 Ubuntu 18.04 上設定 OpenVPN

簡介

當您連接到不可信的網路(例如飯店或咖啡廳的 WiFi)時,您是否希望從智慧型手機或筆記型電腦安全地存取網際網路?幸運的是,有一種方法可以實現您的願望。您可以使用以下工具安全地連接到不可信的網路,就像在私有網路中一樣:虛擬私人網路 (VPN).

什麼是 VPN?

VPN 代表虛擬私人網路。它提供了向可信伺服器建立安全通道的可能性。所有請求隨後都透過該伺服器發送和接收。其優點是在使用公共網路(例如飯店的免費 WiFi)時,能確保您的存取和交易安全。

透過 VPN,所有資料都會被加密並透過伺服器進行處理。介於中間的裝置(例如第三方路由器等)無法將流量重定向到不希望的目的地。此外,一旦成功建立連線,您就成為伺服器網路的一部分。其他通常只能在伺服器區域網路中存取的伺服器、電腦或印表機等裝置,現在也可以透過 VPN 通道存取。然而,由於並非所有資料都必須透過加密通道發送,因此可以設定 VPN 用戶端,以便僅將特定部分的請求透過 VPN 通道發送。其餘流量則照常透過網際網路處理。

在本教學中,我們將引導您完成在 Ubuntu 18.04 上設定 OpenVPN 伺服器的步驟。

準備工作

您需要存取一台 Ubuntu 18.04 伺服器來託管您的 OpenVPN 服務以完成本教學。在開始本指南之前,您還需要設定一個具有 sudo 權限的非 root 使用者。您可以按照我們的 設定 Ubuntu 伺服器的教學.

此外,您還需要一台獨立的電腦來充當 憑證授權單位 (CA)。從技術上講,您可以使用您的 OpenVPN 伺服器 或本機電腦作為憑證授權單位。然而,我們不建議這樣做,因為這會使您的 VPN 面臨安全漏洞。根據 OpenVPN 官方文件,您應該將憑證授權單位放在一台專門用於匯入和簽署憑證請求的獨立電腦上。因此,我們假設您的憑證授權單位位於另一台獨立的 Ubuntu 18.04 伺服器上,該伺服器同樣具有一個擁有 sudo 權限的非 root 使用者和基本防火牆。在本指南中,每個安裝的所有安裝和設定步驟都將盡可能簡單。您也可以參考我們的 如何在 Docker 下設定 Open VPN 伺服器的教學.

步驟 1 – 安裝 OpenVPN 和 EasyRSA

首先,更新您的 VPN 伺服器套件索引並安裝 OpenVPN。您可以使用 apt 安裝 OpenVPN,因為它在預設的 Ubuntu 套件庫中可用:

步驟 2:建立憑證授權單位

建立一個簡單的憑證授權單位 (CA) 以為 OpenVPN 伺服器核發受信任的憑證。為此,請使用 wget 在您的 CA 機器和 OpenVPN 伺服器上下載最新版本的 EasyRSA。要獲取最新版本,請前往官方的 EasyRSA GitHub 專案 的發行版本 (Releases) 頁面,複製以 .tgz 結尾的檔案下載連結,並將其貼到以下命令中:

然後,解壓縮該 tar 封裝檔:

 OpenVPN EasyRSA software

至此,所有必要的軟體已成功安裝在您的 CA 電腦和伺服器上。

步驟 3 – 設定 EasyRSA 變數並建置 CA

EasyRSA 附帶一個設定檔,您可以使用此命令編輯該檔案以定義 CA 的許多變數:

該目錄中含有一個名為 vars.example 的檔案。複製此檔案,並將複本命名為 vars(不含副檔名):

使用您偏好的文字編輯器開啟此新檔案:

接下來,尋找設定新憑證預設欄位的設定。它會類似於以下內容:

如下所示,將這些變數更新為您喜歡的任何值:

準備就緒後,儲存並關閉檔案。下一步是呼叫 easyrsa 指令碼,並使用 init-pki 選項執行它,以在 CA 伺服器上初始化公開金鑰基礎建設:

easyrsa init-pki

接下來,使用 nopass 選項執行 build-ca 指令,這樣您在每次與 CA 互動時就不用輸入密碼:

在輸出中,您將被要求確認 CA 的通用名稱:

 OpenVPN build-ca

至此,您的 CA 已設置完畢,並準備好開始簽署憑證請求。

步驟 4 – 產生伺服器憑證、金鑰和加密檔案

CA 準備就緒後,您可以從伺服器產生私鑰和憑證請求,然後將其傳送到 CA 進行簽署以建立所需的憑證。首先,導覽至 OpenVPN 伺服器上的 EasyRSA 目錄:

在該目錄中,使用 init-pki 選項執行 easyrsa 指令碼。雖然您已經在 CA 電腦上執行過此指令,但此處也必須執行此指令。這是因為伺服器和 CA 的 PKI 目錄是不同的:

然後再次呼叫 easyrsa 指令碼,這次使用 gen-req 選項,後面加上電腦’的通用名稱:

這將為伺服器建立一個私鑰和一個名為 server.req 的憑證請求檔案。將伺服器金鑰複製到 /etc/openvpn/ 目錄:

使用安全的方法(例如以下範例中的 SCP)將 server.req 檔案傳輸到您的 CA 電腦:

接下來,導覽至 CA 電腦上的 EasyRSA 目錄:

再次使用 easyrsa 指令碼匯入 server.req 檔案,並在檔案路徑後加上其通用名稱:

然後,藉由執行帶有 sign-req 選項的 easyrsa 指令碼,後跟請求類型和通用名稱,來簽署該請求。對於 OpenVPN 伺服器的憑證請求,請確保使用 server 請求類型:

輸出會提示您驗證該請求是否來自受信任的來源。輸入 yes 並按 Enter 鍵確認。請檢查下方顯示的詳細資訊以確保準確性。請注意,此請求尚未進行密碼驗證。

請求主體並將其簽署為有效期 3650 天的伺服器憑證:

 OpenVPN sign certificate for server

如果您已加密 CA 金鑰,此時系統會要求您輸入密碼。接下來,使用安全的方法將簽署的憑證傳送回您的 VPN 伺服器:

在您登出 CA 電腦之前,將 ca.rt 檔案傳送到伺服器:

接下來,再次登入您的 OpenVPN 伺服器,並將 server.crt 和 ca.crt 檔案複製到您的 /etc/openvpn/ 目錄中:

然後,導覽至您的 EasyRSA 目錄:

輸入以下程式碼以建立可在金鑰交換期間使用的強 Diffie-Hellman 金鑰:

完成後,產生 HMAC 簽章以改善伺服器的 TLS 健康檢查功能:

命令完成後,將這兩個新檔案複製到 / etc / openvpn / 目錄中:

如此一來,伺服器所需的所有憑證和金鑰檔案皆已產生。現在,您可以建立用戶端電腦存取 OpenVPN 伺服器所需的相應憑證和金鑰。

步驟 4 – 產生用戶端憑證和金鑰對

接下來,我們將建立用戶端金鑰和數個憑證。如果您有多個用戶端,可以為每個用戶端重複此程序。但請注意,您必須為每個用戶端向指令碼傳遞唯一名稱值。在本教學課程中,我們將第一個憑證/金鑰對命名為 client1。首先,在您的家目錄中建立目錄結構以儲存用戶端憑證和金鑰檔案:

基於安全考量,由於您在此目錄中儲存了憑證/金鑰對和用戶端的設定檔,您現在應該撤銷權限:

然後導覽回 EasyRSA 目錄,並使用 gen-req 和 nopass 選項以及用戶端的通用名稱執行 easyrsa 指令碼:

按 Enter 鍵確認通用名稱。之後,將 client1.key 檔案複製到先前建立的 / client-configs / keys / 目錄中:

接下來,使用安全的方法將 client1.req 檔案傳送到您的 CA 電腦:

登入您的 CA 電腦,導覽至 EasyRSA 目錄並匯入憑證請求:

import client.req

然後,與上一步相同,在伺服器上簽署該請求。但這次您需要指定用戶端請求類型:

在提示時,輸入 yes 以確認您要簽署該憑證請求,且該憑證請求來自受信任的來源。請輸入 “yes” 繼續,或輸入任何其他內容以捨棄:

sign certificate

如果您已加密 CA 金鑰,系統也會在此處要求您輸入密碼。這將建立一個名為 client1.crt 的用戶端憑證檔案。將此檔案傳送回伺服器:

SSH 返回您的 OpenVPN 伺服器,並將用戶端憑證複製到 / client-configs / keys / 目錄:

接下來,將 ca.crt 和 ta.key 檔案複製到 / client-configs / keys / 目錄中:

同時,伺服器和用戶端的所有憑證和金鑰都已生成並儲存在伺服器上的相應目錄中。現在您可以繼續在伺服器上設定 OpenVPN。

 步驟 5 – 設定 OpenVPN 服務

生成用戶端和伺服器憑證後,您可以設定 OpenVPN 服務以使用這些憑證。首先,將 OpenVPN 範例設定檔複製到您的設定目錄中,然後將其解壓縮以用作設定基礎:

在您偏好的文字編輯器中開啟伺服器設定檔:

然後,透過尋找 tls-auth 指令來找到 HMAC 部分:

透過尋找被註解掉的密碼行來找到密碼部分。AES-256-CBC 加密提供了良好的加密級別,且得到了良好的支援。該行不應該被註解,但如果被註解了,請刪除前面的 “;”:

在該行下方,新增一個 Auth 指令以選擇 HMAC 訊息摘要演算法。SHA256 是一個不錯的選擇:

接下來,找到包含定義 Diffie-Hellman 參數的 dh 語句的行。由於 EasyRSA 最近的一些變更,Diffie-Hellman 金鑰檔名可能與範例伺服器設定檔中列出的檔名不同。如有必要,請刪除 2048 以修改此處列出的檔名,使其與上一步的金鑰一致:

最後,找到 user 和 group 設定,並刪除每行開頭的 “;”:

到目前為止,您對範例 server.conf 檔案所做的變更應該可以讓 OpenVPN 正常運作。

步驟 6 – 伺服器網路設定

設定 IP 轉發以正確引導流量通過 VPN。這對於您伺服器提供的 VPN 功能至關重要:

尋找設定 net.ipv4.ip_forward 的被註解行。刪除該行開頭的「#」字元以取消註解此設定:

完成後儲存並關閉檔案。若要讀取檔案並調整目前工作階段的值,請輸入:

sysctl -p

接下來,新增您機器的公用網路介面:

您的公用介面是此指令輸出中位於「dev」單字後面的字串。例如,此結果顯示名為 ens3 的介面。

default ip route

開啟 /etc/ufw/before.rules 檔案以新增相關設定:

在檔案頂部附近,新增下方醒目提示的行,以設定 nat 表中 POSTROUTING 鏈的預設策略,並偽裝來自 VPN 的任何流量。將下方 -A POSTROUTING 行中的 ens3 變更為您在上述指令中找到的介面:

完成後儲存並關閉檔案。接下來,您還需要告訴 UFW 預設允許轉發的封包。為此,請開啟 /etc/default/ufw 檔案:

在檔案中,找到 DEFAULT_FORWARD_POLICY 指令,並將其值從 DROP 變更為 ACCEPT:

完成後儲存並關閉檔案。接下來,調整防火牆以啟用流向 OpenVPN 的流量。如果您沒有變更 /etc/openvpn/server.conf 檔案中的連接埠和協定,則需要開放流向連接埠 1194 的 UDP 流量。如果您修改了連接埠和/或協定,請在此處替換為您選擇的值。如果您在按照前置教學操作時忘記新增 SSH 連接埠,也請在此處新增:

新增這些規則後,停用並重新啟用 UFW 以將其重新啟動,並載入您修改的所有檔案中的變更:

ufw commands

恭喜,您的伺服器現在已設定為正確處理 OpenVPN 流量!

結論

如果您完整遵循了本教學,您現在就可以安全地瀏覽網際網路。您將能夠保護您的身分、位置和流量免受窺探。

祝您使用愉快!

 

 

author

Akshay Nagpal

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的創意設計師,專注於透過傳統與創新行銷渠道建立一致的企業形象。他擅長將藝術願景與策略行銷相融合,創造具有影響力的品牌敘事。

留言

目前尚無留言。成為第一個留言的人吧。