配置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: [emerg] BIO_new_file(“/etc/nginx/ssl_key/server.crt”) failed (SSL: error:02001002:syste

    Centos 7.5  nginx+web集群配置https报错 报错信息: [root@lb01 conf.d]# nginx -tnginx: [emerg] BIO_new_file(“/etc/nginx/ssl_key/server.crt”) failed (SSL: error:02001002:system library:fopen:No …

    Nginx 2023年4月10日
    00
  • 关于ubuntu无法启动nginx的问题

    在ubuntu13.04上使用apt方式安装nginx发现无法启动nginx,也不报错 查看nginx运行状态,显示未启动 搜索无果,想起了原来的遇到的一个问题,那时候是安装了nginx和lighthttpd服务器,导致nginx无法启动的情况,提示端口被占用,于是拆卸lighthttpd,启动nginx正常,但是访问localhost提示无法访问,排查获知…

    Nginx 2023年4月15日
    00
  • Linux LNMP 环境的搭建之【Nginx的安装】

      Nginx 俄罗斯人开发的一款比较强劲的web服务器,静态页面html 单机在优化得当的情况下,能够达到3-4W的并发,是一款比较优秀的服务器软件,在国内,有Tengine【淘宝】开发的分支 ,关于Tengine的文档,可以参考,淘宝团队的官方文档:http://tengine.taobao.org/      下面介绍是在Linux Centos 6.…

    Nginx 2023年4月12日
    00
  • CentOS8.1 部署.net core 3.1 环境,涉及 aspnetcore-runtime、防火墙、selinux设置、nginx

    #注册微软产品仓库 列表 https://packages.microsoft.com/config/centosrpm -Uvh https://packages.microsoft.com/config/centos/8/packages-microsoft-prod.rpm#搜索yum search aspnetcore-runtime*#安装yum …

    Nginx 2023年4月13日
    00
  • nginx+php+redis vs nginx+lua+redis

    最近在做通知系统,前端用的轮询方式(后端压力不小),因为时间比较紧,开始我准备把未读通知标识存在数据库中,但是每次拿数据的时候需要查询一遍数据库,总监说你这样效率较低,说你可以根据用户id作为key放在redis中存储。说说自己在做这个的一些体会和闲下来总结的一些笔记。 phpredis connect pconnect 我最开始使用的是connect,每次…

    Nginx 2023年4月16日
    00
  • Nginx作为静态WEB服务

    1.静态资源类型 Nginx作为静态资源Web服务器部署配置, 传输非常的高效, 常常用于静态资源处理, 请求, 动静分离 非服务器动态运行生成的文件属于静态资源 类型 种类 浏览器端渲染 HTML、CSS、JS 图片 JPEG、GIF、png 视频 FLV、Mp4 文件 TXT、任意下载文件 2.静态资源场景 静态资源传输延迟最小化 3.静态资源配置语法 …

    Nginx 2023年4月9日
    00
  • Ubuntu下搭建与配置Nginx服务

    下面是Ubuntu下搭建与配置Nginx服务的完整攻略,包含两条示例说明: 确定Ubuntu版本并安装Nginx 首先,要确定已经安装了Ubuntu,可以通过命令lsb_release -a查看版本。然后,使用以下命令安装Nginx: 更新Ubuntu软件包列表:sudo apt-get update 安装Nginx:sudo apt-get install…

    Nginx 2023年5月16日
    00
  • nginx本地正常访问,外网无法访问

    1.nginx服务器配置后本地正常访问与转发,外网无法访问 解决方案:防火墙未配置通过nginx程序,配置通过即可 可参考:https://blog.csdn.net/qq_29729735/article/details/78215578

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