活力39282
在线时间13640 小时
阅读权限200
管理员
自由的灵魂
- 积分
- 107434
- 主题
- 5630
- 回帖
- 26661
- 注册时间
- 2003-4-10
- 最后登录
- 2026-10-2
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
1、问题缘起及新问题汇总
问题缘起:已经于2月1日安装了雷池,需要完全卸载fail2ban及相关配置,简化日志系统,清理冗余文件
探讨中新发现问题:
1) fail2ban卸载后存在残留配置文件和服务文件
2) nginx中存在大量冗余的限流规则和备份文件
3) 日志记录过于详细,包含大量正常访问记录
4) access.log(nginx总访问日志)无自动轮转机制
5) 存在15个冗余的.temp.conf备份文件
6) ipset中存在f2b开头的残留集合
7) 宝塔日志轮转只处理站点日志,不处理nginx总日志
2、解决方案
(1)技术原理:通过完全卸载fail2ban、清理nginx冗余配置、实现条件日志记录、建立极简日志轮转保险机制
(2)文件列表:
删除文件:
- /etc/fail2ban/ (整个目录)
- /var/lib/fail2ban/ (整个目录)
- /usr/share/doc/fail2ban/ (整个目录)
- /www/server/panel/vhost/nginx/*.temp.conf (15个备份文件)
- /etc/ipset/f2b-*.save (ipset配置文件)
- /www/wwwlogs/access_404.log (2.7M静态文件)
- /www/wwwlogs/history_backups/test.com/ (无用站点备份)
修改文件:
- /www/server/nginx/conf/nginx.conf (移除limit_req_zone/limit_conn_zone定义)
- /www/server/panel/vhost/nginx/www.dianbo.org.conf (移除限流规则,添加条件日志)
- /etc/logrotate.d/nginx_minimal (新增极简轮转配置)
新增文件:
- /www/server/nginx/conf/log_filter.conf (条件日志过滤配置)
(3)关键代码:
log_filter.conf 全文:
- # 日志过滤:仅记录非200/300状态码的请求(除404外)
- map $status $loggable {
- ~^[23] 0; # 2xx/3xx状态码不记录
- 404 0; # 404不记录
- default 1; # 其他状态码(4xx/5xx)记录
- }
复制代码
nginx_minimal 全文:
- # nginx总访问日志极简轮转配置
- # 主要作为保险机制,基本不会触发(按当前增长速度需要20年才会触发)
- /www/wwwlogs/access.log
- {
- monthly
- rotate 24
- compress
- missingok
- notifempty
- size 100M
- create 0640 www www
- sharedscripts
- postrotate
- [ -f /www/server/nginx/logs/nginx.pid ] && kill -USR1 $(cat /www/server/nginx/logs/nginx.pid)
- endscript
- }
复制代码
www.dianbo.org.conf 关键修改:
- # 条件访问日志
- access_log /www/wwwlogs/www.dianbo.org.log combined if=$loggable;
复制代码
3、最终实现效果
| 优化项目 | 优化前 | 优化后 | 变化 | 说明 | | fail2ban残留 | 完全存在 | 完全移除 | -100% | 服务、配置、数据文件全清理 | | 冗余配置文件 | 15个备份 | 0个备份 | -100% | 清理所有.temp.conf文件 | | nginx限流规则 | 多个zone定义 | 完全移除 | -100% | 移除所有limit_req/limit_conn | | 日志记录策略 | 全量记录 | 条件记录 | -90%+ | 仅记录4xx/5xx错误(除404) | | 日志轮转机制 | 仅站点日志 | 全日志保险 | +100% | 新增access.log轮转保险 | | 配置文件数量 | 23个文件 | 8个文件 | -65% | 清理冗余,保留必要配置 | | access.log年增长 | 4.2MB/年 | 4.2MB/年 | 0% | 实际增长极慢,无需频繁轮转 |
4、进一步优化的可能性
- 可考虑将access.log中的攻击流量单独记录到安全日志
- 可添加基于访问频率的异常检测(非限流)
- 可配置年度自动维护脚本
- 可考虑添加CDN真实IP提取(如需更准确日志分析)
- 可优化nginx_error.log的轮转策略(当前太小忽略)
5、重要技术沉淀或踩坑点
- fail2ban完全卸载需清理服务文件、配置文件、数据文件、ipset集合
- nginx条件日志过滤需在http块中定义map变量
- logrotate配置中注释不能和数字在同一行(语法错误)
- 宝塔日志轮转脚本只处理站点特定日志,不处理nginx总日志
- access.log主要包含攻击流量,真实访问已被过滤到站点日志
- 日志增长极慢的情况下,轮转配置应设置为高阈值(如100M)
- 清空日志文件不影响nginx运行,会自动创建新日志
|
|