建站笔记 / 网络通识 · 2024年10月27日 0

3:Web架构、OSS存储、负载均衡、CDN加速、反向代理、WAF防护

一、WAF防护

Web应用防护墙(Web Application Firewall,简称WAF)是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品,主要用于防御针对网络应用层的攻击,像SQL注入、跨站脚本攻击、参数篡改、应用平台漏洞攻击、拒绝服务攻击等。使用了WAF的网站,可能导致我们的常规的安全测试手段被拦截,WAF防护分为以下几种类型

  • 非嵌入式
    • 硬件型
      • 已硬件形式部署在链路中,支持多种部署方式,当串联到链路中可以拦截恶意流量,在旁路监听时只记录不拦截
      • 代表产品
        • Imperva
        • 天清WAG
    • 软件型
      • 以软件形式安装在服务器上,可以直接检测服务器是否存在后门
    • 代表产品
      • 安全狗
      • 云锁
      • D盾
  • 云型
    • 一般通过反向代理的形式工作,通过配置NS或者CNAME记录,使得对网站的请求先通过WAF主机,可以理解成带防护功能的CDN
  • 嵌入式
    • 网站内置的WAF,
      又叫自定义WAF,直接写在代码中
我们来通过D盾来演示一下WAF在网站防护中起到的作用
1.首先在Window Server 20212 R2中新建一个Zblog(具体教程请查看第一天教程),在网站根目录上传一个asp后门,此时是可以直接拿到shell的


2.此时我们打开D盾,并安装服务模块

3.此时再次连接后门,提示失败,说明D盾已经生效

二、CDN

CDN意为内容分发网络,可以加快数据密集型应用程序的网页加载速度,通过在多个地理位置建立一个入网点(PoP)或一组 CDN 边缘服务器来工作。这个分布在不同地理位置的网络基于缓存、动态加速和边缘逻辑计算的原则工作,CDN可以隐藏真实源IP,可能导致我们在安全测试中无法获取真实目标,这里我们来演示一下阿里云的CDN,阿里云的CND配置有多种方式,由于我的服务器不在阿里云,所以直接传统的方式去配置
1.首先在宝塔中新建网站,并在域名商里添加解析记录

2.打开阿里云CDNhttps://cdn.console.aliyun.com/domain/list,点击添加域名-根据提示配置域名TXT解析记录,并进行验证
3.点击新增源站信息,输入宝塔服务器的ip

4.点击下一步,根据配置向导添加CNAME记录,待解析生效后,CDN即配置成功。此时ping我们的域名即可发现不是我们服务器的ip,而是CDN的记录,不同的区域ping我们的域名结果也是不一样的,一般会选择离你最近的CDN服务器(如果一直没有生效,可以通过超级ping来进行多地域检测)

由于我们的真实ip被CDN掩盖,所以进行一些端口扫描之类的安全测试,也就无法达到相应的结果,后续可以通过CDN绕过等手段来获取真实ip

三、OSS

OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,通过配置OSS,可以使用户上传的图片不保存在服务器上,而是保存在OSS中,我们通过cloudreve来演示一下OSS的上传功能
1.解压Cloudreve,点击exe启动文件,获取用户名、密码及端口号

2.访问ip:端口号进行登录,用户名和密码在上图,如果上图没有保存,那么重新解压替换源文件,再打开exe执行文件即可
3.此时我们随意上传一个图片,可以看到此图片是上传到了我们的服务器上,如果这是一个后门文件,那么就可以在安全测试中进行利用

4.接下来我们配置OSS,让用户上传的图片不保存在服务器上,而是保存在阿里云OSS中,点击右上角打开管理面板-存储策略-添加存储策略,输入阿里云OSS的相关信息(OSS的配置信息通过https://oss.console.aliyun.com/获取,Accesskey key 通过https://ram.console.aliyun.com/manage获取)
5.此时再次上传图片,可以看到图片没有上传到我们的服务器中,而是上传到了阿里云OSS里,也就是说,即使我们上传后门,也不会解析,无法进行有效利用,避免了文件上传的安全问题
虽然OSS非常好用,但是Accesskey同样存在安全隐患,一旦Accesskey泄露,就可以拿到相应的阿里云权限

四、反向代理

讲反向代理之前,我们需要先来熟悉一下正向代理,正向代理代理(forward proxy):是一个位于客户端和目标服务器之间的服务器(代理服务器),为了从目标服务器取得内容,客户端向代理服务器发送一个请求并指定目标,然后代理服务器向目标服务器转交请求并将获得的内容返回给客户端(比如我们访问Google,就是用的这个技术)
反向代理(reverse proxy):是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务,因为向代理中多出一个可以重定向解析的功能操作,导致反代理出的站点指向和真实应用毫无关系
这么说可能有些晦涩难懂,可以从以下几个角度来比较:

  • 正向代理和反向代理都是解决访问不可达的问题
  • 正向代理是在A端(客户端)设置,A通过B访问C,对于C来说,不知道A的存在
  • 反向代理是在B端(服务端)设置,A访问B,B返回C的结果,对于A来说,不知道C的存在

接下来我们通过宝塔来演示一下反向代理
1.打开宝塔,创建一个网站

2.添加解析记录到该服务器中

3.此时访问dl.zhangjia.pro,即可看到我们的网站,此时是没有添加任何代理的

4.打开宝塔设置,添加反向代理设置

5.此时访问dl.zhangjia.pro,打开的网站却是zhangjia.io,反向代理成功

五、负载均衡

负载均衡是在支持应用程序的资源池中平均分配网络流量的一种方法。现代应用程序必须同时处理数百万用户,并以快速、可靠的方式将正确的文本、视频、图像和其他数据返回给每个用户。为了处理如此高的流量,大多数应用程序都有许多资源服务器,它们之间包含很多重复数据。用户对应用程序的请求首先转到负载均衡器。然后,负载均衡器会将每个请求路由到服务器场中最适合处理该请求的单个服务器。
通过配置Nginx,就可以完成简单的负载均衡配置
1.申请三台服务器,一个做主控端,另外两台做负载端,每个服务器都新建一个网站,每个网站的首页内容相同(注意,如果负载端服务器也用的宝塔创建的,那么不要使用80端口,会导致负载均衡失效)
2.打开之前创建的dl.zhangjia.pro,点击设置-配置文件,添加以下配置

3.此时访问dl.zhangjia.pro,刷新页面会看到有时候页面是服务器一,有时候是服务器二,频率是通过fzjh的weight字段来设置的

参考资料

  • 以上内容整理自小迪安全系列课程

  • https://www.huaweicloud.com/zhishi/dyl46.html

  • https://aws.amazon.com/cn/what-is/cdn/

  • https://cloud.tencent.com/developer/article/1418457