Centos7定时任务及Nginx自动封ip实践
发布于2023-01-03 01:01:35,更新于2024-01-17 17:37:53,标签:devops nginx 转载随意,文章会持续修订,请注明来源地址:https://meethigher.top/blog简单记录centos7中的crontab使用,以及使用crontab实现Nginx服务器自动封禁ip
一、定时任务
crontab,用来提交和管理用户的需要周期性执行的任务。与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
1.1 语法
服务相关命令
1 | systemctl [status|start|stop|restart|enable|disable] crond |
基本语法
crontab [选项] [参数]
1.) 选项
-e
编辑该用户的定时任务-l
列出该用户的定时任务-r
删除该用户的定时任务-u <user>
指定定时任务所属的用户
2.) 参数,即包含待执行任务的crontab文件。
二、Nginx自动封ip
以下内容,都是抄袭来的,经过自己简单修改。
参考地址在致谢参考里
nginx中在server下面,配置deny即可实现封禁ip。
deny的配置比较灵活,既可以在server下面配置,也可以在server下具体到某个location配置。
2.1 根据日志进行统计
AWK统计access.log
,记录每分钟访问超过60次的ip;具体多少次作为阈值,可以根据自己的业务情况来做适当的调整;
1 | awk '{print $1}' access.log | sort | uniq -cd | awk '{if($1>60)print $0}' |
1.) awk '{print $1}' access.log
取出access.log的第一列即为ip。
2.) sort | uniq -cd
去重和排序
3.) awk '{if($1>60)print $0}'
判断重复的数量是否超过60个,超过60个就展示出来
2.2 实现单次封禁ip的脚本
先配置nginx.conf,添加配置
1 | include blockip.conf; |
进入到目录/usr/local/nginx/logs/
,创建bash脚本ip_test
1 | #不能把别人IP一直封着吧,这里就清除掉了 |
2.3 定时任务每分钟执行封禁脚本
添加定时任务
1 | crontab -e |
直接输入内容
1 | * * * * * cd /usr/local/nginx/logs/ && sh ip_test |
crontab中的cron表达式可以使用在线模拟解析Crontab表达式执行时间 - ToolTT在线工具箱进行测试。
重启定时服务
1 | systemctl restart crond |
三、致谢参考
打赏