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加入到文件中。

# 先创建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;
... ... }

 

posted @ 2023-07-26 16:49  潇湘神剑  阅读(647)  评论(0编辑  收藏  举报