Nginx中间件安全基线配置与操作指南

释放双眼,带上耳机,听听看~!
🤖 由 ChatGPT 生成的文章摘要

中间件安全基线配置手册

1概述

1.1.目的

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

1.2.适用范围

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

2 Nginx基线配置

2.1 版本说明

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

  • Nginx 1.22.1
  • Nginx 1.24.0

2.2 安装目录

/opt/nginx-{version}

2.3 用户创建

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

nginx.conf:
user nginx;

2.4 二进制文件权限

/opt/nginx-{version}/sbin/nginx二进制文件权限为755

2.5 关闭服务器标记

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

server_tokens off;

2.5 设置timeout

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

client_body_timeout 10;
client_header_timeout 30;
keepalive_timeout 30  30;
send_timeout 10;

2.6 设置NGINX缓冲区

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

client_body_buffer_size  1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;

2.7 日志配置

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

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.8 日志切割

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

#!/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.9 限制访问IP

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

deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;

2.10 限制仅允许域名访问

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

server {
listen 80 default;
server_name _;
return 403;
}

2.11 错误页面重定向

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

fastcgi_intercept_errors on;
errorpage 401 /401.html;
errorpage 402 /402.html;
errorpage 403 /403.html;
errorpage 404 /404.html;
errorpage 405 /405.html;
errorpage 500 /500.html

2.12 限制并发和速度

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

limit_zone one $binary_remote_addr 60m;

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

limit_conn one 50; 
limit_rate 100k;

2.13 安装官方补丁更新

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

nginx -v

官网下载最新的安全补丁https://nginx.org/en/download.html

2.14 配置正向代理模块

由于项目需要使用到https正向代理,而nginx官方模块仅支持做http正向代理,ngx_http_proxy_connect_module模块可以实现隧道SSL请求的代理服务器
模块下载地址:http://www.github.com/chobits/ngx_http_proxy_connect_module
编译nginx中添加该模块即可

 --add-module=/root/ngx_http_proxy_connect_module

创建配置文件即可使用

    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.15 防止目录遍历

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

2.16 服务监控

为了保证nginx服务正常,采用zabbix 监控nginx_status模块监控nginx服务

nginx配置nginx_status ip白名单

        location /nginx_status {
           stub_status;
           allow 192.168.0.0/16;
           allow 127.0.0.1;
           deny all;
        }

给TA打赏
共{{data.count}}人
人已打赏
GrafanaNGINX

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

2023-7-13 16:33:07

NGINX

Nginx mirror流量镜像-流量复制模块

2023-10-9 17:47:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索