一.核心安全配置
1.编译安装Nginx
(1)安装支持软件
Nginx 的配置及运行需要pcre、zlib 等软件包的支持,因此应预先安装这些软件的开发包(devel),以便提供相应的库和头文件,确保ginx的安装顺利完成。
(2)创建运行用户、组和日志目录
(3)编译安装Nginx
为主程序创建链接文件nginx
(4)添加Nginx系统服务
[root@localhost ~]# vi /lib/systemd/system/nginx.service
2.隐藏版本号
在环境中,需要隐藏Nginx的版本号,以避免泄漏Nginx的版本,使攻击者不能针对特定版本进行攻击。在隐藏版本号之前,可以使用Fiddler工具抓取数据包,查看Nginx版本,也可以在0penEuler中使用命令cur1-Ihttp://192.168.10.101/查看
修改配置文件
3.限制危险请求方法
不安全的请求方式,是潜在的安全风险,TRACE(易引发XST攻击)、PUT/DELETE(文件修改风险)、CONNECT(代理滥用),通过正则表达式匹配请求方法,非白名单方法返回 444(无响应关闭连接)
4.请求限制(CC攻击防御)
CC攻击,也称为连接数攻击或请求速率限制攻击,通过模拟大量用户访问来消耗服务器资源,从而使得正常用户无法正常访问网站。为了防止此类攻击,可以使用 Nginx提供的模块来限制请求速率和并发连接数
(1)使用Nginx的limit reg 模块限制请求速率
(2)压力测试验证
ApacheBench(简称 ab)是 Apache HTTP 服务器自带的一个轻量级、易用的HTTP服务器性能测试工具。它主要用于评估服务器在并发访问下的性能表现,包括响应时间、吞吐量等关键指标。
发起测试请求,共发起 300个请求,每次发起30个请求
查看 access.log 发现大量请求日志状态码 503
5.防盗链
防盗链是一种重要的安全设置,旨在防止未经授权的用户盗用网站(静态)资源。咨链行为不仅侵犯了内容创作者的版权,还可能导致原网站带宽和资源的过度消耗,影响正常用户的访问速度和体验。
(1).修改 Windows 的 C:\Windows\System32\drivers\etc\hosts 文件,设置域名和 IP 映射关系
192.168.10.101 www.aaa.com
192.168.10.102 www.bbb.com
(2)修改两台 OpenEuler 的 hosts 文件,设置域名和 IP 映射关系。
192.168.10.101 www.aaa.com
192.168.10.102 www.bbb.com
(3)把图片 kgc.png 放到源主机(www.aaa.com)的工作目录下
(4)编辑原网站首页文件
<html>
<body>
<h1>aaa It work! </h1>
<img src="kgc.png"/>
</body>
</html>
(5)编辑盗链网站首页文件
<html>
<body>
<h1>bbb It work! </h1>
<img src="http://www.aaa.com/kgc.png"/>
</body>
</html>
(6)配置 Nginx 防盗链
location ~* \.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|webp|ico)$ {
root html;
valid_referers aaa.com *.aaa.com;
if ($invalid_referer) {
return 403;
}
}
二.高级防护
1.动态黑名单
动态黑名单是Nginx中一种实时拦截恶意请求的安全机制,它允许在不重启服务的情况下,动态更新需要封禁的IP地址或网段。相比静态配置的allow/deny指令,动态黑名单更灵活高效,适用于高并发、多变的攻击防护场景。
(1)编辑黑名单配置文件
[root@localhost ~]# vi /usr/local/nginx/conf/blockips.conf
(2).编辑主配置文件
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
[root@localhost ~]# nginx -t
[root@localhost ~]# nginx -s reload
(3)使用封禁ip测试访问
[root@localhost ~]# curl 192.168.10.101
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx</center>
</body>
</html>
2.nginx https配置
2.1https 概念
HTTPS,全称HyperText Transfer Protocol over Secure Socket Layer,设计初衷是为了保证数据传输安全。国内大型互联网巨头在2016开始大力推行https,期间关于https的重大事件有
http(超文本传输协议)是客户端浏览器与web服务器之间的通信协议,而https协议可以认为是HTTP + SSL/TLS,在http之下tcp之上加了ssl一层,用于对应用层数据的加解密。
SSL:由Netscape公司开发,专门用于保护Web通讯。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为SSL记录协议(SSL Record Protocol)和SSL握手协议(SSL Handshake Protocol)两层。SSL经历了多个版本的迭代,包括从未公开发布的SSL 1.0、存在严重安全漏洞且现已废弃的SSL 2.0。
TLS:是IETF(Internet Engineering Task Force,互联网工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。从历史上看,TLS对SSL首先是继承关系,后来逐步发展并取代了SSL,成为当前主流的网络安全协议。TLS经历了多个版本的演进,包括TLS 1.0、TLS 1.1、TLS 1.2和TLS 1.3
2.1.1 安全通信的四大原则
机密性:即对数据加密,解决了窃听风险,因为即使被中间人窃听,由于数据是加密的,他也拿不到明文。
完整性:指数据在传输过程中没有被篡改,不多不少,保持原样,中途如果哪怕改了一个标点符号,接收方也能识别出来,从来判定接收报文不合法。
身份认证:确认对方的真实身份,即证明“你妈是你妈”的问题,这样就解决了冒充风险,用户不用担心访问的是某宝结果却在和钓鱼网站通信的问题。
不可否认: 即不可否认已发生的行为,比如小明向小红借了 1000 元,但没打借条,或者打了借条但没有签名,就会造成小红的资金损失。