下面我将为你详细讲解“配置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
,大小为 10m
。rate=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
,大小为 10m
。limit_conn
用于限制每个 IP 的最大连接数,这里我们设置为 5
。
3. 设置请求超时时间
对于垃圾请求,我们可以通过配置请求超时时间来防止它们占用服务器资源。以下是相关的 Nginx 配置示例:
http {
proxy_send_timeout 10s;
proxy_read_timeout 10s;
server {
# your other configurations
}
}
以上配置中,proxy_send_timeout
和 proxy_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技术站