网络安全 深入的网络层


IP——互联网协议

IP 用于跨网络通信,不仅仅是跨物理链路,还包括路由器网络之间的通信。使用的寻址方案是 IPv4 ("IP Version 4") 或 IPv6 ("IP Version 6")。

IP 网络可以分为不同的部分,通常称为子网。这是通过添加一条额外的信息以及 IP 地址来完成的,称为网络掩码。网络掩码指示网络有多大以及哪些数据包在网络内路由以及哪些数据包应在网络外路由。

网络掩码可以通过十进制数字或斜杠表示法表示。使用斜杠表示法时,斜杠跟在系统 IP 地址后面。这里有些例子:

IP Address Slash Notation Netmask
10.0.0.1 /8   - Example: 10.0.0.1/8 255.0.0.0
172.16.1.1 /12 - Example: 172.16.1.1/12 255.240.0.0
192.168.0.1 /16 - Example: 192.168.0.1/16 255.255.0.0
192.168.0.1 /24 - Example: 192.168.0.1/24 255.255.255.0

某些 IP 网络仅为特定类型的流量保留。上表中的 IP 地址仅供内部组织使用,这意味着它们不应在 Internet 上路由。此类 IP 地址通常称为 RFC1918 地址。


不同的网络

让我们看一下 RFC1918 中的不同网络以及网络有多大:

  • 10.0.0.0/8 - 超过 1600 万个 IP 地址
  • 172.16.0.0/12 - 约 100 万个 IP 地址
  • 192.168.0.0/16 - 65534 个 IP 地址

IP 段可以进一步分解为更小、更细粒度的网络。

每个网络都有一个保留地址,用于向网络中的每个主机广播流量,这称为广播地址。广播数据意味着将数据发送给网络上的每个人,而不是仅发送给单个主机。许多应用程序和协议都依赖广播流量才能工作。

对于每个网段,广播始终是网络中的最后一个 IP 地址。例如在网络192.168.0.0/24网络中,广播地址为192.168.0.255。

最小的网络掩码可能是 255.255.255.255,表示为 /32。该网络只有一个IP地址。

如果需要将流量发送回主机,例如应用程序之间的通信,则将其发送到本地主机地址。该地址始终为 127.0.0.1,并且是 /8 网络。

在 IP 网络中,流量由路由器路由。路由器是一种理解 IP 格式并可以在网络之间转发数据包的网络设备。这与交换机不同,因为交换机在网络内转发数据,而路由器在网络之间转发。

Router and Switch

网络上的数据包具有描述许多我们已经在 IP 协议中讨论的重要细节的标头。 IPv4 标头如下所示:

IP Header

图片来源:作者:Michel Bakni - Postel, J.(1981 年 9 月)RFC 791,互联网协议,DARPA 互联网程序协议规范,互联网协会,第 11 页。 11 DOI:10.17487/RFC0791.,CC BY-SA 4.0,https://commons.wikimedia.org/w/index.html?curid=79949694

源地址是发送数据包的系统的 IP 地址,目的地是数据包的目标地址。标头中还有其他字段供 IP 协议的许多功能使用,但这些字段超出了本介绍类的范围。

您可以通过运行以下命令在 Windows 上检查您的 IP 地址ipconfig在命令行窗口内。在 Linux 上,这是通过以下命令完成的ip addr show或者ifconfig命令。

当计算机需要与 LAN 上找不到的对象进行通信时,它会根据系统的配置方式将流量发送到默认网关。默认网关是能够将流量转发到目标 IP 地址的路由器。



网络地址转换 ("Network Address Translation")

NAT 允许接受公共 IP 地址上的连接的系统将这些请求映射到内部 RFC 1918 IP 地址,反之亦然。进行 NAT 处理的系统通常是防火墙和路由器。

NAT 的典型实现是使用外部 IP 地址作为多个内部 IP 地址的前端,并使用目标端口号来决定数据应发送到哪个服务器。这允许内部 IP 地址接收来自外部系统的流量。

NAT Port

另一种非常常见的实现是允许内部 IP 地址通过外部 IP 地址访问互联网。 NAT 跟踪从内部到目标地址的连接并通过连接转发流量。

NAT 可以通过多种方式进行配置,但是在本课程中我们不会详细介绍该方法。

笔记:NAT 使网络工程师能够更加灵活地进行部署,从而可以展开许多不同的用例。

IPv6 - IP 版本 6

IP 版本 6 是最新的 IP 标准,旨在支持更多 IP 地址。 IP 地址不使用 32 位寻址,而是使用 128 位。这使得在可预见的未来有足够的 IP 地址,而 IPv4 已经用完。

IPv6 地址使用 8 组,每组 4 个十六进制数字。 IPv6 地址如下所示:2a00:1450:400f:80a::200e:。请注意,它没有 8 组 4 个十六进制数字。这是因为 IPv6 地址可以通过简单的规则来缩短:

  • 前导 0 可以缩短
  • 双冒号 (::) 可用于表示连续的 0 字符串。

扩展后的 IPv6 地址为:2a00:1450:400f:080a:0000:0000:0000:200e。

localhost 可以简化为::1 和::。

IPv6 也有网络,即子网,就像 IPv4 一样。

IPv6 标头如下所示:

IPv6 Header

我们可以看到一个更简单的标头,具有更多的 IP 寻址空间。

IPv6 的使用越来越多,并且许多工具都内置了对该协议的支持。例如与ping我们可以分别使用 -4 和 -6 标志在 IPv4 和 IPv6 之间切换。

跑步ipconfig并查看是否看到任何 IPv6 地址。如果您启用了 IPv6,请尝试ping -6 google.comping -4 google.com。看看该命令如何允许我们使用 IPv4 或 IPv6?

注意:如果您现在没有 IPv6,有许多公共云服务将向您授予一个公共 IPv6 地址,您可以用它来进行试验和探索。

ICMP

ICMP 通常与 Ping 和 Traceroute 相关。 ICMP 还可用于其他用途,例如向节点询问其时间(称为 ICMP 时间戳请求)。 ICMP 时间戳请求仅允许路由器要求另一个路由器同步其时间,这是网络通信中的重要属性。

攻击者检查系统在网络上是否可用的常用策略是进行 Ping 扫描。此类活动的目标是使网络范围内的目标设备回复 ping 请求,以便攻击者知道它可用。这种方法很幼稚,因为许多系统默认会阻止传入的 ping。


路由追踪

跟踪路由是一种确定哪些路由器参与从系统 A 向系统 B 发送数据包的方法。了解数据包经过哪些路由器有助于更好地了解我们的网络,也有助于了解攻击面。路由器负责将包路由到正确的方向。想象一下在道路上行驶,十字路口的路标引导您到达目的地。十字路口的这些标志代表路由器。 Traceroute 可识别这些标志和交叉路口,并告诉您它们的距离(以毫秒 (ms) 为单位)。

IPv4 TTL 和 IPv6 跳数限制标头具有相同的功能。每个路由数据包的路由器都会将该值减 1,如果该值达到 0,路由器将丢弃该数据包并向发送者返回 ICMP 超时数据包。

要在 Windows 上执行跟踪路由:

tracert google.com

要在 Linux 上执行跟踪路由(默认情况下未安装):

traceroute google.com

通过这些工具进行跟踪路由的过程很简单:

  1. 操作系统发送一个数据包google.com,TTL值设置为1。
  2. 数据包在网络上路由,第一个路由器将 TTL 减 1,使其保留为 0。这会导致路由器丢弃数据包并将 "ICMP Time Exceeded" 发送回源。
  3. 客户端增加 TTL 1,允许数据包通过额外的一跳进行路由。

重复此过程,将 TTL 加 1,直到到达目的地。


DNS ("Domain Name System")

DNS 用于通过名称将应用程序映射到 IP 地址。例如,如果您想使用浏览器访问http://google.com,则浏览器必须首先向DNS服务器发出请求,以解析google.com后面的IP地址

系统通常配置有主域名服务器和辅助域名服务器。这些设置可以手动配置或由 DHCP 服务器提供。这使得我们的计算机系统能够到达 DNS 服务器,以便为我们进行解析。

然后 DNS 服务器负责解析该请求。然后它将继续检查自己的缓存以查看它是否已经知道答案。每个 DNS 答案都可以针对特定 TTL ("Time To Live") 进行缓存,即临时存储以加快将来的请求速度。 TTL 通常设置为几分钟,例如 10 分钟。

如果 DNS 服务器的缓存中没有答案,它将继续检查谁负责给出答案。这是通过递归过程完成的,该过程涉及询问名称服务器的分层系统,这不可避免地会使 DNS 请求最终到达权威名称服务器。

您现在可以尝试使用 Windows 或 Linux 进行 DNS 查找。从 Windows 上的命令行终端输入nslookup 91xjr.com,或在 Linux 类型上dig 91xjr.com。您应该看到如下输出:

DNS Dig

91xjr.com的IP地址可以在;;答案部分。捕获此屏幕截图时,91xjr.com 名称后面的 IP 地址是66.29.212.110

权威名称服务器是负责对问题给出明确答案的 DNS 服务器。例如google.com的IP地址将由其权威名称服务器应答,我们可以通过查询来看到该服务器:

在 Windows 上查找权威名称服务器:

nslookup -type=SOA google.com

在 Linux 上查找权威名称服务器:

dig -t SOA google.com

DHCP ("Dynamic Host Configuration Protocol")

顾名思义,DHCP 协议允许网络上的任何系统连接到服务器并接收配置。此类配置通常意味着接收 IP 地址和网络范围、默认网关和 DNS 服务器。

DHCP 允许轻松管理加入和离开网络的客户端。

如果您想知道现在是否正在使用 DHCP,您可以输入ipconfig /all在 Windows 系统上并在输出中查找"DHCP Enabled: Yes"。您的计算机可能有多个网络接口


VPN ("Virtual Private Network")

VPN 是一种允许两个系统建立加密形式进行通信的系统,从而使网络流量在传输过程中进行加密。许多 VPN 是客户端到服务器架构,允许客户端访问 VPN 背后的多种服务。您工作场所托管的 VPN 也可能提供对资源的访问,否则只能从内部访问。

VPN

某些 VPN 服务专为保护用户隐私和传输数据加密而设计。这些服务使用户能够通过 VPN 发送网络数据,从而在浏览互联网时有效地伪装用户的 IP 地址。

使用 VPN 来保护您的网络通信通常是一种良好的做法,但是我们不应该使用任何类型的 VPN 服务。免费 VPN 服务有时可能是恶意的,会检查、读取和存储您的敏感数据。

Malicious VPN