【问题标题】:How can I open my firewall to only Load Impact traffic to perform a load test?如何打开我的防火墙以仅加载影响流量来执行负载测试?
【发布时间】:2015-04-10 07:49:17
【问题描述】:

我们在 Load Impact 上经常遇到这个问题,所以我想我应该将它添加到 Stack Overflow 社区以便更容易找到。

问:我有一个无法从 Internet 访问但位于防火墙后面的站点。我想对其运行负载影响负载测试,从云中生成流量,但我想确保在负载测试运行时没有其他人可以访问该站点。如何配置我的防火墙,使其仅将负载影响流量转发到我的站点?

【问题讨论】:

    标签: performance-testing firewall load-testing stress-testing


    【解决方案1】:

    由于 Load Impact 会从 Amazon AWS 和 Rackspace 等云提供商动态分配负载生成器实例,因此您不知道测试中的负载生成器将使用哪些源 IP 地址。

    如果您需要配置防火墙以允许负载影响流量通过,您可以执行以下操作之一:

    1. 向您要从中运行负载测试的负载区域使用的整个 AWS IP 地址范围打开防火墙。请注意,Rackspace 不会公开它们的 IP 范围,因此如果您想使用 Rackspace 负载区域进行测试,很遗憾根本无法知道负载生成器将使用的 IP 范围。这种方法的缺点是,即使您使用 AWS 生成流量,您也必须将防火墙开放到相当大的 IP 范围。

    2. 使用 HTTP 标头、URL 查询参数或其他有关您生成的流量的信息来发送唯一数据(即某种令牌),将流量标识为属于您的负载测试,然后配置您的防火墙以查找传入流量中的此数据。请注意,这要求您的防火墙支持扫描应用程序有效负载数据并根据它找到的内容应用规则。它还要求您的防火墙终止 SSL 连接或使用未加密的 HTTP,否则防火墙将无法检查流量。

    3. 在您知道测试使用的 IP 地址后,立即添加您的防火墙规则。

    下面是关于如何执行每种不同替代方案的更详细说明

    1。向测试中可能使用的所有 IP 开放防火墙

    在这里,您需要查看您正在使用哪些 AWS 负载区域,然后找到这些 AWS 数据中心托管的 IP 地址范围。有关 AWS 使用的 IP 范围的更多信息,请参阅http://support.loadimpact.com/knowledgebase/articles/174262-what-ip-addresses-do-load-impact-use-to-generate-l

    2。使用 HTTP 标头、URL 查询参数发送识别令牌

    您可以将自定义 HTTP 标头添加到您的用户场景代码中的任何请求,如下所示:

    http.request_batch({
      {"GET", "http://test.loadimpact.com/", headers={ ["X-Myheader"]="TOKEN_STRING"} }
    }
    

    不过,您需要将“headers=”参数添加到每个请求中。

    如果您不依赖于让负载测试中的模拟用户伪装成某个用户代理,您还可以使用 http.set_user_agent_string() 函数为所有后续请求设置“User-Agent”标头.然后,该标头可以包含您的令牌值,您不必修改用户场景中的每个 HTTP 请求。

    如果不干扰应用程序的功能,您也可以使用查询参数:

    http.request_batch({
      {"GET", "http://test.loadimpact.com/?firewall_token=TOKEN_STRING" }
    }
    

    另一种选择可能是从某个不在 DNS 中的主机名请求内容,但您的站点当然需要配置为响应对该主机名的请求。这就是您在负载影响方面的做法:

    -- Map a secret hostname to the IP of our server (need to do this if the hostname is not in the public DNS)
    util.dns_remap('very_difficult.to.guess.hostname.com', '44.55.66.77')
    -- Make all your requests go to this hostname
    http.request_batch({
      {"GET", "https://very_difficult.to.guess.hostname.com" }
    }
    

    这会将 Host: 标头设置为包含字符串“very_difficult.to.guess.hostname.com”

    当然,除非您的防火墙终止 SSL 流量或流量未加密,否则任何依赖于您的防火墙能够检查 HTTP 标头或类似内容的解决方案都将不起作用。

    3。测试开始后添加防火墙规则

    在许多情况下,这可能是最好的方法,因为它相当简单,几乎适用于所有情况,而且相当安全。缺点是您需要为每次运行的负载测试重新配置一次防火墙。这意味着您开始测试,然后找出负载生成器正在使用的 IP,然后快速设置允许来自这些 IP 的传入流量的防火墙规则。为了方便这种方法,您可能需要设计您的用户场景,以便他们执行以下操作:

    if client.get_id() == 1 then
      log.info('Load generator IP address: ' .. client.get_load_generator_ip())
    end
    client.sleep(300)
    ...
    [rest of user scenario]
    

    这将导致每个负载生成器让客户端/VU 线程 #1 在测试结果页面的“日志”窗口中打印出负载生成器的 IP 地址。所有线程将在开始执行前等待 300 秒(5 分钟),给您 5 分钟的时间来更新防火墙规则,让来自生成器使用的所有 IP 地址的流量通过。

    请注意,在这种情况下,每个客户端都将从休眠 300 秒开始,因此测试启动会延迟那么长时间。 “活跃的客户端”图表会有点误导,因为它还会显示仍在执行初始睡眠的客户端。如果你想避免这种情况,你可以跳过 sleep() 语句,如果你不关心测试过程中第一分钟左右的测试结果是否正确(当 VU 将遇到连接问题,因为防火墙阻止它们时) )。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 2018-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多