搜索

2.9. 使用 nftables 来限制连接数量

download PDF

您可以使用 nftables 来限制连接数或限制到建立给定数量连接的块 IP 地址,以防止它们使用太多的系统资源。

2.9.1. 使用 nftables 限制连接数量

nft 工具的 ct count 参数使管理员能够限制连接数。

先决条件

  • example_table 中的基础example_chain 存在。

流程

  1. 为 IPv4 地址创建动态集合:

    # nft add set inet example_table example_meter { type ipv4_addr\; flags dynamic \;}
  2. 添加一条规则,该规则只允许从 IPv4 地址同时连接到 SSH 端口(22),并从同一 IP 拒绝所有后续连接:

    # nft add rule ip example_table example_chain tcp dport ssh meter example_meter { ip saddr ct count over 2 } counter reject
  3. 可选:显示上一步中创建的集合:

    # nft list set inet example_table example_meter
    table inet example_table {
      meter example_meter {
        type ipv4_addr
        size 65535
        elements = { 192.0.2.1 ct count over 2 , 192.0.2.2 ct count over 2  }
      }
    }

    elements 条目显示当前与该规则匹配的地址。在本例中,elements 列出了与 SSH 端口有活动连接的 IP 地址。请注意,输出不会显示活跃连接的数量,或者连接是否被拒绝。

2.9.2. 在一分钟内尝试超过十个进入的 TCP 连接的 IP 地址

您可以临时阻止在一分钟内建立十个 IPv4 TCP 连接的主机。

流程

  1. 创建具有 ip 地址系列的 filter 表:

    # nft add table ip filter
  2. filter 表中添加 input 链:

    # nft add chain ip filter input { type filter hook input priority 0 \; }
  3. filter 表中添加名为 denylist 的集合:

    # nft add set ip filter denylist { type ipv4_addr \; flags dynamic, timeout \; timeout 5m \; }

    这个命令为 IPv4 地址创建动态设置。timeout 5m 参数定义了 nftables 在五分钟后自动删除条目,以防止集合被陈旧的条目填满。

  4. 添加一条规则,该规则会将在一分钟内试图建立十多个新 TCP 连接的主机的源 IP 地址添加到 denylist 集合中:

    # nft add rule ip filter input ip protocol tcp ct state new, untracked add @denylist { ip saddr limit rate over 10/minute } drop
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.