Ping一个不存在的IP,防火墙上会发生什么? - Kirin博客

Ping一个不存在的IP,防火墙上会发生什么?

作者: Bee

全网最全的网络资源分享网站

标签:

IPPing

特别声明:部分文章为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系站长!请勿违法!本站文章仅供学习了解!技术无罪!

kirin博客
有个疑问,就是在nat下面如果一台主机向外部不存活的主机发送数据,那么在nat中相应的映射会不会建立?
IP地址为192.168.1.10的主机向外部发送数据,就会被nat转换成1.1.1.1:8888的地址和端口号之后再发送,nat表中就会留着这一条记录,那么如果向3.3.3.3发送数据,而此时这个3.3.3.3是关机状态,是找不到,ping不通的,那么这个时候nat网关还会不会在nat表中还会不会建立nat映射,留下一个nat的洞呢?还是说在发现主机不存在之后直接就在建立映射之前就丢弃了。
这个问题曾经困扰我很久,后来我找到了答案。每次看到自己的问题被复现(re-produce)会感觉莫名其妙的神奇,人类在学习新知识上有太多的共性。
先说结论,答案是肯定的,只要有合法的报文从NAT设备的inside接口流入,并且从outside接口流出,并且满足NAT转换规则,一定会产生一个NAT表项。
安全性
你可能会有一些疑问,这多不安全啊。一个NAT表项就相当于在紧锁在大门上开一个小洞,反向的流量顺着小洞就可以流进内网(inside)。而且如果NAT表项存活的时间越长,所产生的潜在安全威胁越大。
NAT端口资源浪费
如果使用自动化脚本向外发送65535个报文,每个报文使用不同的源端口号,是不是一下就将NAT设备的源端口号(65535个)耗尽了?那么NAT设备就无法为其它网络设备提供上网服务了。这是典型的由内网发起的DoS攻击。
带着这些悬而未决的疑问,做了许多实验,翻阅了防火墙设备的白皮书。当然我会优先翻阅Cisco的白皮书。在业界Cisco的白皮书如果自称第二,没人敢说第一。雄厚的技术实力做为后盾,所以我推荐Cisco的技术文档做为学习的首要资料。
最为关心的一个知识点是,创建NAT表项需要几个packet?
1个、2个、3个、还是更多?
白皮书旗帜鲜明地指出,一个session只有第一个packet走slow path,剩下的packet 会走fast path。初学者看到这里也许会一头雾水,这些英文单词个个都认识,但是放在一起就不认识了,什么意思呢?
Slow Path
软件转发(Process Forwarding),就是纯CPU软件计算,packet被软件代码裹挟着,packet从哪个口incoming,需要从哪个口outgoing,满足不满足NAT Rule,如果满足条件,生成NAT表项,然后将packet从出口扔出去。同时将NAT表项下压到硬件FIB表。
Fast Path
硬件转发(FIB Forwarding),基于硬件芯片的转发。感谢高速的硬件转发,才有今天高速的互联网。
换句话说,第一个packet走的慢速软件通道,从第二个packet走的就是高速硬件通道。换句话说,TCP的三次握手也只有第一个packet走的是慢速通道!
但是,如何克服以上提到的问题呢?
当你Ping一个IP地址,如果这个IP地址可以回复消息,那么这条NAT表项可以存活5分钟(没有流量刷新)。
但如果这个IP地址在timeout时间内没有回复消息,那么这条NAT表项存活5秒钟,是不是可以安全一些?
如果来自同一个IP在狂刷端口号,那么只要设置一个上限值,超过上限值直接扔掉。可以解决以上的DOS攻击问题。
最后,硬件FIB表只要5秒内接收到来自outside接口的返回报文,这台NAT设备已经看到了双向的packet进出。证明双方是有能力通信的,硬件FIB表模块通知软件一个双向通信的状态位,软件将NAT表项更新,延长其存活时间(5秒到5分钟),同时FIB表也相应更新,保持软硬件表项的同步更新。当有流量hit到这个表项时,继续刷新表项的存活时间。
否则,硬件FIB表只要5秒内没有收到outside接口的返回报文,那么软硬件表项同时删除,大门上敞开的小洞就一下消失了。
这篇文章适合有一定NAT基础的同学阅读,初学者可以先学习网络地址、掩码、网关、路由、VLAN、ACL。
本文最后更新于2021-2-24,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
分享到:
加入交流群
未经允许不得转载:

作者: Bee, 转载或复制请以 超链接形式 并注明出处 Kirin博客
原文地址: 《Ping一个不存在的IP,防火墙上会发生什么?》 发布于2021-2-24

切换注册

登录

您也可以使用第三方帐号快捷登录

切换登录

注册

觉得文章有用就加入交流群吧

QQ扫一扫