配置Nginx实现简单防御cc攻击

下面我将为你详细讲解“配置Nginx实现简单防御cc攻击”的完整攻略。

什么是 CC 攻击?

首先,我们需要了解什么是 CC 攻击。CC 攻击(即:CC 攻击,是一种常见的 DDoS 攻击方式,它的全称为“Challenge Collapsar”,中文大致意思是“挑战性塌缩”的攻击。CC 攻击通过占用服务器资源,导致请求无响应或响应缓慢,最终瘫痪服务器。

如何配置 Nginx 实现简单防御 CC 攻击

下面,我将向你介绍如何通过 Nginx 的相关配置来实现简单的防御 CC 攻击。

1. 限制单一 IP 的访问次数

通过修改 Nginx 的请求限制配置,可以限制同一 IP 在指定时间内的访问次数。以下是相关的 Nginx 配置示例:

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

    server {
        location / {
            limit_req zone=one burst=5 nodelay;
            # your other configurations
        }
    }
}

以上配置中,limit_req_zone 用于定义请求限制区域,每个请求限制区域有一个唯一的名称,这里指定为 one,大小为 10mrate=1r/s 参数表示每秒钟允许发送 1 个请求,如果超过了这个限制,后续请求将被限制。

limit_req 用于限制请求次数。zone=one 表示将该请求限制配置应用到 one 请求限制区域中,burst=5 表示在短时间内可以连续发送多个请求,最多允许 5 个请求,nodelay 参数用于表示不延迟请求。

2. 配置连接数限制

除了对单一 IP 的访问次数进行限制之外,还可以通过配置连接数限制来进行 CC 攻击防护。以下是相关的 Nginx 配置示例:

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;

    server {
        location / {
            limit_conn addr 5;
            # your other configurations
        }
    }
}

以上配置中,limit_conn_zone 用于定义连接限制区域,每个连接限制区域有一个唯一的名称,这里指定为 addr,大小为 10mlimit_conn 用于限制每个 IP 的最大连接数,这里我们设置为 5

3. 设置请求超时时间

对于垃圾请求,我们可以通过配置请求超时时间来防止它们占用服务器资源。以下是相关的 Nginx 配置示例:

http {
    proxy_send_timeout 10s;
    proxy_read_timeout 10s;

    server {
        # your other configurations
    }
}

以上配置中,proxy_send_timeoutproxy_read_timeout 用于指定请求发送和请求响应的最大时间。在两个参数都是 10s 的情况下,如果请求的响应时间超过了 10 秒钟,Nginx 将关闭请求,这样就可以防止垃圾请求占用服务器资源。

同时,还可以配合使用 Nginx 模块中较为全面的防御 CC 攻击方案,如:

4. 安装模块并配置

在 Nginx 中,提供了PCRE和HTTP SSL模块,使 Nginx具备了识别CC攻击和防止CC攻击的能力。具体到防止CC攻击我们还需要一些特定模块,下面我们就来一一介绍:

PCRE 模块:

PCRE模块是用来识别请求中是否存在关键字,它可以进行网络钓鱼和CC攻击的识别。下面我们将其加入Nginx中的构建文件:

--with-pcre
--with-pcre=/path/to/pcre/lib

HTTP SSL模块:

HTTP SSL模块用来提供HTTPS支持。考虑到系统安全问题,不使用HTTPS连接的用户也很少。下面我们将其加入Nginx中的构建文件:

--with-http_ssl_module

Http GEO 模块:

Http GEO 模块是用来根据禁止或许可访问的地址或地理位置进行拦截,从而使攻击请求无效。下面我们将其加入Nginx中的构建文件:

--with-http_geoip_module
--with-openssl=/path/to/openssl/lib

Http Access 模块:

在Nginx中,Http access 模块可以根据客户端的 IP 或是一些特定的字符串来允许或者拒绝请求,这对于预防DOS和CC攻击同时也提高了安全性,可以将这个模块加入Nginx中:

--with-http_access_module

Nginx搭建CC防御模块配置:

在有了这些模块之后,我们将通过nginx.conf的形式来做出相 应的防御。我们首先需要定义变量和限制阈值:

# /usr/local/nginx/conf/nginx.conf 

http {
    ...
    # 设置 cc 防御相关参数
    client_header_buffer_size    1k;
    large_client_header_buffers  4 4k;
    client_body_buffer_size      16k;

    limit_req_zone $binary_remote_addr zone=ddos:10m rate=10r/s;
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;

    variables_hash_max_size 2048;
    variables_hash_bucket_size 64;
    ...
}

这里定义了两个限制区域,一个是 ddos,另一个是 conn_limit。同时,我们也定义了缓存参数,例如请求头大小等。

这里需要注意的是,limit_req_zone 中使用的是 rate=10r/s 参数,表示每秒钟只允许 10 个请求,以此来限制某个 IP 在一段时间内可以发起的最大请求数量。

upstream backend {
    server 192.168.0.100;
}

server {
    listen 80;
    server_name test.com;

    location / {
        root /var/www/html/test.com;
        index index.html;

        # 请求超时时间(10s)
        proxy_send_timeout 10s;
        proxy_read_timeout 10s;

        # IP 限流
        limit_req zone=ddos burst=5 nodelay;
        limit_conn conn_limit 10;

        # 请求头和请求体大小限制,避免提交过长表单和其他大请求
        client_max_body_size 20m;
        client_header_buffer_size 1k;
        large_client_header_buffers 4 4k;

        # 设置防盗链
        if ($http_referer ~* (?:github|baidu|so.com)) {
            return 403;
        }

        # 根据位置、IP、防盗链等条件,拒绝请求
        if ($request_uri ~* \.(php|jsp|asp|aspx)$) {
            return 404;
        }

        if ($remote_addr ~* (?:223.35.82.24|223.67.226.38)) {
            return 403;
        }

        if ($http_referer ~* (?:github|baidu|so.com)) {
            return 403;
        }

        # 转发请求到后端服务
        proxy_pass http://backend;
    }
}

这里我们通过 limit_req 来限制同一个 IP 的访问速度,同时,也限制了一个 IP 最多同时发起 10 个连接。在最后,我们根据请求的 URI、后端 IP、http_referer 等信息来校验请求是否合法。

通过配置以上内容,基本可以实现简单防御 CC 攻击的目的。当然,也可以通过其他方式,如使用防火墙,加密等提高 CC 攻击的安全性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:配置Nginx实现简单防御cc攻击 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Nginx添加ngx-fancyindex模块的方法

    首先,需要了解什么是ngx-fancyindex模块。ngx-fancyindex是一个用于美化Nginx文件列表页面的第三方模块,它可以给Nginx的文件列表页面加上图标、文件大小、创建时间、修改时间等信息,让整个页面更加美观。下面,详细讲解ngx-fancyindex模块的安装方法。 1. 下载ngx-fancyindex模块源码 使用wget工具下载n…

    Nginx 2023年5月16日
    00
  • nginx 性能优化的概述及在CPU资源方面的处理

    nginx的性能优化的概述 软件层面的提升硬件的使用率 增大CPU的利用率 增大内存的利用率 增大磁盘IO利用率 增大网络带宽利用率 提升硬件规格 网卡:万兆网卡、例如10G、25G、40G等 磁盘:固态硬盘,关注IOPS和BPS指标 CPU:更快的主频,更多的核心,更大缓存,更优的架构 内存:更快的访问速度 超出硬件上限后使用DNS 如何增大Nginx使用…

    Nginx 2023年4月13日
    00
  • Nginx环境的搭建以及安装配置

    Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务 为什么选择Ngix:(1):IO多路复用epoll—在一个线程里面交替并发的完成任务;         (2):轻量级(功能模块少,代码模块化)         (3):cpu亲和(把cpu的核心和nginx的工作进程绑定方式,把每个work…

    Nginx 2023年4月13日
    00
  • Nginx在MAC上的安装、启动、重启和关闭

    我们来详细讲解“Nginx在MAC上的安装、启动、重启和关闭”的完整攻略。 安装 首先确保你已经安装了Homebrew,如果没有安装可以在终端中输入以下命令进行安装: /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)” …

    Nginx 2023年5月16日
    00
  • Nginx反向代理维基百科镜像制作全解析

    近日做的Ngnx代理测试,基于Nginx的ngx_http_substitutions_filter_module模块,并利用UA跳转实现PC/移动端不同站点跳转。 1. 关于Nginx的代理详细请转至:https://www.agawater.cn/?p=55 2. 个人Blog已转用cloudflare免费CDN,并在VPS做了v”two”ray+web…

    Nginx 2023年4月10日
    00
  • 一次docker中的nginx进程响应慢问题定位记录

    有个ft测试的环境,其中nginx使用docker发布的。测试用例是curl的时候,没有获得nginx的响应。 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e39be26bc976 cdn-release-docker.artnj.zte.com.cn/img-for-ott…

    Nginx 2023年4月13日
    00
  • Nginx是如何处理Request的?

    nginx是如何匹配过来的请求,然后做处理的呢?这个匹配的过程可以分为两步: 1.选择server 2.选择location    选择server 仅仅匹配server name 加入Nginx的配置文件有这么几项: server {     listen      80;     server_name example.org www.example.o…

    Nginx 2023年4月11日
    00
  • Nginx URL后面不加斜杠301重定向

    今天开发碰到一个问题,其实之前就有这个问题,但是一直都没去关注,今天测试碰到了就解决一下。 问题情况: 当我请求 http://admindev.jingruiauto.com/store/views/basedata 的时候,浏览器自动跳转到了 http://admindev.jingruiauto.com:8100/store/views/basedat…

    Nginx 2023年4月12日
    00
合作推广
合作推广
分享本页
返回顶部