42.8. 使用 nftables 限制连接的数量
您可以使用 nftables 来限制连接数或限制到建立给定数量连接的块 IP 地址,以防止它们使用太多的系统资源。
42.8.1. 使用 nftables 限制连接的数量 复制链接链接已复制到粘贴板!
通过使用 nft 工具的 ct count 参数,您可以限制每个 IP 地址的同时连接的数量。例如,您可以使用此功能配置每个源 IP 地址只能建立两个到主机的并行 SSH 连接。
流程
创建带有
inet地址系列的filter表:nft add table inet filter
# nft add table inet filterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
input链添加到inet filter表中:nft add chain inet filter input { type filter hook input priority 0 \; }# nft add chain inet filter input { type filter hook input priority 0 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 IPv4 地址创建动态集合:
nft add set inet filter limit-ssh { type ipv4_addr\; flags dynamic \;}# nft add set inet filter limit-ssh { type ipv4_addr\; flags dynamic \;}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
input链中添加一条规则,该规则只允许从 IPv4 地址到 SSH 端口(22)的两个同时的传入连接,并拒绝来自同一 IP 的所有进一步的连接:nft add rule inet filter input tcp dport ssh ct state new add @limit-ssh { ip saddr ct count over 2 } counter reject# nft add rule inet filter input tcp dport ssh ct state new add @limit-ssh { ip saddr ct count over 2 } counter rejectCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 建立从同一 IP 地址到主机的两个以上的同时的 SSH 连接。如果已经建立了两个连接,则 nftables 会拒绝到 SSH 端口的连接。
显示
limit-ssh动态集:Copy to Clipboard Copied! Toggle word wrap Toggle overflow elements条目显示当前与该规则匹配的地址。在本例中,elements列出了与 SSH 端口有活动连接的 IP 地址。请注意,输出不会显示活跃连接的数量,或者连接是否被拒绝。
42.8.2. 在一分钟内尝试超过十个进入的 TCP 连接的 IP 地址 复制链接链接已复制到粘贴板!
您可以临时阻止在一分钟内建立十个 IPv4 TCP 连接的主机。
流程
创建具有
ip地址系列的filter表:nft add table ip filter
# nft add table ip filterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 向
filter表中添加input链:nft add chain ip filter input { type filter hook input priority 0 \; }# nft add chain ip filter input { type filter hook input priority 0 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加一条规则,其丢弃来自源地址的所有数据包,并尝试在一分钟内建立十个 TCP 连接:
nft add rule ip filter input ip protocol tcp ct state new, untracked meter ratemeter { ip saddr timeout 5m limit rate over 10/minute } drop# nft add rule ip filter input ip protocol tcp ct state new, untracked meter ratemeter { ip saddr timeout 5m limit rate over 10/minute } dropCopy to Clipboard Copied! Toggle word wrap Toggle overflow timeout 5m参数定义nftables在五分钟后自动删除条目,以防止计量被过时的条目填满。
验证
要显示 meter 的内容,请输入:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow