设置周期任务实现定期清理防火墙日志

4.5
(4)

今天,来教大家如何定期清理防火墙日志。一般情况下,我们都会安装服务器应用防火墙,用于防止网站被XSS攻击,防止SQL注入,一定程度防止cc等大流量攻击。而我是用的应用防火墙是ModSecurity开源软件,日志方式使用的是分割方法,即每条扫描或攻击单独生成一个日志文件。

随着时间的推移,会产生大量日志文件,基本上一天就有上千条日志文件的生成。如此日积月累,会占用服务器的索引节点:索引节点又被称为Inode使用率。

设置周期任务实现定期清理防火墙日志

inode 是 UNIX 操作系统中的一种数据结构,其本质是结构体,它包含了与文件系统中各个文件相关的一些重要信息。在 UNIX 中创建文件系统时,同时将会创建大量的 inode 。通常,文件系统磁盘空间中大约百分之一空间分配给了 inode 表。

——百度百科

我们可以判断的是,每一天服务器的inode总量是固定的,如果你的服务器上太多碎片文件,即各种很小的文件,但文件数量超级多,就会使得inode索引节点过大,超过100%就无法使用。

到此,你应该明白,清理各种网站日志及防火墙日志的重要性了。

关于清理网站日志的文章,我之前有写过一部分:《Centos 使用rsyslog自动定时切割网站运行日志》以及《跟大家说说我是怎么定时清理日志的》。以上两篇文章,第一篇为自动分割日志文件,到期自动清理;第二篇为通过crontab周期化任务,定期清理网站日志。

接下来,就是今天的文章主旨了,通过周期化脚本任务实现防火墙日志的清理,这里,你需要举一反三。毕竟,每个人的防火墙日志不太一样。而且,我这里的防火墙日志还是我自己写的规则生成的日志文件。

我的防火墙日志文件位于/usr/local/apache/logs/audit/apache目录下,每天生成一个文件夹。每个文件夹下,是网站被攻击生成的时刻,时刻文件夹下是,这个时间段被攻击生成的攻击日志:

当然,也不是每个子文件夹下都有一堆日志文件,大部分子文件夹都是一个日志文件。

我们判断需要清理的文件夹及其子文件夹及其文件,位于apache目录下。这里,我们设置删除一周以前的日志文件夹。因此,可以编写如下脚本内容:

oldDate=$(date -d "-7 days" "+%Y%m%d")
cd /usr/local/apache/logs/audit/apache #这里写你的文件夹路径
for folder in $(ls -d */)
do
   [ ${folder%/*} -lt $oldDate ] && rm -rf $folder
done

以上内容,需要设置换行编码为Unix,编码为UTF-8,另存为modsec.sh。当然,文件名随意。然后,将该sh脚本放置于/opt/shell/目录下。当然,放到哪里目录,你也随意。

接着,在ssh终端输入如下命令,打开周期化任务编辑器:

crontab -e

摁下”i“键,进入插入模式,在任意位置插入如下代码:

0 1 * * * sh /opt/shell/modsec.sh

以上代码表示,每天凌晨一点,准时执行modsec.sh脚本,即清理一周前的日志文件夹。

插入完代码后,摁下”ESC“键,退出插入模式。

接着,摁下”:wq“,退出并保存文件。如此,大功告成。

设置周期任务实现定期清理防火墙日志

最后,为了验证自己的周期化任务是否添加成功,可以输入如下命令,查看输出是否包含你刚添加的定时任务即可:

crontab -l
设置周期任务实现定期清理防火墙日志

如此,就会删除一周之前的文件夹。那么,实际上,也就是留下最近日期的8个文件夹。

设置周期任务实现定期清理防火墙日志

上面这张图,你也可以看到。每到凌晨一点,清理防火墙日志,inode索引节点使用率会下降。当然,如果本文看了还是不太明白,也可以看看之前写的问答环节:《Linux删除某目录一周之内的过期文件》。

共计4人评分,平均4.5

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/computer/modsec-log-delete.html

发表评论

登录后才能评论
本站APP
本站APP
分享本页
返回顶部