OpenVPN 服务 SHELL 自动化部署脚本

本贴最后更新于 1548 天前,其中的信息可能已经东海扬尘

#!/bin/bash # #******************************************************************** #Author:zhangzhuo #QQ: 1191400158 #Date: 2021-01-26 #FileName:openvpn_install.sh #URL: [https://www.zhangzhuo.ltd](https://www.zhangzhuo.ltd) #Description:The test script #Copyright (C): 2021 All rights reserved #******************************************************************** openvpn_install(){ while :;do read -p "请输入OpenVPN服务器公网IP: " IP { echo $IP | grep -E "^(([1-9]?[0-9]|1[0-9](#)|2[0-4](#)|25[0-5]).){3}([1-9]?[0-9]|1[0-9](#)|2[0-4](#)|25[0-5])$">/dev/null; } && break || echo "请输入正确的IP地址!" done while :;do read -p "请输入内网的网络地址如(192.168.10.0): " NET { echo $NET | grep -E "^(([1-9]?[0-9]|1[0-9](#)|2[0-4](#)|25[0-5]).){3}([1-9]?[0-9]|1[0-9](#)|2[0-4](#)|25[0-5])$">/dev/null; } && break || echo "请输入正确的网络地址!" done while :;do read -p "请输入内网的子网掩码如(255.255.255.0): " MASK { echo $MASK | grep -E "^(([1-9]?[0-9]|1[0-9](#)|2[0-4](#)|25[0-5]).){3}([1-9]?[0-9]|1[0-9](#)|2[0-4](#)|25[0-5])$">/dev/null; } && break || echo "请输入正确的子网掩码!" done centos_Version #版本centos版本区分,centos8缺少server文件 yum install -y openvpn easy-rsa #安装 rpm -ql openvpn &>/dev/null || { echo "openvpn服务安装失败请检查YUM是否配置EPEL源";exit ;} rpm -ql easy-rsa &>/dev/null || { echo "easy-rsa服务安装失败请检查YUM是否配置EPEL源";exit ;} #准备服务器端证书环境 cp -r /usr/share/easy-rsa/ /etc/openvpn/easy-rsa-server #修改vars配置文件 cp /usr/share/doc/easy-rsa/vars.example /etc/openvpn/easy-rsa-server/3/vars #修改CA自签证书有效期 sed -ri 's/.*(set_var EASYRSA_CA_EXPIRE).*/\1 36500/' /etc/openvpn/easy-rsa-server/3/vars #修改openvpn服务器证书有效期 sed -ri 's/.*(set_var EASYRSA_CERT_EXPIRE).*/\1 3650/' /etc/openvpn/easy-rsa-server/3/vars cd /etc/openvpn/easy-rsa-server/3 #初始化PKI生成PKI相关目录和文件 ./easyrsa init-pki #创建CA机构 echo -e "\n" | ./easyrsa build-ca nopass #创建openvpn服务器证书并颁发 echo -e "\n" | ./easyrsa gen-req server nopass echo -e "yes\n" | ./easyrsa sign server server #创建Diffie-Hellman算法 ./easyrsa gen-dh #准备客户端证书环境 cp -r /usr/share/easy-rsa/ /etc/openvpn/easy-rsa-client cp /usr/share/doc/easy-rsa/vars.example /etc/openvpn/easy-rsa-client/3/vars cd /etc/openvpn/easy-rsa-client/3 ./easyrsa init-pki #修改客户端证书有效期,根据自己的实际情况可修改 sed -ri 's/.*(set_var EASYRSA_CERT_EXPIRE).*/\1 180/' /etc/openvpn/easy-rsa-client/3/vars #CA和服务器证书复制到openvpn服务的目录 mkdir /etc/openvpn/certs cp /etc/openvpn/easy-rsa-server/3/pki/ca.crt /etc/openvpn/certs/ cp /etc/openvpn/easy-rsa-server/3/pki/issued/server.crt /etc/openvpn/certs/ cp /etc/openvpn/easy-rsa-server/3/pki/private/server.key /etc/openvpn/certs/ cp /etc/openvpn/easy-rsa-server/3/pki/dh.pem /etc/openvpn/certs/ openvpn --genkey --secret /etc/openvpn/certs/ta.key #准备客户端配置文件 mkdir /etc/openvpn/client-file cp /etc/openvpn/certs/{ca.crt,dh.pem,ta.key} /etc/openvpn/client-file cat <<EOF >/etc/openvpn/client-file/client.ovpn client dev tun proto tcp remote server-ip 1194 resolv-retry infinite nobind #persist-key #persist-tun ca ca.crt cert client.crt key client.key remote-cert-tls server #tls-auth ta.key 1 cipher AES-256-CBC verb 3 compress lz4-v2 tls-auth ta.key 1 EOF sed -ri "s/(server-ip)/$IP/" /etc/openvpn/client-file/client.ovpn #生成证书吊销列表 cd /etc/openvpn/easy-rsa-server/3 ./easyrsa gen-crl #创建openvpn日志目录 mkdir /var/log/openvpn chown openvpn: /var/log/openvpn/ #生成openvpn服务器配置文件 cat <<EOF >/etc/openvpn/server.conf port 1194 proto tcp #pexplicit-exit-notify 1 dev tun ca /etc/openvpn/certs/ca.crt cert /etc/openvpn/certs/server.crt key /etc/openvpn/certs/server.key dh /etc/openvpn/certs/dh.pem server 10.0.0.0 255.255.255.0 push "route network" keepalive 10 120 cipher AES-256-CBC compress lz4-v2 push "compress lz4-v2" ;comp-lzo max-clients 2048 user openvpn group openvpn status /var/log/openvpn/openvpn-status.log log-append /var/log/openvpn/openvpn.log verb 3 mute 20 tls-auth /etc/openvpn/certs/ta.key 0 crl-verify /etc/openvpn/easy-rsa-server/3/pki/crl.pem EOF sed -ri "s/(network)/$NET $MASK/" /etc/openvpn/server.conf #添加iptables规则和内核参数 echo net.ipv4.ip_forward = 1 >>/etc/sysctl.conf sysctl -p echo "iptables -t nat -APOSTROUTING -s 10.0.0.0/24 -j MASQUERADE" >>/etc/rc.d/rc.local chmod +x /etc/rc.d/rc.local /etc/rc.d/rc.local #启动openvpn服务 systemctl daemon-reload systemctl enable --now openvpn@server echo -e "\033[1;31m服务安装完成,已经启动!\033[0m" } #centos系统版本区分 centos_Version(){ Version=`grep -Eo "[0-9].[0-9]" /etc/redhat-release | tr '.' '%' | tr '\n' % |cut -d% -f 1` if [ $Version = 8 ];then cat <<EOF >/lib/systemd/system/openvpn@.service [Unit] Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I After=network.target [Service] Type=notify PrivateTmp=true ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/ --config %i.conf [Install] WantedBy=multi-user.target EOF chmod 644 /lib/systemd/system/openvpn@.service fi } issue(){ while :;do read -p "请输入创建证书的人名全拼如(zhangzhuo):" REQ_NAME ls -ld /etc/openvpn/client/$REQ_NAME &>/dev/null && echo "用户已经存在" || break done read -p "私钥是否设置密码(1设置,其他为不设置)" A if [ ! $A = 1 ];then NOPASS=nopass fi #生成证书申请文件 cd /etc/openvpn/easy-rsa-client/3 echo -e "\n" | ./easyrsa gen-req $REQ_NAME $NOPASS #导入申请文件到CA cd /etc/openvpn/easy-rsa-server/3 ./easyrsa import-req /etc/openvpn/easy-rsa-client/3/pki/reqs/$REQ_NAME.req $REQ_NAME #颁发 echo -e "yes\n" | ./easyrsa sign client $REQ_NAME #创建用户客户端配置文件 mkdir /etc/openvpn/client/$REQ_NAME cp /etc/openvpn/easy-rsa-server/3/pki/issued/${REQ_NAME}.crt /etc/openvpn/client/${REQ_NAME} cp /etc/openvpn/easy-rsa-client/3/pki/private/${REQ_NAME}.key /etc/openvpn/client/${REQ_NAME} cp /etc/openvpn/client-file/* /etc/openvpn/client/${REQ_NAME} mv /etc/openvpn/client/${REQ_NAME}/${REQ_NAME}.crt /etc/openvpn/client/${REQ_NAME}/client.crt mv /etc/openvpn/client/${REQ_NAME}/${REQ_NAME}.key /etc/openvpn/client/${REQ_NAME}/client.key cd /etc/openvpn/client/${REQ_NAME}/ #打包用户客户端配置文件 tar -cf ${REQ_NAME}.tar * cp ${REQ_NAME}.tar /root/ echo -e "\033[1;31m用户客户端配置文件已经生成,已经打包放置到root目录下\033[0m" echo -e "\033[1;31m原本的文件在/etc/openvpn/client/文件夹下\033[0m" } revoked(){ echo `ls /etc/openvpn/client/` while :;do read -p "请输入要吊销的用户名:" NAME ls -ld /etc/openvpn/client/$NAME &>/dev/null && { rm -rf /etc/openvpn/client/$NAME;break; } || echo "没有这个用户请重新输入!" done cd /etc/openvpn/easy-rsa-server/3 echo -e "yes\n" | ./easyrsa revoke $NAME ./easyrsa gen-crl systemctl restart openvpn@server } PS3="请选择相应的编号(1-4):" MENU=" 安装OpenVPN服务 给用户颁发证书 吊销用户证书 退出 " select menu in $MENU;do case $REPLY in 1) openvpn_install ;; 2) issue ;; 3) revoked ;; 4) break ;; *) echo -e "\e[1;31m输入错误,请输入正确的数字(1-3)!\e[0m" ;; esac done

脚本功能

  • 可以实现在 Centos7 和 8 系统部署 openvpn 服务,部署完成后 CA 证书 100 年,openvpn 证书 10 年
  • 可以自动实现客户端证书颁发,有效期 180 天
  • 脚本具体过程脚本中有注释
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    124 引用 • 74 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    556 引用 • 675 回帖
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    116 引用 • 54 回帖 • 1 关注
  • 印象笔记
    3 引用 • 16 回帖 • 1 关注
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 183 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    85 引用 • 165 回帖 • 1 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    298 引用 • 763 回帖
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 290 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    267 引用 • 666 回帖 • 1 关注
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    83 引用 • 37 回帖 • 1 关注
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 6 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 532 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    99 引用 • 367 回帖
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 29 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    28 引用 • 226 回帖 • 132 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 740 关注
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    143 引用 • 442 回帖 • 1 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 4 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 131 关注
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 6 关注
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 4 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 678 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    15 引用 • 7 回帖
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    494 引用 • 928 回帖
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 492 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    108 引用 • 295 回帖 • 1 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 440 关注