使用Docker架設OPENVPN
1.建立目錄及docker-compose
mkdir ovpn
vi docker-compose.yml
services:
openvpn:
image: kylemanna/openvpn
container_name: openvpn
ports:
- "1194:1194/udp" #OPENVPN預設PORT
volumes:
- ./ovpn-data:/etc/openvpn
cap_add:
- NET_ADMIN
restart: always2.產生設定檔 (UDP設定自己的公網ip) -2 代表啟用二階段驗證docker compose run --rm openvpn ovpn_genconfig -u udp://你的公網IP -2
docker compose run --rm openvpn ovpn_initpki
#初始化需要設定的內容
- 1.Enter New CA Key Passphrase: 輸入自訂密碼
- 2.Re-Enter New CA Key Passphrase: 再輸入一次自訂密碼
- 3.尋問這台VPN的名稱: hulk(自取)
- 4.Enter pass phrase for /etc/openvpn/pki/private/ca.key: 再輸入一次自訂密碼
4.製作一個名為common-client 的共用憑證 nopass(因為設定為共用證書檔所以證書不用密碼)
docker compose run --rm openvpn easyrsa build-client-full common-client nopass
5.將證書等資訊封裝成一個.ovpn檔案 (之後連線用這個檔案)
docker compose run --rm openvpn ovpn_getclient common-client > company_common.ovpn
6.啟動容器
docker compose up -d7.安裝 Google 的驗證器程式和 Bash Shell
docker exec -it openvpn apk add google-authenticator bash
8.寫入自定義的驗證腳本
docker exec -i openvpn sh -c 'cat << "EOF" > /usr/local/bin/ovpn_otp_auth
#!/bin/bash
USERNAME=$(sed -n "1p" "$1")
FULL_PASS=$(sed -n "2p" "$1")
OTP_CODE=$(echo "$FULL_PASS" | grep -oE "[0-9]{6}\$")
if [ -f "/etc/openvpn/otp/${USERNAME}.google_authenticator" ]; then
echo -e "y\n$OTP_CODE\n" | /usr/bin/google-authenticator --secret="/etc/openvpn/otp/
${USERNAME}.google_authenticator" -C -t -d -r3 -R30 -S30 -w3 > /tmp/otp_result 2>&1
exit $?
else
exit 0
fi
EOF'9.賦予腳本執行權限
docker exec -it openvpn chmod +x /usr/local/bin/ovpn_otp_auth
10.建立存放員工 OTP 密鑰的資料夾
mkdir -p /ovpn/ovpn-data/otp chmod 777 /ovpn/ovpn-data/otp
11.註解掉預設的插件,避免與我們的自定義腳本衝突
sed -i 's/^plugin/#plugin/g' ./ovpn-data/openvpn.conf
12.當有人連線,執行 /usr/local/bin/ovpn_otp_auth 這個腳本來檢查身份
echo "auth-user-pass-verify /usr/local/bin/ovpn_otp_auth via-file" >> ./ovpn-data/openvpn.conf
13.允許 OpenVPN 呼叫外部的可執行腳本
echo "script-security 2" >> ./ovpn-data/openvpn.conf
14.確保Log 裡能正確記錄是哪個員工連進來的
echo "username-as-common-name" >> ./ovpn-data/openvpn.conf
15.重啟容器
docker compose restart openvpn
16.進入容器建立帳號及&帳號產生QR code
docker exec -it openvpn bash adduser hulk (員工名) ovpn_otp_user hulk (員工名)
#產出的QRcode可以掃圖登入二階驗證,或是用secret key方式加入二階驗證
Microsoft Authenticator跟Google Authenticator都可以使用
沒有留言:
張貼留言