Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

17.14.11.2. 限制连接数量

要限制客户机虚拟机可以建立的连接数量,必须提供规则来设置给定流量类型的连接限制。例如,如果虚拟机应该一次只能 ping 另外一个 IP 地址,应该一次只有一个活跃的 ssh 连接。

例 17.10. 设定到连接的 XML 示例文件

以下 XML 片段可用于限制连接
  [...]
  <rule action='drop' direction='in' priority='400'>
    <tcp connlimit-above='1'/>
  </rule>
  <rule action='accept' direction='in' priority='500'>
    <tcp dstportstart='22'/>
  </rule>
  <rule action='drop' direction='out' priority='400'>
    <icmp connlimit-above='1'/>
  </rule>
  <rule action='accept' direction='out' priority='500'>
    <icmp/>
  </rule>
  <rule action='accept' direction='out' priority='500'>
    <udp dstportstart='53'/>
  </rule>
  <rule action='drop' direction='inout' priority='1000'>
    <all/>
  </rule>
  [...]
注意
在接受流量的规则之前,必须在 XML 中列出限制规则。根据 例 17.10 “设定到连接的 XML 示例文件” 中的 XML 文件,添加允许发送到端口 22 的 DNS 流量进入客户端虚拟机的额外规则,以避免 ssh 会话没有因为 ssh 守护进程 DNS 查找失败的原因而建立。离开此规则可能会导致 ssh 客户端意外挂起,因为它尝试连接。对于处理与跟踪流量相关的超时相关的超时,应格外小心。用户在客户机虚拟机中可能已经终止的 ICMP ping 可能在主机物理计算机的连接跟踪系统中有较长的超时,因此不允许另一个 ICMP ping 进行访问。
最佳解决方案是使用以下命令调整主机物理机器 sysfs 中的超时:# echo 3 > /proc/sys/net/netfilter/nf_conntrack_icmp_timeout。此命令将 ICMP 连接跟踪超时设置为 3 秒。这样做的效果是,一旦 ping 被终止,另一个 ping 在 3 秒后可以启动。
如果因为任何原因客户机虚拟机没有正确关闭其 TCP 连接,则会在较长时间内保持打开的连接,特别是在主机物理机器上为大量时间设置 TCP 超时值。另外,任何闲置连接都可能会导致连接跟踪系统中的超时,在数据包交换后可以重新激活。
但是,如果设置限制太低,新启动的连接可能会强制闲置连接到 TCP backoff。因此,应设置连接限制,而不是高,以便新 TCP 连接中波动的流量行为不会导致与闲置连接的关系。