美文网首页
Centos7.7 配置OpenVPN

Centos7.7 配置OpenVPN

作者: 二郎5 | 来源:发表于2021-09-29 16:35 被阅读0次
    OpenVPN是一个开源的应用程序,它允许您通过公共互联网创建一个安全的专用网络
    OpenVPN实现一个虚拟专用网(VPN)来创建一个安全连接。
    OpenVPN是一个开源的应用程序,它允许您通过公共互联网创建一个安全的专用网络。
    OpenVPN实现一个虚拟专用网(VPN)来创建一个安全连接。OpenVPN使用OpenSSL库提供加密,它提供了几种身份验证机制,如基于证书的、预共享密钥和用户名/密码身份验证。
    1.关闭selinux
    [root@localhost ~]# sed -i '/^SELINUX/s/enforcing/disabled/g' /etc/selinux/config
    [root@localhost ~]# setenforce 0
    
    2.安装epel仓库和openvpn, Easy-RSA
    [root@localhost ~]# yum -y install epel-release && yum -y install openvpn easy-rsa
    
    3.创建OpenVPN相关的密钥

    在/etc/openvpn文件夹下面创建easy-rsa文件夹,并把相关文件复制进去

    [root@localhost ~]# mkdir /etc/openvpn/easy-rsa/ 
    [root@localhost ~]# cp -r /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa/
    [root@localhost ~]# cp -p /usr/share/doc/easy-rsa-3.0.6/vars.example /etc/openvpn/easy-rsa/vars
    

    我们将创建CA密钥,server端、client端密钥,DH和CRL PEM, TLS认证钥匙ta.key。

    [root@localhost easy-rsa]# cd /etc/openvpn/easy-rsa/
    
    4.初始化并建立CA证书
     [root@localhost easy-rsa]# ./easyrsa init-pki
     [root@localhost easy-rsa]# ./easyrsa build-ca nopass
    
    5.创建服务器密钥

    创建服务器密钥名称为 server1.key

    [root@localhost easy-rsa]# ./easyrsa gen-req server1 nopass 回车 
    

    添加nopass 选项,是指不需要为密钥添加密码。
    用CA证书签署server1密钥

    [root@localhost easy-rsa]# ./easyrsa sign-req server server1 输入yes
    
    6.创建客户端密钥

    创建客户端密钥名称为 client1.key

    [root@localhost easy-rsa]# ./easyrsa gen-req client1 nopass 回车
    

    用CA证书签署client1密钥

    [root@localhost easy-rsa]# ./easyrsa sign-req client client1 输入yes
    
    7.创建DH密钥

    根据在顶部创建的vars配置文件生成2048位的密钥

    [root@localhost easy-rsa]# ./easyrsa gen-dh
    
    8.创建TLS认证密钥
    [root@localhost easy-rsa]# openvpn --genkey --secret /etc/openvpn/easy-rsa/ta.key
    
    9.生成证书撤销列表(CRL)密钥

    CRL(证书撤销列表)密钥用于撤销客户端密钥。如果服务器上有多个客户端证书,希望删除某个密钥,那么只需使用./easyrsa revoke NAME这个命令撤销即可。

    生成CRL密钥:

    [root@localhost easy-rsa]# ./easyrsa  gen-crl
    
    10.复制证书文件

    复制ca证书,ta.key和server端证书及密钥到/etc/openvpn/server文件夹里

    [root@localhost easy-rsa]# cp -p pki/ca.crt /etc/openvpn/server/
    [root@localhost easy-rsa]# cp -p pki/issued/server1.crt /etc/openvpn/server/
    [root@localhost easy-rsa]# cp -p pki/private/server1.key /etc/openvpn/server/
    [root@localhost easy-rsa]# cp -p ta.key /etc/openvpn/server/
    

    复制ca证书,ta.key和client端证书及密钥到/etc/openvpn/client文件夹里

    [root@localhost easy-rsa]# cp -p pki/ca.crt /etc/openvpn/client/
    [root@localhost easy-rsa]# cp -p pki/issued/client1.crt /etc/openvpn/client/
    [root@localhost easy-rsa]# cp -p pki/private/client1.key /etc/openvpn/client/
    [root@localhost easy-rsa]# cp -p ta.key /etc/openvpn/client/
    

    复制dh.pem , crl.pem到/etc/openvpn/client文件夹里

    [root@localhost easy-rsa]# cp pki/dh.pem /etc/openvpn/server/
    [root@localhost easy-rsa]# cp pki/crl.pem /etc/openvpn/server/
    
    11.为服务端编写配置文件

    当安装好了openvpn时候,他会提供一个server配置的文件例子,在/usr/share/doc/openvpn-2.3.2/sample/sample-config-files 下会有一个server.conf文件,我们将这个文件复制到/etc/openvpn/下。

    [root@localhost easy-rsa]# cp /usr/share/doc/openvpn-2.4.4/sample/sample-config-files/server.conf /etc/openvpn/
    
    [root@localhost easy-rsa]# vim /etc/openvpn/server.conf
    
      local 0.0.0.0     #监听地址
      port 1194     #监听端口
      proto tcp     #监听协议
      dev tun     #采用路由隧道模式
      ca /etc/openvpn/server/ca.crt      #ca证书路径
      cert /etc/openvpn/server/server1.crt       #服务器证书
      key /etc/openvpn/server/serve1r.key  # This file should be kept secret 服务器秘钥
      dh /etc/openvpn/server/dh.pem     #密钥交换协议文件
      server 10.8.0.0 255.255.255.0     #给客户端分配地址池,注意:不能和VPN服务器内网网段有相同
      ifconfig-pool-persist ipp.txt
      push "redirect-gateway def1 bypass-dhcp"      #给网关
      push "dhcp-option DNS 8.8.8.8"        #dhcp分配dns
      client-to-client       #客户端之间互相通信
      keepalive 10 120       #存活时间,10秒ping一次,120 如未收到响应则视为断线
      comp-lzo      #传输数据压缩
      max-clients 100     #最多允许 100 客户端连接
      user openvpn       #用户
      group openvpn      #用户组
      persist-key
      persist-tun
      status /var/log/openvpn/openvpn-status.log
      log         /var/log/openvpn/openvpn.log
      verb 3
    

    可以注释掉这两行

    #explicit-exit-notify 1
    #tls-auth ta.key 1
    
    12.配置后的设置
    [root@localhost easy-rsa]# mkdir /var/log/openvpn
    
    [root@localhost easy-rsa]# chown -R openvpn.openvpn /var/log/openvpn/
    
    [root@localhost easy-rsa]# chown -R openvpn.openvpn /etc/openvpn/*
    
    13.iptables 设置nat 规则和打开路由转发
    [root@localhost easy-rsa]# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ens33(网卡根据实际情况调整) -j MASQUERADE
    
    [root@localhost easy-rsa]# iptables -vnL -t nat
    
    [root@localhost easy-rsa]# vim /etc/sysctl.conf //打开路由转发
    
     net.ipv4.ip_forward = 1
    
    [root@localhost easy-rsa]# sysctl -p
    
    14.开启openvpn 服务
    [root@localhost easy-rsa]#  openvpn /etc/openvpn/server.conf 开启服务
    
    15.配置windows客户端自动连接vpn(方式1)

    下载openvpn gui
    解压安装,配置client 端配置文件
    配置文件在服务端/usr/share/doc/openvpn-2.4.11/sample/sample-config-files/下,名称为clent.conf

    [root@localhost easy-rsa]# cd /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/
    [root@localhost sample-config-files]#  sz client.conf 
    

    从服务端下载到windows客户端openvpn安装目录的config 目录下('C:\Program Files\OpenVPN\config\),修改文件名为client.ovpn

    在windows客户端本地修改client.ovpn文件

    client
    dev tun
    proto tcp     //改为tcp
    remote xxx.xxx.xxx.xxx 1194    //OpenVPN服务器的外网IP和端口,ip和域名都行
    resolv-retry infinite
    nobind
    persist-key
    persist-tun
    ca 'C:\Program Files\OpenVPN\config\ca.crt'
    cert 'C:\Program Files\OpenVPN\config\client1.crt'   //client1的证书
    key 'C:\Program Files\OpenVPN\config\client1.key'       //client1的密钥
    comp-lzo
    verb 3
    

    将服务端的ca.crt client1.crt client1.key下载到客户端本地的penvpn安装目录的config 目录下('C:\Program Files\OpenVPN\config\)

    16.启动windows客户端

    打开客户端后在任务栏直接右击客户端,单击“连接”即可自动获取服务端分配的IP。

    17.配置windows客户端使用用户名/密码方式连接vpn(方式2)

    首先我们需要编写一个用户认证的脚本 (脚本是由openvpn官网提供的)

    vim /etc/openvpn/checkpsw.sh

    #!/bin/sh
    ###########################################################
    # checkpsw.sh (C) 2004 Mathias Sundman 
    #
    # This script will authenticate OpenVPN users against
    # a plain text file. The passfile should simply contain
    # one row per user with the username first followed by
    # one or more space(s) or tab(s) and then the password.
    
    PASSFILE="/etc/openvpn/psw-file"
    LOG_FILE="/etc/openvpn/openvpn-password.log"
    TIME_STAMP=`date "+%Y-%m-%d %T"`
    
    ###########################################################
    
    if [ ! -r "${PASSFILE}" ]; then
      echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >>     ${LOG_FILE}
      exit 1
    fi
    
    CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`
    
    if [ "${CORRECT_PASSWORD}" = "" ]; then 
      echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
      exit 1
    fi
    
    if [ "${password}" = "${CORRECT_PASSWORD}" ]; then 
      echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
      exit 0
    fi
    
    echo "${TIME_STAMP}: Incorrect password: username=\"${username}\",     password=\"${password}\"." >> ${LOG_FILE}
    exit 1
    

    接下来给脚本执行权限

     [root@localhost easy-rsa]# chmod 755 /etc/openvpn/checkpsw.sh
    

    现在我们配置用户密码文件/etc/openvpn/psw-file
    cat /etc/openvpn/psw-file

    abcdocker 123456
    abc 123456
    test test   
    #前面为用户名,后面为密码。 中间使用空格分开
    

    接下来我们需要修改openvpn的server.conf,在配置文件的末尾追加以下配置。

    cat >>/etc/openvpn/server.conf<<EOF
    script-security 3
    auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env    #指定用户认证脚本
    username-as-common-name
    verify-client-cert none
    EOF
    
    #在service.conf最后一行添加
    

    接下来我们需要修改windows客户端的client.ovpn。

    client
    dev tun
    proto tcp
    remote xxx.xxx.xxx.xxx 1194
    resolv-retry infinite
    nobind
    persist-key
    persist-tun
    ca 'C:\Program Files\OpenVPN\config\ca.crt'
    ;cert 'C:\Program Files\OpenVPN\config\client1.crt'   #注释
    ;key 'C:\Program Files\OpenVPN\config\client1.key'  #注释
    ;tls-auth ta.key 1
    cipher AES-256-CBC
    comp-lzo
    verb 3
    auth-user-pass              #使用用户名密码登录openvpn服务器
    
    
    #主要是注释crt和key路径,以及添加一行auth-user-pass。
    

    接下来我们重启一下openvpn即可。

    [root@localhost easy-rsa]# netstat -untlp |grep 1194   ##查到openvpn的PID
    [root@localhost easy-rsa]# kill xxxx  ##杀掉openvpn进程PID
    [root@localhost easy-rsa]#  openvpn /etc/openvpn/server.conf   ##开启服务
    

    客户端重新打开,然后再点击连接时会弹出用户名认证窗口,输入创建的用户即可。

    image.png image.png

    相关文章

      网友评论

          本文标题:Centos7.7 配置OpenVPN

          本文链接:https://www.haomeiwen.com/subject/hxyjnltx.html