OpenVpn 安全部署实战指南 [一]
0x01 关于openvpn
0x02 openvpn 可工作于两种不同的模式,使用 TUN / TAP 作为接口建立隧道,但需要相应内核支持
0x03 下面则是 openvpn 提供的两种安全模式
此次演示环境
我们要实现的最终目的
0x04 Ok,明确了最终目的之后,我们就开始来实战部署OpenVpn
首先,进行一些前期的必要环境准备,务必严格保证所有机器时间完全一致,此项非常重要,否则后期OpenVpn客户端在连服务端时会出现证书无法被验证的情况
安装C编译器及openssl加密库,众所周知,openvpn依赖openssl对隧道数据进行加密
禁用selinux,之后一定要记得重启下系统,才可生效
准备好环境所需的源码包,此,分别为数据压缩库和openvpn自身的源码包openvpn的下载地址可能已经被墙掉了,大家暂时挂ss下一下就好了
编译安装LZO,主要用它来压缩通信数据加快传输速度
0x05 编译安装OpenVPN,记得要载入lzo一起编译
0x06 安装成功后,我们就开始来实际部署配置OpenVpn
首先,修改默认证书信息,而后,以此来创建各种证书
创建服务端证书及密钥 [ 中间会有一处让你输入密码,注意,后续创建证书时的密码最好都跟此密码保持一致,防止认证失败,之后再按照提示输入两次y即可]
创建完服务端证书和秘钥后,我们还需要为每一个登陆到OpenVpn服务器的客户端创建一个证书,注意直接用build-key
创建的客户端证书默认是没密码的,也就是说,别人只要拿到你的这套客户端的证书就可以直接连上vpn服务器,有一定风险,当然,前提也得服务端配置中允许同一用户多点登陆才行,后续如果还要新增客户端用户,只需要再用build-key生成即可
|
|
创建秘钥交换协议文件
0x07 创建并修改openvpn服务器配置文件,将需要用到的openvpn证书和密钥复制一份到创建好的keys目录中
|
|
0x08 修改完OpenVpn服务端配置后,我们再来稍微调整一些系统配置,如下
开启系统路由转发,因为在拨入成功后还要访问vpn服务器所在内网中的其它机器,所以转发是必须的
如果开了iptables,记得把tcp的11941端口[实际中是你自己设置的openvpn服务端口]
和转发都放开,不然客户端可能会连不上,如果压根没开,可暂时不用管
最后,我们来尝试启动OpenVpn服务
当然,除了手工去加载服务端配置文件来启动,你也可以用openvpn自己提供好的服务启动脚本来配置成常规启动,只是自己不太喜欢这样搞,过程非常简单,如下
0x09 把服务端完全搞定以后,我们再来看如何在不同系统平台下配置OpenVpn客户端进行连接
先下载并安装好 OpenVpn 的windows版客户端工具,地址已被墙
此时,再到OpenVpn服务端去把指定客户端的证书及配置文件都下载下来[此处以client用户为例]
,之后再把这些文件全部复制到你OpenVpn客户端的config目录中,此处的OpenVpn客户端config目录是在如下的路径上,而你则要根据你自己的OpenVpn客户端安装目录来调整
|
|
|
|
之后,再右键以管理员权限
运行openvpn客户端,点击connect
进行连接即可,如下即表示连接成功,至此,整个OpenVpn的部署工作也就完成了百分之八十,但我们的最终目的是希望能在本地通过拨入vpn直接跟远程内网中的机器进行通信,再次明确目的之后,我们继续
0x10 以上是使用windows客户端来连接OpenVpn服务端,至于如何在linux中使用客户端连接OpenVpn服务端就更简单了,跟OpenVpn服务端一样,先装好OpenVpn,之后只需用openvpn工具加载对应的客户端配置文件即可,注意,是客户端配置文件,另外,此处不需要再配置服务端,单单只是用下openvpn工具而已,具体如下
0x11 再回到我们的最终目的上,如何在本地通过vpn直接跟远程内网进行通信
,方式大概有三种,如下
第一种,把所有要通信的远程内网中的机器的网关都指向OpenVpn服务器的ip,这样,包在回传的时候就能找到本地机器,为了防止重启即失效,可直接把命令放在rc.local
中
第二种,走网段路由,在所有要通信的内网的机器上添加如下路由,把来自vpn内网段的数据都直接丢到OpenVpn服务器指定的内网ip上,一样也可以达到目的,但两种方式有个共同的确定,机器比较少的情况下也许还能凑活,如果有几千台机器,每台上都要添加一条这样的指向毕竟是很不现实的
所以,我们再来看第三种,利用iptables进行NAT转换,即把源地址为10.18.0.0/24
都转换到指定的内网卡ip上,这样就不用再逐个指定网关了
0x12 实际生产环境中,由于各种各样的原因,有时可能还需要禁止指定的客户端用户登陆,方法非常简单,直接注销指定的客户端证书,万一要连续禁用多个vpn账号,那就直接一次性注销多个客户端证书,执行revoke-full后直接覆盖原来的crl.pem文件即可,如下
下面是vpn账户被禁用后再登陆的效果,你会发现客户端的连接在一直被reset掉
后话: