早晨例行巡检的时候,登录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加入到文件中。
# 先创建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,ip,allowlist,server,访问,IP,白名单 From: https://www.cnblogs.com/zhangzhide/p/17582579.html