Nginx 安全性能配置 & DDOS 防范

2019-08-02 15:34:29 浏览数 (1)

最近看了一些 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 攻击

  • 限制请求速度
代码语言:javascript复制
limit_req_zone $binary_remote_addr zone=one:10m rate=2/s;
  • 限制连接数量
代码语言:javascript复制
limit_conn_zone $binary_remote_addr zone=addr:10m;
  • 关闭慢连接

在 server 中添加

代码语言:javascript复制
server {
client_body_timeout 5s;
client_header_timeout 5s;
}
代码语言:javascript复制
  • 设置IP黑/白名单
  • 使用缓存进行流量削峰
  • 屏蔽特定请求

  1. 针对特定 URL 的请求
  2. 针对不是常见的 User-Agent 的请求
  3. 针对 Referer 头中包含可以联想到攻击的值的请求
  4. 针对其他请求头中包含可以联想到攻击的值的请求

比如,如果你判定攻击是针对一个特定的 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 运维工程师面试问答录

0 人点赞