nginx配置IP访问限制策略
早晨例行巡检的时候,登录zabbix查看网络带宽、服务器负载等信息时,主页弹出了"发生了 11 次失败的登陆尝试。最后一次失败的登陆尝试发生在 2023/06/29 日 07:19 客户端IP地址是 45.14.226.17。"这样一条弹窗,查了这个ip地址的归属地,发现这个ip来自于欧洲。这是帝国主义亡我之心不死啊,必须得办它。于是就发生了如下故事。
在nginx侧配置ip白名单
方式一
这种方式可以指定返回的状态码以及特定的页面比较灵活,推荐使用这种方式。
方式1.1
直接将ip白名单配置在http块中,适合小批量的ip添加。
http { ... ... # 定义ip白名单 geo $allowlist { default 0; 192.168.0.0/16 1; 60.30.151.58 1; 60.194.3.58 1; } ... ... } server { listen 80; server_name zabbix.com; if ( $allowlist = 0 ) { return 444; } ... ... }
方式1.2
创建ip白名单文件。适合大量添加ip地址。同时要注意,这个ip白名单的配置文件不能跟nginx的各个server块的配置文件放在一块,否则会报语法错误。
# 创建ip白名单文件。
vim /etc/nginx/allowlist.conf 192.168.0.0/16 1; 60.30.151.58 1; 60.194.3.58 1;
http { ... ... # 定义ip白名单 geo $allowlist { default 0; include /etc/nginx/allowlist.conf; } ... ... } server { listen 80; server_name zabbix.com; if ( $allowlist = 0 ) { return 444; } ... ... }
这里为什么要返回444状态码呢?因为444状态码是nginx特有的,如果不符合条件它是直接断开连接,不会有任何返回。但是如果是return 403,服务端还要给它返回403的状态信息,虽然说是占用的带宽很少,但是如果被CC攻击了,返回海量的403那也遭不住啊。所以还是444合适。
方式二
这种方式无法指定返回的状态码,统一返回403。
方式2.1
直接将需要允许或拒绝的ip地址写在http块或者server块中,在ip规模少的情况下适合这种方式。
server { listen 80; server_name zabbix.com; allow 92.168.0.0/16; allow 60.30.151.58; allow 60.194.3.58; deny all; ... ... }
方式2.2
这种方式适合大批量的创建ip白名单或者黑名单,适合写脚本过滤日志中的异常ip加入到文件中。
1 2 3 4 5 | # 先创建ip白名单文件 vim /etc/nginx/conf.d/allowlist.conf allow 92.168.0.0/16; allow 60.30.151.58; allow 60.194.3.58; |
server { listen 80; server_name zabbix.com; include /etc/nginx/conf.d/allowlist.conf; deny all;
... ... }
分类:
nginx相关
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
2022-07-26 zabbix 6.2.0部署