网站被恶意请求,拉黑IP是重要的手段,如果每次拉黑都要到nginx上配置,未免太low了;我们需要更方便的控制nginx IP黑名单。
1.方案
黑名单持久化到mysql (常见的方案是redis,但不利于控制,如:不同的IP设置不同的有效期、IP的CRUD、统计等等);
通过lua-nginx-module,在nginx中开辟一块内存(lua_shared_dict),lua将黑名单定期从mysql全量刷新至lua_shared_dict;
所有请求,都要到与lua_shared_dict中的IP check一下。
2.安装
2.1 安装luajit
?2.2.安装nginx时,将lua模块编译进去
?3.配置
3.1 nginx配置
?nginx服务器配置以下crrontab
?3.2 lua脚本
sync_ipblacklist.lua
?get_ipblacklist_info.lua
?check_realip.lua
?3.3 数据库设计
?4 CRUD
黑名单产生有手工的方式,也有自动的方式,或者两者兼有。
自动的方式有通过python分析elk日志,将恶意IP自动写入mysql,这是个大话题,这里不涉及。
手工的方式可以人肉查看elk请求日志,发现恶意IP,手工填入mysql,这里推荐一个开源的CRUD工具,用户体验很nice(比直接navicat好多了),当然也可以自己写……
项目地址:https://github.com/jonseg/crud-admin-generator
项目的强大之处在于,所有表都帮你生成菜单,然后这些表的CRUD就直接用了。
具体操作见官方说明,就不赘述了。
以上这篇nginx ip黑名单动态封禁的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/sdmei/article/details/88320516