[TOC]
此部分包含第15、16、17和18章,包含了计算机中传输的数据压缩(有损与无损)、网络数据在传输过程中如何保证其数据安全, 讨论计算理论,即哪些是可计算的,哪些是不可计算的,最后介绍当前热门的人工智能(AI)的观点,加深我们对计算机数据处理的的认识,为后续学习扩展基础认识。
原文地址:
笔者作为一名资深的白帽子,来到了我熟悉喜欢的章节,对于网络安全我从高中开始接触,并自学到漏洞挖掘,记得挖的第一个漏洞是腾讯的存储型XSS,提交给了当时Wooyun平台,算是投名状吧,随后又浪迹在各众测平台、SRC,其中有学习的快乐,又有挖漏洞的煎熬,当然漏洞审核通过的那一瞬间,又感觉什么都值得了(money),支持者我不断的学习、不断的探索,直到遇到自身瓶颈时,对于我们非科班出生的网络安全人员,有必要进行基础知识的学习,为了走得更远遂,有了【大大神之路-起始篇 计算机科学导论】系列文章!
好,回归到本章正题《安全》,安全这个话题很宽泛并且包括数学中的某些特定领域,例如数论安全、网络信息(数据)安全、人身安全、材料安全,此处主要讲解的时是网络信息(数据)安全!
你可能常常在新闻或者网警的公众号文章看到,某某黑客又攻击某某平台,并将个人信息数据进行售卖的违法行为,我们生活在信息时代需要保存生活中各方面的信息,其中我们的信息是一种有价值的资产,就像其他资产一样(存款),我们要尽可能授权给可信机构,不要随意连接公共WIFI、不扫码来路不明的链接或者二维码,也不要贪小便宜将个人信息直接或者间接给他人使用。
个人信息作为一种资产,信息需要保护免受攻击。为了安全信息需要避开未授权的使用(机密性)
,保护信息不受到未授权的篡改(完整性)
,并且对于得到授权 的实体来说是需要时可用的(可用性)
。
此节中,我们先讨论信息安全的三个主要目标(也称安全三要素
),其次将探索攻击是如何威胁这三个目标的,然后我们将讨论和这些安全目标有关的安全服务,最后我们将定义两个实现安全目标并且防止攻击的技术。
作为网络安全中最基本的三个目标机密性、完整性和可用性
,下面我们一一进行介绍。
通过加密、认证和访问控制等措施,确保个人信息安全,保护用户隐私数据保护。 例如, 银行卡设置的取款密码,APP关键操作中的人脸识别。
信息安全的第一个部分是机密性(最通常的方面) , 使用数据加密技术,对个人信息进行保密,防止恶意用户拒绝、披露或窃取用户信息。 例如,当我们将一小段信息发送并存储至远程计算机或从远程计算机上检索一段信息时,需要在传输时对该信息进行隐藏。
信息安全的第二个部分是完整性,使用完整性检查机制,确保个人信息的有效性和准确性,确保用户的安全性。 例如,当一个客户在银行存钱或取钱时, 他的账户余额需要根据存入或者取出操作进行变化, 原子性操作(要么成功,要么失败)。
信息安全的第三个部分是可用性,保证个人信息的可用性,以便随时及时访问并使用个人信息,以便更好地提升个人信息的安全性。 例如,当客户交易时不能访问他们的账户,这时银行会发生什么。
安全三要素(机密性、完整性和可用性
)会受到安全攻击的威胁, 虽然文献中可能采用不同的方法来对攻击进行分类,但我们在这里将它们按照安全目标分为三类。
WeiyiGeek.与安全模板有关的攻击分类图
通常有两种攻击威胁到信息的机密性嗅探和流量分析
。
其他服务器主机或者个人电脑
间传输的非加密信息,如嗅探ftp服务的账号密码,当前解决办法是使用sftp进行加密传输。
数据的完整性会受到多种攻击的威胁:篡改、假冒、重放和抵赖。
此只讨论一种威胁可用性的攻击拒绝服务
。
拒绝服务(DoS)攻击是很常见的网络攻击手段,其目的是瘫痪网络服务或使其变得不可用,其原理是通过发送大量伪造的请求或数据包来淹没网络带宽或计算机资源,使其失去可用性。拒绝服务攻击通常可以通过利用系统漏洞来实施,或者利用病毒和僵尸计算机来发送大量的伪造请求或数据包。
当前拒绝服务攻击多为(分布式拒绝服务)DDOS攻击,攻击可能来自一台计算机或由许多计算机代理发起,通常是使用僵尸网络(物联网IOT大量被恶意者控制),同时发送垃圾信息并阻断特定的网络服务,庞大的网络洪水,以使服务器变得不可用。
如何避免或防御网络攻击? 我们知道企业的网络安全都是木桶效应,内部安全情况取决于木桶中最短的木板,你在其他系统安全做得好,也免不了被攻击,所以在企业中需要从制定安全操作流程,以及按照不同的员工分配不同的权限。
为了达到安全目标和防止安全攻击,ITU-T定义了一些安全服务的标准。这些服务中的每一个都是为了在维护安全目标时防止一个或多个攻击而设计的。
实际完成安全目标需要一些技术手段,现今流行两种技术:一种是非常普通的密码术
,另外一种是特殊的隐写术
。
对称密钥密码、非对称密钥密码和散列
。
密码术就是通过加密把消息中的内容隐藏起来,而隐写术是通过在消息上覆盖其他内容而隐藏消息,例如,我们安全圈中常见的图片写隐术。
现在我们来看第一个安全目标机密性,他可以通过使用密码达到,密码术可以分成两大类:对称密钥密码术和非对称密钥密码术
。
描述: 对称密钥密码术使用了同一个密钥(这就是为什么它被称为对称的
)进行加密和解密,并且这个密钥可以用来进行双向通信,对称密钥密码术(也称为保密密钥密码术
)。
下图,显示了对称密钥密码术的基本思想:
例如 Alice通过一个不安全的通道向Bob发送一则消息,假设一个敌手Eve在通道上简单地偷听,通过加密算法她不能理解消息的内容。 从 Alice 到 Bob 的原始消息称为明文,而通过通道发送的消息称为密文,为了从明文创建密文,Alice使用了一个加密算法和一个共享的密钥。 然后为了从密文创建明文,Bob使用了一个解密算法和一个相同的密钥,从而将加密数据解密成明文。
注意,对称密钥加密对加密和解密使用一个密钥(密钥本身可以是一串数值)。此外, 加密算法和解密算法是互逆的。如果P为明文,C是密文,K是密钥,加密算法Ek(x)从明文建立了密文,而解密算法Dk(x)从密文建立了明文
。
我们推断Ek(x)和Dk(x)是互逆的, 如果对一个输入依次施加Ek(x)和Dk(x)
, 它们的作用会相互抵消, 在此处 Dk(Ek(x)) = Ek(Dk(x)) = x
。
加密:C=Ek(P) 解密:P=Dk(C)
值得注意的是,最好可以将加密和解密算法公开但是把共享密钥保密,此时Alice和Bob需要另外一个(安全的)通道来交换密钥,后面我们会讲解到非对称加密。
简单的说明,我们可以把加密看作把消息锁进箱子,而解密可以看成打开箱子,在对称密钥加密中,用相同的密钥来锁和打开“箱子”,在下一节中我们会看到非对称密钥加密需要两个密钥,一个用于上锁而另一个则用于开锁。
当前,我们可以把对称密钥密码分成两大类,即传统对称密钥密码和现代对称密钥密码
。
1.传统对称密钥密码 它是过去时了,但由于它是现代密码的构成要素,所以我们在这里对其进行简要讨论,通常我们把传统密码分为替换密码和移位密码。
1) 替换密码:用一个符号替换另一个符号, 如果在明文中的符号是字母表的字符,我们用另一个字符来代替,而替换密码主要可以分成单字母密码
和多字母密码
。
例如,我们能用字母D代替字母A, 用字母Z代替字母T, 如果符号是数字(0〜9 ), 我们能用7代替3, 用6代替2。
即当偏移量是 3 的时候,所有的字母 A 将被替换成D, B 变成 E。
, 因此加法密码有时也称为凯撤密码。
下面,我将使用C语言进行凯撤密码代码演示(编程语言学得太多,做的笔记也是各种语言的编程示例)。
#include <stdio.h>
int main(){
int ch;
printf("请输入明文:");
while ((ch = getchar()) != '\n')
{
if (ch >= 'a' && ch <= 'z'){
putchar('a' + (ch - 'a' + 3) % 26); //这个是灵魂,利用取余来达到字母偏移,97 = a
continue;
}
if (ch >= 'A' && ch <= 'Z') {
putchar('A' + (ch - 'A' + 3) % 26); // 65 = A
continue;
}
putchar(ch);
}
putchar('\n');
return 0;
}
WeiyiGeek.C语言实现的恺撒密码
“a”
既可以在文本开头加密成 “D”
,也可以在中间加密成 “N”
多字母密码具有可以隐藏原有语言的字母频率的作用,即使通过单字母频率统计都无法破解密文。
为了更好地解释密钥的位置依赖性,我们先讨论一个叫做自动密钥密码的简单多字母密码, 在此密码中,密钥是一个子密流,在这个子密钥流中的每一个子密钥都用来对明文文本中的对应字符进行加密。
第一个子密是 Alice 和 Bob 事先同意并密设定的值,
第二个子密钥是明文中第一个字符的值(在0~25之间),
第三个是第二个明文字符的值以此类推。
2) 移位密码 移位密码不是用一个符号代替另一个符号,而是改变符号的位置, 明文第一个位置上的符号可能出现在密文的第十个位置上,而明文第八个位置上的符号可能出现在密文的第一个位置上, 简单的说,移位密码就是符号的重新排序。
假设,Alice 需要向Bob发送消息"Enemy attacks tonight"
,其加密解密过程如下图所示,注意我们在消息的末尾加上一个额外的字符(z)这样字符个数就是5的倍数。
WeiyiGeek.移位密码图
注意,这里用来进行加密和解密的密钥是相同的,但是算法使用密钥的顺序是互逆的。
3) 流密码&分组密码
文献中将对称密码分为两大组:流密码和分组密码。
2.现代对称密钥密码 由于计算机技术发展进步,需要加密的信息已经不限于文本字符串、而有可能是数字、图表、音频或者视频数据。 在此种情况下,更方便的方法是把这些类型的数据转换成为比特流后再对其流进行加密,然后发送加密后的流,并且在进行处理时,每个字符会替换为8(或者16)位,这意味着字符数也变成原来的8(或者16)倍大, 将更多的字符混合可以提高安全性。
扩展说明: 最简单也最安全的同步流密码是吉尔伯特·弗纳姆
发明并取得专利的一次一密乱码, 一次一密乱码每次加密时使用随机选择的密钥流,加密和解密都使用单一的异或操作,基于异或操作的性质,加密和解密的算法互为逆运算。
描述: 对称与非对称加密实际上是相互相成,即可以取长补短,又可以相互补充,两者之间的差异:
简单介绍 描述: 非对称加密是一种加密方式,它使用一对被称为“公钥”和“私钥”的不同密钥。 公钥用于加密消息,而私钥用于解密消息。 此外,一个密钥可以用于加密消息,但却不能用于解密它。 因此只有拥有正确的秘钥(公钥或私钥)才能够解密它。
简单的说,非对称密钥加密使用两个独立的密钥,即公钥
与私钥
, 你可将其理解为公钥是进行加密信息的并且是公开的(加锁🔒),而私钥是解密信息并且是需要保密的(解锁)。
主要思想 描述: 下图中展示了非对称密钥进行加密时的思想, 其关键点如下所示:
RSA 非对称密码算法 描述:虽然有几种非对称密钥系统,但是最常见的公钥算法之一是 RSA 密钥系统(以发明者 Ron Rivest、Shamir 和 Adleman 命名)。
RSA 使用两个指数 e 和 d,其中 e 是公钥,d 是私钥。
假设P表示明文、C表示密文,那么Alice使用
C = P^e mod n
的算法从明文P中得到密文 C ,Bob 通过P = C^d mod n
来检索 Alice 发送的明文,在密钥生成的过程中创造了一个很大的数作为模数n。
WeiyiGeek.RSA生成密钥图
WeiyiGeek.RSA范例1图
WeiyiGeek.RSA范例2图
RSA 的应用场景 描述: 虽然RSA可以用于对实际消息进行加密和解密,但如果消息很长加密的速度会很慢。因此,RSA加密适用于短消息,以及特定用于数字签名以及其他不需要使用对称密钥来对较短信息进行加密的密码,同时RSA也适用于身份验证。
实践示例.在Linux中生成一个rsa格式的公密钥文件并在主机间进行ssh登录认证。
# 1.生成ras格式的公密钥
$ /usr/bin/ssh-keygen -t rsa -P
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): # 生成路径
Enter passphrase (empty for no passphrase): # 密钥加密密码
Enter same passphrase again: # 密钥加密密码
Your identification has been saved in /root/.ssh/id_rsa. # 私钥
Your public key has been saved in /root/.ssh/id_rsa.pub. # 公钥
The key fingerprint is:
30:f6:d7:2a:ac:56:eb:3f:fa:40:25:8d:90:96:68:cb root@localhost.localdomain
# 2.查看生成的共密钥文件
$ ls ~/.ssh/
id_rsa id_rsa.pub known_hosts
# 3.配置A机器使用密钥登录到B机器,此时需要将公钥传到B机器的 authorized_keys 中。
$ sftp weiyigeek@10.10.10.250 -P 22
> put /root/.ssh/id_rsa.pub
> exit
$ touch /root/.ssh/authorized_keys
$ cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
# 或者执行如下命令
$ ssh-copy-id -i ~/.ssh/id_rsa.pub weiyigeek@10.10.10.250 -p 22
# 4.然后就可以在A机器上使用密钥进行登录到B机器中
$ ssh -i /root/.ssh/id_rsa weiyigeek@10.10.10.250 -p 22
到目前为止我们研究的密码系统提供了机密性,但在现代通信中还需要考虑安全的其他方面,比如完整性、消息和实体验证、不可抵赖性和密钥管理。
为了防止消息被篡改,我们在发送端/接收端进行验证信息完整性,通常使用如下方法一是消息和消息摘要,二是散列函数。
消息和消息摘要
保证文档完整性的一种方法是通过使用指纹,来确保文档没被篡改过。例如,为了保证消息完整性,消息要通过一个称为密码散列函数的算法,生成文件的消息和摘要,接收方验证比对该文件的信息消息和摘要,如果相同则确保信息未被串改过。
散列函数
将任意长度的消息加密成为固定长度的消息摘要, 所有的散列函数加密都需要从长度不一的消息中创造出长度固定的消息摘要, 建造这样一个功能最好由迭代完成,创造一个有着固定输入值并且可以使用必需的次数的函数,而不是使用输入值大小可变的散列函数。 这里的固定输人值函数指的是压缩函数,它将 n 位的一串字符缩并创造成 m 位的字符串,这里的 n 通常大于 m, 该方案被称为选代加密散列函数。
罗恩·李维斯设计的几个列算法被称为MD2、MD4和MD5
消息摘要, 当前最新的版本 MD5 是 MD4 的个加强版,它可以将消息分成长度为 512 位的分组并创造大小为 128 位的摘要, 然而事实证明大小为 128 位的消息要太小了以至于不能阻挡攻击(容易被碰撞检测)。
因此,为了解决 MD 散列算法的不安全性,安全散列算法诞生了,安全散列算法(SHA)是由国家标准与技术研究所(NIST)研制的一个标准。SHA 经过了几个版本, 从 sha1、sha224、sha256、sha384、sha512(当前最新)
# md5 摘要信息
$ md5sum weiyigeek.png
51644c3d7174702529c5706ddf8db020 weiyigeek.png
# sha1sum 摘要信息
$ sha1sum weiyigeek.png
92ade000aed6c07b501a4c03374c0412bd33c716 weiyigeek.png
# sha256sum 摘要信息
$ sha256sum weiyigeek.png
07a041820e1dff2c48901828b2629275a301480adf804f55e63849849227ffb0 weiyigeek.png
WeiyiGeek.摘要信息与散列算法图
通过前面学习我们知道,消息摘要可以检验消息的完整性,保证消息没被篡改, 然而为了确保消息的完整性以及数据源的身份验证——这消息是真的来自于Alice而不是任何其他的人,我们需要在过程中包括一个Alice和Bob共享的秘密(没有经过Eve)
, 我们需要创造一个消息验证码(message authentication code, MAC)
。
即MAC通过散列函数和密钥的组合来保证消息的完整性和消息验证。
消息验证流程:
温馨提示: HMAC国家标准与技术研究所(NIST)发布了新一代MAC标准, 通常称为HMAC (散列消息 验证码)
, HMAC的实施比简化的MAC更复杂,因此此处不再多做累述。
为了保证消息完整性和消息验证我们还可以使用的另一种方法是数字签名
,数字签名使用一组公私钥。
为了方便大家理解,此处在讲解数字签名前,对签名概念进行描述,当一个人在文档上签名就表示该文档是起源于他或他已同意的,签名对接收者来说是文档来自正确实体的证据。
例如,当客户签了一张支票,银行就需要确信支票是客户签署的,而不是其他人。换言之,文档上的签名是身份验证的标记,它验证通过,文档就可信, 此处签名概念也可以看做是艺术家在画上的签名,艺术上的签名如果得到验证通过,那么这幅画通常也是可验证通过的。
究竟什么是数字签名?
数字签名是一种在数字环境中实现签名的方法(数字编码),其包含有用户的身份信息以及消息的原始数据,它可以确保发送方的身份,确认消息的完整性和原始性,以及消息的传输的安全性。
数字签名的功能?
数字签名的功能主要有,保证发送者的身份、确认消息的完整性、确认消息抵达的可靠性、确认消息的原始性和保证消息的传输安全性。 简单的说就是, 验证所发送消息的真实性、完整性和可靠性。
那消息验证与数字签名的区别是什么?
MAC通过密钥来保护消息摘要,数字签名则使用一组公私钥.
当Alice向Bob发送消息时,Bob需要检査发送者的身份,他需要确信消息来自Alice 而不是Eve(其他人), Bob可以要求Alice对信息进行电子签名。
换言之,一个电子签名能证明 Alice 作为消息发送者的身份, 我们把这种签名称为数字签名。
1.对比
2.过程 下图中显示了签名过程,发送者使用签名算法去签署消息,消息和签名被发送给接收者。接收者收到消息和签名,对收到的内容应用验证算法,如果结果是真,消息被接受,否则消息被拒绝。
数字签名需要公钥系统,密码系统使用接收者的私钥和公钥,数字签名使用发送者的私钥和公钥,签署者用私钥签署,验证者用签署者的公钥验证。
我们能否用一个密钥(对称的)来签署和验证签名?
答案是否定的,有以下几个原因。首先,密钥是只有双方知道的(这个例子中是Alice和Bob)因此如果 Alice 需要签署另一份文档,并发送给Ted, 那她就需要使用另外的密钥。 其次,我们将看到,为一个对话创建密钥涉及验证,而验证要使用数字签名, 因此,我们就遇到一个错误的循环。再次,Bob可以使用他和Alice间的密钥签署一个文档,把它发送给Tde,假装这是来自于Alice的。
3.签署摘要 在处理较长消息时,非对称密钥密码系统的效率低下,而在数字签名系统中,消息通常较长,但我们不得不使用非对称密钥模式, 解决方法是签署消息的摘要,该摘要比消息本身要短得多。
消息摘要与消息具有一对一的关系, 发送者可以签署消息摘要,接收者可以验证消息摘要,两者的效果是相同的。
WeiyiGeek.签署摘要图
4.服务 此小节讨论几个安全服务,包括消息机密性、消息验证、消息完整性和不可抵赖性。
(1) 消息验证 :一个安全的数字签名模式就像一个安全的普通签名(也就是说一个人不容易复制)一样 能提供消息验证,也称为数据源验证。Bob能验证Alice发送过来的信息是因为在验证过程中使用了Alice的公钥。Alice的公钥不能验证用Eve私钥签署的签名。
(2) 消息完整性 :如果我们签署消息或消息的摘要,消息的完整性就能被保护,因为如果消息改变了,我们就不能得到相同的摘要。当今的数字签名模式在签署和验证算法中使用了散列函数,这样更好地保护了消息的完整性。
(3) 不可抵赖性 :如果Alice签署了一个消息,然后否认它,Bob能否证明Alice实际上是签署了它呢?例如,如果Alice向银行(Bob)发送消息,要求从她的账户转10 000美元到Ted的账户,Alice能否事后否认她发送过这样的消息?使用我们目前为止介绍的模式,Bob可能会有一个问题。Bob必须先保存签名,然后用Alice的公钥去建立原始消息,去证明文件中的信息和新创建的消息是相同的。但这样并不可行,因为Alice这时可能已经更换了私钥或公钥。她也可以声称含有签名的文件是不可信的。
如何解决不可抵赖性问题?
解决方案是: 可信的第三方, 人们可以在他们之间建立可信中心, 在本章的后面,我们将看到受到信任的第三方可以解决有关安全服务和密钥交换的很多问题。 例如: 展示了一个可靠的第三方如何防止Alice抵赖她发过的消息,此时是不是感觉下述流程与网站CA以及服务端、客户端证书的颁发使用原理是一致的
WeiyiGeek.使用可信的第三方来达到不可抵赖性图
(4) 机密性 数字签名不提供机密通信,如果机密性是需要的,那么消息和签名就要使用对称密钥密码或非对称密钥密码进行加密。
主要用来使得一方证明另一方标识的一种技术,一个实体可以是一个人、一个过程、一个客户端或一个服务器
。
身份需要证明的实体称为要求者
, 试图证明要求者身份的一方称为证明者
。
(1) 实体与消息验证 在消息验证(数据源验证)和实体验证间有两点区别:
(2) 验证分类 在实体验证中要求者必须向证明者标识自己,可以使用下面三种证据中的一种:
密码、PIN码、密钥和私钥
。护照、驾驶证、身份证、信用卡和智能卡
。普通签名、指纹、声音、面部特征、视网膜模型和手迹
。
在这部分我们只讨论第一种验证,所知道的, cu种验证通常用作远程(在线)实体验证。另外两个分类则通常在要求者个人出现时使用。(3) 密码认证
最简单且最古老的实体身份验证的方法是基于密码的身份验证,密码是要求者知道的一些东西。当用户需要访问系统资源时(登录),他就需要一个密码。每个用户都有一个用户标识,这是公开的;还有一个密码,这是私有的,然而密码在攻击面前很脆弱,密码可能被窃取、截获或猜出(暴力破解
)等。
(4) 挑战回应 在密码验证中,要求者通过展示他们知道秘密(密码)来证明他们的身份。但是要求者暴露了这个秘密,就容易受到敌手的截获。在挑战-回应身份验证中,要求者能证明他知道 秘密而不需要暴露它。换言之,要求者没有把秘密发送给证明者,但证明者或者有它,或者 能找到它。 在挑战-回应身份验证中,要求者证明他们知道秘密,而不需要把秘密暴露给证 明者。 挑战是一个随时间变化的值,如随机数或一个时间戳,它由证明者发送给要求者。要求者对挑战运用一个函数,把结果(称为响应)发送给证明者。响应表明要求者知道秘密。
WeiyiGeek.单向对称密钥认证图
第一个消息不是挑战-回应的一部分,他只告知证明者要求者想要进行挑战。第二个 消息是挑战。Rb是证明者(Bob)为了挑战要求者随便挑选的随机数(一定数量的缩写)。要求者将随机数通过只有要求者和证明者知道的秘密共享密钥进行加密并将结果发送给证明者。证明者对消息进行解密,如果得到的随机数和证明者发送的相同,Alice就得到许可进入。 注意在这个过程中,要求者和证明者需要在过程中对他们使用的对称密钥保密。证明者也必须保存给要求者进行鉴别的随机数值直到返回回应。
WeiyiGeek.单向非对称密钥图
WeiyiGeek.单向数字签名验证图
此小节将讨论对称密钥密码术中的密钥和非对称密钥密码术中公钥是如何分配和维持的?
(1) 对称密钥分发 在对大量消息进行加密时,对称密钥密码术的效率要比非对称密钥密码高,但是对称密钥密码需要在双方间共享(这是一个风险点)。
至此,我们需要一种有效的方法来维护和分发密钥。
(2) 公钥分发
在非对称加密中公钥往往是共享的,每个人有权访问每个人的公钥,公钥对公众可用,当然公钥也像密钥一样需要进行分发。
我们知道,在企业互联网边界上一定会有一台防护墙,来防止公网上的常规的一些黑客攻击,过滤有害信息或者说是指令,其是为了推进一些数据包而过滤其他数据包而设计的。
例如,图中展示了企业中防火墙在网络拓扑中的位置。
WeiyiGeek.防火墙图
防火墙实现功能很多,可以做NAT转发,也可以过滤所有到来的目标为特定主机或服务器(例如HTTP)的数据包,也可以用来阻拦对组织内特定主机或服务的访问(ACL访问限制),防火墙通常分为包过滤防火墙
和代理防火墙
。
原理: 它可以基于网络层的信息和传输层的头部:源和目标IP地址,源和目标端口地址以及协议的种类(TCP或UDP)来推进或阻拦数据包。
包过滤防火墙是一个使用过滤表单决定哪些数据包应该丢弃(不推进)的路由器, 如下图所示根据过滤表,以下数据包被过滤: 1)来自网络131.34.0.0的数据包被阻拦了(安全预防措施)。注意*号代表“任何”。 2)终点为任何国际TELNET服务器(端口23)的外发数据包被阻拦了。 3)到来的目标为内部主机194.78.20.8的数据包被阻拦了,该组织希望这个主机只用于内部使用。 4)终点为HTTP服务器(端口80)的外发数据包被阻拦了,该组织不希望雇员浏览因特网。
WeiyiGeek.包过滤防火墙图
总结:包过滤防火墙是基于网络层的有效信息和传输层头部(IP和TCP/UDP)建立的
目的:有时我们也需要基于消息自身携带的信息(应用层上)进行过滤,例如通过 VPN 代理访问。
比如,假设一个组织想对其网页试试以下几条政策, 只有那些之前与本公司建立商业联系的因特网用户可以访问;其他用户必须阻拦。
在此情况下,数据包过滤防火墙就不可行,因为它无法区分到达TCP端口80 (HTTP)的不同数据包,必须在应用层(通过URL)进行测试。
一个解决措施是安装代理计算机(有时也称为应用网关),代理计算机位于客户计算机和公司计算机之间。当用户客户进程发送消息时,应用网关运行服务器进程来接收请求。服务器在应用层打开数据包并且查找这个请求是否合法。如果是,那么服务器运行客户端进程并将消息发给公司中真正的服务器,否则这个消息会被丢弃并且错误消息会发给外部用户。通过这个方法,外部用户的请求基于内容在应用层进行筛选。