nginx安全加固

1. 在Nginx中禁用server_tokens指令

该server_tokens指令告诉nginx的错误页面显示其当前版本。 这是不可取的,因为您不想与世界共享这些信息,以防止在您的Web服务器由特定版本中的已知漏洞造成的攻击。
要禁用server_tokens指令,设定在关闭服务器块内:

server {
listen       192.168.0.88:80;
Server_tokens        off;
server_name  howtoinglovesnginx.com www.nginx.com;
access_log  /var/www/logs/nginx.access.log;
error_log  /var/www/logs/nginx.error.log error;
root   /var/www/nginx.com/public_html;
index  index.html index.htm;
}

2. 在Nginx中禁用不需要的HTTP方法

对于一般的网站和应用程序,你应该只允许GET,POST,和HEAD并禁用所有其他人。
为此,将以下行代码放在服务器块中。 444 HTTP响应指空响应,并经常在Nginx的用来愚弄恶意软件攻击:

if ($request_method !~ ^(GET|HEAD|POST)$) {
return 444;
}

3. 在Nginx中设置缓冲区大小限制

为了防止对您的Nginx Web服务器的缓冲区溢出攻击,坐落在一个单独的文件以下指令(创建的文件名为/etc/nginx/conf.d/buffer.conf为例):

client_body_buffer_size  1k;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;

上面的指令将确保对您的Web服务器的请求不会导致系统中的缓冲区溢出。
然后在配置文件中添加一个include指令:

include /etc/nginx/conf.d/*.conf;

4. 日志设置

查看nginx.conf配置文件中,error_log、access_log前的“#”是否去掉
将error_log前的“#”去掉,记录错误日志 将access_log前的“#”去掉,记录访问日志 设置access_log,修改配置文件如下:

log_format  nsfocus  '$remote_addr - $remote_user [$time_local] '
              ' "$request" $status $body_bytes_sent "$http_referer" '
              ' "$http_user_agent" "$http_x_forwarded_for"'; access_log  logs/access.log  nsfocus;

nsfocus是设置配置文件格式的名称

5. 自定义错误信息

修改src/http/ngx_http_special_response.c,自己定制错误信息

## messages with just a carriage return.
static char ngx_http_error_400_page[] = CRLF;
static char ngx_http_error_404_page[] = CRLF;
static char ngx_http_error_413_page[] = CRLF;
static char ngx_http_error_502_page[] = CRLF;
static char ngx_http_error_504_page[] = CRLF;

常见错误:

400 bad request
404 NOT FOUND
413 Request Entity Too Large
502 Bad Gateway
504 Gateway Time-out

Nginx安全防护

1.高Nginx后端服务指定的Header隐藏状态

隐藏Nginx后端服务X-Powered-By头

隐藏Nginx后端服务指定Header的状态: 
1、打开conf/nginx.conf配置文件; 
2、在http下配置proxy_hide_header项; 
     增加或修改为 proxy_hide_header X-Powered-By; proxy_hide_header Server;

2.针对Nginx SSL协议进行安全加固

Nginx SSL协议的加密策略进行加固

Nginx SSL协议采用TLSv1.21、打开conf/nginx.cconf配置文件; 2、配置

server { 
               ...
              ssl_protocols TLSv1.2;
               ...
                     }

3.检查是否配置Nginx账号锁定策略

1.执行系统命令passwd -S nginx来查看锁定状态
出现Password locked证明锁定成功
如:nginx LK … (Password locked.)或nginx L …
2.默认符合,修改后才有(默认已符合)
3.执行系统命令passwd -l nginx进行锁定

配置Nginx账号登录锁定策略:
Nginx服务建议使用非root用户(如nginx,nobody)启动,并且确保启动用户的状态为锁定状态。
可执行passwd -l <Nginx启动用户> 如passwd -l nginx 来锁定Nginx服务的启动用户。
命令 passwd -S <用户> 如passwd -S nginx可查看用户状态。 
修改配置文件中的nginx启动用户修改为nginx或nobody 如: user nobody;

4.检查Nginx进程启动账号

Nginx进程启动账号状态,降低被攻击概率

修改Nginx进程启动账号: 
1、打开conf/nginx.conf配置文件; 
2、查看配置文件的user配置项,确认是非root启动的;
3、如果是root启动,修改成nobody或者nginx账号; 备注: 
4、修改完配置文件之后需要重新启动Nginx。

5.Nginx的WEB访问日志记录状态

Nginx后端服务指定的Header隐藏状态

开启Nginx的WEB访问日志记录: 
1、打开conf/nginx.conf配置文件; 
2、在http下配置access_log项
   access_log logs/host.access.log main; 
3、 并删除off项

6.隐藏Nginx服务的Banner

Nginx服务的Banner隐藏状态

Nginx后端服务指定的Header隐藏状态隐藏Nginx服务Banner的状态: 
1、打开conf/nginx.conf配置文件; 
2、在server栏目下,配置server_tokens项 server_tokens off;

7.确保NGINX配置文件权限为644

把控配置文件权限以抵御外来攻击

修改Nginx配置文件权限: 
执行chmod 644 <conf_path>来限制Nginx配置文件的权限;(<conf_path>为配置文件的路径,
如默认/安装目录/conf/nginx.conf或者/etc/nginx/nginx.conf,或用户自定义,请 自行查找)

8.nginstatus

Active connections    Nginx正处理的活动链接数个数;重要
accepts               Nginx启动到现在共处理了多少个连接。
handled               Nginx启动到现在共成功创建几次握手。 
requests              Nginx总共处理了几次请求。
Reading               Nginx读取到客户端的 Header 信息数。
Writing               Nginx返回给客户端的 Header 信息数。
Waiting               Nginx已经处理完正在等候下一次请求指令的驻留链接,开启。
Keep-alive的情况下,Waiting这个值等于active-(reading + writing)。
请求丢失数=(握手数-连接数)可以看出,本次状态显示没有丢失请求。、

参考连接 :

nginx安全加固 :https://mp.weixin.qq.com/s/EUxa9ZSBCVTHgq3RATvoQg

Nginx安全防护 :https://www.jianshu.com/p/4e024c1f5591

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章