首页 > 系统相关 >nginx配置IP访问限制策略

nginx配置IP访问限制策略

时间:2023-07-26 16:55:49浏览次数:32  
标签:... nginx ip allowlist server 访问 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;
... ... }

 

标签:...,nginx,ip,allowlist,server,访问,IP,白名单
From: https://www.cnblogs.com/zhangzhide/p/17582579.html

相关文章

  • 使用 ifcfg 文件配置IP与辅助IP
    配置如下:[root@test-8c8gnetwork-scripts]#catifcfg-eth0#Createdbycloud-initoninstancebootautomatically,donotedit.#BOOTPROTO=noneDEFROUTE=yesDEVICE=eth0GATEWAY=192.168.121.1IPADDR=192.168.121.170NETMASK=255.255.255.0IPADDR2=192.168.121.1......
  • TypeScript小知识:遍历enum (暂时记录)
    enumBlockPrefab{  BLOCK2=0,  BLOCK4,  BLOCK8,  BLOCK16,  BLOCK32,  BLOCK64,  BLOCK128,  BLOCK256,  BLOCK512,  BLOCK1024,  BLOCK2048}letnum=BlockPrefab.BLOCK128;letsmth=BlockPrefab[num];let......
  • dvp接口,mipi接口说明以及camera需要的mipi lane数计算
    DVPDVP总线PCLK极限约在96M左右,而且走线长度不能过长,所有DVP最大速率最好控制在72M以下,PCBlayout较容易画,MIPI总线速率lvds接口耦合,走线必须差分等长,并且需要保护,故对PCB走线以及阻抗控制要求高一点(一般来讲差分阻抗要求在85欧姆~125欧姆之间)DVP是并口,需要PCLK、VSYNC、H......
  • 安装easy_install 和ipython
    从链接http://pypi.python.org/pypi/setuptools#downloads处获得相应的版本运行shsetuptools-0.6c9-py2.4.egg(跟用户权限,若没有可以指定--prefix=~)安装完毕对python2.6可运行下面代码:#!/bin/bash#wgethttp://pypi.python.org/packages/2.6/s/......
  • JavaScript命令模式:优雅地管理代码
    JavaScript命令模式在JavaScript中,命令模式是一种行为设计模式,它允许我们将请求封装为一个对象,从而使我们能够将请求的不同参数、方法和对象进行参数化。这种模式的主要目的是将请求的发送者和接收者解耦,从而使代码更加灵活和可维护。命令模式的实现在JavaScript中,我们可以使用......
  • js校验IPv4/IPv6/域名/url等相关正则
    /***域名校验eg:www.baidu.com*@param{*}val需要校验的值*/exportfunctionisDomain(val){constreg=/^([0-9a-zA-Z-]{1,}\.)+([a-zA-Z]{2,})$/;returnreg.test(val);}/***ipv4校验eg:10.0.0.1*@param{*}val需要校验的值*/exportfunc......
  • 关于TypeScript中提示xxx is declared but its value is never read的解决方法
    首先,提示很明显,是定义了变量,但是却没有使用。解决方案有如下两种: 一:需要确定变量是否真的没有使用到,如果没有使用直接删除即可。 二:对于方法中的入参,是没法随便删除的。这时候我们可以利用TypeScript4.2中的新特性,将变量名用下划线开头,表示占位变量。更具体的详情可......
  • iptables
    一、iptables简介iptables是linux自带的一款防火墙工具,它能帮助我们基于规则完成数据包过滤、数据包重定向和网络地址转换功能。   严格的说,iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的”安全框架......
  • centos7 用docker 部署 nacos集群--以mysql持久化--以nginx代理
     创建一个文件夹,把四个配置文件放进去,然后运行:dockercompose-f-dnacos.ymlupmysql-schema.sqlnacos.confnacos.envnacos.yml  mysql-schema.sql内容:/**Copyright1999-2018AlibabaGroupHoldingLtd.**LicensedundertheApacheLicense,Version2.......
  • redis访问时的线程安全问题
    参考:https://blog.csdn.net/diweikang/article/details/90264993 Redis是线程安全的吗?Redis是个单线程程序,所以它是线程安全的。 Redis单线程为什么还能这么快?redis是基于内存的,内存的读写速度非常快redis是单线程的,避免了不必要的上下文切换和竞争条件re......