本系列文章包含:
通常一个规则是由多条 访问控制列表 组成,一条访问控制列表也叫做一个 表项。一个表项由对象(object
)、行为(action
)、选型(option
)这 3 3 3 个元素组成。
举个栗子:思科 标准访问控制列表,表项只允许源 IP 地址作为对象,而行为是在允许(permit
)和拒绝(deny
)之间二选一。当满足条件时,也就是触发对象时,选项可以指定 “记录日志” 或 “表项有效时间” 等操作。如果使用了有效时间选项,就可以设置一个只有公司上班时间为对象的表项。
扩展访问控制列表,对象就不仅仅是 IP 地址,还可以是 IP 协议号、源 IP 地址、目的 IP 地址、ToS 数据域、ICMP 类型、ICMP 消息、源 TCP/UDP 端口号、目的 TCP/UDP 端口号、TCP 会话是否已经建立等。
举个栗子:允许 IP 地址是 10.1.1.2
的客户端向 IP 地址是 172.16.1.1
的服务器进行 Telnet 连接,Telnet 的 TCP 端口是 23
,访问控制列表如下:
access-list 101 permit tcp host 10.1.1.2 host 172.16.1.1 eq telnet
对比路由器的访问控制列表,防火墙的安全策略最大的不同点是对象,防火墙以 区域 作为对象,还可以以应用程序名称和用户名称等信息作为对象。
序号 | 源区域 | 目的区域 | 源地址 | 目的地址 | 目的端口 | 行为 |
---|---|---|---|---|---|---|
1 | Trust | Untrust | 192.168.1.0/24 | Any | Any | Allow |
2 | Trust | Untrust | 192.168.2.0/24 | Any | 80 | Deny |
3 | Untrust | DMZ | Any | 10.1.1.1 | 80 | Allow |
举个栗子:在上表的安全策略中,192.168.2.1
从信任区域向不信任区域的 80
端口通信时,防火墙首先执行第 1 1 1 条安全策略,发现源地址不匹配,不执行 Allow
。接着执行第 2 2 2 条安全策略,发现地址和端口匹配,执行 Deny
,也就是拒绝通信。防火墙的安全策略从上往下依次执行的行为,也叫做安全策略查找(policy lookup
)。
Any
表示任何值都与策略匹配。如果是安全策略中,出现未定义的通信,比如从信任区到 DMZ
区域的通信,防火墙默认执行拒绝,这个策略叫做 “默认拒绝”(implicit deny
)。
如果需要在防火墙没有匹配的情况下,执行 Allow
,可以在安全策略的最后一行设置对象为 Any
,行为为 Allow
的策略。
序号 | 源区域 | 目的区域 | 源地址 | 目的地址 | 目的端口 | 行为 |
---|---|---|---|---|---|---|
1 | Trust | Untrust | 192.168.1.0/24 | Any | Any | Allow |
2 | Trust | Untrust | 192.168.2.0/24 | Any | 80 | Deny |
3 | Untrust | DMZ | Any | 10.1.1.1 | 80 | Allow |
4 | Any | Any | Any | Any | Any | Allow |
当然,防火墙的安全策略是会有上限,上限由产品规格决定。而且当表项越多时,设备性能也会随之下降。
防火墙不仅能够基于区域、IP 地址、端口号、应用程序等设置安全策略,还可以使用 内容安全策略 进行通信控制。内容安全策略包括 反病毒、IPS(入侵防御系统)、URL 过滤、DLP(数据泄露防护)等基于内容的安全机制,能够拦截非法通信和避免不必要的通信流量。还可以对这些通信不进行拦截,而是记录到告警日志中后放行。
安全设备的默认设置是拦截严重程度高的攻击,严重程度低的攻击只记录到告警日志中。当然,严重程度的高低可以自定义,也可以修改设置为拦截严重程度低的攻击。
反病毒和 IPS 可能会出现误判,误判分为 假阳性错误 和 假阴性错误 两种。
私有 IP 地址只能在内部网络通信,如果要访问外部网络(互联网),可以通过路由器或防火墙把私有 IP 地址转换为公网 IP 地址,这个过程叫做 NAT(Network Address Translator
)。
NAT 以前是路由器的功能,后来位于网络边界的防火墙也常常使用这个功能。路由器和防火墙等运行 NAT 功能后,也叫做 网关(gateway
)。
一、静态 NAT
静态 NAT(Static NAT
)是指 NAT 转换前的地址和 NAT 转换后的地址是一对一的对应关系,通常是一个私网地址对应一个公网地址,手动将对应信息配置到网关中。
动态 NAT(Dynamic NAT
)是在网关配置一个 IP 地址池(IP address pool
),地址池里面包含多个 IP 地址。在 NAT 建立会话时,在地址池内的 IP 地址按顺序分配一个转换后的 IP 地址。由于地址范围能够手动进行设置和更改,因此这种方式应用的比较多。
虽然和静态 NAT 有点类似,私有地址和公网地址是一对一的映射关系,但不是指定的 NAT 转换后地址,而是动态分配的、在 IP 地址池中排序靠前的有效地址。
三、源 NAT
源 NAT(Source NAT
)是对发送方的源 IP 地址进行 NAT 转换。在公司内部网络的客户端,要访问互联网的服务器,客户端的私有地址作为发送源,把数据发送到网关时,必须将私有 IP 地址转换成公网 IP 地址才行。
要和互联网上的服务器进行通信,必须使用公网 IP 地址,但是 IPv4 地址有限,无法为每台客户端都分配一个公网地址。大部分情况下,源 NAT 能够通过动态 NAT 方式节约公网地址资源。在网关上设置地址池,或在网关的接口使用 NAPT ,可以实现私有网络访问互联网的功能。
外部网络只能看到公网地址信息,源 NAT 能够隐藏客户端实际使用的 IP 地址,从而降低受到外部网络攻击的风险。
四、目的 NAT
目的 NAT(Destination NAT
)是接收到的目的 IP 地址进行 NAT 转换。
互联网的客户端,想要通过网关访问内部网络的服务器时,由于公司内部服务器使用内网地址,无法直接从互联网访问到,需要进行目的 NAT 。网关作为内部服务器的代理,把服务器的内网地址映射到公网地址,收到外网客户端访问公网地址时,网关将报文的目的地址转换为内部服务器的私有地址,完成路由和访问。公司内的服务器通常放置在 DMZ 区域中,能够对外部网络屏蔽内部服务器的地址,从而避免内部网络受到攻击。
五、NAPT
当有大量的内网客户端要跟外网通信,而公网地址只有一个或者少量时,网关无法完成私有地址和公网地址的一对一的分配。
这时,网关需要结合 TCP 或 UDP 端口号,完成多个私有地址映射成一个公网地址的转换,这种转换方式叫做 NAPT(Network Address Port Translation
,网络地址端口转换)。
VPN,全称是 Virtual Private Network
,也就是 虚拟私有网络。VPN 是使用电信运营商提供的公共网络,搭建内部网络的技术。
内部网络的财务、人事等数据,对外而言是属于机密信息,必须在内部封闭的传输数据。如果只有一个办公场所,可以通过 LAN 搭建内网。但如果北京和上海都有分支机构时,就需要在不同的办公场所之间搭建内网。电信运营商有 专线服务,可以完成不同地域的内网搭建。专线是单独使用的线路,不用担心数据被窃听,通信质量也能得到保证,但是专线费用昂贵。
还有 ADSL 这种互联网接入服务,虽然属于共享类型网络,但是价格低廉,搭建内网有成本优势。路由器、防火墙、VPN 设备都支持 IPsec-VPN 功能,在各个分支机构内,使用这些设备建立 IPsec 隧道,完成 VPN 的搭建。
常见的 VPN 网络拓扑有 点对点 VPN、中心型 VPN、远程接入 VPN。
一、点对点 VPN
点对点 VPN(site-to-site VPN
)是通过 IPsec 隧道连接两个网络的拓扑结构。网络的网关,通常是路由器或防火墙等网络设备,在两个网络间,使用点对点的拓扑结构,建立 IPsec 隧道。
这里的网络,是指不在同一个局域网的网络,比如:成都机构或广州总部的任意一个站点。因为是站点(site
)之间的连接,所以叫做点对点 VPN 。
二、中心型 VPN
中心型 VPN(hub and spoke VPN
)是星型拓扑结构,也就是一个中心站点的设备,连接多个远程站点的设备,形成的网络结构。中心站点(center site
)位于总部的网络,也就是数据中心,成为整个结构的核心站点。一般是电信供应商提供的 VPN 业务,以电信供应商的基础设施为中心站点,通过 VPN 连接其它站点。
在家里,或出差在外时,通过互联网使用 PC 上的软件,与公司的 VPN 设备建立 IPsec 隧道,能够访问公司内部网络的拓扑结构,叫做 远程接入 VPN。
远程接入的 IPsec-VPN
需要在 PC 上安装 VPN 客户端软件,而 SSL-VPN
是通过 Web 浏览器,使用 SSL 连接到公司的 VPN ,通过 SSL(HTTPS
)和公司的内部网络进行连接。
SA(Security Association
):IPsec 通信时建立的逻辑连接。
ESP(Encapsulating Security Payloads
):原始报文使用 DES
/ 3DES
/ AES
中的任意一种算法进行加密,通过 HMAC 确定数据是否被篡改,使用的 IP 协议号是 50 50 50。
AH(Authentication Header
):根据 HMAC 信息确定报文是否被篡改的认证协议。不对报文做加密处理,使用的 IP 协议号是 51 51 51。
IKE(Internet Key Exchange
):IPsec 协议用来交换 key
信息的协议,也叫做 ISAKMP
/Oakley
。在 ISAKMP
协议上实现 Oakley
的 key
交换过程。使用的是 UDP 端口号 500 500 500。分为阶段一和阶段二进行处理。
HMAC(Keyed-Hashing for Message Authentication code
):用来验证信息是否被篡改的一种 MAC(Message Authentication code
),也就是消息认证码,通过散列函数与密钥信息的组合计算得出,其中散列函数使用的算法一般是 MD5
或 SHA-1
。
SPI(Security Pointer Index
):表示 SA 的编号, 32 32 32 比特。在对报文加密时,用这个值表示使用了什么加密算法和密钥信息。
NAT traversal:通过 ESP 加密的报文,由于没有 TCP / UDP 头部,因此无法使用 NAPT。可以使用 NAT traversal
技术,给 ESP 加密后的报文添加 UDP 头部,从而在 NAPT 环境下进行 IPsec 通信。一般使用 500 500 500 或 4500 4500 4500 的端口号。
IPsec-VPN 连接:在建立 IPsec 隧道时,发起协商的叫做发起方(initiator
),另一方叫做应答方(responder
)。发送方是最先发出通过 IPsec 隧道报文的设备。
更新 key(rekey
) :IPsec 隧道建立后,每过一段时间,或经过一定量的数据,就会进行 rekey
操作。VPN 设备有修改 rekey
时间的功能。
举个栗子:网络 A 与网络 B 通过 IPsec 隧道连接时,网络 A 的 PC1 想和网络 B 的 PC2 进行通信。
PC1 发送请求,到达网络 A 的网关,也就是 VPN 设备 A ,这时的报文还未加密,是明文状态。VPN 设备 A 对报文进行加密,并添加 ESP 头部和在隧道中使用的 IP 头部(叫做外层 IP 地址),再通过 IPsec 隧道发送出去。
网络 B 的 VPN 设备 B 通过 IPsec 隧道收到加密的报文,会检查 ESP 头部和 AH 头部。如果 ESP 序列号不正确,VPN 设备 B 就会认为是重放攻击,并输出错误信息,SPI 值不正确,会输出 “Bad SPI
” 的错误通知信息。
如果加密报文正常,就进行解密操作,去除外部 IP 、ESP 、AH 等头部,并对原来 IP 头部的目的地址进行路由,从而到达 PC2 。
PC2 向 PC1 回复消息时,由 VPN 设备 B 进行加密处理,由 VPN 设备 A 进行解密处理。
中心型 VPN 的远程站点客户端和中央站点服务器的 VPN 通信也是这种处理流程。
举个栗子:远程站点 A 、远程站点 B 和中央站点 VPN 设备 C 。A 的 PC1 和 B 的 PC2 进行通信。
报文通过 VPN 设备 A 和 VPN 设备 C 的 IPsec 隧道,再经过 VPN 设备 C 和 VPN 设备 B 的 IPsec 隧道,最终到达 PC2 。
如果中央站点是路由器或 VPN 设备,一般只会解密、加密和路由选择处理。如果中央站点是防火墙,就会在报文解密后进行检查,只对安全的报文进行加密,然后再向远程站点发送。
路由器和 VPN 设备通常使用基于策略的 VPN 。基于策略的 VPN 是指根据策略(访问控制列表)控制经过 IPsec 隧道的流量,这样即使路径发生变化,也不会对 IPsec 通信造成影响。
基于策略的 VPN 需要设置 IPsec 策略和 proxyID 信息。proxyID 指定 IPsec 隧道传输报文的本地网络和远程网络。
举个栗子:站点 A 和站点 B 使用点对点 VPN 组成网络,其中站点 A 网络是 192.168.1.0/24
和 192.168.2.0/24
,站点 B 网络是 192.168.3.0/24
和 192.168.4.0/24
。如果只有 192.168.1.0/24
和 192.168.3.0/24
进行加密通信,那么在站点 A 的 VPN 设备设置本地 proxyID 为 192.168.1.0/24
,远程 proxyID 为 192.168.3.0/24
。在站点 B 的 VPN 设备设置本地 proxyID 为 192.168.3.0/24
,远程 proxyID 为 192.168.1.0/24
。
基于路由的 VPN 通常是防火墙产品使用的 VPN 类型。防火墙会对 IPsec 报文进行精确的控制。
在基于路由的 VPN 中,IPsec 隧道是使用的虚拟接口,又叫做隧道接口(tunnel interface
),流量通过这个接口进入 IPsec 隧道。如果有流量需要在 IPsec 隧道内传输,可以设置路由选择,转发到隧道接口就行。
基于策略的 VPN 使用策略来控制 IPsec 通信的流量,而基于路由的 VPN 通过隧道接口的路由信息来控制 IPsec 通信的流量。所以在进行 IPsec 通信时,可以和处理普通报文一样,通过策略定义报文过滤和防火墙处理等。
在 IPsec 通信中,为了建立加密隧道的 SA ,需要在设备之间使用 IKE 协议完成密钥的交换。
为了提高安全性,IKE 协议分为阶段 1 和阶段 2 两个部分。IKE 阶段 1 是完成鉴别和保护 SA 通信的双方,同时生成阶段 2 需要的公有密钥,建立 IKE SA 等工作。
参数 | 值 | 说明 |
---|---|---|
模式 | main 模式或 aggressive 模式 |
在 main 模式中,使用 IP 地址标识设备。隧道终端的两个 VPN 设备如果是固定分配的 IP 地址,就可以使用 main 模式,如果一个终端是使用 PPPoE 或 DHCP 自动获取 IP 地址,就需要使用 aggressive 模式 |
认证方式 | 数字证书或预共享密钥 | 使用公共机构发行的安全证书安全性较高,但申请流程麻烦。预共享密钥就是在隧道两端的设备使用相同口令登录的方法,引入非常简单。使用数字证书时,需要指定密钥的类型(RSA 或 DSA )和长度(bit 数)。一般密钥长度在 512 512 512 / 768 768 768 / 1024 1024 1024 / 2048 2048 2048 bit 中任选,而 bit 数越大安全性就越强 |
Diffie-Hellman group | group1 、group2 、group5 |
简称 DH,group 数字越大表示在 Oakley 密钥交换时使用的公有密钥强度越强。group1 的长度是 768 768 768 bit ,group2 的长度是 1024 1024 1024 bit ,group5 的长度是 1536 1536 1536 bit |
加密算法 | DES 、3DES 、AES |
可以选择密钥长度是 56 56 56 bit 的 DES 、密钥长度是 168 168 168 bit 的 3DES 或密钥长度是 128 128 128 / 192 192 192 / 256 256 256 bit 的 AES ,其中 AES 的使用比较普遍。密钥长度越长强度越高,处理也就越耗费时间 |
认证算法 | MD5 、SHA-1 |
MD5 使用 128 128 128 bit 、SHA-1 使用 160 160 160 bit 的散列值进行数摆的认证。像 SHA-1 这种使用的散列值超长,不同数据之间因散列计算结果相同而造成散列 “冲突” 的可能性就越低 |
IKE ID | IP 地址或 FQDN | 用于识别作为执行 IKE 对象的设备的标识符。大多使用 IP 地址,也有使用 FQDN 等作为标识符的 |
IKE 阶段 2 负责生成 IPsec 通信使用的密钥,并建立 IPsec SA 。
参数 | 值 | 说明 |
---|---|---|
IPsec 协议 |
AH 、ESP |
AH 只能用来认证,ESP 就能够进行认证和加密处理 |
模式 | 隧道模式、透明模式 | 通过 IPsec 构建 VPN 时使用随道模式,在终端之间建立 IPsec 隧道时则使用透明模式 |
ESP 选项 |
指定 ESP 协议是仅用于加密处理还是同时用于加密和认证处理。这个参数一般都设置为后者 |
|
加密算法和认证算法 | DES 、3DES 、AES |
可以选择密钥长度是 56 56 56 bit 的 DES 、密钥长度是 168 168 168 bit 的 3DES 或密钥长度是 128 128 128 / 192 192 192 / 256 256 256 bit 的 AES ,其中 AES 的使用比较普遍。密钥长度越长强度越高,处理也就越耗费时间 |
反重放选项 | ON 、OFF |
点选反重放选项后,IPsec 隧道将检查收到的加密报文的序列号信息,丢弃序列号不正确的报文,并通过记录日志告知管理员这个功能主要用来防止重放攻击,即获取加密报文的内容后,再次发送相同内容来“复改“原有报文顺序的攻击 |
PFS 选项 |
ON 、OFF |
这个选项用于防止某密钥成为破解其它密钥的线素,点选 PFS 选项后,当 IPsec SA 密钥生成 / 更新时会再次执行 Diffie-Hellman 算法,同时与阶段 1 1 1 一样, 选择 Diffie-Hellman 的 group 类型。 |
SSL-VPN 是通过浏览器使用 HTTPS(HTTP over SSL
)进行 Web 访问的远程接入 VPN 。
如果要使用 IPsec-VPN ,需要在 PC 上安装专用的客户端软件。这个客户端软件不一定支持 Mac OS 、手机等操作系统。同时 IPsec-VPN 连接过程,可能会因为防火墙过滤了 IPsec-VPN 的协议号或 NAT traversal 的端口号,而导致连接失败。
SSL-VPN 就方便很多,只要设备带有浏览器,就能够通过反向代理的方式完成 VPN 的连接。而且防火墙几乎不会拦截,因为使用的是 HTTPS 的 443 443 443 端口,让 VPN 远程连接摆脱了操作系统和连接方式的限制。
远程接入 IPsec-VPN | SSL-VPN |
---|---|
需要专用的客户端软件 | 无需专用客户端软件,只需有 Web 浏览器即可 |
依赖操作系统或 NIC 驱动 |
不受操作系统和 NIC (Network lnterface Card )驱动的限制 |
在通过防火墙中需要设置多个安全策略(IKE 、ESP 用的端口等) |
使用防火墙运行通过的 HTTPS (TCP 443 443 443)端口 |
在 NAT 环境下需要 NAT traversal 过程 |
不受 NAT 环境限制 |
需要注意 MTU 大小 |
不受 MTU 大小限制 |
需要管理个人计算机 | 无需管理个人计算机 |
报文头部小于 SSL-VPN | 报文头部较大,数据吞吐量较低 |
网络层以上的协议都支持实现隧道传输 | 使用反向代理以及端口转发方式时只有 TCP 协议上特定的应用程序可以支持隧道传输,使用隧道方式时网络层以上的所有协议都支持隧道传输 |
IPsec-VPN 是在网络层实现的,能够完成传输层 TCP 和 UDP 的加密和隧道传输处理。而 SSL-VPN 是在会话层实现的,基于 TCP 的 443 443 443 端口运行。只有特定的几种 TCP 能够使用反向代理和端口转发方式,而 ICMP 和 UDP 等传输层通信,只能选择隧道方式。
反向代理,又叫做 无客户端 SSL-VPN。SSL-VPN 的终端在 443 443 443 端口号上,通过 HTTPS 完成解密工作后,转换为 80 80 80 端口号的 HTTP 通信,与内部网络上的 Web 服务器进行交互。这种方式只有使用 80 80 80 端口号、通过浏览器访问 Web 的应用程序才能使用。
在内部客户端访问互联网时,进行中继的代理服务器,叫做 转发代理服务器。如果访问方向相反,也就是在互联网上的客户端访问内部网络服务器时,进行中继的代理服务器叫做 反向代理服务器(reverse proxy
)。
端口转发,又叫做 瘦客户端 SSL-VPN。使用 ActiveX
或 Java applet
等浏览器插件来创建 PC 和服务器的 SSL 隧道。用户只要登录 Web 门户(SSL-VPN 网关),并完成认证,就能够下载相关插件。用户能够使用公司内网服务器上的特定应用程序,也能够使用端口固定且无需浏览器支持的 TCP 应用程序,比如 E-mail 。有些产品还能够支持端口号变动的应用和 UDP 应用程序等。
隧道方式 是使用 SSL-VPN 客户端软件的方式。和 IPsec-VPN 一样,支持网络层以上协议的隧道传输。
用户通过浏览器访问 SSL-VPN 设备,并完成认证,就可以下载应用程序,并安装在用户的 PC 上。接下来就是通过客户端软件建立 PC 和 SSL-VPN 设备的隧道。由于使用了客户端软件,还是会不可避免的受到操作系统的限制。
支持主机检查(Host Checker
)功能的 SSL-VPN ,在客户端与 SSL-VPN 设备连接时,能够对连接的客户端主机进行检查,检查信息如下表。
检查项 | 检查内容 |
---|---|
是否安装了防毒软件 | 检查反病毒软件的签名版本信息 |
是否安装了个人防火墙 | 检查特定的进程是否启动(硬件加密软件以及日志收集软件等) |
OS 和 Service Pack 的种类、补丁兼容性 | 检查特定的注册信息 |
MAC 地址 | 检查是否存在特定文件 |
如果主机检查结果 OK
,就允许客户端的 SSL-VPN 连接,就能够从外部网络访问公司内网。如果结果是 NO
,就拒绝客户端的 SSL-VPN 连接,或只能进行软件升级等特定范围的访问操作。