基于CentOS 7.x搭建OpenVPN服务器与配置详解

前端之家收集整理的这篇文章主要介绍了基于CentOS 7.x搭建OpenVPN服务器与配置详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、服务器程序安装:

1、安装依赖程序:

[root@dba~]#yuminstallepel-release#OpenVPN软件包不在CentOS标准Yum源里,所以需要安装先通过yum安装epel源才能正常安装相关软件包!
[root@dba~]#yum-yinstalllzolzo-developensslopenssl-develgccgcc-c++#部署基础环境安装

2、openvpn服务器端程序安装:

[root@dba~]#yuminstallopenvpn-y
[root@dba~]#rpm-qa|grep"openvpn"
openvpn-2.4.3-1.el7.x86_64

安装完成涉及目录如下:
[root@dba~]#whereisopenvpn#查看OpenVPN安装成功后的相关路径
openvpn:/usr/sbin/openvpn/usr/lib64/openvpn/etc/openvpn/usr/share/man/man8/openvpn.8.gz
/usr/sbin/openvpn:OpenVPN二进制程序文件
/etc/openvpn:OpenVPN配置文件存储路径
[root@dba~]#yum-yinstalleasy-rsa#包含生存OpenVPN认证所需的证书、密钥等程序文件

二、配置生成openvpn运行所需证书文件

OpenVPN服务器与客户端双方基于PKI(公钥基础设施)验证双方身份并进行认证,所以开始配置时首先要建立认证所需的证书以及密钥。

1、证书、密钥生成流程(推荐):http://www.softown.cn/post/146.html

[root@dba~]#mkdir-p/etc/openvpn/easy-rsa/keys
[root@dba~]#cp-rf/usr/share/easy-rsa/2.0/*/etc/openvpn/easy-rsa/
[root@dbaeasy-rsa]#ll
total116
-rwxr-xr-x1rootroot119Aug2203:08build-ca#创建CA证书和密钥,对应文件为ca.crt,ca.key
-rwxr-xr-x1rootroot352Aug2203:08build-dh#创建迪菲・赫尔曼密钥,会生成dh2048.pem文件
-rwxr-xr-x1rootroot188Aug2203:08build-inter
-rwxr-xr-x1rootroot163Aug2203:08build-key#用于创建客户端证书及私钥
-rwxr-xr-x1rootroot157Aug2203:08build-key-pass#用于创建经过密码加密的私钥
-rwxr-xr-x1rootroot249Aug2203:08build-key-pkcs12
-rwxr-xr-x1rootroot268Aug2203:08build-key-server#用于创建服务器端证书及私钥
-rwxr-xr-x1rootroot213Aug2203:08build-req
-rwxr-xr-x1rootroot158Aug2203:08build-req-pass
-rwxr-xr-x1rootroot449Aug2203:08clean-all#用于清空服务器端已经生成端证书及密钥,慎用!
-rwxr-xr-x1rootroot1471Aug2203:08inherit-inter
drwx------2rootroot4096Aug2203:22keys
-rwxr-xr-x1rootroot302Aug2203:08list-crl
-rw-r--r--1rootroot7791Aug2203:08openssl-0.9.6.cnf
-rw-r--r--1rootroot8348Aug2203:08openssl-0.9.8.cnf
-rw-r--r--1rootroot8245Aug2203:08openssl-1.0.0.cnf
-rwxr-xr-x1rootroot12966Aug2203:08pkitool
-rwxr-xr-x1rootroot928Aug2203:08revoke-full
-rwxr-xr-x1rootroot178Aug2203:08sign-req
-rw-r--r--1rootroot2057Aug2203:11vars#用于存储服务器/客户端生成证书、密钥过程中需要的参数信息
-rwxr-xr-x1rootroot740Aug2203:08whichopensslcnf

1.1 修改vars文件,配置生成证书所需的信息(可以安自己需求修改,或保持默认):

[root@dba~]#vi/etc/openvpn/easy-rsa/vars
#Thesearethedefaultvaluesforfields
#whichwillbeplacedinthecertificate.
#Don'tleaveanyofthesefieldsblank.
exportKEY_COUNTRY="CN"
exportKEY_PROVINCE="BeiJing"
exportKEY_CITY="BeiJing"
exportKEY_ORG="YunWei"
exportKEY_EMAIL="yunwei@163.com"
exportKEY_OU="YunWeiUnit"

1.2 开始生成ca证书、密钥;服务器端证书、密钥;客户端证书、密钥(注:生成证书之前,请保证服务器端时区、时间等信息正确!);

[root@dbaopenvpn]#cd/etc/openvpn/easy-rsa/
[root@dbaeasy-rsa]#sourcevars#让上面修改端的vars参数文件生效,之后生成证书时就可以调用到了
NOTE:Ifyourun./clean-all,Iwillbedoingarm-rfon/etc/openvpn/easy-rsa/keys
[root@dbaeasy-rsa]#./clean-all
[root@dbaeasy-rsa]#./build-ca#1、生成CA证书及密钥,可以一直回车,默认用的vars中的参数进行配置,但是CommonName请保证每台主机唯一。
CommonName(eg,yournameoryourserver'shostname)[YunWeiCA]:##注意:生成服务器客户端证书时,请保证各证书该名不一致!!!

[root@dbaeasy-rsa]#llkeys/
-rw-r--r--1rootroot1712Aug2203:15ca.crt#生成的CA证书
-rw-------1rootroot1704Aug2203:15ca.key#生成的CA密钥

1.3 生成服务器端证书及对应端密钥:

[root@dbaeasy-rsa]#./build-key-serverserver
[root@dbaeasy-rsa]#llkeys/
-rw-r--r--1rootroot5457Aug2203:16server.crt#生成的服务器端证书
-rw-r--r--1rootroot1074Aug2203:16server.csr
-rw-------1rootroot1704Aug2203:16server.key#生成的服务器端密钥

1.4 生成客户端用户对应的证书及密钥:

[root@dbaeasy-rsa]#./build-keyclient
-rw-r--r--1rootroot5339Aug2203:17client.crt#生成的客户端证书
-rw-r--r--1rootroot1074Aug2203:17client.csr
-rw-------1rootroot1708Aug2203:17client.key#生成的客户端密钥

1.5 生成迪菲・赫尔曼参数(必须生成):

[root@localhosteasy-rsa]#./build-dh
[root@localhosteasy-rsa]#llkeys/dh2048.pem
-rw-r--r--.1rootroot4248月2318:13keys/dh2048.pem

1.6 生成ta.key,用于预防Dos攻击:

[root@dbaeasy-rsa]#openvpn--genkey--secret/etc/openvpn/easy-rsa/keys/ta.key
-rw-------1rootroot636Aug2203:22ta.key

2、服务器/客户端配置文件构建:

示例配置文件路径如下,可以在此基础上做修改

[root@dba~]#ll/usr/share/doc/openvpn-2.4.3/sample/sample-config-files/client.conf/usr/share/doc/openvpn-2.4.3/sample/sample-config-files/server.conf
-rw-r--r--1rootroot3584Jun2008:48/usr/share/doc/openvpn-2.4.3/sample/sample-config-files/client.conf
-rw-r--r--1rootroot10782Jun2008:48/usr/share/doc/openvpn-2.4.3/sample/sample-config-files/server.conf

2.1 服务器端:

复制openvpn配置文件模版到配置文件目录:
[root@dba~]#cp/usr/share/doc/openvpn-2.4.3/sample/sample-config-files/server.conf/etc/openvpn/
[root@dba~]#cp/usr/share/doc/openvpn-2.4.3/sample/sample-config-files/client.conf/etc/openvpn/client

复制服务器端和客户端对应的证书和密钥文件到各自的目录:
[root@dba~]#cd/etc/openvpn/easy-rsa/keys
[root@dba~]#cpca.crtserver.crtserver.keydh2048.pemta.key../../server
[root@dba~]#cpca.crtclient.crtclient.keyta.key../../client

根据具体情况修改配置文件:
[root@dba~]#viserver.conf
local0.0.0.0#openvpn服务监听地址,默认为本地
port1194#监听端口
protoudp#使用的协议,默认tcp,proxy模式下必须用tcp
devtun#申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议;tun是ip层的点对点协议,限制稍微多一些
ca/etc/openvpn/server/ca.crt#用于验证客户的证书是否合法
cert/etc/openvpn/server/server.crt#Server使用的证书文件
key/etc/openvpn/server/server.key#Server使用的Key文件,注意本文件权限配置,防止泄漏
dh/etc/openvpn/server/dh2048.pem
server10.8.0.0255.255.255.0#配置VPN服务使用的地址池,不能与实际的局域网冲突
ifconfig-pool-persistipp.txt#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,防止openvpn重新启动后“忘记”Client曾经使用过的IP地址
push"route10.8.0.0255.255.255.0"#配置客户端网络内网段需要访问服务器所在局域网的网络的路由
push"route192.168.20.0255.255.255.0"
;push"redirect-gatewaydef1bypass-dhcp"#开启之后,客户端所有流量都走OpenVPN
push"dhcp-optionDNS180.76.76.76"#推送给客户端的DNS地址
push"dhcp-optionDNS114.114.114.114"
keepalive10120#连通性检测机制,10s进行ping检测一次,120s不通认证连接丢失,自动重启VPN并进行连接
tls-auth/etc/openvpn/server/ta.key0#用于防止Dos攻击
cipherAES-256-CBC
comp-lzo#对数据进行压缩,注意Server和Client一致
max-clients100#允许连接OpenVPN的最大客户端数量
usernobody#运行OpenVPN的用户和组
groupnobody
persist-key
persist-tun
status/etc/openvpn/server/log/openvpn-status.log
log/etc/openvpn/server/log/openvpn.log
log-append/etc/openvpn/server/log/openvpn.log
verb3#相当于debuglevel,改成verb5可以多查看一些调试信息

#服务器端启用用户名/密码认证的配置
client-cert-not-required
plugin/lib64/security/openvpn-auth-pam.soopenvpn_MysqL
username-as-common-name
auth-nocache


2.2 客户端:

2.2.1 默认值配置文件(5个文件):

[root@dbaclient]#moreclient.conf
client
devtun
protoudp
remotemy-server-11194
resolv-retryinfinite
nobind
persist-key
persist-tun
caca.crt#单独以一个文件存在
certclient.crt#单独以一个文件存在,用户名/密码认证时需要注释该行!
keyclient.key#单独以一个文件存在,用户名/密码认证时需要注释该行!
remote-cert-tlsserver
tls-authta.key1#ta.key用于预防Dos攻击
cipherAES-256-CBC
verb3

#客户端启用用户名/密码认证的配置
auth-user-pass

上面默认的客户端配置文件,管理起来很不方便,为便于客户端用户使用可以整合成一个文件来进行配置!

2.2.2 整合后的配置文件(1个文件):

模版(Mac,Windos系统整合后的客户端配置文件的后缀名为ovpn):

[root@dbaclient]#moreclient.ovpn
client
devtun
protoudp
remotemy-server-ip1194#my-server-ip替换为openvpn服务器对应到域名或IP地址。
resolv-retryinfinite
nobind
persist-key
persist-tun

<ca>
caca.crt#本行以ca.crt文件内容替换
</ca>

<cert>
certclient.crt#本行以client.crt文件内容替换
</cert>

<key>
keyclient.key#本行以client.key文件内容替换
</key>

<tls-auth>
tls-authta.key1#本行以ta.key文件内容替换
</tls-auth>
key-direction1#需要增加本行,指定上面参数1对应的配置

remote-cert-tlsserver
cipherAES-256-CBC
verb3
comp-lzo

3、使用MysqL-PAM模块进行用户认证:

3.1 安装配置MysqL数据库

[root@localhostopenvpn]#yum-yinstallmariadbmariadb-libsmariadb-servermariadb-develmariadb-test
[root@localhostopenvpn]#rpm-qa|grep-imariadb
mariadb-5.5.52-1.el7.x86_64
mariadb-libs-5.5.52-1.el7.x86_64
mariadb-server-5.5.52-1.el7.x86_64
mariadb-test-5.5.52-1.el7.x86_64
mariadb-devel-5.5.52-1.el7.x86_64

[root@localhostopenvpn]#MysqL_secure_installation#安装完成之后,执行MysqL_secure_installation进行数据库初始化设定root账号密码

[root@localhostopenvpn]#systemctlstartmariadb.service#启动mariadb(CentOS7.x)数据库
[root@localhost~]#MysqL-uroot-p123456
MariaDB[(none)]>createuseropenvpnidentifiedby'123456';
MariaDB[(none)]>createdatabaSEOpenvpn;
MariaDB[(none)]>uSEOpenvpn;
MariaDB[(none)]>createtableusers(
->idintAUTO_INCREMENTNOTNULL,->namechar(16)binaryNOTNULL,->passwdchar(48)binaryNOTNULL,->primarykey(id)
->);
MariaDB[openvpn]>INSERTINTOuser(name,passwd)VALUES('test',ENCRYPT('123456'));
MariaDB[openvpn]>grantallonopenvpn.*to'openvpn'@'%'identifiedby'123456';
MariaDB[openvpn]>flushprivileges;

[root@localhost~]#MysqL-uopenvpn-p123456
WelcometotheMariaDBmonitor.Commandsendwith;or\g.
YourMariaDBconnectionidis29
Serverversion:5.5.52-MariaDBMariaDBServer

3.2 安装pam_MysqL插件

Google搜索下载tar包:pam_MysqL-0.7RC1.tar.g
[root@localhost~]#tar-zxfpam_MysqL-0.7RC1.tar.gz
[root@localhost~]#cdpam_MysqL-0.7RC1
[root@localhostpam_MysqL-0.7RC1]#./configure--with-MysqL=/usr--with-openssl=/usr--with-pam-mods-dir=/lib64/security
[root@localhostpam_MysqL-0.7RC1]#make&&makeinstall

确认/lib64/security目录下是否生成pam_MysqL.so文件:
[root@localhostpam_MysqL-0.7RC1]#ll/lib64/security/pam_MysqL.so
-rwxr-xr-x.1rootroot141680Aug2410:25/lib64/security/pam_MysqL.so

3.3 安装pam_MysqL插件

Google搜索下载tar包:openvpn-2.0.9.tar.gz
[root@localhostauth-pam]#tar-zxvfopenvpn-2.0.9.tar.gz
[root@localhost~]#cdopenvpn-2.0.9/plugin/auth-pam/
[root@localhostauth-pam]#make
[root@localhostauth-pam]#llopenvpn-auth-pam.so
-rwxr-xr-x.1rootroot22712Aug2412:32openvpn-auth-pam.so
[root@localhostauth-pam]#cpopenvpn-auth-pam.so/lib64/security/

3.4 修改配置文件

在/etc/pam.d下新建pam认证文件:openvpn_MysqL

[root@localhostauth-pam]#cd/etc/pam.d/
[root@localhostpam.d]#moreopenvpn_MysqL
auth	sufficient/lib64/security/pam_MysqL.souser=openvpnpasswd=123456host=localhostdb=openvpntable=userusercolumn=namepasswdcolumn
=passwdsqllog=0crypt=1
account	sufficient/lib64/security/pam_MysqL.souser=openvpnpasswd=123456host=localhostdb=openvpntable=userusercolumn=namepasswdcolumn
=passwdsqllog=0crypt=1

openvpn服务器端配置文件,在最后面添加下面四行:

[root@localhostopenvpn]#viserver.conf
client-cert-not-required
plugin/lib64/security/openvpn-auth-pam.soopenvpn_MysqL
username-as-common-name
auth-nocache

openvpn客户端配置文件,在最后面添加下面四行:

[root@localhostopenvpn]#viclient.ovpn
certclient.crt#注释该行或证书文件内容替换的该行!
keyclient.key#注释该行或证书文件内容替换的该行!

#客户端启用用户名/密码认证的配置
auth-user-pass#添加该行!

3.5 修改openvpn服务器路由相关配置:

开启路由转发功能
#echo1>/proc/sys/net/ipv4/ip_forward
或者
#sed-i'/net.ipv4.ip_forward/s/0/1/'/etc/sysctl.conf
#sysctl-p
配置防火墙,别忘记保存
#iptables-AINPUT-s10.8.0.0/24-jACCEPT#开启虚拟网段
#iptables-AINPUT-s10.8.0.0/24-mstate--stateNEW-mtcp-ptcp-jACCEPT#
#iptables-AINPUT-mstate--stateNEW-mudp-pudp--dport1194-jACCEPT#
#iptables-tnat-APOSTROUTING-s10.8.0.0/24-oeth0-jMASQUERADE
#iptables-tnat-APOSTROUTING-s10.8.0.0/24-d10.2.8.0/24-oeho0-jSNAT--to-source10.2.8.10#将虚拟网段10.8.0.0/24访问内网10.2.8.0/24都通过内网网卡eth0并且将源地址转换成10.2.8.10转发
#serviceiptablessave
#serviceiptablesrestart#重启

3.6 重启openvpn服务器端程序,客户端重新加载配置文件进行测试。。。Ok啦


4、配置启动服务器,客户端程序并进行测试:

CentOS 6.x启动方式:

[root@dba~]#/etc/init.d/openvpnstart(restart,stop)

CentOS 7.x启动方式:

[root@dba~]#systemctlrestartopenvpn@server
[root@dba~]#ss-lnup
StateRecv-QSend-QLocalAddress:PortPeerAddress:Port
Cannotopennetlinksocket:Protocolnotsupported
UNCONN00*:1194*:*users:(("openvpn",pid=15933,fd=6))

三、安装配置过程问题解决

1、问题报错:VERIFY ERROR: depth=1,error=certificate is not yet validor error 9 at 1 depth lookup:certificate is not yet valid

解决方法:更新服务器系统时间到最新,重新生成服务器和客户端所有证书以及配置文件即可。因为centos7默认安装(没有桌面)的情况下timezone没设置对并且时间没有校对,导致服务器时间还没到证书的签名时间,所以需要从新设置一下timezone并校对时间。

猜你在找的CentOS相关文章