利用Cron定时管理OpenVPN用户访问的实用指南

本文详细介绍了如何通过Bash脚本和Cron定时任务实现OpenVPN用户的连接断开与解禁功能,包含完整的命令行操作步骤和权限配置指南,适合Linux新手学习自动化任务管理。

拥有Cron伙伴总是好事!

一些朋友(不太精通Linux的朋友)请我分享这个经验。我觉得可以写篇博客与大家分享。我们都曾从零开始,有时会忘记并非每个人都是Linux狂热用户——就像我还不是啤酒酿造爱好者一样(暂时!)。

大约一个月前,我和几位老管理员朋友聚会时聊到了VPN。大家讨论了工作和家庭使用的VPN方案。OpenVPN作为优秀的软件解决方案被提及,因其易于部署。其中一人表示希望实现调度功能,以便在更新期间限制访问,并灵活设定实习生仅能在特定时段连接。我们起初大笑,随后意识到他是认真的。这引发了对各公司官僚程序的深入讨论——不得不说我爱BHIS!如果有官僚程序,那一定是在某次会议上随我们酷炫T恤发放的。

朋友们,继续奋斗吧!

回家后我一直在思考限制访问和OpenVPN调度功能的问题。我有个怪癖:总喜欢把琐事变成挑战。我怀疑朋友们是故意这样“害”我——他们就这么邪恶!不得不承认,他们提出的问题虽然看似简单,但解决过程往往能衍生出其他问题的解决方案。

别问!

第二天我决定深入研究调度方案,因为我家实验室正好运行着OpenVPN服务器。在OpenVPN官网稍作调研后,我找到了禁用用户访问和暂停账户的命令行语法(详见https://docs.openvpn.net/docs/access-server/openvpn-access-server-command-line-tools.html#session-management)。

OpenVPN服务器禁用用户命令语法
OpenVPN服务器断开用户连接命令语法

掌握语法后,我创建了Bash脚本以便后续调用断开并禁用用户。注意断开命令支持添加断开原因提示,这个设计很贴心。

我曾在电路板合同制造行业工作,生产过计算机主板、电话设备、SCSI控制器和医疗设备等。大部分功能测试都通过cron任务完成,因为测试第一步总是用脚本重置时间为默认值,从而捕获测试时长以判断是否存在传播延迟问题(尤其是CPU和内存时序)。我们通过Bash脚本在特定时间点启动各类测试,这能有效发现设备总线速度的时序问题,也是当时最简单的实现方式。当然现在肯定有更先进的方案。

创建Bash脚本非常简单:通过SSH登录,提权至root(sudo su),创建脚本目录并进入。由于运行OpenVPN脚本需要权限,此处需root账户。

1
2
3
medic@openvpnas:~# mkdir ~/scripts
medic@openvpnas:~# cd scripts
medic@openvpnas:~/scripts#

使用VI或Nano创建脚本文件(如vi discbanuser.sh或nano discbanuser.sh),这将在当前目录打开空文件discbanuser.sh。

1
medic@openvpnas:~/scripts# nano discbanuser.sh

输入以下内容(注意:运行命令需位于scripts子目录,而非刚创建的目录):

断开并禁用用户的批处理脚本

接下来在~/scripts目录创建解禁用户的脚本unbanuser.sh:

允许用户连接VPN的Bash脚本

设置文件执行权限(注意ls使用小写L):

1
2
3
4
5
medic@openvpnas:~/scripts# ls –l
Total 8
-rw-r--r-- 1 root root 1010 Aug  8 15:30 discbanuser.sh
-rw-r--r-- 1 root root  428 Aug  8 15:33 unbanuser.sh
medic@openvpnas:~/scripts#

更改权限:

1
2
3
4
5
6
7
medic@openvpnas:~/scripts# chmod 755 discbanuser.sh
medic@openvpnas:~/scripts# chmod 755 unbanuser.sh
medic@openvpnas:~/scripts# ls –l
Total 8
-rwxr-xr-x 1 root root 1010 Aug  8 15:30 discbanuser.sh
-rwxr-xr-x 1 root root  428 Aug  8 15:33 unbanuser.sh
medic@openvpnas:~/scripts#

脚本可执行后,通过crontab调度任务。Cron是Linux任务调度器,所有用户都曾用它安排重启、更新等任务。有个关于用脚本自动化琐事的趣闻:https://what.thedailywtf.com/topic/17997/now-that-s-what-i-call-hacker 说实话,我还在等BHIS给我们配联网咖啡机……

继续操作:
在OpenVPN虚拟机中输入:

1
medic@openvpnas:~/scripts# crontab -e

这将打开当前用户的crontab文件(-e表示编辑)。文件已包含语法说明:

调用Bash脚本的Crontab文件
如图所示,我已添加对discbanuser.sh和unbanuser.sh的调用,这两个任务将分别在每周一晚上10:00和10:30运行。保存文件后即可测试。

我使用之前创建的ricktest账户登录VPN,等待服务器断开连接的消息:
成功收到断开提示及脚本中预设的说明信息!

尝试重新连接VPN服务器:
符合预期!

在解禁脚本运行后再次测试,登录功能恢复。
这个简单示例能为Linux新手和我的朋友们提供crontab的入门实践。可见定时任务和Bash脚本的应用潜力无限。
别忘了查看前文链接获取更多有趣的高级示例!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计