代理服务器(Proxy Server)
类似于房产中介,因为我们有时候无法直接找到服务器,就好比我们无法一下子找到房东,所以我们要借代理服务器来找到我们想要的服务器(就好比上外网(google.com))
◼ 特点
本身不生产内容
处于中间位置转发上下游的请求和响应
✓ 面向下游的客户端:它是服务器
✓ 面向上游的服务器:它是客户端
正向代理、反向代理
◼ 正向代理:代理的对象是客户端
我ABC客户端找到你,让你代理服务器帮我干一件事情
◼ 反向代理:代理的对象是服务器
选择访问哪一个服务器,帮服务器干事情,为服务器提供负载均衡的能力
正向代理—作用
◼ 隐藏客户端身份(防止公网IP地址泄露)
◼ 绕过防火墙(突破访问限制)
◼ Internet访问控制
在路由器上面设置只有代理服务器可以上网,在来由代理服务器来选择谁可以上网
◼ 数据过滤
可以对请求和响应进行过滤,发现外网传回来了黄色的信息,就把它过滤掉,通过我这台代理服务器上的网都是健康的
◼ …
◼ 一些免费的正向代理
https://ip.jiangxianli.com/
https://www.kuaidaili.com/free/inha/
可以设置整台电脑的代理
反向代理—作用
◼ 隐藏服务器身份
◼ 安全防护
用了代理服务器,客户端就无法直接访问Web服务器集群,Web服务器集群不对外公开了,客户端只能访问代理服务器
相对来说安全了一点
◼ 负载均衡
突然之间涌入大量数据包,服务器会受不了宕机,因为服务器除了要处理客户端发过来的数据,还要运行业务,做各种算法处理
代理服务器只负责转发,利用负载均衡算法来决定把服务器转发给那台服务器,根本就不用运行业务,压力没有那么大
负载:服务器能够承受多少容量
均衡:大家平摊一点
大量的运算在Web服务器集群上,做各种算法运算,IO处理,耗时运算
抓包工具的原理
可以通过代理服务器实现抓包功能
◼ Fiddler、Charles等抓包工具的原理:在客户端启动了正向代理服务
改了客户端的代理,以后我们上网都要经过这两个工具
代理服务器就是代理上下游的响应,上下游都得穿过它
◼ 需要注意的是
Wireshark的原理是:通过底层驱动,拦截网卡上流过的数据
底层:操作系统、网卡
代理服务器—相关的头部字段
◼ Via:追加经过的每一台代理服务器的主机名(或域名)//不是IP,这里是一个名字
◼ X-Forwarded-For:追加请求方的IP地址(下一级的IP地址,有多少个下级IP就写多少)
◼ X-Real-IP:客户端的真实IP地址(公网IP地址,就一台,不会变的)
◼ ①
X-Forwarded-For: 14.14.14.14
X-Real-IP: 14.14.14.14
Via: proxy1
◼ ②
X-Forwarded-For: 14.14.14.14, 220.11.11.11
X-Real-IP: 14.14.14.14
Via: proxy1, proxy2
◼ ③
服务器的IP是隐藏的
Via: proxy2
◼ ④
Via: proxy2, proxy1
①、②是请求头,③、④是响应头
◼ CDN(Content Delivery Network或Content Dstribution Network),译为:内容分发网络
利用最靠近每位用户的服务器
更快更可靠地将音乐、图片、视频等资源文件(一般是静态资源)传递给用户(动态资源也可以,不过这又是另外一回事)
经过的路由器越多,网速就越慢,所以采用了CDN技术
CDN—使用CDN前后
使用CDN前,所有的用户都从这台服务主机下载资源,就会负载过重
使用CDN后,所有的用户都从最近的CDN节点服务器下载资源,服务主机可以正常工作(镜像站点)
◼ CDN运营商在全国、乃至全球的各个大枢纽城市都建立了机房
部署了大量拥有高存储高带宽的节点,构建了一个跨运营商、跨地域的专用网络
跨运营商:不管你是什么ISP,都支持
专用网络:CDN之间是相连的,资源共享
◼ 内容所有者向CDN运营商支付费用,CDN将其内容交付给最终用户
内容所有者:这台服务器的主人
CDN—使用CDN前
输入域名,发送请求访问DNS服务器拿到IP地址,然后根据IP地址请求到对应的网站服务器
CDN—使用CDN后
输入特殊的域名,发起请求去访问DNS服务器,DNS服务器发现你这个域名比较特殊,我没办法给你IP地址,因为这个域名对应着CDN相关的服务器,他就会把这个请求发给CDN DNS服务器,CDN DNS服务器返回对应的IP地址给客户端,这个IP地址是CDN全局负载均衡系统,客户端根据IP地址去请求CDN全局负载均衡系统,CDN全局负载均衡系统根据客户端的请求,分析出它的地理位置,给它一个离它最近的CDN节点,这个时候客户端就会访问到最近的节点,从这个节点上去拿数据
CDN边缘节点:离客户端最近的节点
有很多层,这里只列出了两层,越往下节点越多
接入网类型:是什么ISP
CDN边缘节点有可能没有内容,没有内容会向上一层节点要内容
CDN边缘节点为周边用户服务的,周边用户服务想访问的内容有可能是类似的,所以它不会去缓存所有的内容
所有的CDN节点都没有内容了,才会去向源站发起请求
利用算法来返回离用户最近的CDN节点
CDN—使用举例
◼ 使用cdn引入jquery
只是刚好网站域名带有CDN字样,不是说访问CDN服务器的域名都得带有CDN字样,碰巧而已
jqueryCDN网站:https://www.bootcdn.cn/jquery/
vueCDN网站:https://www.bootcdn.cn/vue/
网络通信中面临的4种安全威胁
◼ 截获:窃听通信内容
拦下来,看一下在发过去
◼ 中断:中断网络通信
◼ 篡改:篡改通信内容
◼ 伪造:伪造通信内容
我根本就没有发消息给你,但有人伪装成是我发的
网络层—ARP欺骗
◼ ARP欺骗(ARP spoofing),又称ARP毒化(ARP poisoning)、ARP病毒、ARP攻击
◼ ARP欺骗可以造成的效果
可让攻击者获取局域网上的数据包甚至可篡改数据包
可让网络上特定电脑之间无法正常通信(例如网络执法官这样的软件)
如何来控制谁跟谁可以通信
PC机会在同网段内发送ARP广播,网络执法官通过接收ARP广播来获取各pc机的MAC地址,
执法官给A发送ARP请求,源IP是C的IP地址,源MAC地址却是不存在的,A更新自己的MAC地址表,当A想给C发送数据时,会发往一个不存在的地方,A跟C之间将无法通信
让送至特定IP地址的流量被错误送到攻击者所取代的地方
因为A的MAC地址表里的B的MAC地址被改成其它的,A本来想发送给B的,却错误的发送到了其它地方
…
ARP欺骗—核心步骤举例
◼ 假设主机C是攻击者,主机A、B是被攻击者
C只要收到过A、B发送的ARP请求,就会拥有A、B的IP、MAC地址,就可以进行欺骗活动
ARP请求是广播包,只要是同一个网段的都可以收到
C发送一个ARP响应给B,把响应包里的源IP设为A的IP地址,源MAC设为C的MAC地址
B收到ARP响应后,更新它的ARP表,把A的MAC地址(IP_A, MAC_A)改为(IP_A, MAC_C)
当B要发送数据包给A时,它根据ARP表来封装数据包的头部,把目标MAC地址设为MAC_C,而非MAC_A
当交换机收到B发送给A的数据包时,根据此包的目标MAC地址(MAC_C)而把数据包转发给C
C收到数据包后,可以把它存起来后再发送给A,达到窃听效果。C也可以篡改数据后才发送数据包给A
ARP欺骗—防护
像一些360软件就可以做到
◼ 静态ARP
动态ARP会更新MAC地址表,而静态不会,有效的防止了ARP欺骗
◼ DHCP Snooping
网络设备可借由DHCP保留网络上各电脑的MAC地址,在伪造的ARP数据包发出时即可侦测到
DHCP是负责自动分配IP地址的地方,它知道每台PC机的IP地址和其对应的MAC地址
◼ 利用一些软件监听ARP的不正常变动
◼ …
网络安全的问题,针对不同端的,有不同端的问题
DoS、ddos
◼ DoS攻击(拒绝服务攻击,Denial-of-Service attack)
使目标电脑的网络或系统资源耗尽,使服务暂时中断或停止,导致其正常用户无法访问
把你的电脑搞崩,把你的服务器搞崩,用户访问的时候提供不了服务
◼ ddos攻击(分布式拒绝服务攻击,Distributed Denial-of-Service attack)
黑客使用网络上两个或以上被攻陷的电脑作为“僵尸”向特定的目标发动DoS攻击
僵尸:又叫肉鸡
在网络上找存在漏洞的主机,(主要是服务器,因为它们的IP是公网IP)利用它们的漏洞,获取它们的权限,命令让它们向目标发起DOS攻击
2018年3月,GitHub遭到迄今为止规模最大的DDoS攻击
◼ DoS攻击可以分为2大类(这里只举出了几种,还有好几种没列出来)
带宽消耗型:UDP洪水攻击、ICMP洪水攻击
占满你的网络带宽,不断的发送数据包过去,这样子用户正常的数据就无法通过
资源消耗型:SYN洪水攻击、LAND攻击
消耗主机上的资源,都是针对TCP三次握手而展开的攻击
DoS、DDoS防御
◼ 防御方式通常为:入侵检测、流量过滤、和多重验证
堵塞网络带宽的流量将被过滤,而正常的流量可正常通过
◼ 防火墙
防火墙可以设置规则,例如允许或拒绝特定通讯协议,端口或IP地址
例如我只允许80端口的数据过来
当攻击从少数不正常的IP地址发出时,可以简单的使用拒绝规则阻止一切从攻击源IP发出的通信
设置这个IP数据不准过来
复杂攻击难以用简单规则来阻止,例如80端口遭受攻击时不可能拒绝端口所有的通信,因为同时会阻止合法流量
很多协议走的是80端口,例如HTTP协议
防火墙可能处于网络架构中过后的位置,路由器可能在恶意流量到达防火墙前即被攻击影响
防火墙一般在路由器后面
◼ 交换机:大多数交换机有一定的速度限制和访问控制能力
◼ 路由器:和交换机类似,路由器也有一定的速度限制和访问控制能力
◼ 黑洞引导
将所有受攻击计算机的通信全部发送至一个“黑洞”(空接口或不存在的计算机地址)或者有足够能力处理洪流的网络设备商,以避免网络受到较大影响
◼ 流量清洗
当流量被送到ddos防护清洗中心时,通过采用抗DDoS软件处理,将正常流量和恶意流量区分开
正常的流量则回注回客户网站
阿里云、腾讯云有DDoS防御套餐,只不过你要出点钱
传输层—SYN洪水攻击
◼ SYN洪水攻击(SYN flooding attack)
攻击者发送一系列的SYN请求到目标,然后让目标因收不到ACK(第3次握手)而进行等待、消耗资源
不让主机建立连接,让主机一直处于等待状态,消耗资源
◼ 攻击方法
跳过发送最后的ACK信息
用一些手段是可以做到的
修改源IP地址,让目标发送SYN-ACK到伪造的IP地址,因此目标永不可能收到ACK(第3次握手)
攻击者发送的ACK请求当中源IP是不存在的
◼ 防护
参考:RFC 4987
传输层—LAND攻击
◼ LAND攻击(局域网拒绝服务攻击,Local Area Network Denial attack)
通过持续发送相同源地址和目标地址的欺骗数据包,使目标试图与自己建立连接,消耗系统资源直至崩溃
主机跟自己建立连接之后,属于空连接,中间就不会再有数据包了
◼ 有些系统存在设计上的缺陷,允许设备接受并响应来自网络、却宣称来自于设备自身的数据包,导致循环应答
◼ 防护
大多数防火墙都能拦截类似的攻击包,以保护系统
部分操作系统通过发布安全补丁修复了这一漏洞
路由器应同时配置上行与下行筛选器,屏蔽所有源地址与目标地址相同的数据包
应用层—DNS劫持
◼ DNS劫持,又称为域名劫持
一开始输入域名,我们会先向DNS服务器要IP地址,然后在去访问网站
攻击者篡改了某个域名的解析结果,使得指向该域名的IP变成了另一个IP
输入的是百度域名,打开的却是赌博网站
导致对相应网址的访问被劫持到另一个不可达的或者假冒的网址
黑客把DNS服务器域名对应的IP地址改掉
从而实现非法窃取用户信息或者破坏正常网络服务的目的
通过DNS劫持的方式,让用户访问我假冒的网站,网站内容与真实的毫无差别,用户在我网站登录,从而获取用户信息
◼ 为防止DNS劫持,可以考虑使用更靠谱的DNS服务器,比如:114.114.114.114
域名:https://www.114dns.com/
可以在IP设置那边改
谷歌:8.8.8.8、8.8.4.4
微软:4.2.2.1、4.2.2.2
百度:180.76.76.76
阿里:223.5.5.5、223.6.6.6
◼ HTTP劫持:对HTTP数据包进行拦截处理,比如插入JS代码
比如你访问某些网站时,在右下角多了个莫名其妙的弹窗广告,或者点了个按钮,到了其它地方的网站
网站本身自己就有的弹窗不算
HTTP协议的安全问题
◼ HTTP协议默认是采取明文传输的,因此会有很大的安全隐患
传输的数据一目了然
常见的提高安全性的方法是:对通信内容进行加密后,再进行传输
就算黑客拿到了,也不知道我这个是什么
◼ 常见的加密方式有
不可逆
✓ 单向散列函数:MD5、SHA等
可逆
✓ 对称加密:DES、3DES、AES等
✓ 非对称加密:RSA等
其它
✓ 混合密码系统
✓ 数字签名
✓ 证书
常见英文
◼ encrypt:加密
◼decrypt :解密
◼plaintaxt :明文
◼ciphertext:密文
学前须知
◼ 为了便于学习,设计4个虚拟人物
Alice、Bob:互相通信
Eve:窃听者
Mallory:主动攻击者
如何防止被窃听?
单向散列函数—几个网站
◼MD5加密
https://www.cmd5.com/hash.aspx
◼MD5解密
https://www.cmd5.com/
暴力破解,通过枚举的方式
密码越奇怪越好,越复杂越好
◼ 其它加密
https://www.sojson.com/encrypt_des.html
https://tool.chinaz.com/tools/md5.aspx
单向散列函数
◼ 单向散列函数,可以根据根据消息内容计算出散列值
◼ 散列值的长度和消息的长度无关,无论消息是1bit、10M、100G,单向散列函数都会计算出固定长度的散列值
单向散列函数—特点
◼ 根据任意长度的消息,计算出固定长度的散列值
◼ 计算速度快,能快速计算出散列值
◼ 消息不同,散列值也不同
◼ 具备单向性
不可逆
拿到两段散列值,我们无法知道它们之前是有多么的相似
单向散列函数—称呼
◼ 单向散列函数,也被称为
消息摘要函数(message digest function)
把很长的数据,加密成一小段数据,有点像是对一篇文章进行了提取和总结
哈希函数(hash function)
输出的函数像hash值
◼ 输出的散列值,也被称为
消息摘要(message digest)
指纹(fingerprint)
做为你的标识,不是很像指纹吗
单向散列函数—常见的几种单向散列函数
◼MD4、MD5
产生128bit的散列值,MD就是Message Digest的缩写,目前已经不安全
是不是加密,要看你怎么看,没有必要揪着是摘要还是加密不放
但是你密码复杂一点还是可以用的
◼SHA-1
产生160bit的散列值
撒盐可以增强我的密码性,
◼SHA-2
SHA-256、SHA-384、SHA-512 ,散列值长度分别是256bit、384bit、512bit
除以8就知道占了多少字节
◼SHA-3
全新标准
单向散列函数—如何防止数据被篡改
一个个去比对太麻烦了
单向散列函数—应用:防止数据被篡改
可以通过单向散列函数来却确定值是否被改变
在官网拿到的散列值,和我从镜像站点拿到的散列值进行比对,来核验数据是否被篡改了
单向散列函数—应用:密码加密
登录时拿请求的密码MD5值和数据库当中的MD5值进行比较,一样就登录成功
数据库当中的密码都是搞密文,搞明文,可就把用户给坑惨了
用户不会去要旧密码,没有这个需求,所以用不可逆加密是没有问题的
现在用户忘记密码,都是重置密码
状态码和错误代号冲突了怎么办
需要前后端约定好,虽说状态码和错误代号都是由服务器发过来的
是通过响应体JS来判断,状态行来判断,完全由你们公司开发来决定
原文链接:https://blog.csdn.net/m0_53008479/article/details/121048459?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165918321816782395361439%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165918321816782395361439&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-26-121048459-null-null.nonecase&utm_term=cdn
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/218