今天,来教大家如何定期清理防火墙日志。一般情况下,我们都会安装服务器应用防火墙,用于防止网站被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删除某目录一周之内的过期文件》。
原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/2350.html