nginx 安全:如何强化服务器配置
点击蓝字 关注鑫诺
当前,nginx 是最流行的 Web 服务器,最近击败了 Apache。它轻量级,快速,强大,并支持所有主要操作系统。它是 Netflix,WordPress.com 和其他高流量站点的首选 Web 服务器。Nginx 服务器可以轻松地处理 10,000 个不活动的 HTTP 连接,而其内存只有 2.5 MB。我们将提供关于 nginx 服务器安全的技巧,向你展示如何保护你的 ngin
为此,请在安装过程中使用 configure 选项。在下面的示例中,我们禁用了自动索引模块,该模块会生成自动目录列表,然后重新编译 nginx。
# ./configure --without-http_autoindex_module
# make
# make install
步骤 2. 禁用 nginx server_tokens
默认情况下,nginx 中的 server_tokens 指令显示 nginx 版本号。它在所有自动生成的错误页面中直接可见,但也出现在 Server 标头中的所有 HTTP 响应中。
这可能会导致信息泄露–未经授权的用户可能会了解您使用的 nginx 版本。您应该通过设置禁用 Nginx 配置文件中的 server_tokens 指令 server_tokens off。
步骤 3. 控制资源和限制
为了防止对 nginx 进行潜在的 DoS 攻击,您可以为所有客户端设置缓冲区大小限制。您可以使用以下指令在 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。
注意:一些消息来源建议,如果在 nginx 中发现了此类漏洞,则设置此类限制可能会防止潜在的缓冲区溢出攻击。
步骤 4. 禁用所有不需要的 HTTP 方法
我们建议您禁用将不被使用并且不需要在 Web 服务器上实现的任何 HTTP 方法。如果在 nginx 虚拟主机配置文件的位置块中添加以下条件,则服务器将仅允许 GET,HEAD 和 POST 方法,并将过滤掉 DELETE 和 TRACE 等方法。
location / {
limit_except GET HEAD POST { deny all; }
}
另一种方法是在服务器部分(或服务器块)中添加以下条件。它可以被认为是更通用的,但是您应该小心 if 位置上下文中的语句。
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444; }
步骤 5. 为您的 Nginx Web 服务器安装 ModSecurity
ModSecurity 是充当 Web 应用程序防火墙的开源模块。它的功能包括过滤,服务器身份屏蔽和空字节攻击防护。该模块还允许您执行实时流量监控。我们建议您遵循 ModSecurity 手册来安装 mod_security 模块,以增强安全性选项。
请注意,如果 ModSecurity 无法满足您的需求,您还可以使用其他免费的 WAF 解决方案 s)。
步骤 6. 设置和配置 nginx 访问和错误日志
Nginx 访问和错误日志默认情况下处于启用状态,分别位于 logs / error.log 和 logs /access.log 中。如果要更改位置,可以在 nginx 配置文件中使用 error_log 指令。您还可以使用此伪指令来指定将根据其严重性级别记录的日志。例如,一个暴击的严重性级别会导致 nginx 的登录关键问题和具有比更高的严重性级别的所有问题的暴击。要将严重级别设置为 crit,请如下设置 error_log 指令:
error_log logs/error.log crit;
您可以在 Nginx * 官方文档中找到 error_log * 严重性级别的完整列表。
您还可以修改 nginx 配置文件中的 access_log 指令,以为访问日志指定非默认位置。最后,您可以使用 log_format 指令来配置已记录消息的格式。
步骤 7. 监视 nginx 访问和错误日志
如果您持续监视和管理 Nginx 日志文件,则可以更好地了解对 Web 服务器的请求,并注意到任何遇到的错误。这将帮助您发现任何攻击尝试,并确定可以采取哪些措施来优化服务器性能。
您可以使用日志管理工具(例如 logrotate)来旋转和压缩旧日志并释放磁盘空间。同样,ngx_http_stub_status_module 模块提供对基本状态信息的访问。您还可以投资 Nginx 的商业版本 nginx Plus,它提供对流量,负载和其他性能指标的实时活动监视。
步骤 8. 将 Nginx 配置为包括安全标题
为了进一步加强 Nginx Web 服务器的性能,您可以添加几个不同的 HTTP 标头。这是我们推荐的一些选项。
X 框架选项
您可以使用 X-Frame-Options HTTP 响应标头指示是否应允许浏览器在 * 或中 * 呈现页面。这可以防止点击劫持攻击。因此,我们建议您为 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;
此外,您应指定密码套件,以确保不支持任何易受攻击的套件。要选择最佳的密码套件,请阅读有关 TLS 密码强化的文章,并在服务器部分添加 ssl_ciphers 指令以选择密码(如关于密码强化的文章中所建议)。我们还建议您将以下指令添加到服务器部分:
该指令将使使用哪种密码的决定在服务器端而不是客户端。
步骤10.定期更新服务器
与任何其他软件一样,我们建议您始终将nginx服务器更新为最新的稳定版本。新更新通常包含对先前版本中标识的漏洞的修复,例如在0.7.63之前的nginx版本和在0.8.17之前的0.8.x中存在的目录遍历漏洞(CVE-2009-3898)。更新还经常包括新的安全功能和改进。在nginx.org网站上,您可以[在专门的部分中找到安全公告,并在主页上找到有关最新更新的新闻。
步骤11.使用Gixy检查您的配置
Gixy是一个开源工具,可让您检查nginx Web服务器中是否存在典型的错误配置。准备好nginx配置后,最好使用Gixy对其进行检查。
步骤12.您不必手动进行
如果您不想手动配置nginx,则可以使用DigitalOcean提供的免费在线视觉配置工具。
————————————————
“浙江鑫诺检测”
专业的第三方检测服务提供商