赞
踩
目前,nginx是最流行的web服务器,它最近击败了Apache。它是轻量级、快速、健壮的,支持所有主要的操作系统。它是Netflix、WordPress.com和其他高流量网站的web服务器选择。一个nginx服务器可以用2.5 MB的内存轻松处理10,000个不活动的HTTP连接。在这篇文章中,我们将提供关于nginx服务器安全的技巧,向你展示如何保护你的nginx安装。
在安装nginx之后,你应该对它的配置设置有一个很好的理解,可以在nginx.conf文件中找到。这是nginx的主要配置文件,因此大多数安全检查将使用这个文件来完成。默认情况下,你可以在Windows系统的[nginx安装目录]/conf中找到nginx.conf配置文件,在Linux系统的/etc/nginx或/usr/local/etc/nginx中找到nginx.conf文件。您可能还需要对虚拟主机配置文件进行一些更改,这些文件通常包含在站点可用的子目录中。
步骤1 禁用任何不需要的nginx模块
当你安装nginx时,它会自动包含许多模块。目前,您不能在运行时选择模块。要禁用某些模块,需要重新编译nginx。我们建议您禁用不需要的模块,因为这将通过限制允许的操作来最小化潜在的攻击风险。
为此,在安装过程中使用configure选项。在下面的例子中,我们禁用autoindex模块,它会生成自动目录列表,然后重新编译nginx。
# ./configure --without-http_autoindex_module
# make
# make install
步骤2 禁用nginx server_tokens
默认情况下,nginx中的server_tokens指令显示nginx版本号。它可以在所有自动生成的错误页面中直接看到,也可以在服务器头中的所有HTTP响应中显示。
这可能会导致信息泄露——未经授权的用户可能会获得你使用的nginx版本的信息。你应该通过设置server_tokens off来关闭nginx配置文件中的server_tokens指令。
步骤3 控制资源和限制
为了防止潜在的DoS攻击nginx,你可以为所有客户设置缓冲区大小限制。你可以在nginx配置文件中使用以下指令来完成:
client_body_buffer_size—使用此指令指定客户端请求体缓冲区的大小。默认值是8k或16k,但建议将其设置为低至1k: client_body_buffer_size 1k。
client_header_buffer_size—使用此指令指定客户端请求头的头缓冲区大小。1k的缓冲区大小对于大多数请求来说已经足够了。
client_max_body_size—使用此指令指定客户端请求可接受的最大体大小。一个1k的指令应该足够了,但是如果你通过POST方法接收文件上传,你需要增加它。
large_client_header_buffers—使用此指令指定用于读取大型客户机请求头的缓冲区的最大数量和大小。large_client_header_buffers 2 1k指令将缓冲区的最大数量设置为2个,每个缓冲区的最大大小为1k。这个指令将接受2 kB的数据URI。
步骤4 禁用任何不需要的HTTP方法
我们建议您禁用任何HTTP方法,这些方法不会被使用,也不需要在web服务器上实现。如果在nginx虚拟主机配置文件的location块中添加以下条件,服务器将只允许GET、HEAD和POST方法,并过滤掉DELETE和TRACE等方法。
location / {
limit_except GET HEAD POST { deny all; }
}
另一种方法是将以下条件添加到服务器部分(或服务器块)。它可以认为是更通用的,但是在位置上下文中你应该小心if语句。
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444; }
第5步 为你的nginx网络服务器安装ModSecurity
ModSecurity是一个作为web应用程序防火墙工作的开源模块。它的功能包括过滤、服务器标识屏蔽和空字节攻击预防。该模块还允许您执行实时流量监控。我们建议您按照ModSecurity手册安装mod_security模块,以增强安全性选项。
注意,如果ModSecurity不能满足您的需求,您也可以使用其他免费的WAF解决方案。
步骤6 设置和配置nginx访问和错误日志
nginx访问日志和错误日志是默认启用的,分别位于logs/error.log和logs/access.log中。如果你想改变位置,你可以使用nginx配置文件中的error_log指令。您还可以使用此指令指定将根据其严重级别记录的日志。例如,crit严重性等级会导致nginx记录严重问题以及所有严重程度高于crit的问题。要将严重级别设置为crit,请将error_log指令设置如下:
error_log logs/error.log crit;
你可以在官方的nginx文档中找到一个完整的error_log严重级别列表。
您还可以修改nginx配置文件中的access_log指令,以指定访问日志的非默认位置。最后,您可以使用log_format指令来配置日志消息的格式,就像nginx文档中解释的那样。
步骤7 监控nginx访问和错误日志
如果你持续地监控和管理nginx日志文件,你可以更好地理解向你的web服务器发出的请求,并注意到任何遇到的错误。这将帮助您发现任何的攻击企图,并确定您可以做什么来优化服务器性能。
您可以使用日志管理工具(如logrotate)来旋转和压缩旧日志并释放磁盘空间。另外,ngx_http_stub_status_module模块提供了对基本状态信息的访问。你也可以投资nginx Plus,这是nginx的商业版本,它提供实时的流量、负载和其他性能指标的活动监控。
步骤8 配置Nginx包括安全头
另外,要加强你的nginx网络服务器,你可以添加几个不同的HTTP头。下面是我们推荐的一些选项。
X-Frame-Options
您可以使用X-Frame-Options HTTP响应标头指示是否应允许浏览器在< frame >或< iframe >中呈现页面。这可以防止点击劫持攻击。因此,我们建议您为Nginx服务器启用此选项。
为此,请将以下参数添加到服务器部分的nginx配置文件中:
add_header X-Frame-Options "SAMEORIGIN";
严格的传输安全
HTTP严格传输安全性(HSTS)是网站仅使用安全连接(HTTPS)访问它们的一种方法。如果网站声明了HSTS策略,则浏览器必须拒绝所有HTTP连接并阻止用户接受不安全的SSL证书。要将HSTS标头添加到您的nginx服务器,可以在服务器部分添加以下指令:
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
CSP和X-XSS保护
内容安全策略(CSP)保护您的Web服务器免受某些类型的攻击,包括跨站点脚本攻击(XSS)和数据注入攻击。您可以通过添加以下示例Content-Security-Policy标头来实现CSP (请注意,实际标头应配置为符合您的独特要求):
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
IE和Safari支持HTTP X-XSS-Protection标头,如果您具有强大的内容安全策略,则对于现代浏览器而言,它不是必需的。但是,为防止在较旧的浏览器(尚不支持CSP)中使用XSS,可以在服务器部分添加X-XSS Protection标头:
add_header X-XSS-Protection "1; mode=block";
步骤9 配置SSL和密码套件
Nginx 的默认配置允许您使用不安全的旧版TLS协议(根据官方文档:ssl_protocols TLSv1 TLSv1.1 TLSv1.2)。这可能导致诸如BEAST攻击之类的攻击。因此,我们建议您不要使用旧的TLS协议,并更改配置以仅支持更新的安全TLS版本。
为此,请在nginx配置文件的server部分中添加以下指令:
ssl_protocols TLSv1.2 TLSv1.3;
此外,您应指定密码套件,以确保不支持任何易受攻击的套件。我们还建议您将以下指令添加到服务器部分:
ssl_prefer_server_ciphers on;
该指令将令使用哪种密码的决策成为服务器端而非客户端。
步骤10 定期更新服务器
与任何其他软件一样,我们建议您始终将nginx服务器更新为最新的稳定版本。新更新通常包含对先前版本中标识的漏洞的修复,例如在0.7.63之前的nginx版本和在0.8.17之前的0.8.x中存在的目录遍历漏洞)。更新还经常包括新的安全功能和改进。在nginx.org网站上,您可以在专门的部分中找到安全公告并在主页上找到有关最新更新的新闻。
步骤11 使用Gixy检查您的配置
Gixy是一个开放源代码工具,可让您检查nginx Web服务器中是否存在典型的错误配置。准备好nginx配置后,始终最好使用Gixy对其进行检查。
步骤12 您不必手动进行
如果您不想手动配置nginx,则可以使用DigitalOcean提供的免费在线视觉配置工具。
本作品采用《CC 协议》,转载必须注明作者和本文链接
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。