最近看了一些 Nginx 的配置的文章主要和性能有关,包括一些安全上的配置,并不对所有设备适用,总结下来觉得有用的可以自取,另外是加深自己对服务器的理解。其中有一些有关 DDOS 的配置。内容参考了两篇文章和自己的一些安全理解。文章地址如下:
- Tuning NGINX for Performance
- Mitigating DDoS Attacks with NGINX and NGINX Plus
Nginx 配置优化
基本配置路径一般在 /etc/nginx/nginx.conf ,如果站点配置文件不是 nginx.conf,而是独立的站点配置文件,那就到相应的站点去修改配置。
- worker_processes auto 该选项控制 Nginx 运行时候的工作进程个数,默认值为 1。调节为 auto
- worker_connections 表示工作进程能处理的最大连接数。默认为 512,可调节为更高,我自己设置为 1000。主要看服务器的硬件配置及流量特性。
- keepalive_requests 表示客户端单个连接上最多能发送多少个请求,默认值是 100。可以设置成更高的值,试情况而定。
- keepalive_timeout 指定每个连接最多保持多长的打开状态,为了防止 DDOS 攻击,可以改为 60 或者更小。视情况而定。
- server_tokens 该选项可以隐藏 Nginx 的版本号,关闭他可以防止攻击者嗅探到 Nginx 版本从而做相关渗透。
- worker_rlimit_nofile 进程最大打开文件数 可以配置为一个较高的数字。避免出现『too many open files』
- proxy_hide_header X-Powered-By; 该指令可以隐藏一些 header 的信息。通常 x-powered-by 会泄露网站相关信息我们需要将其隐藏。
host header attack 攻击修复
在server模块中添加:
代码语言:javascript复制
Nginx DDOS 防御配置优化
现在的 DDOS 基于应用层的比较多,比如 CC 攻击。通常有如下特点:
- 攻击的 IP 或 IP 段相对固定,每个IP都有远大于真实用户的连接数和请求数。
- 因为攻击是由木马发出且目的是使服务器超负荷,请求的频率会远远超过正常人的请求。
- User-Agent 通常是一个非标准的值
- Referer 有时是一个容易联想到攻击的值
根据以上的相关特征可以做以下配置来抵抗 DDOS 攻击
- 限制请求速度
limit_req_zone $binary_remote_addr zone=one:10m rate=2/s;
- 限制连接数量
limit_conn_zone $binary_remote_addr zone=addr:10m;
- 关闭慢连接
在 server 中添加
代码语言:javascript复制server {
client_body_timeout 5s;
client_header_timeout 5s;
}
代码语言:javascript复制
- 设置IP黑/白名单
- 使用缓存进行流量削峰
- 屏蔽特定请求
- 针对特定 URL 的请求
- 针对不是常见的 User-Agent 的请求
- 针对 Referer 头中包含可以联想到攻击的值的请求
- 针对其他请求头中包含可以联想到攻击的值的请求
比如,如果你判定攻击是针对一个特定的 URL:/foo.php,攻击请求的 User-Agent 中包含 foo 或 bar 我们就可以屏蔽到这个页面的请求:
代码语言:javascript复制location /foo.php {
deny all;
}
location /{
if ($http_user_agent ~* foo|bar) {
return 403;
}
}
代码语言:javascript复制
总结
Nginx 和 Nginx Plus 可以作为抵御 DDOS 攻击的一个有力手段,而且 Nginx Plus 中提供了一些附加的特性来更好的抵御 DDOS 攻击并且当攻击发生时及时的识别到。
来源:Brick713的小黑屋 原文:http://t.cn/AiNKwR3F 题图:来自谷歌图片搜索 版权:本文版权归原作者所有 投稿:欢迎投稿,投稿邮箱: editor@hi-linux.com
推荐阅读
- 利用 Oh-My-Zsh 打造你的超级终端
- 漫谈云计算、虚拟化、容器化
- 从零开始搭建创业公司后台技术栈
- 浅谈 TCP 的三次握手和四次挥手
- 史上最全的 Linux 运维工程师面试问答录