OpenVPN CentOS7 安装部署配置详解

一 、概念相关



1、vpn 介绍

  vpn 虚拟专用网络,是依靠isp和其他的nsp,在公共网络中建立专用的数据通信网络的技术。在vpn中任意两点之间的链接并没有传统的专网所需的端到端的物理链路,而是利用公共网络资源动态组成的,可以理解为通过私有的隧道技术在公共数据网络上模拟出来的和专网有相同功能的点到点的专线技术,所谓虚拟是指不需要去拉实际的长途物理线路,而是借用公共的Internet网络实现。

2、vpn 作用

  vpn可以帮助公司用的远程用户(出差,家里)公司的分之机构、商业合作伙伴及供应商等公司和自己的公司内部网络之间建立可信的安全连接或者局域网连接,确保数据的加密安全传输和业务访问,对于运维工程师来说,还可以连接不同的机房为局域网,处理相关的业务流。

3、常见vpn功能的开源产品

  pptp vpn  

  最大优势在于无需在windows客户端单独安装vpn客户端软件,windows默认就支持pptp vpn拨号功能。他是属于点对点的方式应用,比较适合远程企业用户拨号到企业进行办公等应用,缺点很多小区及网络设备不支持pptp导致无法访问。Openvpn和PPTP VPN相比存在诸多的优势,最明显的是Openvpn支持NAT穿越,也就是说在nat环境下使用openvpn只需要一个在路由器上做一个端口映射即可!不需要其他路由的支持,要知道不是所有的路由器都支持配置NAT穿越,只有高级的路由器才提供这种功能!其次openvpn使用证书加密数据传输,安全性方便也优于PPTP VPN,但在配置方面比PPTP VPN要复杂许多!而且openvpn客户端登录只需要双击就可以连接服务器端,从感官上反而觉得安全性低,因而下面介绍下openvpn使用user/pass方式用户验证登录,使用这种方式验证用户登录在注销用户账号的时候只要删除密码文件中的记录即可,非常的方便!

  SSL VPN(openvpn)

  PPTP主要为常在外面移动或者家庭办公的用户考虑的,而OpenVpn不但可以使用与PPTP的场景,还是和针对企业异地两地总分公司之间的vpn不间断按需链接,例如:ERP,OA及时通讯工具等在总分公司企业中的应用,缺点:需要单独安装客户端软件。

  IPSEC VPN 

  也适合针对企业异地两地中分公司或者多个IDC机房之间的VPN的不间断按需链接,并且在部署使用上更简单方便。IPSEC Vpn的开源产品openswan.

4、openvpn介绍

  OpenVPN 是一个基于 OpenSSL 库的应用层 VPN 实现。和传统 VPN 相比,它的优点是简单易用。

  OpenVPN允许参与建立VPN的单点使用共享金钥,电子证书,或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库中的SSLv3/TLSv1 协议函式库。OpenVPN能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X与Windows 2000/XP/Vista上运行,并包含了许多安全性的功能。它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容。

  OpenVPN2.0后引入了用户名/口令组合的身份验证方式,它可以省略客户端证书,但是仍有一份服务器证书需要被用作加密。 OpenVPN所有的通信都基于一个单一的IP端口, 默认且推荐使用UDP协议通讯,同时TCP也被支持。OpenVPN连接能通过大多数的代理服务器,并且能够在NAT的环境中很好地工作。服务端具有向客 户端“推送”某些网络配置信息的功能,这些信息包括:IP地址、路由设置等。OpenVPN提供了两种虚拟网络接口:通用Tun/Tap驱动,通过它们, 可以建立三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据。传送的数据可通过LZO算法压缩。在选择协议时候,需要注意2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下,请选择TCP协议作为底层协议,UDP协议由于存在无连接和重传机制,导致要隧道上层的协议进行重传,效率非常低下。

二、OpenVPN安装



1. 环境说明

2. 准备工作

# 关闭selinux
setenforce 0
sed -i ‘/^SELINUX=/c\SELINUX=disabled‘ /etc/selinux/config

# 安装openssl和lzo,lzo用于压缩通讯数据加快传输速度
yum -y install openssl openssl-devel
yum -y install lzo

#开启路由转发
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

3. 源安装

wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-10.noarch.rpm
rpm -Uvh epel-release-7-10.noarch.rpm
yum install openvpn -yyum install easy-rsa #安装easy-rsa生成密钥

4. 生成密钥

首先配置环境变量:
# cp -R /usr/share/easy-rsa/ /etc/openvpn# cat /etc/openvpn/easy-rsa/2.0/vars  | grep -v "^#"export EASY_RSA="`pwd`"
export OPENSSL="openssl"
export PKCS11TOOL="pkcs11-tool"
export GREP="grep"
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
export KEY_DIR="$EASY_RSA/keys"
echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR
export PKCS11_MODULE_PATH="dummy"
export PKCS11_PIN="dummy"
export KEY_SIZE=2048
export CA_EXPIRE=3650
export KEY_EXPIRE=3650
export KEY_COUNTRY="CN"
export KEY_PROVINCE="SH"
export KEY_CITY="SH"
export KEY_ORG="TY"
export KEY_EMAIL="[email protected]"
export KEY_OU="shop"
export KEY_NAME="EasyRSA"
export KEY_CN="server"  

生成秘钥:
# 初始化环境变量cd /etc/openvpn/easy-rsa/2.0/
source vars

# 清除keys目录下所有与证书相关的文件
# 下面步骤生成的证书和密钥都在/usr/share/easy-rsa/2.0/keys目录里
./clean-all

# 生成根证书ca.crt和根密钥ca.key(一路按回车即可)
./build-ca

# 为服务端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)
./build-key-server server

# 每一个登陆的VPN客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接,下面建立2份
# 为客户端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)
./build-key client1
./build-key client2

# 创建迪菲·赫尔曼密钥,会生成dh2048.pem文件(生成过程比较慢,在此期间不要去中断它)
./build-dh

# 生成ta.key文件(防DDos攻击、UDP淹没等恶意攻击)
openvpn --genkey --secret keys/ta.key

# 将证书文件复制到OpenVPN配置目录中cd /etc/openvpn/easy-rsa/2.0/keyscp dh2048.pem ca.crt server.crt server.key ta.key /etc/openvpn/servercp /usr/share/doc/openvpn-2.4.3/sample/sample-config-files/server.conf /etc/openvpn/server/

5. Server端配置举例,server.conf详解请参考另一半文章:OpenVPN Server端配置详解

# cat /etc/openvpn/server/server.conf

local 10.2.2.37
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"  #client连接后使用server的网络环境
push "dhcp-option DNS 223.5.5.5"         #经测试,需向client push DNS并且防火墙开启masquerade,client才能通过server访问互联网
client-to-client
duplicate-cn
keepalive 10 120
cipher AES-256-CBC
comp-lzo
persist-key
persist-tun
status openvpn-status.log
log-append  openvpn.log
verb 3
explicit-exit-notify 1
script-security 3 
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env     #配置使用密码验证
client-cert-not-required
username-as-common-name

6. 防火墙配置

首先启动firewalld
systemctl status firewalld.service

查看有哪些服务已经在列表中允许通过:
# firewall-cmd --list-services
dhcpv6-client http https ssh

可以看到已经有了dhcpv6-client, http, https, ssh四项,接下来添加openvpn:
# firewall-cmd --add-service openvpn
success
# firewall-cmd --permanent --add-service openvpn
success

最后添加masquerade,测试开启此项,client才能通过server访问互联网:
# firewall-cmd --add-masquerade
success
# firewall-cmd --permanent --add-masquerade
success

以下命令用于确认masquerade是否添加成功:
# firewall-cmd --query-masquerade
yes

7. 启动服务,若实现开机自启动请将以下命令加入/etc/rc.d/rc.local并赋予rc.local可执行权限

openvpn --config /etc/openvpn/server/server.conf >> /dev/null 2>&1 &

三.、设置使用password登录详解



1. 修改服务器端配置:

# vim /etc/openvpn/server/server.conf
在配置文件最后面添加如下几行数据
script-security 3 system     #允许通过环境变量将密码传递给脚本
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env   #提供一个用户名密码对
client-cert-not-required             #不使用客户端证书,使用密码对
username-as-common-name              #使用认证用户名,不使用证书的common name

2. 创建checkpsw.sh脚本,放在/etc/openvpn/路径下:

# cat /etc/openvpn/checkpsw.sh

#!/bin/sh
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman <[email protected]>
#
# 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="/var/log/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

3. 创建psw-file文件:

# cd /etc/openvpn/server
# echo "shenzhen  password%1" > psw-file        #创建账号密码,可以多行,每行一组
# chmod 400 psw-file                   #修改文件权限,我是用root权限执行的

4. 重启服务:

# ps -ef | grep openvpn|grep -v grep| awk ‘{print $2}‘ |xargs kill
# openvpn --config /etc/openvpn/server/server.conf >> /dev/null 2>&1 &

四、客户端配置



  OpenVPN目前是被河蟹状态,需要FQ去官网下载最新版本客户端,下载之后需要从服务器打包生成的证书文件,解压到客户端安装目录下的config目录中,并创建客户端配置文件client.ovpn:

  客户端配置详解请参考另一篇文章:OpenVPN Client端配置文件详解说明

client
dev tun
proto udp
remote 139.219.193.3 1194
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
;cert client.crt
;key client.key
comp-lzo
verb 3
auth-user-pass             #客户端使用账号密码登录
reneg-sec 360000

 

  打开客户端,输入用户名密码登录。 登录问题可以参考服务端/etc/openvpn/server/openvpn.log

参考:

https://openvpn.net/index.php/open-source/documentation.html

http://qiyishi.blog.51cto.com/5731577/1575758

http://blog.csdn.net/skykingf/article/details/50611061

时间: 2024-10-09 09:19:54

OpenVPN CentOS7 安装部署配置详解的相关文章

Weblogic12c安装与配置详解

Weblogic是什么Weblogic的安装Weblogic创建域Weblogic管理域Weblogic的应用Weblogic是什么 Weblogic这是我入职以后第一次接触到的词汇,我很陌生,就从我的角度来讲,我需要知道Weblogic是什么.干吗用的,然后才继续深入的学习怎么使用它.WebLogic是美商Oracle的主要产品之一,系购并得来.是商业市场上主要的Java(J2EE)应用服务器软件(application server)之一,是世界上第一个成功商业化的J2EE应用服务器, 目前

varnish安装及配置详解

varnish系统架构: varnish主要运行两个进程:Management进程和Child进程(也叫Cache进程). Management进程主要实现应用新的配置.编译VCL.监控varnish.初始化varnish以及提供一个命令行接口等.Management进程会每隔几秒钟探测一下Child进程以判断其是否正常运行,如果在指定的时长内未得到Child进程的回应,Management将会重启此Child进程. Child进程包含多种类型的线程,常见的如:Acceptor线程:接收新的连接

libCURL开源库在VS2010环境下编译安装,配置详解

libCURL开源库在VS2010环境下编译安装,配置详解 转自:http://my.oschina.net/u/1420791/blog/198247 CURL开源库VS2010环境下编译安装,配置详解 一 准备 1.1 CURL官网下载地址:http://curl.haxx.se/download.html 1.2 找到源码包,我这里下载的是7.32.0版:http://curl.haxx.se/download/curl-7.32.0.zip 二 步骤 2.1 打开curl-7.32.0\

DenyHosts 安装及配置详解

http://moo1985.blog.51cto.com/401365/290662 http://www.lllusion.com/?p=437 DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重 复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能. 下面进入主题. 1.安装脚本 要求安装服务器能上网,并建立 /workspace目录 ###########################

vsftpd2.3.2安装、配置详解

一.vsftpd 简介     Vsftpd是一个基于GPL发布的类UNIX系统的ftp服务器软件.其全称是Very Secure FTP Deamon,在安全性.速度和稳定性都有着不俗的表现.在安全性方面,vsftpd针对程序的权限来设计,以一般身份启动服务,对Linux系统的使用 权限较低:在千兆以太网上,vsftpd的速度可以达到86MB/s:在稳定性上更是优秀,资料表明,完全工作24小时,传输数据达2.6TB,平均并发 连接为1500用户,峰值达4000用户,而这些还是在单机上实现的.此

MySQL5.6 数据库主从同步安装与配置详解(Master/Slave)

MySQL5.6 数据库主从同步安装与配置详解(Master/Slave)本篇文章主要介绍了MySQL5.6 数据库主从同步安装与配置详解,具有一定的参考价值,有兴趣的可以了解一下.安装环境 操作系统 :CentOS 6.5 数据库版本:MySQL 5.6.27 主机A:192.168.1.1 (Master) 主机B:192.168.1.2 (Slave) 这里强调的数据库的版本,是因为MySQL在5.6之前和之后的安装方式是不一样的. 本人在进行配置的时候,也遇到了这个坑,这里提前说明,希望

持续集成(CI)工具------Hudson(Continuous Integration)安装与配置详解

本文允许转载,但请标明出处:http://blog.csdn.net/wanghantong/article/, 版权所有 文章概述: 一. 描述了持续集成工具Hudson的安装与配置 二. 描述了Git .Maven环境的安装与配置 三. 描述了扩展邮件通知及其配置方法 四. 描述了jira的配置 一.Hudson简介 Hudson是Jenkins的前身,是基于Java开发的一种持续集成工具,用于监控持续的软件版本发布/测试项目 下载地址:http://eclipse.org/download

(转)CentOS7安装KVM虚拟机详解

原文:https://github.com/jaywcjlove/handbook/blob/master/CentOS/CentOS7%E5%AE%89%E8%A3%85KVM%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%AF%A6%E8%A7%A3.md 基于 CentOS Linux release 7.2.1511 (Core) 的环境下命令行的方式安装KVM的详细过程. 目录 检测是否支持KVM 安装 KVM 环境 安装虚拟机 命令行配置系统 连接虚拟机 虚拟机其它管理

Centos7 安装MPlayer过程详解

使用自带的totem基本上都无法播放视频,各种格式都不支持,令人无语.想到了MPlayer,为了看片,决定编译安装,过程真的是折腾.如图是自带的Totem播放提示,安装了解码还是无法播放,反正要找其他播放器了,也没兴趣去管他是什么原因. 需要用到的东西在MPlayer官网上都有,就一个页面可以把所有东西都下载好http://mplayerhq.hu/design7/dload.html 0x01 准备工作 使用svn方式获取获取源码命令 svn checkout svn://svn.mplaye