安全问题概述

计算机网络上的通信面临以下四种威胁:

  • 截获,通信内容被侦听
  • 中断,通信被他人恶意终止
  • 篡改,通信内容被中途修改
  • 伪造,伪造身份和内容进行通信

其中,截获信息的攻击成为被动攻击,因为不会对通信的双方造成干扰。而另外三种攻击都称为主动攻击,因为攻击影响了原有的通信。

因此,计算机网络通信安全,也是基于以上四点进行防范,即保证通讯的保密性、设计安全协议、进行访问控制。

加密

如果一种密码手段,能保证不论攻击者获得了多少密文,都无法有足够信息确定明文,则成为密码是无条件安全的,也就是理论上不可破的。

假如密码理论上不可破,或者虽然能够通过暴力穷举等方式破解,但是利用目前的计算资源无法在合理时间内破解,则称为计算上安全

密钥体制可以分为对称密钥密码体制和非对称密钥密码体制。

对称密钥密码体制

又称为私钥密码体制,即加密和解密双方使用一个共有的密钥。无论加密还是解密,使用这个密钥就可以完成。

优点是计算较为快速,通讯效率高。缺点是如果不能通过可靠的手段分享这个共有的密钥,假如密钥在传输过程中泄露了,那么内容明文就会被他人拿到。

如DES。

非对称密钥密码体制

又称为公钥密码体制。加密和解密使用的密钥不同,因此有一对密钥,称之为私钥和公钥。通常在通讯之前,服务方会将公钥传给请求方,而自己的私钥则不必流出。

任何用私钥加密的密文只有公钥才能解密(即使是私钥自己也不行),而任何公钥加密的密文只有私钥才能解密。因此,即使公钥泄漏。

这样一来,请求方使用公钥加密自己的用户名密码等重要信息,即使另有他人持有公钥,也不能解得明文,只有服务器内储存的私钥才能解密。

最著名的公钥密码体制是RSA体制。

但是工要密码体制的缺点也很明显:加密和解密慢,通讯效率低;而且实际上服务器发出的内容会被其他拿有公钥的攻击者解密。

所以现在来看,较好的一种通讯方式是对称和非对称密钥密码体制共用。也就是说,首先在建立连接时,服务方和请求方会使用非对称的方式发送一个密钥。然后在后面的通讯中,双方都使用这个密钥,用对称的方式交换信息。这样不仅效率较高,而且相对安全。

例如https就采用基于这种方式的加密通讯。具体可以参考这篇博客:深入理解HTTPS工作原理

数字签名

加密解决了信息保密的问题,但是仍无法确保通讯对方的身份,有可能是攻击者伪装的服务方。

因此,数字签名就能提供基于可信任的第三方的一种身份认证。这一点在https的原理中也是至关重要的一环。

简单来说,https数字签名的认证流程如下:

  1. 可信任的大机构(证书签发组织)有自己的公钥和私钥,私钥被保护起来。
  2. 服务方向大机构申请证书,提供自己的信息。大机构通过一定手段核实后,将申请者的信息扔进hash函数得到一个摘要,然后用自己的私钥加密后得到数字签名,随着申请者的信息、签发机构信息、有效期等一系列内容以及一个申请者专用的公钥生成一个数字证书,同时将申请者专用的私钥也通过可靠手段给申请者。
  3. 申请者作为服务方,把证书公开,以此证明自己是可靠的服务方。任何其他人可以拿证书里的数字签名内容使用大机构公开的公钥来解密验证信息。
  4. 然后请求方使用证书中的公钥和服务方交换自己产生的随机密钥,服务方用自己专用私钥解密拿到这个密钥。之后双方用这个随机密钥进行对称密钥体制的加密通信。

https的数字签名可以说很典型了。具体还可以参考下面这篇博客:数字签名是什么?

防火墙

是软件和硬件构成的系统,通常是一种特殊编程的路由器,用来在网络之间实施接入控制策略。

防火墙可以允许和阻止通讯。防火墙内部是可信赖的网络,而外部则是复杂而不可信赖的。

一般分为两类:

  • 网络级防火墙,防止整个网络的外来非法入侵。
  • 应用级防火墙,阻止或允许某个应用或者服务的网络通讯。

防火墙设置的一种手段是设置访问控制列表,也就是下面的ACL

ACL

简介

Access Control List,访问控制列表。

是一系列控制语句的集合。每一条控制语句会描述匹配的情况应采取的动作(通常是允许或者禁止)。每一个列表有若干语句,而且语句组织是有顺序的。在有新的报文出现时,会依照顺序依次尝试匹配语句,一旦匹配前面的语句,就会按照匹配到的语句放行或者禁止,而不再比较后面的语句。每一个列表默认最后有一条隐含的deny any语句,也就是若没有匹配到任何一个语句就会丢弃报文。

例如有以下三条语句:

  1. Permit packets from 192.168.100.1 to pass
  2. Permit packets from 192.168.100.2 to pass
  3. Deny packets from 192.168.100.3

碰到如下三种情况和反应:

  1. 来自192.168.100.1的报文,比较一次,匹配1,通过
  2. 来自192.168.100.3的报文,比较三次,匹配3,拒绝
  3. 来自192.168.100.4的报文,比较三次,匹配隐含的deny any,拒绝。

路由器上如果没有配置ACL,则直接转发。如果有ACL配置,则按照上述规则完成匹配筛选,丢弃掉拒绝的报文。下图表示了路由器转发的控制逻辑:

ACL

配置标准ACL

标准ACL只能基于源IP地址进行控制。需要在路由器的全局配置模式下先制定一个列表,然后在端口配置上应用这个列表。

配置列表的语法为access-list access-list-number {permit/deny} {test-conditions}。其中,access-list-number应该是一个1-99的数,用来区别不同的list。这一条语句将一条规则加到一个列表的后面,也就是先设置的条目先匹配,后设置的后匹配。test-condition的位置应该提供一个屏蔽网段的信息,包括一个ip地址和wildcard-mask(子网掩码的补)。如果wildcard-mask是0.0.0.0表示需要精确匹配到ip地址才算,否则则是指定一个网段都匹配。

例如想匹配192.5.5.32/27网段,则应在test-conditions处填写192.5.5.32 0.0.0.31。

如果是标准ACL屏蔽源网段对目的网段的访问,则应该在距离目的网段尽量近的地方设置较好,否则有可能意外地屏蔽到不该屏蔽的其他网段(标准ACL只能基于源IP地址进行控制)。但是这样还是有一个缺陷,因为要屏蔽的报文已经传播了过了很多路由器,浪费了一些网络资源。

test-conditions也可以使用一些已有的关键词:any表示所有ip均匹配,而host关键词可以替换0.0.0.0的wildcard-mask来匹配单一ip。

设置好list之后,要进入端口配置模式中,在相应的端口绑定上:ip access-group 1 out,最后可以指定是in还是out,表示对从端口进入的报文控制还是从端口流出的报文控制。

配置拓展ACL

拓展ACL能够基于源地址和目的地址进行控制,并且能够精确控制经过某个端口的报文,也可以根据服务应用精确匹配,还有一些其他的功能。

配置列表的语法为:

Router(config)# access-list access-list-number{permit|deny} {protocol|protocol-keyword} {source source-wildcard} {destination destination-wildcard} [protocol-specific options] [log]

这里的access-list-number需要是一个100-199的数字。

可选参数很多。{protocol|protocol-keyword}可以指定TCP和UDP协议。而[protocol-specific options]可以指定一些上层应用协议,或者端口号。log选项可以将丢弃的报文记录到日志中。

例如access-list 101 deny tcp 192.5.5.0 0.0.0.255 210.93.105.0 0.0.0.255 eq telnet log可以将telnet的屏蔽掉,并且能记录屏蔽记录。

拓展ACL屏蔽源网段对目的网段的访问,应该在距离源网段比较近的地方设置,因为不存在标准ACL中的问题(拓展ACL有对目的地址的控制),所以这样一来可以节约网络资源。

同样地,要在端口配置模式中,在相应的端口绑定上定义好的list,注意要表明in或者out。

其他相关指令

命名:ip access-list standard <name>可以使用带有名字的list,而用不是一个数字代表。

show access-lists可以查看所有list

show access-lists {name | number}查看特定的一个list

show ip interface查看某个端口上绑定的list