Centos7 搭建 OpenVPN 基於證書認證

OpenVPN 是一個開源的應用程序,它允許您通過公共互聯網創建一個安全的專用網絡。OpenVPN 實現一個虛擬專用網(VPN)來創建一個安全連接。OpenVPN 使用 OpenSSL 庫提供加密,它提供了幾種身份驗證機制,如基於證書的、預共享密鑰和用戶名 / 密碼身份驗證 (windows/mac/Android/ios 都可以用客戶端連接)。這裏記錄下基於證書的方式

聲明:此本文僅限用於企業遠程辦公用途參考,如果用於其他用途一概和本博文無關

OpenVPN 客戶端安裝包下載:
[Windows 客戶端 | Mac 客戶端 | Android 客戶端]: 藍奏網盤下載 密碼 etqh
ios 客戶端:需要註冊 AppStore 其他國家地區的賬號,然後搜索 OpenVPN Connect 安裝

系統環境 Centos7.x

安裝 openvpn 包

#臨時關閉selinux
setenforce 0
#配置文件永久關閉 修改/etc/selinux/config 文件
SELINUX=disabled

#添加epel yum源
wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo

#yum安裝包
yum install openvpn iptables-services -y

配置 EasyRSA

#下載EasyRSA 3.0.7
cd /opt/
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgz
tar xf EasyRSA-3.0.7.tgz
cp -r EasyRSA-3.0.7/ /etc/openvpn/easy-rsa3
cp /etc/openvpn/easy-rsa3/vars.example /etc/openvpn/easy-rsa3/vars

創建相關證書和祕鑰

cd /etc/openvpn/easy-rsa3/

#初始化目錄
./easyrsa init-pki

#創建根證書
#nopass 參數表示不加密;也可以不加此參數,那就需要輸入密碼短語
./easyrsa build-ca nopass

#創建服務端祕鑰
./easyrsa gen-req server nopass

#給服務端證書籤名,這裏要輸入yes才能完成
./easyrsa sign-req server server

##創建客戶端祕鑰
./easyrsa gen-req client nopass

#給客戶端證書籤名,這裏要輸入yes才能完成
./easyrsa sign-req client client

#創建Diffie-Hellman
./easyrsa gen-dh

#創建TLS認證密鑰
openvpn --genkey --secret /etc/openvpn/ta.key

拷貝證書到目錄

#目錄自定義,配置文件中要用到
cd /etc/openvpn/easy-rsa3/pki/
cp ca.crt dh.pem /etc/openvpn/
cp private/server.key issued/server.crt /etc/openvpn/server/
cp private/client.key issued/client.crt /etc/openvpn/client/

編輯服務端配置文件 server.conf(注意:這裏的路徑確認你的是否爲 2.4.8,如果不是要替換下;配置文件中除了貼出的參數,其他參數用; 註釋掉)

cd /etc/openvpn/
cp /usr/share/doc/openvpn-2.4.8/sample/sample-config-files/server.conf ./
vim server.conf
#監聽本機ip地址
local 0.0.0.0

#監控本機端口號
port 1194

#指定採用的傳輸協議,可以選擇tcp或udp
proto tcp

#指定創建的通信隧道類型,可選tun或tap
dev tun

#指定CA證書的文件路徑
ca /etc/openvpn/ca.crt

#指定服務器端的證書文件路徑
cert /etc/openvpn/server/server.crt

#指定服務器端的私鑰文件路徑
key /etc/openvpn/server/server.key

#指定迪菲赫爾曼參數的文件路徑
dh /etc/openvpn/dh.pem

#指定虛擬局域網佔用的IP地址段和子網掩碼,此處配置的服務器自身佔用.1的ip地址
server 10.8.0.0 255.255.255.0

#推送路由到客戶端
push "route 0.0.0.0 0.0.0.0"
push "route 10.8.0.0 255.255.255.0"

#服務器自動給客戶端分配IP後,客戶端下次連接時,仍然採用上次的IP地址(第一次分配的IP保存在ipp.txt中,下一次分配其中保存的IP)。
ifconfig-pool-persist ipp.txt

#自動推送客戶端上的網關及DHCP
push "redirect-gateway def1 bypass-dhcp"

#OpenVPN的DHCP功能爲客戶端提供指定的 DNS、WINS 等
push "dhcp-option DNS 114.114.114.114"

#允許客戶端與客戶端相連接,默認情況下客戶端只能與服務器相連接
client-to-client

#允許一套證書或賬戶多人登錄
duplicate-cn

#每10秒ping一次,連接超時時間設爲120秒
keepalive 10 120

#開啓TLS-auth,使用ta.key防禦攻擊。服務器端的第二個參數值爲0,客戶端的爲1。
tls-auth /etc/openvpn/ta.key 0

#加密認證算法
cipher AES-256-CBC

#使用lzo壓縮的通訊,服務端和客戶端都必須配置
comp-lzo

#最大連接用戶
max-clients 100 

#定義運行的用戶和組
user openvpn
group openvpn

#重啓時仍保留一些狀態
persist-key
persist-tun

#輸出短日誌,每分鐘刷新一次,以顯示當前的客戶端
status /var/log/openvpn-status.log

#日誌保存路徑
log         /var/log/openvpn.log
log-append  /var/log/openvpn.log

#指定日誌文件的記錄詳細級別,可選0-9,等級越高日誌內容越詳細
verb 4

#相同信息的數量,如果連續出現 20 條相同的信息,將不記錄到日誌中
mute 20

啓動 openvpn 服務

#修改文件目錄權限
chown root.openvpn /etc/openvpn/* -R

#啓動openvpn服務
systemctl start openvpn@server

#確認服務進程是否存在
netstat -lntp|grep openvpn
ps -aux|grep openvpn

配置系統轉發和開放端口,雲服務器記得安全組要開放對應端口

#/etc/sysctl.conf 配置文件中添加
net.ipv4.ip_forward=1

#生效
sysctl -p 

#清空iptables規則(如果機器第一次安裝iptables-services,沒有增刪過規則,可以不用執行此步驟)
iptables -F
iptables -F -t nat
iptables -X
service iptables save
systemctl restart iptables

#iptables(重要一點:轉發請求上網)
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

#默認iptables是允許所有訪問進入的,所以這條可以不用加(除非設置了INPUT默認是拒絕的規則)
iptables -I INPUT -p tcp --dport 1194 -j ACCEPT

#保存規則並重啓
service iptables save
systemctl restart iptables

win10 客戶端使用:
1、下載安裝客戶端(客戶端軟件在文章開頭藍奏網盤地址)
2、找到客戶端安裝目錄:
3、把 ca.crt、client.crt、client.key、ta.key 4 個文件放到軟件安裝目錄下 config 文件夾下
4、新建文件 client.ovpn, 把下面的參數粘貼到裏面 (文件格式是 ovpn 後綴)

#客戶端配置文件client.ovpn (文件名稱是以.ovpn結尾的)
client
dev tun
proto tcp
remote 服務器ip/域名 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1
remote-cert-tls server
cipher AES-256-CBC
comp-lzo
auth-nocache
verb 4

右鍵管理員啓動 OpenVPN GUI 軟件,點擊 Connect 連接 (因爲服務器時間慢了 4 分鐘,截圖中日誌記錄時間顯示有偏差)




連通性和上網測試


基本上已經 ok 了,可以看到上網是通過 openvpn 的服務器代理上網的

(2021-04-09 增加內容) 安卓、蘋果手機 APP 使用:
1、把 ca.crt、client.crt、client.key、ta.key 4 個文件內容寫在 client.ovpn 文件中
2、用 QQ 或郵件發送到手機上, 然後選擇用 openvpn 客戶端打開導入文件

#手機配置文件格式
client
dev tun
proto tcp
remote 服務器ip/域名 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
comp-lzo
auth-nocache
verb 4

<ca>
這裏貼上ca.crt文件的內容
</ca>

<cert>
這裏貼上client.crt文件的內容
</cert>

<key>
這裏貼上client.key文件的內容
</key>

key-direction 1
<tls-auth>
這裏貼上ta.key文件的內容
</tls-auth>

(2021-04-09 增加內容) 安卓、蘋果手機 APP 連接成功圖例:

總結 (有問題請先對照文章內容步驟和文章註釋說明,然後再參考下面的問題說明)
此篇文章是以 OpenVPN 涉及到哪些文件和需要改動的配置進行搭建,需要有一定 linux 基礎知識和理解
寫此篇文章是爲了記錄下,方便以後用到好找,並不是教程文章,參考過程中有問題就請多 百度 | 谷歌 | 搜狗 | 360|bing ?
如果覺得麻煩或者完全不懂的建議去網上找一鍵腳本安裝的

1:安裝 openvpn 和 EasyRSA 包
2:創建需要的證書和祕鑰
3:修改配置文件:
/etc/openvpn/server.conf

連接問題:
4:確認以上的配置文件無誤
5:確認 openvpn 服務和 iptables 啓動正常
6:確認證書文件正確
7:確認服務端和客戶端正確配置了連接參數
8:確認你服務端的 open vpn 的協議和端口沒有被運營商封掉
9:確認放行使用到的 tcp 端口(雲安全組 | 外網防火牆等安全策略)

上網問題:
10:確認 iptables 轉發規則無誤(清空 iptables 規則重新添加下)
11:確認系統打開 ipv4 轉發

本站文章除註明轉載 / 出處外, 均爲本站原生內容, 轉載前請註明出處 | 文章鏈接地址:https://me.jinchuang.org/archives/556.html

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://me.jinchuang.org/archives/556.html