18.12.11.2. 接続数の制限
ゲスト仮想マシンが確立できる接続の数を制限するには、特定タイプのトラフィックの接続の制限を設定するルールを提供する必要があります。たとえば、仮想マシンが、一度に 1 つの IP アドレスに対してのみ ping を実行できるようにし、同時に 1 つの 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 を実行できません。
最善の解決策は、# echo 3 > /proc/sys/net/netfilter/nf_conntrack_icmp_timeout で、ホスト物理マシンの
sysfs
のタイムアウトを調整することです。このコマンドは、ICMP 接続トラッキングのタイムアウトを 3 秒に設定します。これは、ある ping が終了すると、別の ping が 3 秒後に開始できることになります。
なんらかの理由でゲスト仮想マシンが TCP 接続を適切に閉じていないと、特にホストの物理マシンで TCP タイムアウト値が大量に設定されている場合に、接続が長期間開かれたままになります。また、アイドル状態の接続では、パケットが交換されると再度アクティブにできる接続追跡システムのタイムアウトが発生する場合があります。
ただし、この制限を低く設定しすぎると、新しく開始した接続により、アイドル状態の接続が強制的に TCP バックオフになる場合があります。したがって、接続の制限は、新しい TCP 接続の変動によって、アイドル状態の接続に関連して奇妙なトラフィック動作が発生しないように、かなり高く設定する必要があります。