Nginx负载均衡安全配置说明2 nginx负载均衡配置文件
上一节,我们对Nginx安全配置的几个知识点做了一个说明,例如限制IP访问、文件目录禁止访问限制、需要防止DOS攻击、请求方法的限制和限制文件上传的大小这个进行了一个分析说明,详细的文章请关注我的头条号:一点热,在里面看回之前的文章,
快速入口
其实,配置Nginx的安全就是对我们的Nginx已有的配置打开与关闭,这个在电子设计上的端口有点像类似,比如我们平时见到的LED灯,如果LED灯是有P1端口控制的话,我们可以在主控芯片要的P1端口输出高电平,那么我们可以输入P1=0xFF,这样灯就会亮,事实上,我们Nginx的配置,也是有那样简单的配置,只要我们对整个Nignx的工作原理要理解。
那么,我继续上一节说的问题,继续把NGINX的安全规则分析一下。
6、防止文件盗链的限制。
一般来说,我们在负载均衡的项目中,我们会使用我们的静态文件放到nginx中,特别是我们的图片,那么这个时候,有经验的人会知道,很多人会把人家网上的图片直接复制到他们的博客或者网上上使用,而这样对我们的网站有什么影响?答案很明显,就是你的网站需要增加大量的访问连接量,增加带宽成本,不过现在很多人也会把自己静态文件放到云服务器,然后加上CDN来回调,而不放在自己的NGINX服务器上,不过虽然是放在云服务器上,但是他们同样也需要做防盗链处理的,例如,阿里云OSS,它可以对你的图片资源限制防盗链。
对于防盗链,我们可以有两种方法,一张是对全局图片设置防盗链,另外一种就是,都某一个目录进行防盗链。
对全局图片防盗链
一般的做法,就是首先检测到文件的后缀,比如是yeehot.com/ming.jpeg,那么,我们检测是不是yeehot.com这个网站,如果有效,我们保持默认处理,如果无效那么我们重新转向到一张无效的图片403.jpg.
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
valid_referers none blocked *.yeehot.com;
if ($invalid_referer)
{
#注意这里网站地址和上面的地址是不一样的,因为上面已经锁定了yeehot.com的域名会防盗链,那其他如果需要返回这个将看不到,就是无效
rewrite ^/ http://www.yeehot.cn/403.jpg;
#return 403;
}
}
对图片目录进行防盗链
首先我们会检测我们图片的目录,然后检测域名,如果是就不做处理,否则,就重定向到无效的图片,
location /images/
{
valid_referers none blocked server_names *.yeehot.com;
if ($invalid_referer)
rewrite ^/ http://www.yeehot.cn/403.jpg;{
#return 403;
}
}
当然,我们还可以使用一些其他的第三方模块开启防盗链,但是我这里主要以Nginx为例子。
7、配置SSL证书,提高安全性
关于ssl,它是一种协议,就是在网络传输数据一种通信协议。它的全称是Secure Sockets Layer ,就是安全套接层的意思,它是专门为网络通信提供安全及数据完整性的一种安全协议SSL,大家可以看回上一节说到的单双向的解释就可以知道。它和TLS一起在传输层对网络连接进行加密。它的功能主要就是:认证用户和服务器,保证我们的数据能够准确的发送到客户端和服务器,加密数据保证了在传输的过程中,不被网络监听者篡改。保证了数据传输的完整性。
对于SSL证书,我之前的一文章《springmvc项目关于安全的一些配置与实现方式》
,专门介绍到https,ssl以及签名的制作,这里,我就不做解释了。我这里就继续以Nginx的配置SSL为例
对于请求证书CSR怎么生成和私钥怎么生成,建议看会我之前的文章,主要用openssl来生成,
这里我大概给出两个指令供大家参考
1、 openssl genrsa -des3 -out server.key 1024
2、 openssl req -new -key server.key -out server.csr
3、 openssl x509 -req -days 3650 -in server.csr -out server.pem -signkey server.key
对于我们的ssl,我们一般是监听443端口,所以我们配置443端口的SSL证书
server {
server_name www.yeehot.com;
listen 443;
ssl on;
ssl_certificate /usr/mnt/yeehotserver.crt;
ssl_certificate_key /mnt/yeehotserver.key;
}
这里还需要注意的是,如果我们的Nginx没有开启ssl模块,那么我们需要编译模块nginx的时候加入–with-http_ssl_module。
8、尽量不要开启过多的模块。
有些模块,我们是不需要使用的,但是我们如果我们开启了一下模块,那么大的增加了Nginx的安全风险,所以我们需要将一些模块关闭
我们如果要看nginx安装了哪些模块,我们可以输入如下指令
nginx/sbin/nginx -V
对于我们之前直接apt-get install nginx或者yum install nginx这样安装的话,可能默认会加入了很多的模块,所以我们要通过./configure,去除一些不必要的模块。
添加模块的指令是
--with-http_ssl_module
删除模块的指令是
--without-http_uwsgi_module
9、屏蔽个别爬虫
以前,我的一个网站出现过一种情况,刚刚建好3个多月,就出现超过10000个并发,但是我们的用户还没有达到这个数量,网站访问很慢,体验很不好,于是我检查一下,发现有一个搜索引擎来不断访问我的网站,但是我也不知道这个是什么爬虫来。为了禁止它访问我们的网站,我们可以添加User Agent过滤规则,比如我们对搜搜爬虫屏蔽处理,那么可以检测user_agent是否含有Sosospider,如果有搜搜爬虫,那么返回403,代码如下:
if ($http_user_agent ~* Sosospider) {
return 403;
}
当然,我们还还会遇到一些位置user_agent的攻击,那么实际情况,这个我们需要对这些伪装的日志加以分析,结合IP地址加以分析。
10、sql注入的防护
我们的nginx的负载均衡的代理服务器,负责转发的功能,有时我们会传入一下参数,而这些参数很有可能是写入到数据库的,而一些人会使用SQL语句设计的漏洞,添加一些特别的字符到参数中,为了防止SQL注入,那么我们需要在nginx中处理掉这些特殊字符。
例如我们的一个请求
api.yeehot.com/ming?uid=2992&content=hello'这里有个字符,我们需要对它进行过滤,那么可以使用 $query_string
if ( $query_string ~* ".*[\;'\<\>].*" ){
return 404;
}
今天的课程讲到这里,我们下一节继续将这个Nginx另外的安全规则说一下,请大家继续关注我的头条号:一点热,如果有问题欢迎留言咨询,欢迎转发与收藏,如果转载到其他地方,请与我联系。