前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx - 安全基线配置与操作指南

Nginx - 安全基线配置与操作指南

作者头像
小小工匠
发布2024-05-26 13:48:47
1270
发布2024-05-26 13:48:47
举报
文章被收录于专栏:小工匠聊架构小工匠聊架构

概述

我们这里主要介绍针对Nginx中间件的安全基线配置指南,包括版本选择、用户创建、权限设置、缓冲区配置、日志管理、访问限制、错误页面处理、并发控制、补丁更新等方面。

同时还涵盖了如何配置正向代理模块、防止目录遍历以及服务监控等内容,旨在指导系统管理员确保中间件服务器的安全性


中间件安全基线配置手册

1. 概述

1.1 目的

本文档规定了中间件服务器应当遵循的安全性设置标准,旨在指导系统管理人员或安全检查人员进行中间件的安全合规性检查和配置。

1.2 适用范围

本配置标准的使用者包括:服务器系统管理员、应用管理员。 本配置标准适用的范围包括:中间件服务器。

2. Nginx基线配置

2.1 版本说明

使用Nginx官方稳定版本,当前提供下列版本:

  • Nginx 1.22.1
  • Nginx 1.24.0
2.2 安装目录
代码语言:javascript
复制
/opt/nginx-{version}
2.3 用户创建

操作系统中新建nginx用户,用以启动Nginx Worker。

nginx.conf中配置:

代码语言:javascript
复制
user nginx;
2.4 二进制文件权限
代码语言:javascript
复制
/opt/nginx-{version}/sbin/nginx 二进制文件权限为 755
2.5 关闭服务器标记

关闭服务器标记,避免显示服务器版本信息。编辑nginx.conf,在http模块中添加:

代码语言:javascript
复制
server_tokens off;
2.6 设置 timeout

设置 timeout 配置可防御 DOS 攻击。编辑nginx.conf,在http模块中添加:

代码语言:javascript
复制
client_body_timeout 10;
client_header_timeout 30;
keepalive_timeout 30 30;
send_timeout 10;
2.7 设置 NGINX 缓冲区

防止缓冲区溢出攻击。编辑nginx.conf,在server模块中添加:

代码语言:javascript
复制
client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;
2.8 日志配置

统一使用规定好的日志格式。编辑nginx.conf,在http模块中添加:

代码语言:javascript
复制
log_format main '$remote_addr - $remote_user [$time_local] "$request" "$http_host" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for" "$request_time" "$upstream_response_time" "$request_body"';
2.9 日志切割

切割 Nginx 日志,避免日志文件过大。新建日志切割脚本如下:

代码语言:javascript
复制
#!/bin/bash
# 设置日志文件存放目录
logspath="/usr/local/nginx/logs/"
# 设置pid文件
pidpath="/usr/local/nginx/nginx.pid"
# 重命名日志文件
mv ${logspath}access.log ${logspath}access$(date -d "yesterday" +"%Y%m%d").log
# 向nginx主进程发信号重新打开日志
kill -USR1 `cat ${pidpath}`

配置定时任务每日凌晨执行脚本。

2.10 限制访问 IP

限制访问 IP,仅允许指定 IP 访问指定资源。编辑nginx.conf,在server模块中添加:

代码语言:javascript
复制
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
2.11 限制仅允许域名访问

限制仅允许域名访问,跳过 IP 扫描。编辑nginx.conf,在server模块中添加:

代码语言:javascript
复制
server {
    listen 80 default;
    server_name _;
    return 403;
}
2.12 错误页面重定向

Nginx 默认错误页面包含服务器版本信息,使用自定义错误页面避免版本信息泄露。新建错误页面,放到静态目录中,编辑nginx.conf,在http模块中添加:

代码语言:javascript
复制
fastcgi_intercept_errors on;
error_page 401 /401.html;
error_page 402 /402.html;
error_page 403 /403.html;
error_page 404 /404.html;
error_page 405 /405.html;
error_page 500 /500.html;
2.13 限制并发和速度

限制用户连接数及速度来预防 DOS 攻击。编辑nginx.conf,在http模块中添加:

代码语言:javascript
复制
limit_zone one $binary_remote_addr 60m;

server模块的location中,需要限制的location中添加如下参数:

代码语言:javascript
复制
limit_conn one 50;
limit_rate 100k;
2.14 安装官方补丁更新

防止攻击者利用 Nginx 漏洞进行攻击,定期更新 Nginx 版本。查看当前 Nginx 版本:

代码语言:javascript
复制
nginx -v

官网下载最新的安全补丁:Nginx 下载

2.15 配置正向代理模块

由于项目需要使用到 HTTPS 正向代理,而 Nginx 官方模块仅支持做 HTTP 正向代理,ngx_http_proxy_connect_module模块可以实现隧道 SSL 请求的代理服务器。模块下载地址:GitHub。编译 Nginx 中添加该模块即可:

代码语言:javascript
复制
--add-module=/root/ngx_http_proxy_connect_module

创建配置文件即可使用:

代码语言:javascript
复制
server {
    resolver 114.114.114.114;
    resolver_timeout 30s;
    listen 80;
    proxy_connect;                          # 启用 CONNECT HTTP 方法
    proxy_connect_allow 443 80;             # 指定代理 CONNECT 方法可以连接的端口号或范围的列表
    proxy_connect_connect_timeout 20s;      # 定义客户端与代理服务器建立连接的超时时间
    proxy_connect_read_timeout 20s;         # 定义客户端从代理服务器读取响应的超时时间
    proxy_connect_send_timeout 20s;         # 设置客户端将请求传输到代理服务器的超时时间
    location / {
        proxy_pass $scheme://$http_host$request_uri;
    }
}
2.16 防止目录遍历

修改文件nginx.conf,在http模块下添加或修改为autoindex off;重新启动 Nginx 服务。

2.17 服务监控

为了保证 Nginx 服务正常,采用 Zabbix 监控nginx_status模块监控 Nginx 服务。Nginx 配置nginx_status IP 白名单:

代码语言:javascript
复制
location /nginx_status {
    stub_status;
    allow 192.168.0.0/16;
    allow 127.0.0.1;
    deny all;
}

推荐: Loki收集Nginx日志并搭建日志聚合平台

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 中间件安全基线配置手册
    • 1. 概述
      • 1.1 目的
      • 1.2 适用范围
    • 2. Nginx基线配置
      • 2.1 版本说明
      • 2.2 安装目录
      • 2.3 用户创建
      • 2.4 二进制文件权限
      • 2.5 关闭服务器标记
      • 2.6 设置 timeout
      • 2.7 设置 NGINX 缓冲区
      • 2.8 日志配置
      • 2.9 日志切割
      • 2.10 限制访问 IP
      • 2.11 限制仅允许域名访问
      • 2.12 错误页面重定向
      • 2.13 限制并发和速度
      • 2.14 安装官方补丁更新
      • 2.15 配置正向代理模块
      • 2.16 防止目录遍历
      • 2.17 服务监控
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档