广州花都网站建设,铜仁市建设局网站,12345东莞网站,wordpress运行环境目录
一、核心安全配置
1、隐藏版本号
2、限制危险请求方法
3、请求限制#xff08;CC攻击防御#xff09;
#xff08;1#xff09;使用Nginx的limit_req模块限制请求速率
#xff08;2#xff09;压力测试验证
4、防盗链
#xff08;1#xff09;修改 Window…目录
一、核心安全配置
1、隐藏版本号
2、限制危险请求方法
3、请求限制CC攻击防御
1使用Nginx的limit_req模块限制请求速率
2压力测试验证
4、防盗链
1修改 Windows 的C:\Windows\System32\drivers\etc\hosts 文件设置域名和 IP 映射关系
2修改两台 OpenEuler 的 hosts 文件设置域名和 IP 映射关系
3把图片 kgc.png 放到源主机的工作目录下
4编辑原网站首页文件
5测试访问源网站
6编辑岛链网站首页文件
7测试访问盗链网站盗链成功
8配置Nginx防盗链
9测试访问呢盗链网站盗链失败403
二、高级防护
1、动态黑名单
1编辑黑名单配置文件
2编辑主配置文件
3使用封禁ip 测试访问
4自动添加黑名单
2、nginx https 配置
1HTTP 风险
2安全通信的四大原则
3HTTPS 通信原理简述
3、nignx 配置https 证书
1使用 openssl 生成证书和私钥生成证书和私钥
2nginx 启用https
3验证 一、核心安全配置
1、隐藏版本号
在生产环境中需要隐藏 Nginx 的版本号以避免泄漏 Nginx 的版本使攻击者不能针对特定版本进行攻击。在隐藏版本号之前可以使用 Fiddler 工具抓取数据包查看 Nginx版本也可以在 OpenEuler 中使用命令 curl -Ihttp://192.168.10.101/查看 修改配置文件
[rootbogon ~]# vim /usr/local/nginx/conf/nginx.confserver_tokens off; #第20行添加隐藏版本号
[rootbogon ~]# nginx -t #查看文件是否有错误
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[rootbogon ~]# systemctl restart nginx #重启再次查看会发现版本号被隐藏 2、限制危险请求方法
不安全的请求方式,是潜在的安全风险,TRACE(易引发XST攻击)、PUT/DELETE(文件修改风险)、CONNECT(代理滥用)通过正则表达式匹配请求方法非白名单方法返回 444(无响应关闭连接)
修改配置文件
[rootbogon ~]# vim /usr/local/nginx/conf/nginx.confserver {……if ($request_method !~ ^(GET|HEAD|POST)$ ) {return 444;}……}
[rootbogon ~]# nginx -t
[rootbogon ~]# systemctl restart nginx
测试PUT/DELETE请求
[rootlocalhost ~]# curl -XPUT -I 192.168.10.101
curl: (52) Empty reply from server
[rootbogon ~]# cat /usr/local/nginx/logs/access.log
192.168.10.102 - - [06/May/2025:12:17:52 0800] PUT / HTTP/1.1 444 0 - curl/8.4.0 3、请求限制CC攻击防御
CC 攻击(Challenge Collapsar 攻击)是一种常见的网络攻击方式通过大量合法或伪造的小流量请求来耗尽服务器资源导致正常用户无法访问网站。
CC攻击也称为连接数攻击或请求速率限制攻击通过模拟大量用户访问来消耗服务器资源从而使得正常用户无法正常访问网站。为了防止此类攻击可以使用 Nginx 提供的模块来限制请求速率和并发连接数
1使用Nginx的limit_req模块限制请求速率
[rootbogon ~]# vim /usr/local/nginx/conf/nginx.conf
http {limit_req_zone $binary_remote_addr zonereq_limit:10m rate10r/s;#34定义限制区10MB内存/每秒10请求server {location / {root html;index index.html index.htm;limit_req zonereq_limit burst20 nodelay;}}
}
关键参数说明 limit_req_zone 定义共享内存区 $binary_remote _addr 是一个内置变量用于表示客户端 IP 地址的二进制格式 zonereq_limit:10m 创建名为 req_limit 的共享内存区大小 10M,用来存储客户端IP rate10r/s 限制并发数每个 IP 每秒可以发起的请求次数 limit req 实施速率限制 zonereq limit 绑定到预定义的共享内存区 burst20 类似与等候区超出并发数的请求会到等候区等候区占满后多余的请求会立刻返回 503 nodelay 立即处理突发请求而不延迟相当于立即处理等候区的请求多余的请求会立刻返回 503
2压力测试验证
安装 ab 测试工具
ApacheBench(简称 ab)是 Apache HTTP 服务器自带的一个轻量级、易用的HTTP 服务器性能测试工具。它主要用于评估服务器在并发访问下的性能表现包括响应时间、吞吐量等关键指标。
[rootbogon ~]# dnf -y install httpd-tools
发起测试请求
[rootbogon ~]# ab -n 300 -c 30 http://192.168.10.101/ -n 300表示总请求数为 300 次即模拟客户端向服务器发送300次HTTP 请求。 -c 30表示并发用户数为 30即同时有30个请求并行发送到服务器 查看access.log发现大量请求日志状态码 503
[rootbogon ~]# tail -300 /usr/local/nginx/logs/access.log | grep -c 503
278 4、防盗链
防盗链是一种重要的安全设置旨在防止未经授权的用户盗用网站(静态)资源。盗链行为不仅侵犯了内容创作者的版权还可能导致原网站带宽和资源的过度消耗影响正常用户的访问速度和体验。 一般来说用户浏览一个完整的页面并不是一次性全部传送到客户端的。如果所请求的页面带有图片或其他信息那么第一个 HTTP 请求传送的是这个页面的文本然后通过客户端的浏览器对这段文本进行解释执行。如果发现其中还有图片那么客户端的浏览器会再次发送一条HTTP请求当这个请求被处理后这个图片文件才会被传送到客户端最后浏览器会将图片安放到页面的正确位置就这样一个完整的页面要经过多次发送HTTP请求才能够被完整的显示。基于这样的机制就会产生盗链问题如果一个网站中没有其页面中所说图片信息那么它完全可以链接到其他网站的图片信息上。这样没有任何资源的网站利用了其他网站的资源来展示给浏览者提高了自己的访问量而大部分浏览者又不会很容易地发现。一些不良网站为了不增加成本而扩充自己站点内容经常盗用其他网站的链接。一方面损害了原网站的合法利益另一方面又加重了服务器的负担。
本实验需要两台主机 OpenEuler www.aaa.com 192.168.10.101 源主机 OpenEuler www.bbb.com 192.168.10.102 盗链主机
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 映射关系
[rootbogon ~]# vim /etc/hosts
192.168.10.101 www.aaa.com
192.168.10.102 www.bbb.com
3把图片 kgc.png 放到源主机的工作目录下
[rootbogon ~]# ls /usr/local/nginx/html/
50x.html index.html kgc.png4编辑原网站首页文件
[rootbogon ~]# vim /usr/local/nginx/html/index.html
h1aaa/h1
img srckgc.png/5测试访问源网站 6编辑岛链网站首页文件
[rootbogon ~]# dnf -y install httpd
[rootbogon ~]# vim /var/www/html/index.html
h1bbb/h1
img srchttp://www.aaa.com/kgc.png/
[rootbogon ~]# systemctl stop firewalld
[rootbogon ~]# systemctl start httpd7测试访问盗链网站盗链成功 8配置Nginx防盗链
[rootbogon ~]# vim /usr/local/nginx/conf/nginx.conflocation ~* \.(gif|jpg|jpeg|png|bmp|swf)$ {root html;valid_referers aaa.com *.aaa.com;if ($invalid_referer) { return 403;}}
[rootbogon ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[rootbogon ~]# systemctl restart nginx ~* \.(jpglgif|swf)$ 这段正则表达式表示匹配不区分大小写以.jpg或. gif 或.swf 结尾的文件; Valid referers 设置信任的网站可以正常使用图片 后面的网址或者域名 referer 中包含相关字符串的网址 If 语句 如果链接的来源域名不在 valid referers 所列出的列表中,$invalid referer 为1则执行后面的操作即进行重写或返回 403 页面。
9测试访问呢盗链网站盗链失败403 二、高级防护
1、动态黑名单
动态黑名单是 Nginx 中一种实时拦截恶意请求的安全机制它允许在不重启服务的情况下,动态更新需要封禁的 IP地址或网段。相比静态配置的 allow/deny指令动态黑名单更灵活高效适用于高并发、多变的攻击防护场景。
1编辑黑名单配置文件
[rootbogon ~]# vim /usr/local/nginx/conf/blockips.conf
192.168.1.0/24 1; #封禁整个网段
192.168.10.102 1; #封禁ipIP 地址后的数字含义 0 允许 1 403 完全封禁 2 444 静默断开 3 503 服务不可用
2编辑主配置文件
[rootbogon ~]# vim /usr/local/nginx/conf/nginx.conf
http {
……geo $block_ip {default 0; #默认允许访问include /usr/local/nginx/conf/blockips.conf; #包含黑名单}
……server {
……if ($block_ip) { #判断标记值return 403; #封禁动作}
……}
} geo Nginx 内置模块指令专门用于处理IP地址相关的逻辑。基于客户端IP 地址生成一个变量值用于后续的访问控制判断 $block_ip 自定义的变量名存储计算结果(通常为0或1)。 default 0 默认值表示不在黑名单中的 IP 允许访问 if($block ip) 当变量值为1时触发封禁逻辑
[rootbogon ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[rootbogon ~]# systemctl restart nginx3使用封禁ip 测试访问 4自动添加黑名单
[rootbogon ~]# awk {print $1} /usr/local/nginx/logs/access.log | sort | uniq -c | sort -nr | awk {if ($1100) print $2 1;} /usr/local/nginx/conf/blockips.confuniq -c统计连续出现的次数并在行首显示次数 sort -nr按数值排序 2、nginx https 配置
1HTTP 风险
HTTP 由于是明文传输主要存在三大风险:窃听风险、篡改风险、冒充风险。 窃听风险中间人可以获取到通信内容由于内容是明文所以获取明文后有安全风险篡改风险中间人可以篡改报文内容后再发送给对方风险极大。冒充风险比如你以为是在和某宝通信但实际上是在和一个钓鱼网站通信。 2安全通信的四大原则 机密性即对数据加密解决了窃听风险因为即使被中间人窃听由于数据是加密的他也拿不到明文;完整性指数据在传输过程中没有被篡改不多不少保持原样中途如果哪怕改了一个标点符号接收方也能识别出来从来判定接收报文不合法;身份认证确认对方的真实身份即证明“你妈是你妈”的问题这样就解决了冒充风险用户不用担心访问的是某宝结果却在和钓鱼网站通信的问题;不可否认即不可否认已发生的行为比如小明向小红借了1000元但没打借条或者打了借条但没有签名就会造成小红的资金损失。 3HTTPS 通信原理简述 对称加密通信双方使用同一把密钥进行加解密效率高但存在密钥协商难题。若通过报文传输密钥易被中间人截获替换导致后续通信内容被窃取和篡改。非对称加密加解密使用不同密钥公钥可公开私钥保密。服务器保管私钥并发布公钥客户端用公钥加密对称加密密钥或相关信息传给服务器解决了密钥传输安全问题但服务器的公钥传输又面临被中间人调包风险。 数字证书解决公钥信任问题 证书申请与构成服务器向证书颁发机构CA申请证书提交域名、组织单位信息和公钥等生成证书签名请求CSR CA 据此生成证书包含证书序列号、过期时间、站点信息、公钥、颁发者名称和签名等内容。 证书验证与通信流程客户端收到服务器的证书后用系统内置的 CA 证书公钥验签。验签通过则表明证书可信其公钥也可信。客户端用该公钥加密会话密钥对称加密密钥发送给服务器服务器用私钥解密获取会话密钥之后双方使用对称加密进行数据传输。 HTTPS 加密模式握手阶段采用非对称加密用于安全交换对称加密密钥数据传输阶段使用对称加密因其密钥管理简便、加密解密效率高这种混合模式既保障安全又兼顾性能。 3、nignx 配置https 证书
由于 ss1 证书需要向 CA 组织申购实验采用自签名证书(也就是自己给自己签名并颁发证书当然这种证书是不被信任的)
1使用 openssl 生成证书和私钥生成证书和私钥
[rootlocalhost ~]# mkdir -p /etc/nginx/ssl
[rootlocalhost ~]# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt -subj /CCN/STBeiJing/LBeiJing/Obenet/CNlocalhost
.......*.................*..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
.....*......*...............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
-----
参数解释 -x509 生成自签名证书(而非CSR) -nodes 不加密私钥(无密码保护)。 -days 365 证书有效期1年。 -keyout 私钥文件。 -out 自签名文件。 -newkey rsa:2048 生成2048 位的 RSA 私钥。 -subj 证书主题信息(按需修改字段)
注 CA 签名证书需要由受信任的第三方证书颁发机构(CA)签发。流程如下:
1.用户生成私钥和 CSR(证书签名请求)。 2.将 CSR 提交给 CA(如Lets Encrypt、DigiCert 等)。 3.CA 机构验证身份后用CA的私钥对证书签名生成最终证书。
自签名证书证书的颁发者(Issuer)和主体(Subject)是同一个实体(即自己)无需第三方 CA 参与直接用工具(如 0penSSL)生成私钥和证书。签名时使用自己的私钥而不是 CA的私钥。适用于测试、内部环境或无需公开信任的场景。
2nginx 启用https
编辑nginx 配置文件
[rootlocalhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {listen 443 ssl; #监听HTTPS端口server_name localhost;#指定证书和私钥路径ssl_certificate /etc/nginx/ssl/nginx.crt;ssl_certificate_key /etc/nginx/ssl/nginx.key;
}
#重定向server {listen 80; return 301 https://$host$request_uri;}
[rootlocalhost ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[rootlocalhost ~]# systemctl restart nginx
3验证
访问https://服务器ip
浏览器会提示证书不安全(因自签名)选择“高级’”--继续前往或信任此证书(测试环境可忽略警告)。