基于Centos搭建OpenVPN

Linux wangleiadmin 225℃ 0评论

OpenVPN介绍

VPN 直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,OpenVPN 无疑是 Linux 下开源 VPN 的先锋,提供了良好的性能和友好的用户 GUI。OpenVPN 是一个基于 OpenSSL 库的应用层 VPN 实现。和传统 VPN 相比,它的优点是简单易用。 OpenVPN 允许参与建立 VPN 的单点使用共享金钥,电子证书,或者用户名/密码来进行身份验证。它大量使用了 OpenSSL 加密库中的 SSLv3 /TLSv1 协议函式库。OpenVPN 能在 Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X 与 Windows 上运行,并包含了许多安全性的功能。它并不是一个基于 Web 的 VPN 软件,也不与 IPSec 及其他 VPN 软件包兼容。 虚拟私有网络(VPN)隧道是通过 Internet 隧道技术将两个不同地理位置的网络安全的连接起来的技术。当两个网络是使用私有 IP 地址的私有局域网络时,它们之间是不能相互访问的,这时使用隧道技术就可以使得两个子网内的主机进行通讯。例如,VPN 隧道技术经常被用于大型机构中不同办公区域子网的连接。有时,使用 VPN 隧道仅仅是因为它很安全。服务提供商与公司会使用这样一种方式架设网络,他们将重要的服务器(如,数据库,VoIP,银行服务器)放置到一个子网内,仅仅让有权限的用户通过 VPN 隧道进行访问。如果需要搭建一个安全的 VPN 隧道,通常会选用 IPSec,因为 IPSec VPN 隧道被多重安全层所保护。 VPN (虚拟专用网)发展至今已经不在是一个单纯的经过加密的访问隧道了,它已经融合了访问控制、传输管理、加密、路由选择、可用性管理等多种功能,并在全球的信息安全体系中发挥着重要的作用。也在网络上,有关各种 VPN 协议优缺点的比较是仁者见仁,智者见智,很多技术人员由于出于使用目的考虑,包括访问控制、 安全和用户简单易用,灵活扩展等各方面,权衡利弊,难以取舍;尤其在 VOIP 语音环境中,网络安全显得尤为重要,因此现在越来越多的网络电话和语音网关支持 VPN 协议。

OpenVPN搭建教程

1.安装openvpn、easy-rsa、iptables-server

yum install epel-* -y
yum -y install openvpn easy-rsa iptables-services

2.拷贝证书至指定目录下

cp -r /usr/share/easy-rsa/ /etc/openvpn/

3.查看证书版本号

yum info easy-rsa

4.创建vars文件

cd /etc/openvpn/easy-rsa/X.X.X         #X.X.X为版本目录
touch vars
vim vars
export KEY_COUNTRY="CN" #(国家名称)
export KEY_PROVINCE="ShangHai" #(省份名称)
export KEY_CITY="ShangHai" #(城市名称)
export KEY_ORG="YCZB" #(组织机构名称)
export KEY_EMAIL="mail@yingxiong.com" #(邮件地址)

5.变量生效

source ./vars

6.生成CA根证书

./easyrsa init-pki

7.生成 CA 根证书, 输入 Common Name,名字随意指定

./easyrsa build-ca nopass

8.生成openvpn服务器证书和密钥,第一个参数是证书名称(前方环境变量代表证书超时为3650天)

EASYRSA_CERT_EXPIRE=3650 ./easyrsa build-server-full hero nopass

9.生成Diffie-Hellman算法需要的密钥文件

./easyrsa gen-dh   #创建 Diffie-Hellman ,时间比较久。

10.生成tls-auth key,为了防止DDOS和TLS攻击,这个属于可选安全配置

openvpn --genkey --secret ta.key

11.Openvpn文件整理

mkdir /etc/openvpn/server/certs
cd /etc/openvpn/server/certs/
# SSL 协商时 Diffie-Hellman 算法需要的 key
cp /etc/openvpn/easy-rsa/3.0.7/pki/dh.pem ./ 
# CA 根证书
cp /etc/openvpn/easy-rsa/3.0.7/pki/ca.crt ./ 
# open VPN 服务器证书
cp /etc/openvpn/easy-rsa/3.0.7/pki/issued/server.crt ./server.crt
# open VPN 服务器证书 key
cp /etc/openvpn/easy-rsa/3.0.7/pki/private/server.key ./server.key
# tls-auth key
cp /etc/openvpn/easy-rsa/3.0.7/ta.key ./
 
#上方3.0.7根据自身的版本进入相应的目录

12.创建openvpn日志目录

mkdir -p /var/log/openvpn/

13.赋予权限

chown openvpn:openvpn /var/log/openvpn

14.配置OpenVPN

cd /etc/openvpn/
vim server.conf
 
port 1194   # 监听的端口号
proto udp   # 服务端用的协议,udp 能快点,所以我选择 udp
dev tun
ca /etc/openvpn/server/certs/ca.crt  #CA 根证书路径
cert /etc/openvpn/server/certs/server.crt  # open VPN 服务器证书路径
key /etc/openvpn/server/certs/server.key  # open VPN 服务器密钥路径,This file should be kept secret
dh /etc/openvpn/server/certs/dh.pem  # Diffie-Hellman 算法密钥文件路径
tls-auth /etc/openvpn/server/certs/ta.key 0 #  tls-auth key,参数 0 可以省略,如果不省略,那么客户端
server 10.20.0.0 255.255.255.0   # 该网段为 open VPN 虚拟网卡网段,不要和内网网段冲突即可。open VPN 默认为 10.8.0.0/24
push "dhcp-option DNS 114.114.114.114"  # DNS 服务器配置,可以根据需要指定其他 ns
push "dhcp-option DNS 8.8.8.8"
push "redirect-gateway def1"   # 客户端所有流量都通过 open VPN 转发,类似于代理开全局
compress lzo
duplicate-cn   # 允许一个用户多个终端连接
keepalive 10 120
#client-config-dir ccd # 用户权限控制目录
comp-lzo
persist-key
persist-tun
user openvpn  # open VPN 进程启动用户,openvpn 用户在安装完 openvpn 后就自动生成了
group openvpn
log /var/log/openvpn/server.log  # 指定 log 文件位置
log-append /var/log/openvpn/server.log
status /var/log/openvpn/status.log
verb 3
explicit-exit-notify 1
crl-verify /etc/openvpn/easy-rsa/3.0.7/pki/crl.pem

15.关闭防火墙

systemctl stop firewalld
systemctl disable firewalld
sed -i “s/^SELINUX=.*$/SELINUX=disabled/” /etc/selinux/config
setenforce 0

16.服务器启用IP地址转发

echo net.ipv4.ip_forward = 1 >>/etc/sysctl.conf
sysctl -p

17.设置证书到期日期

vim /etc/openvpn/easy-rsa/3.0.7/easyrsa
set_var EASYRSA_CRL_DAYS        3650      #3650为证书到期天数

18.生成crl文件,位置在 /etc/openvpn/easy-rsa/3.0.7/pki/crl.pem,需要把这个文件写进配置文件,重启服务

[root@loaclhost 3.0.7]# ./easyrsa gen-crl
Note: using Easy-RSA configuration from: ./vars
 
Using SSL: openssl OpenSSL 1.0.1e-fips 11 Feb 2013
Using configuration from /etc/openvpn/easy-rsa/3.0.7/pki/safessl-easyrsa.cnf
 
An updated CRL has been created.
CRL file: /etc/openvpn/easy-rsa/3.0.7/pki/crl.pem       #增加的配置文件已经在上方的Server.conf写好,crl-verify /etc/openvpn/easy-rsa/3.0.7/pki/crl.pem

19.查看证书到期时间

openssl crl -inform PEM -in crl.pem -text -noout    #查看证书到期时间  证书路径/etc/openvpn/easy-rsa/3.0.7/pki/
openssl x509 -noout -text -in server.crt  #查看VPN服务器证书到期时间   证书路径/etc/openvpn/server/certs/

20.设置路由转发

iptables -t nat -A POSTROUTING -s 10.20.0.0/24 -o eth0 -j MASQUERADE      #eth0根据自身网卡

21.启动服务

systemctl start openvpn@server  # 启动
systemctl enable openvpn@server  # 开机自启动
systemctl status openvpn@server  # 查看服务状态

22.创建用户脚本

# ! /bin/bash
set -e
OVPN_USER_KEYS_DIR=/etc/openvpn/client/keys
EASY_RSA_VERSION=3
EASY_RSA_DIR=/etc/openvpn/easy-rsa/
PKI_DIR=$EASY_RSA_DIR/$EASY_RSA_VERSION/pki
 
for user in "$@"
do
  if [ -d "$OVPN_USER_KEYS_DIR/$user" ]; then
    rm -rf $OVPN_USER_KEYS_DIR/$user
    rm -rf  $PKI_DIR/reqs/$user.req
    sed -i '/'"$user"'/d' $PKI_DIR/index.txt
  fi
  cd $EASY_RSA_DIR/$EASY_RSA_VERSION
  # 生成客户端 ssl 证书文件
  ./easyrsa build-client-full $user nopass
  # 整理下生成的文件
  mkdir -p  $OVPN_USER_KEYS_DIR/$user
  cp $PKI_DIR/ca.crt $OVPN_USER_KEYS_DIR/$user/   # CA 根证书
  cp $PKI_DIR/issued/$user.crt $OVPN_USER_KEYS_DIR/$user/   # 客户端证书
  cp $PKI_DIR/private/$user.key $OVPN_USER_KEYS_DIR/$user/  # 客户端证书密钥
  cp /etc/openvpn/client/sample.ovpn $OVPN_USER_KEYS_DIR/$user/$user.ovpn # 客户端配置文件
  cp /etc/openvpn/client/OpenVPN-2.5-beta4-I601-amd64.msi $OVPN_USER_KEYS_DIR/$user/ #Openvpn软件
  sed -i 's/admin/'"$user"'/g' $OVPN_USER_KEYS_DIR/$user/$user.ovpn
  cp /etc/openvpn/server/certs/ta.key $OVPN_USER_KEYS_DIR/$user/ta.key  # auth-tls 文件
  cd $OVPN_USER_KEYS_DIR
  zip -r $user.zip $user
done
exit 0

23.创建客户端配置文件模板

vi /etc/openvpn/client/sample.ovpn
client
proto udp
dev tun
remote 外网IP地址 端口
ca ca.crt
cert admin.crt
key admin.key
tls-auth ta.key 1
remote-cert-tls server
persist-tun
persist-key
comp-lzo
verb 3
mute-replay-warnings

24.创建用户

cd /etc/openvpn/client/      #进入创建用户脚本目录
sh openvpn_user.sh 用户名     #创建用户
cd /etc/openvpn/client/keys   #创建用户后生成的配置文件在此目录

25.吊销用户证书

cd /etc/openvpn/easy-rsa/3.0.7
[root@loaclhost easy-rsa]# ./easyrsa revoke client
Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.0.1e-fips 11 Feb 2013
Please confirm you wish to revoke the certificate with the following subject:
subject=
    commonName                = client
Type the word 'yes' to continue, or any other input to abort.
  Continue with revocation: yes:Q!
Using configuration from /etc/openvpn/easy-rsa/3.0.7/pki/safessl-easyrsa.cnf
Revoking Certificate 8D2113F513D3CB46FE1227FCAA328C32.
Data Base Updated
IMPORTANT!!!
Revocation was successful. You must run gen-crl and upload a CRL to your
infrastructure in order to prevent the revoked cert from being accepted.

26.查看已经吊销的用户,V是可以使用用户,R是已吊销用户

[root@loaclhost 3.0.7]# cat /etc/openvpn/easy-rsa/3.0.7/pki/index.txt

27.查看访问日志

cat  /var/log/openvpn/server.log

28.因证书到期不能访问,需重新生成证书。

#此方法可查看证书到期时间。
openssl crl -inform PEM -in crl.pem -text -noout #查看证书到期时间  证书路径/etc/openvpn/easy-rsa/3.0.7/pki/
openssl x509 -noout -text -in server.crt #查看VPN服务器证书到期时间 证书路径/etc/openvpn/server/certs/ 
#新建新的证书
cp -r /etc/openvpn/easy-rsa/3.0.7/* /etc/openvpn/cert_new   #备份原始证书。
rm -rf /etc/openvpn/easy-rsa/3.0.7/pki
#按照步骤6重新生成证书即可。

转载请注明:暖风 » 基于Centos搭建OpenVPN

喜欢 (4)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址