• Long Live Kubernetes!
  • 可关注微信公众第一时间知晓网站动态。 微信公众号
  • Long Live Linux!
  • 您觉得本站非常有看点,可以收藏本站,本站将持续推出高质量文章!
  • This site has been created and is maintained by and is the sole property of Yok8s.com. No part of this site may be copied or reproduced without express written consent from the authors of this site.

OpenVPN使用账号密码登录!

linux网络 Rocloong 3个月前 (09-21) 138次浏览 已收录 1个评论 扫描二维码
文章目录[隐藏]

说明:上篇文章对于服务端配置文件的讲解较为简单,本文中将详细解释各参数含义。

接上篇文章 手把手教你部署OpenVPN! 继续来讲解如何使用账号密码登录OpenVPN服务端!

服务端开启路由转发

##允许转发
root@openvpn:~# echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
##使其配置生效
root@openvpn:~# sysctl -p  
##添加SNAT规则立即生效
root@openvpn:~# iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -j MASQUERADE'
##添加SNAT规则至开机自启
root@openvpn:~# echo 'iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE' >> /etc/rc.d/rc.local
##验证规则是否生效
root@openvpn:~# iptables -vnL -t nat

服务端配置文件讲解

;local a.b.c.d // "本机监听 IP" 默认为本机所有 IP
port 1194 // "端口"
;proto tcp // 协议, "生产推荐使用 TCP"
proto udp // 默认使用的协议 UDP
;dev tap // 创建以太网隧道设备, tap 设备实现以太网帧通过 Openvpn 隧道, 可提供非 IP 协议如 IPX 和 AppleTalk 等的支持, tap 等当于一个以太网设备, 它操作第二层数据包如以太网数据帧.
dev tun // 创建 IP 路由隧道, "生产推存使用 tun" 互联网使用 tun, 一个 tun 设备大多时候被用于基于 IP 协议的通讯 tun 模拟了网络层设备, 操作第三层数据包比如 IP 数据封包.
;dev-node MyTap // TAP-Win32 的设备驱动. 非 windows 系统不需要
ca ca.crt // "CA 证书文件路径"
cert server.crt // "服务器证书文件路径"
key server.key // "服务器私钥文件路径"
dh dh2048.pem // "DH 参数文件路径"
;topology subnet
server 10.9.0.0 255.255.255.0 // "OpenVPN 客户端连接后自动分配的 IP 网段" 默认会给服务器分配此网段的第一个 IP 将做为客户端的网关, ( 注意: 不要和内网网段相同 )
ifconfig-pool-persist ipp.txt // 记录客户端和虚拟 IP 地址分配的文件, 无需配置, "建议注释" (; 该符号开头的就是注释 )
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100 // 配置网桥模式, 无需配置, "建议注释"
;server-bridge
;push "route 192.168.10.0 255.255.255.0" // 推送给客户端的到达服务器后面网段的静态路由, 网关是服务器地址 10.8.0.1 ( 实现 VPN 客户端可以连接内网其他网段的主机 )
;push "route 192.168.10.100 255.255.255.255" // 用 255.255.255.255 可实现只能访问内网单个主机的功能, 比如: jumpserver
;push "route 192.168.20.0 255.255.255.0" // 推送路由信息到客户端, 以允许客户端能够连接到服务器背后的其它私有网络
;client-config-dir ccd // 为特定客户端添加路由信息, 此路由是客户端后面的网段而非服务端的网段, "无需设置"
;route 192.168.0.12 255.255.255.0
;client-config-dir ccd
;route 10.9.0.0 255.255.255.252
;learn-address ./script // 指定外部脚本文件, 实现创建不同组的 iptables 规则, "无需配置"
;push "redirect-gateway def1 bypass-dhcp" // 启用此配置后客户端所有流量都将通过 VPN 服务器进行转发, "因此生产一般无需配置此项"
;push "dhcp-option DNS 208.67.222.222" // 推送 DNS 服务器地址, "无需配置"
;push "dhcp-option DNS 208.67.220.220"
;client-to-client // 允许不同的客户端直接通信,不安全, "生产环境一般无需配置"
;duplicate-cn // "多个用户共用一个证书, 一般用于测试环境," ( 生产环境建议一个用户一个证书, 无需开启 )
keepalive 10 120 // 设置服务端活动的检测的间隔和超时时间, 每隔 10 秒 ping 一次, 120 秒没有回应则认为已经断线
tls-auth ta.key 0 // 访止 DoS 等攻击的安全增强配置, 服务器和每个客户端都需要拥有此密钥文件. 第二个参数在服务器端为 0, 客户端为 1
cipher AES-256-CBC // 加密算法
;compress lz4-v2 // 启用 Openvpn2.4.X 新版压缩算法
;push "compress lz4-v2" // 推送客户端使用新版压缩算法,和下面的comp-lzo不要同时使用
;comp-lzo // 旧户端兼容的压缩配置,需要客户端配置开启压缩,openvpn2.4.X等新版可以不用开启
;max-clients 100 // 最多支持的客户端数量
;user nobody // 指定 openvpn 服务的用户
;group nobody // 指定 openvpn 服务的组
persist-key // 重启服务时默认会重新读取key文件,开启此配置后保持使用第一次的key文件, 生产环境无需开启
persist-tun // Don’t close and reopen TUN/TAP device or run up/down
scripts across SIGUSR1 or --ping-restart restarts, // 生产环境建议无需开启
status openvpn-status.log // 服务器状态记录文件,每分钟记录一次相关信息
;log openvpn.log // 第一种日志记录方式,并指定日志路径,log会在openvpn启动的时候清空日志文件, 不建议使用
;log-append openvpn.log // 第二种日志记录方式,并指定日志路径,重启openvpn后在之前的日志后面追加新的日志,生产环境建议使用
verb 3 // 设置日志级别,0-9,级别越高记录的内容越详细,0 表示静默运行,只记录致命错误,4 表示合理的常规用法,5 和 6 可以帮助调试连接错误。9 表示极度冗余,输出非常详细的日志信息
;mute 20 // 对相同类别的信息只记录前20条到日志文件中
explicit-exit-notify 1 // 当服务端重启后通知客户端自动重新连接服务器, 此项配置仅能用于udp模式, tcp 模式无需配置即能实现重新连接功能, 且开启此项后tcp配置后将导致openvpn服务无法启动, 所以 tcp 时必须不能开启此项
script-security 3 // 允许使用自定义脚本
auth-user-pass-verify /usr/local/openvpn/checkpsw.sh via-env // 指定用户认证脚本
username-as-common-name // 开启用户密码验证
client-cert-not-required // 只支持用户和密码方式验证,不支持证书,无此配置表示需要证书和用户密码多种验证
;verify-client-cert none  //表示不需要证书认证

注意:配置文件中相关文件路径IP端口以自己部署为准,文中只作为参考!

用户认证脚本(OpenVpn官网提供)

root@openvpn:~# vim /usr/local/openvpn/checkpsw.sh
#!/bin/sh
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman 
# 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

##脚本添加可执行权限
root@openvpn:~# chmod 755 /usr/local/openvpn/checkpsw.sh

密码文件

#添加编辑密码文件
vim /usr/local/openvpn/psw-file
zhangsan 20240921
lisi 20240920
tom 888888
#前面为用户名,后面为密码。 中间使用空格分开!

上面步骤全都完成之后服务端重启OpenVPN!使其配置生效~

win客户端登录

客户端配置文件修改为账号密码登录:

client
dev tun
proto tcp
remote 公网IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cipher AES-256-CBC
comp-lzo
verb 3
auth-user-pass #使用用户名密码登录openvpn服务器
auth-nocache

番外:ca.crt写入到客户端配置文件中

client
dev tun
proto tcp
remote 公网IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
<ca>
-----BEGIN CERTIFICATE-----
MIIDNTCCAh2gAwIBAgIJAJn8QBQqDhwqMA0GCSqGSIb3DQEBCwUAMBYxFDASBgNV
BAMMC0Vhc3ktUlNBIENBMB4XDTIzMDMyNjExMzEwNVoXDTMzMDMyMzExMzEwNVow
FjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
ggEKAoIBAQDM+jOOUMSZvz+4zODX/sMbZnqQKWf63UGYl8eJ8boXt605BBa3C4Tq
a2yhTvUZEjxK3jzz9jLJFBJXFUtRjBXhxoa6pcp3qV5IUh7PJ5JsoReVUnBPj7Xs
bh7BFUobZHXAgmNe7dLiOFQ4O6En4aWTRmTPqCMhAiNxtYm5SJ0R65y8vJUCQqgV
cL+ZnWAXm042t2FrcTIPkOvDNa9mDkg/jeB3eHQKjTSV5wM+ioSQ78dlODSfN4ly
3vjelqYRUZKwalwIZM4bc3PuocDUidFxzbNLRXHLLqnE0MgldcTGG350rC/azJ6r
U9qDpmWdgNn4aOGTvjIz0p8E0p3kk5c9AgMBAAGjgYUwgYIwDAYDVR0TBAUwAwEB
/zAdBgNVHQ4EFgQUmOswib9VomrtOyTtXJ/jSv/eTjIwRgYDVR0jBD8wPYAUmOsw
ib9VomrtOyTtXJ/jSv/eTjKhGqQYMBYxFDASBgNVBAMMC0Vhc3ktUlNBIENBggkA
mfxAFCoOHCowCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBCwUAA4IBAQCKY4QVn9L8
qZJdvqouYekcZxsXqQN2gutKt0hm7pNNnhu9S/t0KIzmOX6QHkS6AA7WALfIhZy1
4wCwCSLNn3YF5a7h78NENO9S2EmkDwPPZQ/a6dXYeuAX0sHJzKo7iSSxKlbFzPGk
zL9oLQHsD083nxUIGbdIdR9dqW92PD7PasJvJCBSnOpGhYhprfP+d5G/GByc/cMZ
Zr0IpLIabzg8NipnabU20aQvIIwfPFmzBoMw7FHnutEy/rxf3Vt3Moo60V+BNdQ/
kj/2Isi+hxa46jsJ0ogpQYttlMpR/nBlX8WYzkbVsXnBxt5oee7ZJHyB/C6JhE0Y
x+FzN62BgVW7
-----END CERTIFICATE-----
</ca>
cipher AES-256-CBC
comp-lzo
verb 3
auth-user-pass #使用用户名密码登录openvpn服务器
auth-nocache

账号密码连接测试

在运行客户端OpenVPN GUI后点击连接会提示输入账号密码

客户端使用证书登录

注意:将从服务端下载下来的客户端配置文件放置于客户端config目录下(上篇文章有讲解,可跳转至 手把手教你部署OpenVPN 查看)

client
dev tun
proto tcp
remote 公网ipxxx.xxx.xxx.xxx 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
remote-cert-tls server
cipher AES-256-CBC
comp-lzo
verb 3

无需账号密码就可以直接登录!!!


《OpenVPN使用账号密码登录!》版权归作者所有,如需转载请注明出处,并附带文章链接地址,侵权必究!!!
喜欢 (1)
[]
分享 (0)
Rocloong
关于作者:
善战者无赫赫战功!
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到
(1)个小伙伴在吐槽
  1. 文章内容只作为技术交流使用,切勿以文章内容做它用! :mrgreen:
    匿名2024-09-21 11:29 回复