文章目錄
- 概述
- 中間件安全基線配置手冊
- 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 服務監控

概述
我們這里主要介紹針對Nginx中間件的安全基線配置指南,包括版本選擇、用戶創建、權限設置、緩沖區配置、日志管理、訪問限制、錯誤頁面處理、并發控制、補丁更新等方面。
同時還涵蓋了如何配置正向代理模塊、防止目錄遍歷以及服務監控等內容,旨在指導系統管理員確保中間件服務器的安全性
中間件安全基線配置手冊
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.6 設置 timeout
設置 timeout 配置可防御 DOS 攻擊。編輯nginx.conf
,在http
模塊中添加:
client_body_timeout 10;
client_header_timeout 30;
keepalive_timeout 30 30;
send_timeout 10;
2.7 設置 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.8 日志配置
統一使用規定好的日志格式。編輯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.9 日志切割
切割 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.10 限制訪問 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.11 限制僅允許域名訪問
限制僅允許域名訪問,跳過 IP 掃描。編輯nginx.conf
,在server
模塊中添加:
server {listen 80 default;server_name _;return 403;
}
2.12 錯誤頁面重定向
Nginx 默認錯誤頁面包含服務器版本信息,使用自定義錯誤頁面避免版本信息泄露。新建錯誤頁面,放到靜態目錄中,編輯nginx.conf
,在http
模塊中添加:
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
模塊中添加:
limit_zone one $binary_remote_addr 60m;
在server
模塊的location
中,需要限制的location
中添加如下參數:
limit_conn one 50;
limit_rate 100k;
2.14 安裝官方補丁更新
防止攻擊者利用 Nginx 漏洞進行攻擊,定期更新 Nginx 版本。查看當前 Nginx 版本:
nginx -v
官網下載最新的安全補丁:Nginx 下載。
2.15 配置正向代理模塊
由于項目需要使用到 HTTPS 正向代理,而 Nginx 官方模塊僅支持做 HTTP 正向代理,ngx_http_proxy_connect_module
模塊可以實現隧道 SSL 請求的代理服務器。模塊下載地址:GitHub。編譯 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.16 防止目錄遍歷
修改文件nginx.conf
,在http
模塊下添加或修改為autoindex off
;重新啟動 Nginx 服務。
2.17 服務監控
為了保證 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;
}
推薦: Loki收集Nginx日志并搭建日志聚合平臺