Ubuntu 16.04 安裝 OpenVPN 加上 MFA 驗證

2017-05-02 Software, Ubuntu

現在這個時代只要是登入驗證的東西都要加上 MFA (Multi-Factor Authentication) 才能勉強算的上是基本款的防護,尤其是像 OpenVPN 這種常用來當做跳板的 Service,至少權限可以鎖到個人的 device 不致於密碼太弱被破解

 

上週花了一點時間用 Ubuntu 16.04 安裝了 OpenVPN + Google authenticator 記錄一下這個安裝過程

 

Ubuntu 16.04 安裝 OpenVPN + Google authenticator

 

Step 1. 用 apt 安裝 openvpn、easy-rsa

 

Step 2. 用 make-cadir 產生 easy-rsa 的工具

 

Step 3. 修改憑證資訊

 

Step 4. 產生 ca 憑證

 

Step 5. 建立在 OpenVPN Server 需要的金鑰

記得最後要回答 y 來產生憑證

 

產生 Diffie-Hellman keys 密鑰

 

產生驗證 HMAC 的 TLS 金鑰

 

Step 6. 建立 Client 的金鑰

記得最後要回答 y 來產生憑證

如果要有密碼驗證的話可以用 build-key-pass

 

Step 7. 把需要用的 key 都放到 /etc/openvpn 下

 

Step 8. 設定 OpenVPN

挑幾個重點出來說:

  • redirect-gateway 這個會把 client 端的所有流量導入 VPN,如果沒有這個參數,預設不會將流量導入 VPN,必須自行設定
  • 如果開啟 tls-auth 就必須要有 key-direction,0 代表 server,而 client 為 1。
  • SHA256 拿來驗證。

 

Step 9. 設定 Forwarding

 

Step 10. 設定 ufw 的 nat 路由

 

讓 ufw 允許轉發封包

 

開啟 ufw allow 1194/udp、ssh

 

重啟 ufw

 

到這邊算是完成 OpenVPN 的設定,接下來要加入 Google authenticator

 

Google authenticator 設定

Step 1. 安裝 Google authenticator

 

Step 2. 建立 google auth 的目錄

 

Step 3. 執行 google-authenticator 產生 QR-Code,拿出你的手機安裝 Google authenticator 掃一下

 

你會拿到一張很大的 QR-code …

 

然後會在家目錄產生一個 .google_authenticator 的檔案,這是放在 Server 用來驗證 MFA,放到 /etc/google-auth 下並且命名為 user-name

 

 

Step 4. 設定 openvpn 的 pam,使用 openvpn 使用者權限。

 

Step 5. 在 Openvpn 加入 google authenticator plugin

 

到這邊終於搞定 OpenVPN 的 Server 了,再來要產生 Client 的設定檔

 

產生 OpenVPN Client 的 ovpn

 

把 ovpn 匯入 Client 的 openvpn 設定,在一開始登入的時候你必須輸入 user-name 和 password

  • user-name 就是在 /etc/google-auth/ 底下命名的 user-name
  • password 則是 Google auth code

 

這樣就可以把安全性鎖到終端的 device 了,由於 Google authenticator 可以支援 pam,也有看到直接用 ssh + google auth 的作法也是一個選擇!

 

參考:

How To Set Up an OpenVPN Server on Ubuntu 16.04

How to enable 2-factor auth using Google Authenticator for .ovpn file based openVPN access?

3 comments

  1. sam 說:

    您好,請問有多個使用者時該如何設定?

    • shazi7804 說:

      Hi sam

      一樣先用 google-authenticator 產生 QR-code,把 .google_authenticator 放到 /etc/google-auth 並且 rename 成 user-name

      • sam 說:

        感謝回覆,還想請教一下:

        (1) Google authenticator 設定的step4及step5是否不需再重做?

        (2) 您在設定不同的使用者時,是否為個別的使用者各自產生client key,還是全都使用相同的client key來產生ovpn檔?

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

彙整

分類

open all | close all

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱

%d 位部落客按了讚: