Centos 部署OpenVP* 证书+密码认证
一、實(shí)驗(yàn)環(huán)境
主機(jī) 內(nèi)網(wǎng)IP 外網(wǎng)IP 系統(tǒng) 備注 OpenVPN 10.5.10.202 NAT映射外網(wǎng)訪問 Centos7 OpenVPN服務(wù)端 PC1 10.5.10.122 內(nèi)網(wǎng)用戶 Windows7 x64 客戶端 PC2 10.5.10.123 內(nèi)網(wǎng)用戶 Windows10 客戶端 PC3 外網(wǎng)用戶 Windows7 x64 客戶端二、生成證書
1、添加epel yum源
[root@openvpn ~]# wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo2、下載證書生成工具easy-rsa
[root@openvpn ~]# yum -y install easy-rsa3、創(chuàng)建證書環(huán)境目錄
[root@openvpn ~]# mkdir -p /opt/easy-rsa [root@openvpn ~]# cp -a /usr/share/easy-rsa/3.0.8/* /opt/easy-rsa/ [root@openvpn ~]# cp -a /usr/share/doc/easy-rsa-3.0.8/vars.example /opt/easy-rsa/vars4、修改vars配置文件,取消下面配置的注釋
[root@openvpn ~]# vi /opt/easy-rsa/vars set_var EASYRSA_DN "cn_only" set_var EASYRSA_REQ_COUNTRY "CN" set_var EASYRSA_REQ_PROVINCE "GuangDong" set_var EASYRSA_REQ_CITY "GuangZhou" set_var EASYRSA_REQ_ORG "IT" set_var EASYRSA_REQ_EMAIL "IT@qq.com" set_var EASYRSA_NS_SUPPORT "yes"5、初始化,創(chuàng)建pki目錄用于存儲(chǔ)證書(以下都在/opt/easy-rsa目錄下操作)
[root@openvpn ~]# cd /opt/easy-rsa/ [root@openvpn easy-rsa]# ./easyrsa init-pki?6、創(chuàng)建根證書,根證書用于ca對(duì)之后生成的server和client證書簽名時(shí)使用
[root@openvpn easy-rsa]# ./easyrsa build-ca?7、創(chuàng)建server端證書和密鑰文件(nopass表示不加密密鑰文件,生成過程中直接默認(rèn)回車)
[root@openvpn easy-rsa]# ./easyrsa gen-req server nopass8、給server端證書簽名
[root@openvpn easy-rsa]# ./easyrsa sign server server?9、創(chuàng)建Diffie-Hellman文件,密鑰交換時(shí)的Diffie-Hellman算法
[root@openvpn easy-rsa]# ./easyrsa gen-dh10、創(chuàng)建client端證書和密鑰文件(nopass表示不加密密鑰文件,生成過程中直接默認(rèn)回車)
[root@openvpn easy-rsa]# ./easyrsa gen-req client nopass?11、給client端證書簽名
[root@openvpn easy-rsa]# ./easyrsa sign client client三、OpenVPN服務(wù)端部署
1、安裝openvpn
[root@openvpn ~]# yum install -y openvpn2、創(chuàng)建TLS認(rèn)證密鑰
[root@openvpn ~]# openvpn --genkey --secret /etc/openvpn/ta.key3、創(chuàng)建新的配置文件/etc/openvpn/server.conf
[root@openvpn ~]# vi /etc/openvpn/server.conf #監(jiān)聽本機(jī)端口 port 1194 #指定采用的傳輸協(xié)議,可選tcp或udp proto tcp #指定創(chuàng)建的通信隧道類型,可選tun或tap dev tun #指定CA證書的文件路徑 ca ca.crt #指定服務(wù)器端的證書文件路徑 cert server.crt #指定服務(wù)器端的私鑰文件路徑 key server.key #指定迪菲赫爾曼參數(shù)的文件路徑,也就是交換證書 dh dh.pem #給客戶端分配地址池,注意:不能和VPN服務(wù)器內(nèi)網(wǎng)網(wǎng)段有相同 server 10.8.0.0 255.255.255.0 #允許客戶端訪問內(nèi)網(wǎng)網(wǎng)段 push "route 10.5.10.0 255.255.255.0" #服務(wù)器自動(dòng)給客戶端分配IP后,客戶端下次連接時(shí),仍然采用上次的IP地址"第一次分配的IP保存在ipp.txt中,下一次分配其中保存的IP" ifconfig-pool-persist ipp.txt #存活時(shí)間,10秒ping一次,120如未收到響應(yīng)則視為斷線 keepalive 10 120 #最多允許100個(gè)客戶端連接 max-clients 100 #日志記錄位置 status openvpn-status.log #openvpn版本 verb 3 #允許客戶端與客戶端相連接,默認(rèn)情況下客戶端只能與服務(wù)器相連接 client-to-client #openvpn日志記錄位置 log /var/log/openvpn.log #通過keepalive檢測(cè)超時(shí)后,重新啟動(dòng)VPN,不重新讀取keys,保留第一次使用的keys persist-key #檢測(cè)超時(shí)后,重新啟動(dòng)VPN,一直保持tun是linkup的.否則網(wǎng)絡(luò)會(huì)先linkdown然后再linkup persist-tun #開啟TLS-auth,使用ta.key防御攻擊.服務(wù)器端的第二個(gè)參數(shù)值為0,客戶端的為1 tls-auth /etc/openvpn/ta.key 04、拷貝證書到openvpn主配置文件目錄下
[root@openvpn ~]# cp -a /opt/easy-rsa/pki/ca.crt /etc/openvpn/ [root@openvpn ~]# cp -a /opt/easy-rsa/pki/issued/server.crt /etc/openvpn/ [root@openvpn ~]# cp -a /opt/easy-rsa/pki/private/server.key /etc/openvpn/ [root@openvpn ~]# cp -a /opt/easy-rsa/pki/dh.pem /etc/openvpn/5、設(shè)置開機(jī)啟動(dòng),檢查服務(wù)端口
[root@openvpn ~]# systemctl start openvpn@server [root@openvpn ~]# systemctl status openvpn@server四、OpenVPN客戶端部署
1、win7客戶端安裝,默認(rèn)安裝(openvpn客戶端需要.net支持,網(wǎng)絡(luò)正常會(huì)自動(dòng)安裝)
2、win10安裝,默認(rèn)安裝(openvpn客戶端需要.net支持,網(wǎng)絡(luò)正常會(huì)自動(dòng)安裝)
?
3、拷貝服務(wù)端生成的證書到openvpn客戶端安裝目錄的config目錄下
/opt/easy-rsa/pki/ca.crt /opt/easy-rsa/pki/issued/client.crt /opt/easy-rsa/pki/private/client.key /etc/openvpn/ta.key4、在客戶端openvpn安裝目錄的config目錄下,新建一個(gè)client.ovpn文件,寫入配置
#指定當(dāng)前VPN是客戶端 client #使用tun隧道傳輸協(xié)議 dev tun #使用udp協(xié)議傳輸數(shù)據(jù) proto tcp #openvpn服務(wù)器IP地址端口號(hào) remote 10.5.10.202 1194 #斷線自動(dòng)重新連接,在網(wǎng)絡(luò)不穩(wěn)定的情況下非常有用 resolv-retry infinite #不綁定本地特定的端口號(hào) nobind #指定CA證書的文件路徑 ca ca.crt #指定當(dāng)前客戶端的證書文件路徑 cert client.crt #指定當(dāng)前客戶端的私鑰文件路徑 key client.key #指定日志文件的記錄詳細(xì)級(jí)別,可選0-9,等級(jí)越高日志內(nèi)容越詳細(xì) verb 3 #通過keepalive檢測(cè)超時(shí)后,重新啟動(dòng)VPN,不重新讀取keys,保留第一次使用的keys persist-key #檢測(cè)超時(shí)后,重新啟動(dòng)VPN,一直保持tun是linkup的。否則網(wǎng)絡(luò)會(huì)先linkdown然后再linkup persist-tun #使用ta.key防御攻擊。服務(wù)器端的第二個(gè)參數(shù)值為0,客戶端的為1 tls-auth ta.key 1?5、啟動(dòng)Open VPN客戶端軟件,連接成功OpenVPN的圖標(biāo)會(huì)變成綠色
win7連接成功
?win10連接成功
?OpenVPN會(huì)分配一個(gè)IP地址給客戶端,客戶端會(huì)使用該虛擬網(wǎng)絡(luò)IP地址與服務(wù)端進(jìn)行通信。
6、目前客戶端只能ping虛擬網(wǎng)絡(luò)的IP,不能跟內(nèi)網(wǎng)其他主機(jī)互通
五、OpenVPN客戶端訪問內(nèi)網(wǎng)
1、客戶端要想跟內(nèi)網(wǎng)通訊還需要openvpn服務(wù)端開啟內(nèi)核轉(zhuǎn)發(fā)
[root@openvpn ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf [root@openvpn ~]# sysctl -p net.ipv4.ip_forward = 12、方法一:添加路由規(guī)則方式訪問內(nèi)部網(wǎng)絡(luò)
在內(nèi)網(wǎng)主機(jī)上添加一條路由規(guī)則,讓內(nèi)網(wǎng)主機(jī)有回到OpenVPN客戶端的路由。如果不添加,那內(nèi)網(wǎng)主機(jī)只能接受到來自客戶端的包,但是沒法把響應(yīng)的包傳回去。
弊端:如果有成白上千臺(tái)主機(jī)時(shí),每一臺(tái)主機(jī)都要添加路由規(guī)則,這樣任務(wù)量是比較大的。
3、方法二:添加防火墻方式訪問內(nèi)部網(wǎng)絡(luò)
在服務(wù)端開啟防火墻,放行openvpn服務(wù),并且開啟masquerade
優(yōu)點(diǎn):只需在OpenVPN服務(wù)端配置防火墻規(guī)則,內(nèi)部網(wǎng)絡(luò)主機(jī)無需配置
[root@openvpn ~]# systemctl start firewalld [root@openvpn ~]# firewall-cmd --add-masquerade --permanent [root@openvpn ~]# firewall-cmd --add-service=openvpn --permanent [root@openvpn ~]# firewall-cmd --add-port=1194/tcp --permanent [root@openvpn ~]# firewall-cmd --reload六、證書+密碼認(rèn)證
1、修改OpenVPN服務(wù)端配置文件
#在最后增加以下配置 [root@openvpn ~]# vi /etc/openvpn/server.conf #允許使用自定義腳本 script-security 3 #腳本路徑 auth-user-pass-verify /etc/openvpn/check.sh via-env #用戶密碼登陸方式驗(yàn)證 username-as-common-name加上client-cert-not-required則代表只使用用戶名密碼方式驗(yàn)證登錄,如果不加,則代表需要證書和用戶名密碼雙重驗(yàn)證登錄
2、添加腳本
[root@openvpn ~]# vi /etc/openvpn/check.sh #!/bin/sh ########################################################### PASSFILE="/etc/openvpn/openvpnpass" LOG_FILE="/var/log/openvpn-password.log" TIME_STAMP=`date "+%Y-%m-%d %T"`if [ ! -r "${PASSFILE}" ]; thenecho "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}exit 1 fiCORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`if [ "${CORRECT_PASSWORD}" = "" ]; thenecho "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}exit 1 fi if [ "${password}" = "${CORRECT_PASSWORD}" ]; thenecho "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}exit 0 fiecho "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE} exit 13、增加執(zhí)行權(quán)限
[root@openvpn ~]# chmod +x /etc/openvpn/check.sh4、增加用戶密碼文件
[root@openvpn ~]# vi /etc/openvpn/openvpnpass openvpn openvpn@1235、重啟openvpn服務(wù)
[root@openvpn ~]# systemctl restart openvpn@server6、修改客戶端安裝路徑config目錄下的client.opvn配置文件,在最后增加
auth-user-pass?
七、出口防火墻設(shè)置
1、在出口設(shè)備配置映射,映射openvpn 1194端口到公網(wǎng),允許用戶通過對(duì)應(yīng)的公網(wǎng)地址+端口訪問
2、修改客戶端的client.ovpn文件,把遠(yuǎn)程地址改為公網(wǎng)IP+端口
#openvpn服務(wù)器IP地址端口號(hào) remote 公網(wǎng)IP 11943、客戶端退出重新登錄即可
總結(jié)
以上是生活随笔為你收集整理的Centos 部署OpenVP* 证书+密码认证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(662):逻辑运算符练习
- 下一篇: 将超星PDG文件转换成PDF文件的方法