用rsyslog管理fail2ban.log日志封禁和解封情况
编者按:通过 rsyslog 将 fail2ban 的封禁、解封、忽略日志按类型与日期独立归档,实现安全日志结构化、攻击行为可追溯、便于审计排查与集中管理。
用 rsyslog 把 fail2ban 的 ban、unban、Ignore 日志按类型、按天归档,核心意义有以下几点:
日志结构化:封禁、解封、忽略日志自动分开,排查攻击、误封更快速。
便于审计追溯:按天切割,方便按日期查攻击记录、合规留存。
集中规范管理:统一存放到指定目录,方便备份、展示、接入告警或面板。
减轻原日志污染:关键安全行为独立归档,不混在原始日志里,便于长期留存与清理。
具体实现路径如下:
一、创建/etc/rsyslog.d/fail2ban-filter.conf,在文件中输入:
# 1. 监听 fail2ban.log(无重复加载 imfile)
$InputFileName /var/log/fail2ban.log
$InputFileTag fail2ban:
$InputFileStateFile /var/spool/rsyslog/state-fail2ban
$InputFileSeverity info
$InputFileFacility local6
$InputRunFileMonitor
# 2. 定义动态文件名模板(核心:生成 YYYYMMDD 格式的日期)
$template BanLogFile,"/www/wwwlogs/waf/fail2ban_ban_%$year%%$month%%$day%.log"
$template UnbanLogFile,"/www/wwwlogs/waf/fail2ban_unban_%$year%%$month%%$day%.log"
$template IgnoreLogFile,"/www/wwwlogs/waf/fail2ban_Ignore_%$year%%$month%%$day%.log"
# 3. 过滤 Ban 并输出到动态文件
if $programname == 'fail2ban' and $msg contains 'Ban' then {
action(type="omfile" DynaFile="BanLogFile" FileCreateMode="0644" DirCreateMode="0755")
stop
}
# 4. 过滤 Unban 并输出到动态文件
if $programname == 'fail2ban' and $msg contains 'Unban' then {
action(type="omfile" DynaFile="UnbanLogFile" FileCreateMode="0644" DirCreateMode="0755")
stop
}
# 5. 过滤 Ignore 并输出到动态文件
if $programname == 'fail2ban' and $msg contains 'Ignore' then {
action(type="omfile" DynaFile="IgnoreLogFile" FileCreateMode="0644" DirCreateMode="0755")
stop
}
二、验证无语法错误。
rsyslogd -N1
三、重启rsyslog
systemctl restart rsyslog
