言成言成啊 | Kit Chen's Blog

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.) 选项

  1. -e 编辑该用户的定时任务
  2. -l 列出该用户的定时任务
  3. -r 删除该用户的定时任务
  4. -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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#不能把别人IP一直封着吧,这里就清除掉了
echo "" > /usr/local/nginx/conf/blockip.conf

#前面最开始编写的统计数据功能
ip_list=$(awk '{print $1}' access.log | sort | uniq -cd | awk '{if($1>60)print $0}')

#判断这个变量是否为空
if test -z "$ip_list"
then
#为空写入 11.log中,并重新启动ngnix
echo "为空" >> /usr/local/nginx/logs/11.log

systemctl restart nginx

else
#如果不为空 前面加上 deny格式和ip写入blockip.conf中
echo "deny" $ip_list > /usr/local/nginx/conf/blockip.conf

#因为前面携带了行数,所有我们需要去除掉前面的行数,写入后在读取一次
ip_list2=$(awk '{print $3}' /usr/local/nginx/conf/blockip.conf)

#最后再把读取出来的值,在次写入到blockip.conf中
echo "deny" $ip_list2";"> /usr/local/nginx/conf/blockip.conf

#重启ngnix
systemctl restart nginx
#清空之前的日志,从最新的开始截取
echo "" > /usr/local/nginx/logs/access.log

fi

2.3 定时任务每分钟执行封禁脚本

添加定时任务

1
crontab -e

直接输入内容

1
* * * * * cd /usr/local/nginx/logs/ && sh ip_test

crontab中的cron表达式可以使用在线模拟解析Crontab表达式执行时间 - ToolTT在线工具箱进行测试。

重启定时服务

1
systemctl restart crond

三、致谢参考

centos7必备技能下的定时任务 crontab的使用_佞臣888的博客-CSDN博客

服务又被攻击?Nginx + 简单脚本,轻松拦截

发布:2023-01-03 01:01:35
修改:2024-01-17 17:37:53
链接:https://meethigher.top/blog/2023/crontab/
标签:devops nginx 
付款码 打赏 分享
shift+ctrl+1可控制目录显示