Section outline

  • 在上几个任务中,我们只设置了无状态防火墙,逐个检查每个数据包。然而,数据包通常不是独立的;它们可能是某个 TCP 连接的一部分, 或者它们可能是由其他数据包触发的 ICMP 数据包。将数据包独立处理并不会考虑其上下文,因此可能导致不准确、不安全或复杂的防火墙规则。例如,如果我们希望仅允许在建立连接之后才能进入网络的 TCP 数据包,使用无状态数据包过滤器是无法轻松实现的,因为当防火墙检查每个单独的 TCP 数据包时, 它无法知道该数据包是否属于一个已建立的连接,除非防火墙为每个连接维护一些状态信息。如果防火墙这样做,它就变成了有状态防火墙。
     
    为了支持有状态防火墙,我们需要能够追踪连接。这是通过内核中的  conntrack  模块来实现的。在本任务中,我们将进行一些与该模块相关的实验,并熟悉连接追踪机制。在我们的实验中,我们将检查路由器容器上的连接追踪信息。可以使用以下命令进行操作:

    # conntrack -L

    本任务的目标是通过一系列实验帮助学生理解此追踪机制中的连接概念,特别是对于 ICMP 和 UDP 协议,因为与 TCP 协议不同,它们没有连接。请进行以下实验。每个实验后,请描述你的观察结果并解释。

    ICMP 实验:运行以下命令并检查路由器上的连接追踪信息。描述你的观察结果。ICMP 连接状态保持多久?

    // 在 10.9.0.5 上,发送 ICMP 数据包
    # ping 192.168.60.5

    UDP 实验:运行以下命令并检查路由器上的连接追踪信息。描述你的观察结果。UDP 连接状态保持多久?

    // 在 192.168.60.5 上,启动一个 netcat UDP 服务器
    # nc -lu 9090
    
    // 在 10.9.0.5 上,发送 UDP 数据包  
    # nc -u 192.168.60.5 9090
    <输入一些内容,然后回车>

    TCP 实验:运行以下命令并检查路由器上的连接追踪信息。描述你的观察结果。TCP 连接状态保持多久?

    // 在 192.168.60.5 上,启动一个 netcat TCP 服务器
    # nc -l 9090
    
    // 在 10.9.0.5 上,发送 TCP 数据包
    # nc 192.168.60.5 9090
    <输入一些内容,然后回车>