OpenVPN 使用账号+密码方式登陆

https://xu3352.github.io/linux/2017/06/08/openvpn-use-username-and-password-authentication

鉴于上一篇文章已经成功的搭建好 OpenVPN 了,不过客户端直接使用证书就可以连接了,但是多个人使用的话,建议还是改为账号+密码方式的,这里介绍比较简单的一种方式

服务端配置
# 修改服务端配置文件,文件最后追加几行
$ vim /etc/openvpn/delta.conf

# use username and password login
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
client-cert-not-required
username-as-common-name
script-security 3 execve
如果加上client-cert-not-required则代表只使用用户名密码方式验证登录,如果不加,则代表需要证书和用户名密码双重验证登录!

/etc/openvpn/checkpsw.sh 文件内容:

#!/bin/sh
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman <mathias@openvpn.se>
#
# 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
配置 账号/密码,新增账号/密码增加到这里即可,一行一个账号,密码用空格隔开:

$ cat psw-file
xu3352 123456@

# 重置权限,安全着想吧
$ chmod 400 psw-file
$ chown nobody.nobody psw-file 
重启服务openvpn:service openvpn restart

客户端配置
client.conf 文件里:

# 注释掉即可
;cert laptop.crt
;key laptop.key

# 新增验证方式
auth-user-pass
重新导入配置文件,尝试链接,可以看到弹出登陆框,输入账号和密码进行链接

其他
注意服务端配置最后一行

script-security 3 execve
默认的级别是 2,可以用 ps 看进程号时能看到
如果没有这个的话,会有个很神奇的现象,就是账号可以传过来,但是密码获取不到,可以在登录日志里查看日志!!!

如果客户端需要记住账号/密码,可以在客户端配置里设置:(Tunnelblick试过不好使)

auth-user-pass login.conf
然后 login.conf 内容:

xu3352

123456@

客户端配置文件

client         #指定当前VPN是客户端
dev tun        #必须与服务器端的保持一致
proto tcp      #必须与服务器端的保持一致
remote 18.31.07.21 10022      #指定连接的远程服务器的实际IP地址和端口号
resolv-retry infinite    #断线自动重新连接,在网络不稳定的情况下(例如:笔记本电脑无线网络)非常有用。
nobind         #不绑定特定的本地端口号
persist-key
persist-tun
ca ca.crt      #指定CA证书的文件路径
cert cert_37.crt       #指定当前客户端的证书文件路径
key cert_37.key    #指定当前客户端的私钥文件路径
ns-cert-type server      #指定采用服务器校验方式
tls-auth ta.key 1     #如果服务器设置了防御DoS等攻击的ta.key,则必须每个客户端开启;如果未设置,则注释掉这一行;
comp-lzo              #与服务器保持一致
verb 3                #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
#auth-user-pass login.txt
auth-user-pass

    A+
发布日期:2020年06月09日  所属分类:未分类

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: