之前在没学网络的时候,认为防火墙真的是可以防火的墙。10多年前还有不少人问,防火墙多少钱一个平方。
但现在大家都知道,防火墙是用来防黑客的,是内部网络和外部网络的分界,是用来保护内部服务器和网络的,是一种信息安全防护系统。
防火墙有几个最重要的特征:
1. 部署在内部网络和外部网络之间。这个和建筑上的防火墙真的很类似,也是叫firewall的原因。
2. 提供基于状态的安全防护。这个描述很专业,也最恰当的描述了防火墙的本质。最开始的防火墙是基于路由器的访问控制列表acl实现的包过滤防火墙,之后逐步发展和演进为基于状态的防火墙。所谓的状态浅显的讲就是说防火墙会维护一个源ip,目的ip,源端口,目的端口,协议的五元组的连接状态,只有在防火墙上建立起来连接会话状态的报文才会会放行,否则一律丢弃。这是一种很强的防御能力。
防火墙一般情况下是一个安全加固的产品,没有防火墙业务也可以跑起来。就像是小区没有门禁和保安其实也不影响小区的正常使用,但也意味着坏人可以随意的进出,安全风险很大。所以一般上一些规模的用户都会考虑部署防火墙。
在vpc网络中,有一个企业级的产品叫nat网关,这个nat网关中有两个重要的功能一个是snat,一个是dnat。snat其实就是一个基于状态的安全防护功能,可以当一个简易的防火墙使用。
当部署完nat网关后,外部设备3如果想主动访问内部服务器1的话,在nat网关上会把外部设备3的访问请求拒绝掉,把报文丢弃。因为外部设备3的公网ip 3.3.3.3在nat网关的snat状态表中不存在。
但内部服务器1可以主动访问外部设备2,当内部服务器1对外访问的第一个报文到达nat网关时,nat网关会记录下会话状态。假设内部服务器1通过80端口访问外部服务器2的80端口,此时nat会把五元组信息记录下来并保持状态信息。之后如果外部服务器2以80端口,访问内部服务器1的80端口,此时nat网关会接受访问请求,并将报文转发到内部服务器。但如果外部服务器2以8080端口访问内部服务器1的80端口时,此时这个访问请求也会被丢弃,因为在snat状态表中没有对应五元组的状态连接信息。
上面的描述就是典型的基于状态的安全防护功能,不允许外部的用户或设备主动访问内部的服务器。只允许内部服务器主动访问外部服务器后并建立起连接状态后,外部服务器才能和内部服务器通信。
所以nat网关在使用中是可以当一个功能简单的防火墙使用的,可以把后端的服务器隐藏到nat网关后面,不会被黑客扫描到,也不会轻易的被黑客攻击。
举个最佳实践的例子,很多部署在云上的在线支付系统都会调用支付宝的支付接口。而在线支付系统的安全性一般要求是特别高的,不能轻易的被黑客扫描到,不能轻易的被黑客攻击。在这种场景下,用户会选择在vpc网络中部署nat网关。当前在线支付系统有调用支付宝支付接口的需求时,会通过nat网关出公网。此时nat网关会记录调用请求的状态信息。nat会检查收到的ip报文,只有ip报文的源ip,源端口号,目的ip,目的端口号,协议类型这五元组信息和snat状态表中的连接信息相匹配时。nat网关才会将报文转发到内部支付系统,否则接收到的报文一律丢弃。