配置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高性能负载均衡器 linux C++ 通讯架构(一)nginx安装、目录、进程模型

      Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/PO3)代理服务器,并在一个BSD协议下发行,可以在UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及Microsoft Windows等操作系统中运行。 由俄罗斯的码农lgor Sysover所开发,最初供俄国大型的入口网站及搜寻引擎Rambler使用。…

    Nginx 2023年4月12日
    00
  • nginx cookie 会话保持功能

     sticky 会话保持,基于自定义cookie 进行会话保持的方式 安装包下载地址:https://github.com/bymaximus/nginx-sticky-module-ng ./configure –prefix=/usr/local/nginx –sbin-path=/usr/local/nginx/sbin/nginx –conf-…

    Nginx 2023年4月12日
    00
  • 1分钟搞定Nginx版本的平滑升级与回滚的方法

    下面是1分钟搞定Nginx版本的平滑升级与回滚的方法的完整攻略: 步骤1:备份配置文件 在进行升级或回滚之前,首先需要备份当前使用的 Nginx 配置文件,以防止修改出现问题导致无法恢复。使用以下命令进行备份: cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak 这里将 Nginx 的主配置文件 nginx.…

    Nginx 2023年5月16日
    00
  • Nginx日志按天切割基本配置说明

    1.声明日志格式     声明log    log位置                log格式;     access_log logs/access.log main;    2.定义日志格式(以下为常用的日志格式 可各自按需调整格式):   log_format main  ‘$remote_addr – $remote_user [$time_loc…

    Nginx 2023年4月13日
    00
  • linux安装nginx make&make install报错:make: *** No rule to make target `build‘, needed by `default‘. Sto

    linux安装./configure –prefix=/usr/local/nginx报错: 报错1: ./configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the module by using –without-htt…

    Nginx 2023年4月11日
    00
  • Nginx路径匹配规则小结

    首先我们需要了解Nginx中的路径匹配规则。 Nginx的路径匹配规则是从上往下依次匹配,符合条件的第一个location将会生效。路径匹配规则有以下几种: 精确匹配(==):只有请求路径与location路径完全一致时才会匹配成功。 前缀匹配(^~):只有请求路径以location路径开头时才会匹配成功,且此匹配方式优先级高于正则匹配。 正则匹配(= ~或…

    Nginx 2023年5月16日
    00
  • win10系统安装Nginx的详细步骤

    下面我将为您详细讲解“win10系统安装Nginx的详细步骤”。 下载Nginx 首先,您需要到Nginx官网下载对应版本的Nginx压缩包,下载地址为:https://nginx.org/en/download.html。 解压Nginx 将下载好的Nginx压缩包解压到指定目录,例如:D:\nginx。 修改Nginx配置文件 进入Nginx解压后的目录…

    Nginx 2023年5月16日
    00
  • Shell脚本一键安装Nginx服务自定义Nginx版本

    下面我来详细讲解“Shell脚本一键安装Nginx服务自定义Nginx版本”的完整攻略: 1. 准备工作 首先,我们需要准备好以下两个文件: Nginx源码包(.tar.gz格式) 自定义Nginx配置文件 可以从Nginx官网(http://nginx.org/)下载最新的源码包,或者根据自己的需要下载指定版本的源码包。 至于Nginx配置文件,可以根据自…

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