Nginx安全加固参考

注:最近部门领导要求梳理一份常用工具的安全加固参考手册,基于此需求,针对工作中经常遇到的被漏扫发现的问题,进行了梳理,参考了官网内容及网上各位大神的内容,不足之处,还望指正,版本环境为nginx1.18稳定版,若有参数不能正常使用,请参考nginx官网。

安全加固参考

    • Nginx部署规范
      • 常用编译参考
    • Nginx优化及加固参考
      • 版本信息隐藏
      • 开启CPU亲和
      • 日志格式定义
      • 禁止目录列出
      • 禁用不安全的http方法
      • 防DOS攻击
        • 控制超时时间
        • 限制连接数
        • 限制连接速率
      • 防止点击劫持

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;

你可能感兴趣的:(web服务那些事)