18.12.11.2. 限制连接数
要限制客户机虚拟机可以建立的连接数量,必须提供一个规则来设定指定类型的流量的连接限制。例如,如果应当允许某一虚拟机一次仅 ping 个其他 IP 地址,并且应一次只有一个活动传入的 ssh 连接。
例 18.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 中列出的限制规则。根据 例 18.10 “将限制用于连接的 XML 示例文件” 中的 XML 文件,允许发送到端口 22 的 DNS 流量进入客户机虚拟机的额外规则,以避免因为 ssh 守护进程无法建立与 DNS 查找失败相关的 ssh 会话。离开此规则可能会导致 ssh 客户端在尝试连接时意外挂起。应格外小心,以处理与跟踪流量相关的超时。用户可能在虚拟机内终止的 ICMP ping 在主机物理机的连接跟踪系统中可能具有较长的超时,因此不允许其他 ICMP ping 到达。
最佳解决方案是使用以下命令在主机物理机器的
sysfs
中调整超时:# echo 3 > /proc/sys/netfilter/nf_conntrack_icmp_timeout。此命令将 ICMP 连接跟踪超时设置为 3 秒。这样做的影响是一旦一个 ping 终止,另一个 ping 将在 3 秒后启动。
如果出于某种原因客户机虚拟机没有正确关闭其 TCP 连接,则需要在较长时间内保持打开的连接,特别是在主机物理机器上为大量时间设置 TCP 超时值。另外,任何闲置连接可能会导致连接跟踪系统中超时,在交换数据包后可以重新激活。
但是,如果设置限制过低,则新发起的连接可能会强制进入 TCP backoff 的闲置连接。因此,应该设置连接限制而不是高,以便在新的 TCP 连接中造成与空闲连接相关的异常流量行为。