openvpn自动创建和吊销用户证书的脚本

openvpn自动创建和吊销用户证书的脚本,记得安装expect

#!/bin/bash
#
#********************************************************************
#Date:          2022-02-17
#FileName:      openvpn.sh
#Description:       openvpn
#Copyright (C):     2022 All rights reserved
#********************************************************************

#输入要操作的用户名
read -p "Please input the username:" NAME

#判断是创建还是吊销
read -p "Please input create or revoke:" FUN

export SDIR="/etc/openvpn/easy-rsa/3/"
export CRTDIR="/etc/openvpn/client/"
export CDIR="/etc/openvpn/client/easy-rsa/3/"
export CRTPAS="${RANDOM}!${NAME}"
export PAS=$CRTPAS
#NAME=$1
export CCRT_DIR="/etc/openvpn/client/${NAME}"
  
#创建用户的函数
create(){
    mkdir $CCRT_DIR
    echo $PAS > ${CCRT_DIR}/password.txt 
#在easyrsa-client证书环境生成req和key文件
    cd $CDIR
    expect &> /dev/null <<EOF   
        spawn ./easyrsa gen-req $NAME
        expect {
            "phrase:" { send "$PAS\n";exp_continue }
            "phrase:" { send "$PAS\n";exp_continue }
            "]:" { send "\n" }
        }
        expect eof
EOF

#在easyrsa-server导入req文件并签发证书
    cd $SDIR && ./easyrsa import-req ${CDIR}pki/reqs/${NAME}.req $NAME &> /dev/null && echo -e "yes\n" | ./easyrsa sign-req client $NAME &> /dev/null

#整理证书文件

    cp ${SDIR}pki/ca.crt $CCRT_DIR
    cp ${SDIR}pki/issued/${NAME}.crt $CCRT_DIR
    cp ${CDIR}pki/private/${NAME}.key $CCRT_DIR

#复制client.ovpn配置文件并修改
    cp ${CRTDIR}client.ovpn $CCRT_DIR && sed -i "s/name/${NAME}/g" ${CCRT_DIR}/client.ovpn
#打包证书文件
    cd $CCRT_DIR && tar czf ${NAME}.tar.gz ./* &> /dev/null
}



#证书吊销的函数
revoke(){
    if grep -q "$NAME" /etc/openvpn/easy-rsa/3/pki/index.txt;then
        if grep "$NAME" /etc/openvpn/easy-rsa/3/pki/index.txt | grep -q R;then
            echo "该用户已吊销"
            exit 0
        else
            echo "+++++++开始吊销用户++++++"
            cd $SDIR && echo -e "yes\n" | ./easyrsa revoke $NAME &> /dev/null && ./easyrsa gen-crl &> /dev/null && echo "+++++++吊销完成++++++"
            systemctl restart openvpn@server
            exit 0
        fi
    else
        echo "该用户不存在"
        exit 0
    fi
}

#删除证书的函数
delete(){
    echo "++++++++开始删除残留文件++++++++"
    rm -rf ${CDIR}pki/reqs/${NAME}.req
    rm -rf ${CDIR}pki/private/${NAME}.key
    rm -rf $CCRT_DIR
    rm -rf ${SDIR}pki/reqs/${NAME}.req
    rm -rf ${SDIR}pki/issued/${NAME}.crt
#删除带R的吊销记录
    sed -i "/${NAME}/d" /etc/openvpn/easy-rsa/3/pki/index.txt && echo "+++++++删除完成+++++++"                  
}

#创建
case $FUN in
create)
#判断是否重名
    if [ -e ${CDIR}pki/private/${NAME}.key ];then
        echo "The user already exists"
        read -p "删除原用户并重新创建或选择退出,Please input delete or exit:" FUN2
        if [ "$FUN2" = delete ];then
            delete
            echo "++++++原用户已删除,现在开始新建++++++++"
            create
            echo "++++++创建完成++++++++"
        elif [ "$FUN2" = exit ];then
            exit 0
        else
            echo "输入参数错误,退出"
            exit 1
        fi
    else
        echo "+++++++开始创建+++++"
        create
        echo "++++++创建完成++++++"
        exit 0  
    fi
    ;;
revoke)
    revoke         
        ;;
*)
        echo "Input false,please input create or revoke!"
esac

client.ovpn文件内容

~]#cat /etc/openvpn/client/client.ovpn 
client
dev tun
proto tcp
remote 180.169.231.103 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert name.crt
key name.key
remote-cert-tls server
#tls-auth ta.key 1
cipher AES-256-CBC
verb 3

server.conf配置文件内容

[root@centos22 ~]#grep -Ev "^($|#)" /etc/openvpn/server.conf 
local 192.168.0.22
port 1194
proto tcp
dev tun
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/server.crt
key /etc/openvpn/certs/server.key  # This file should be kept secret
dh /etc/openvpn/certs/dh.pem
server 10.8.0.0 255.255.255.0
push "route 192.168.0.0 255.255.255.0"
push "route 192.168.2.0 255.255.255.0"
;client-config-dir ccd
;route 192.168.40.128 255.255.255.248
;client-config-dir ccd
;route 10.9.0.0 255.255.255.252
;learn-address ./script
;push "redirect-gateway def1 bypass-dhcp"
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
;client-to-client
;duplicate-cn
keepalive 10 120
cipher AES-256-CBC
;compress lz4-v2
;push "compress lz4-v2"
;comp-lzo
;max-clients 100
;user nobody
;group nobody
persist-key
persist-tun
status openvpn-status.log
log-append  openvpn.log
verb 3
mute 20
crl-verify /etc/openvpn/easy-rsa/3/pki/crl.pem

安装openvpn

   51  yum install openvpn
   52  yum install easy-rsa
   56  cp /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/server.conf /etc/openvpn/
   57  cp -r /usr/share/easy-rsa/ /etc/openvpn/
   58  cp /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openvpn/easy-rsa/3.0.8/vars
   59  cd /etc/openvpn/easy-rsa/3.0.8/vars
   60  cd /etc/openvpn/easy-rsa/3.0.8/
   75  ./easyrsa init-pki
   78  ./easyrsa build-ca nopass
   81  ./easyrsa gen-req server nopass
   84  ./easyrsa  sign server server
   86  ./easyrsa gen-dh
   88  ll /etc/openvpn/easy-rsa/3/pki/dh.pem
   91  cp -r /usr/share/easy-rsa/ /etc/openvpn/client/easy-rsa
   93  cp /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openvpn/client/easy-rsa/vars
   94  cd /etc/openvpn/client/easy-rsa/3
   96  ./easyrsa init-pki
   98  ./easyrsa gen-req yezhenzhen nopass
  100  cd /etc/openvpn/easy-rsa/3
  101  ./easyrsa import-req /etc/openvpn/client/easy-rsa/3/pki/reqs/yezhenzhen.req yezhenzhen
  102  ./easyrsa --help
  103  ./easyrsa sign-req client yezhenzhen
  105  mkdir /etc/openvpn/certs
  106  cd /etc/openvpn/certs
  107  cp /etc/openvpn/easy-rsa/3/pki/dh.pem .
  108  cp /etc/openvpn/easy-rsa/3/pki/ca.crt .
  109  cp /etc/openvpn/easy-rsa/3/pki/issued/server.crt .
  110  cp /etc/openvpn/easy-rsa/3/pki/private/server.key .
  112  mkdir /etc/openvpn/client/yezhenzhen
  113  cp /etc/openvpn/easy-rsa/3/pki/ca.crt /etc/openvpn/client/yezhenzhen/
  114  cp /etc/openvpn/easy-rsa/3/pki/issued/yezhenzhen.crt /etc/openvpn/client/yezhenzhen/
  115  cp /etc/openvpn/client/easy-rsa/3/pki/private/yezhenzhen.key /etc/openvpn/client/yezhenzhen/
  116  tree /etc/openvpn/client/yezhenzhen/
  117  vim /etc/openvpn/server.conf 
  118  cd /etc/openvpn/client/yezhenzhen/
  125  grep -Ev "^(#| |$|;)" /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/client.conf > client.ovpn
  126  vim client.ovpn 
  128  yum install iptables-services iptables -y
  129  systemctl enable iptables --now
  130  iptables -vnL
  131  iptables -F
  132  iptables -vnL
  133  iptables -X
  134  iptables -Z
  135  iptables -t nat -F
  136  iptables -t nat -X
  137  iptables -t nat -Z
  138  sysctl -p | grep forward
  141  iptables -t nat -A POSTROUTING -s 10.8.0.0/16 -j MASQUERADE 
  142  iptables -A INPUT -p TCP --dport 1194 -j ACCEPT 
  143  iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
  144  service iptables save
  145  iptables -vnL
  146  iptables -t nat -vnL
  147  mkdir /var/log/openvpn
  148  chown nobody.nobody /var/log/openvpn
  149  systemctl start openvpn@server
  150  systemctl status openvpn@server.service
  151  tail /etc/openvpn/openvpn.log 
  155  ifconfig tun0
  157  tar czvf yezhenzhen.tar.gz ./*

写成脚本

#!/bin/bash

yum install openvpn
yum install easy-rsa -y

#可能要修改版本
cp /usr/share/doc/openvpn-`rpm -q openvpn | cut -d- -f 2` /sample/sample-config-files/server.conf /etc/openvpn/
cp -r /usr/share/easy-rsa/ /etc/openvpn/
cp /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openvpn/easy-rsa/3.0.8/vars
cd /etc/openvpn/easy-rsa/3 && ./easyrsa init-pki && ./easyrsa build-ca nopass && ./easyrsa gen-req server nopass && ./easyrsa sign server server && ./easyrsa gen-dh && ./easyrsa gen-crl
cp -r /usr/share/easy-rsa/ /etc/openvpn/client/easy-rsa
cp /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openvpn/client/easy-rsa/vars
yum install iptables-services iptables -y
systemctl enable iptables --now
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z
iptables -t nat -A POSTROUTING -s 10.8.0.0/16 -j MASQUERADE
iptables -A INPUT -p TCP --dport 1194 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
service iptables save
mkdir /var/log/openvpn
chown nobody.nobody /var/log/openvpn
mv -f /root/server.conf /etc/openvpn/
mv -f /root/client.ovpn /etc/openvpn/client/
systemctl start openvpn@server
systemctl enable openvpn@server

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容