Nginx安全加固參考

注:最近部門領導要求梳理一份常用工具的安全加固參考手冊,基於此需求,針對工作中經常遇到的被漏掃發現的問題,進行了梳理,參考了官網內容及網上各位大神的內容,不足之處,還望指正,版本環境爲nginx1.18穩定版,若有參數不能正常使用,請參考nginx官網。

Nginx部署規範

常用編譯參考

 --with-pcre=/asop/soft/pcre-8.43 
 --with-zlib=/asop/soft/zlib-1.2.11 
 --with-openssl=/asop/soft/openssl-1.0.1j
 --with-http_geoip_module
 可選:
 #啓用https支持支持
 --with-http_ssl_module  
 #啓用http狀態信息查看
 --with-http_stub_status_module

Nginx優化及加固參考

版本信息隱藏

	1、隱藏版本信息
	   配置參考:
		vi conf/nginx.conf
		#在http段中加入如下信息
		server_tokens off;

	2、隱藏http響應頭中的server信息
	   配置參考:
	   #隱藏server信息需要修改源碼重新編譯
		1、src/core/nginx.h
		#define nginx_version 000000
		#define NGINX_VERSION "0.00"
		#define NGINX_VER "GW/" NGINX_VERSION
		2、src/http/ngx_http_header_filter_module.c
		static char ngx_http_server_string[] = "Server: GW" CRLF;

開啓CPU親和

#開啓CPU親和是爲了將nginx的進程綁定到對應的CPU核心上,使各核心的使用率基本均衡,避免多個核心同時運行着多個進程。

	#開啓親和需要先確認CPU數量
	配置參考:
		#查詢當前服務器的物理CPU數量
		cat /proc/cpuinfo | grep "physical id"|sort|uniq|wc -l  
		#查看每CPU的邏輯核數
		cat /proc/cpuinfo | grep "cpu cores"|uniq
		#worker_processes 定義nginx啓動的進程數,對應等於CPU的總的核數(物理數量* 單CPU核數)
		#worker_cpu_affinity 綁定CPU 此處爲八核的綁法,幾核就對應幾組(例如:4核 0001 0010 0100 1000),也可以設置爲auto,自動分配
		vi conf/nginx.conf
		worker_processes 8;
		worker_cpu_affinity  00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000
**增加nginx進程可打開的最大文件數**
worker_rlimit_nofile 65535;

日誌格式定義

	配置參考:
	1、定義日誌格式
	vi conf/nginx.conf  取消如下內容註釋,使所有server主機都可以使用
	log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
	   '$status $body_bytes_sent "$http_referer" '
	   '"$http_user_agent" "$http_x_forwarded_for"';
	2、定義日誌路徑
	vi conf/nginx.conf 在每個server段內定義或者修改
	access_log logs/host.access.log main

禁止目錄列出

	配置參考:
	vi conf/nginx.conf  在http段中加入如下信息:
	autoindex off;

禁用不安全的http方法

配置參考:
location塊中加入如下信息
	if ($request_method !~ ^(GET|HEAD|POST)$ ) {
		return 501;
	}

防DOS攻擊

控制超時時間

#設置客戶端請求主體讀取超時時間
client_body_timeout 10;  
#設置客戶端請求頭讀取超時時間
client_header_timeout 10;
#設置長連接的超時時間
keepalive_timeout 5; 
#指定響應客戶端的超時時間
send_timeout 10;  

限制連接數

#涉及http_limit_conn_module
#限制客戶端與服務器的連接數
配置參考:
#定義一個共享內存區conip,大小爲10M,配置於http段中可以複用
	limit_conn_zone $binary_remote_addr zone=conip:10m; 

#限制每個客戶端與服務器的連接數,需要在server主機中加入如下內容
#限制每個客戶端IP可以與服務器建立的連接數,perip 爲上面再http段中定義的zone 名字,針對的爲單個ip
	limit_conn  conip 10;

限制連接速率

#涉及http_limit_req_module,默認即構建
#限制單ip請求的處理速度
#定義一個共享內存區one,大小爲10M,每個客戶端每秒接收的請求數不超過5個,http段中加入如下內容:
配置參考:
	limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
#以下配置可以放置於server段中,也可放置於location段中,進行目錄級別的限制,
#限制突發請求不超過8個,每秒的請求數會從上方的http段中的配置中繼承
配置參考:
	limit_req zone=one burst=8;

#以上限制爲針對的所有ip地址,若需要限制單獨的ip地址,則需要編譯–with-http_geoip_module 模塊,並在http段中增加如下內容

配置參考:
	geo $wip {
		default 0;
		127.0.0.1  1;
		172.16.0.0 1;
	}
	map $wip $limit{
		0 $binary_remote_addr
		1 "";
	}

防止點擊劫持

#增加如下配置至server段,可以防止iframe嵌套導致的點擊劫持

配置參考:
add_header X-Frame-Options SAMEORIGIN;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章