首页 > 系统相关 >nginx安全性:强化服务器配置

nginx安全性:强化服务器配置

时间:2023-07-28 10:05:39浏览次数:40  
标签:标头 配置文件 Nginx nginx 指令 服务器 安全性

nginx是最流行的 Web服务器。它轻巧,快速,强大,并支持所有主要操作系统。它是Netflix,WordPress.com和其他高流量站点的首选Web服务器。Nginx服务器可以轻松地处理10,000个不活动的HTTP连接,而其内存只有2.5 MB。在本文中,我们将提供有关nginx服务器安全性的提示,向您展示如何保护nginx安装。

安装nginx之后,您应该对nginx.conf文件中的配置设置有了很好的了解。这是nginx的主要配置文件,因此大多数安全检查将使用此文件来完成。默认情况下,你可以找到nginx.conf [nginx的安装目录]/conf目录在Windows系统上,并在/etc/nginx的在/usr/local/etc中/nginx的 Linux系统。您可能还需要对虚拟主机配置文件进行一些更改,这些文件通常包含在sites-available子目录中。

步骤1:禁用所有不需要的Nginx模块

安装nginx时,它会自动包含许多模块。当前,您无法在运行时选择模块。要禁用某些模块,您需要重新编译nginx。我们建议您禁用所有不需要的模块,因为这将通过限制允许的操作来最大程度地降低潜在攻击的风险。 

为此,请在安装过程中使用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模块,以增强安全性选项。

步骤6:设置和配置nginx访问和错误日志

    访问和错误日志默认情况下处于启用状态,分别位于logs/error.loglogs/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指令来配置已记录消息的格式。

步骤7:监视nginx访问和错误日志

    如果您持续监视和管理Nginx日志文件,则可以更好地了解对Web服务器的请求,还可以注意到任何遇到的错误。这将帮助您发现任何攻击尝试,并确定可以采取哪些措施来优化服务器性能。

 您可以使用日志管理工具(例如logrotate)来轮询和压缩旧日志并释放磁盘空间。另外,ngx_http_stub_status_module模块提供对基本状态信息的访问。

步骤8:将Nginx配置为包括安全标头

    为了进一步加强Nginx Web服务器的性能,您可以添加几个不同的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_ciphers指令以选择密码。我们还建议您将以下指令添加到服务器部分:

ssl_prefer_server_ciphers on;

该指令将使使用哪种密码的决策成为服务器端而非客户端。

步骤10:定期更新

    与任何其他软件一样,我们建议您始终将nginx服务器更新为最新的稳定版本。更新还经常包括新的安全功能和改进。

步骤11:使用Gixy检查您的配置

    Gixy是一个开放源代码工具,可让您检查nginx Web服务器中是否存在典型的错误配置。准备好nginx配置后,始终最好使用Gixy对其进行检查。

标签:标头,配置文件,Nginx,nginx,指令,服务器,安全性
From: https://blog.51cto.com/u_64214/6878375

相关文章

  • liunx服务器22端口开启
    1.Linux22端口Linux中22端口是ssh应用端口用以进行远程访问,正常情况下Linux服务器要打开22端口。如下命令检查服务器是否启用22端口:netstat-tln|grep22如果结果出现xxx:22等结果则说明,22端口已开启,否则需要手动开启。2.开启22端口首先,检查是否安装SS......
  • nginx跨域配置
    add_headerAccess-Control-Allow-Credentialstrue;add_headerAccess-Control-Allow-Headers$http_access_control_request_headers;add_headerAccess-Control-Allow-Methods'POST,GET,OPTIONS,DELETE,PUT,HEAD,PATCH';add_headerAccess-Control-All......
  • 工业自动化数据传输设备提高生产效率和安全性
    嵌入式实时操作系统(RTOS)是一种专门设计用于嵌入式系统的操作系统。它具有实时性能和低延迟的特点,能够满足对时间响应性要求较高的应用。本文介绍了一种具备ModbusSlave和ModbusMaster功能的嵌入式实时操作系统设备,以及其扩展的数据采集和报警功能。该设备支持ModbusSlave功能,即......
  • Linux安装配置nginx, 并且开机自启
    1.安装使用菜鸟教程的安装步骤这里的版本可以更换为自己想安装的即可注意:菜鸟教程的安装之后,nginx的安装目录是/usr/local/webserver/nginx,下面的开机自启也是按照这个目录2.开机自启2.1配置/etc/rc.local文件找到/etc/rc.local文件,在最后添加nginx安装目录/usr......
  • 最简单的 Git 服务器
    程序员的代码仓库,总是需要托管一份在服务器,这样才保险,也方便使用。今天就来谈谈Git服务器。一、代码托管服务一般情况下,都不建议自己搭建Git服务器,而要使用现成的服务,也就是代码托管服务。它们都是免费的。GitHubGitlabBitbucketCodebergsourcehutGitee其中,除......
  • nginx反向代理
    前端发送的请求,是如何请求到后端服务的?路径并不匹配,那是怎样传送请求的呢nginx反向代理将前端发送的动态请求由nginx转发到后端服务器  nginx反向代理的好处:提高访问速度:在访问nginx时会作缓存,如果下一次访问的是相同的接口地址,则无需请求真正的后端服务器,直接在n......
  • Debian 11 安装Nginx最新stable版本
    其实官方文档已经很清楚了,我写这个文档只是为了记录下安装过程#Installtheprerequisites:aptinstallcurlgnupg2ca-certificateslsb-releasedebian-archive-keyring-y#Importanofficialnginxsigningkeysoaptcouldverifythepackagesauthenticity.Fetch......
  • 3389远程桌面连接时出现由于没有远程桌面授权服务器可以提供许可证
    原文:https://baijiahao.baidu.com/s?id=1738037840846148087&wfr=spider&for=pc 远程桌面连接出现由于没有远程桌面授权服务器可以提供许可证,远程会话被中断,请跟服务器管理员联系,怎么办呢?  首先确认你的操作系统  比如小编的是windowsserver2018年 ......
  • nginx支持.htaccess文件实现伪静态
    server{listen80;server_nametsov.netwww.tsov.net;root/www/web/www.tsov.net;include/www/web/www.tsov.net/.htaccess;//增加这句,注意路径。  很多网站需要采用伪静态来访问动态网页。所以像phpcms这样的系统,都提供了一个.htaccess文件,供写伪......
  • 22质量属性安全性
    安全性:系统向合法用户提供服务的同时可以拒绝非授权用户使用的企图或拒绝服务的能力。安全性分,机密性(防泄密)、完整性(防止被篡改)、不可否认性(防止抵赖)、可控性(信息的传播具有控制能力)如:可抵御SQL注入攻击对计算机操作有完整记录授权必须保证99.9%可用 提高安全性的策略:抵抗......