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作为反向代理时,会配置很多站点,为了不想泄露后端webserver主机信息,可以在http全局下配置隐藏Nginx后端服务X-Powered-By头。

隐藏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;
http {
       .....
       proxy_hide_header X-Powered-By; 
       proxy_hide_header Server;
       ....
}

重新加载最新配置

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

配置此项请确认nginx支持OpenSSL,运行如果返回中包含built with OpenSSL则表示支持OpenSSL。如果没有返回,不需要后续配置了。

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服务的版本

查看版本号

#curl -I 127.0.0.1
/etc/nginx#nginx -V

Nginx服务的Banner隐藏状态

Nginx后端服务指定的Header隐藏状态隐藏Nginx服务Banner的状态: 
1、打开conf/nginx.conf配置文件; 
2、在server栏目下,配置server_tokens项 server_tokens off;
http{
    .....
    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)。
请求丢失数=(握手数-连接数)可以看出,本次状态显示没有丢失请求。、

9.更改源码隐藏软件名称及版本号

在nginx编译安装之前,先更改,之后再编译安装

1.更改版本号

修改nginx-1.6.4/src/core/nginx.h

nginx-1.6.2/src/core# sed -n '13,17p' nginx.h
#修改为需要的版本号
#将nginx修改为其他名称

查看修改效果

nginx-1.6.4#curl -I 127.0.0.1

改nginx-1.6.12/src/http/ngx_http_header_filter_module.c
需要修改的字符串

#grep 'Server:nginx' ngx_http_header_filter_module.c

修改后的字符串

#grep 'Server:Apache' ngx_http_header_filter_module.c

10.更改掉nginx默认用户及用户组(worker进程服务用户优化)

1.查看默认配置如下:

默认情况下,nginx服务启动,使用的用户和组默认都是nobody,

#grep '#user' nginx.conf.default

2.建立nginx用户

#useradd nginx -s /sbin/nologin -M
#id nginx

3.配置文件nginx.conf中修改(也可以编译安装时指定默认)

在配置文件最外层上面

worker_processes 1;
user nginx;

4.让woker进程使用普通用户运行
为master服务降权:使用非root跑nginx master

注意:不能用80特权端口 ,前端nginx反向代理转端口

nginx -c config...
/home/inca/
bin,site,conf,logs

11.配置nginx worker进程个数

nginx由master和worker进程组成,master进程相当于管理员,worker进程为用户提供服务

一般设置为cpu核数或则核数x2,用top按1查看

修改nginx.conf配置文件第一行

worker_processes 4;

12.根据cpu核数进行nginx进程优化

把几个进程分配在一个cup上,cup亲和力

1.不同cpu设置如下

四核cpu配置:

worker_processes 4;
worker_cpu_affinity 001 0010 0100 1000;

八核cpu服务器参数配置:

worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 000010000 00010000 00100000 01000000 10000000;
worker_cpu_affinitv 0101 0101;

2.官方文档说明

worker_processes 4;
worker_cpu_affinity 001 0010 0100 1000;
binds each worker process to a separate CPU,while
worker_processes 2;       4核2进程
worker_cpu_affinitv 0101 0101;

13.nginx事件处理模型优化

nginx的连接处理机制在不同的操作系统上采用不用的IO模型,在linux下,nginx使用epoll的IO多路复用模型,在freebsd使用kqueue的IO多路复用模型,在solaris使用/dev/pool方式的IO多路复用模型,在windows使用的icop等等。

根据系统类型不同选择不同的事务处理模型,选择有“use [ kqueue | rtsig |epool |dev/pool |select |pllo ];”我们使用的是Centos6.5的linux,因此将nginx的事件处理模型调整为epool模型。

具体参数如下在优化4下边挨着:

events {
use epoll;
worker_connections 1024;
}

14.调整nginx worker单个进程允许的客户端最大连接数

这个值根据服务器性能和程序的内存来指定(一个进程启动使用的内存根据程序确定)

events {
use epoll;
worker_connections 20480;
}

这个参数是单个进程的最大链接数,实际最大链接数是worker技能书乘以这个数。

Max_client=worker_processes*worker_connections

15.配置nginx worker进程最大打开文件数

worker_rlimit_nofile 65535;

相当于系统ulimit -HSn,应该是总的。

理念:配置参数不是越大越好,最好设为服务器承受的极限点。

16.开启高效的文件传输模式

在http字段设置

http {
include      mime.types;媒体类型
defaul_type application/octet-stream
sednfile      on;
tcp_nopush on ;   只有sendfile开启模式下有限
........  .   
}

tcp_nopush参数可以允许把http response header和文件的开始放在一个文件里发布,积极的作用是减少网络报文段的数量。

17.设置连接超时时间

保护服务器资源,硬件CPU mem,连接数。

建立连接也是要消耗资源的,我们一般断掉那些连上的链接,但是不做事的

php网站建议短连接,PHP程序建立连接消耗的资源和时间要少。

JAVA网站建议长连接,JAVA程序建立连接消耗的资源和时间要多。

在http字段设置

http {
. . . . . . 
keepalive_timeout 60;
####设置客户端连接保持会话的超时时间,超过这个时间,服务器会关闭该连接。
tcp_nodelay on;
####打开tcp_nodelay,在包含了keepalive参数才有效
client_header_timeout 15;
####设置客户端请求读取超时时间,如果超过这个时间,客户端还没有发送任何数据,Nginx将返回"Request time out (408)" 错误
client_body_timeout 15
####设置客户端请求主题读取超时时间,如果超过这个时间,客户端还发送任何数据,Nginx将返回"Request time out (408)" 错误
send_timeout 15;
####指定响应客户端的超时时间,这个超过仅限于两个连接活动之间的时间,客户端没有任何活动,Nginx将会关闭连接
. . . . . . 
}

18.上传文件大小限制(动态应用)

http {
. . . . . . 
client_max_body_size 10m;
.... .  . 
}

19.


20.


21.


22.


参考连接 :

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

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

本文链接:http://www.yunweipai.com/11467.html

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
众所周知,人工智能是当前最热门的话题之一, 计算机技术与互联网技术的快速发展更是将对人工智能的研究推向一个新的高潮。 人工智能是研究模拟和扩展人类智能的理论与方法及其应用的一门新兴技术科学。 作为人工智能核心研究领域之一的机器学习, 其研究动机是为了使计算机系统具有人的学习能力以实现人工智能。 那么, 什么是机器学习呢? 机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。 机器学习的用途 机器学习是一种通用的数据处理技术,其包含了大量的学习算法。不同的学习算法在不同的行业及应用中能够表现出不同的性能和优势。目前,机器学习已成功地应用于下列领域: 互联网领域----语音识别、搜索引擎、语言翻译、垃圾邮件过滤、自然语言处理等 生物领域----基因序列分析、DNA 序列预测、蛋白质结构预测等 自动化领域----人脸识别、无人驾驶技术、图像处理、信号处理等 金融领域----证券市场分析、信用卡欺诈检测等 医学领域----疾病鉴别/诊断、流行病爆发预测等 刑侦领域----潜在犯罪识别与预测、模拟人工智能侦探等 新闻领域----新闻推荐系统等 游戏领域----游戏战略规划等 从上述所列举的应用可知,机器学习正在成为各行各业都会经常使用到的分析工具,尤其是在各领域数据量爆炸的今天,各行业都希望通过数据处理与分析手段,得到数据中有价值的信息,以便明确客户的需求和指引企业的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寰宇001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值