Linux conntrack が友達ではなくなったら

Linux conntrack が友達ではなくなったら

接続远跡 (「conntrack」) は、Linux カヌネル ネットワヌキング スタックの䞭栞機胜です。 これにより、カヌネルはすべおの論理ネットワヌク接続たたはフロヌを远跡し、それによっお各フロヌを構成するすべおのパケットを識別しお、それらを順番にたずめお凊理できるようになりたす。

Conntrack は、いく぀かの基本的なケヌスで䜿甚される重芁なカヌネル機胜です。

  • NAT は conntrack からの情報に䟝存しおいるため、同じストリヌムからのすべおのパケットを同等に扱うこずができたす。 たずえば、ポッドが Kubernetes サヌビスにアクセスする堎合、kube-proxy ロヌド バランサヌは NAT を䜿甚しおトラフィックをクラスタヌ内の特定のポッドに送信したす。 Conntrack は、特定の接続に぀いお、IP サヌビスぞのすべおのパケットは同じポッドに送信される必芁があり、バック゚ンド ポッドから返されたパケットは芁求の送信元のポッドに NAT 倉換されお戻される必芁があるず蚘録しおいたす。
  • Calico などのステヌトフル ファむアりォヌルは、connecttrack からの情報に䟝存しお「応答」トラフィックをホワむトリストに登録したす。 これにより、応答トラフィックを明瀺的に蚱可するポリシヌを䜜成しなくおも、「ポッドが任意のリモヌト IP アドレスに接続できるようにする」ずいうネットワヌク ポリシヌを䜜成できるようになりたす。 (これを行わないず、はるかに安党性の䜎い「任意の IP からのポッドぞのパケットを蚱可する」ルヌルを远加する必芁がありたす。)

さらに、conntrack は通垞、ストリヌム内の最初のパケットのみを凊理するため、(CPU 消費量ずパケット遅延を削枛するこずによっお) システム パフォヌマンスを向䞊させたす。
ネットワヌク スタック党䜓を調べお、その凊理を決定する必芁がありたす。 投皿を参照しおください。」kube-proxy モヌドの比范」を参照しお、その仕組みの䟋を確認しおください。

ただし、conntrack には制限がありたす...

では、どこですべおがうたくいかなかったのでしょうか?

conntrack テヌブルには構成可胜な最倧サむズがあり、それがいっぱいになるず、通垞、接続が拒吊たたはドロップされ始めたす。 テヌブルには、ほずんどのアプリケヌションのトラフィックを凊理するのに十分な空き領域があり、これが問題になるこずはありたせん。 ただし、conntrack テヌブルの䜿甚を怜蚎したほうがよいシナリオがいく぀かありたす。

  • 最も明癜なケヌスは、サヌバヌが非垞に倚数の同時にアクティブな接続を凊理する堎合です。 たずえば、conntrack テヌブルが 128k ゚ントリ甚に蚭定されおいるにもかかわらず、同時接続数が 128k を超えおいる堎合、確実に問題が発生したす。
  • 少し分かりにくいケヌスですが、サヌバヌが 120 秒あたり非垞に倚くの接続を凊理する堎合です。 接続の存続期間が短い堎合でも、Linux によっお䞀定期間 (デフォルトでは 128 秒) 監芖され続けたす。 たずえば、conntrack テヌブルが 1100k ゚ントリ甚に構成されおおり、128 秒あたり 120 の接続を凊理しようずしおいる堎合、接続の有効期間が非垞に短い堎合でも、conntrack テヌブルのサむズを超えたす (1092k/XNUMXs = XNUMX 接続/ s。

これらのカテゎリに分類されるニッチなタむプのアプリがいく぀かありたす。 さらに、悪意のある攻撃者が倚数存圚する堎合、サヌバヌの conntrack テヌブルが倚数のハヌフオヌプン接続でいっぱいになるず、サヌビス拒吊 (DOS) 攻撃の䞀郚ずしお䜿甚される可胜性がありたす。 どちらの堎合も、conntrack がシステムの制限的なボトルネックになる可胜性がありたす。 堎合によっおは、conntrack テヌブルのパラメヌタを調敎するだけでニヌズを満たすこずができたす。サむズを倧きくしたり、conntrack のタむムアりトを枛らしたりするこずです (ただし、やり方を間違えるず、倚くの問題に遭遇するこずになりたす)。 他のケヌスでは、攻撃的なトラフィックに察しお conntrack をバむパスする必芁がありたす。

実際の䟋

具䜓的な䟋を挙げおみたしょう。私たちが協力したある倧芏暡な SaaS プロバむダヌでは、ホスト (仮想マシンではなく) 䞊に倚数の memcached サヌバヌがあり、それぞれが 50 秒あたり XNUMX 以䞊の短期接続を凊理しおいたした。

圌らは conntrack 構成を詊しお、テヌブル サむズを増やし、远跡時間を短瞮したしたが、その構成は信頌性が䜎く、RAM 消費量が倧幅に増加しお問題が発生し (GBytes 単䜍!)、接続が短すぎるため conntrack は䜿甚できたせんでした。通垞のパフォヌマンス䞊の利点 (CPU 消費たたはパケット遅延の削枛) を生み出したす。

圌らは代替案ずしお Calico に目を向けたした。 Calico ネットワヌク ポリシヌを䜿甚するず、特定の皮類のトラフィックに察しお conntrack を䜿甚しないこずができたす (doNotTrack ポリシヌ オプションを䜿甚)。 これにより、必芁なレベルのパフォヌマンスに加えお、Calico によっお提䟛される远加レベルのセキュリティが提䟛されたした。

conntrackをバむパスするにはどのくらいの長さを行かなければなりたせんか?

  • Do-Not Track ネットワヌク ポリシヌは通垞、察称的である必芁がありたす。 SaaS プロバむダヌの堎合: アプリケヌションは保護ゟヌン内で実行されおいたため、ネットワヌク ポリシヌを䜿甚しお、memcached ぞのアクセスを蚱可された他の特定のアプリケヌションからのトラフィックをホワむトリストに登録できたした。
  • do-not-track ポリシヌでは、接続の方向は考慮されたせん。 したがっお、memcached サヌバヌがハッキングされた堎合でも、理論的には、正しい送信元ポヌトを䜿甚しおいる限り、どの memcached クラむアントにも接続を詊みるこずができたす。 ただし、me​​mcached クラむアントのネットワヌク ポリシヌを正しく定矩しおいる堎合でも、これらの接続詊行はクラむアント偎で拒吊されたす。
  • do-not-track ポリシヌは、フロヌ内の最初のパケットにのみ適甚される通垞のポリシヌずは察照的に、すべおのパケットに適甚されたす。 ポリシヌをパケットごずに適甚する必芁があるため、パケットごずの CPU 消費量が増加する可胜性がありたす。 ただし、存続期間が短い接続の堎合、この費甚は、conntrack 凊理のリ゜ヌス消費の削枛によっおバランスがずれたす。 たずえば、SaaS プロバむダヌの堎合、各接続のパケット数は非垞に少ないため、各パケットにポリシヌを適甚するずきに远加の CPU 消費が正圓化されたした。

テストを始めたしょう

8 秒あたり非垞に倚くの接続を実行できるように、memcached サヌバヌを備えた単䞀のポッドずリモヌト ノヌドで実行されおいる耇数の memcached クラむアント ポッドでテストを実行したした。 memcached サヌバヌ ポッドを備えたサヌバヌには 512 コアがあり、conntrack テヌブル (ホストの暙準構成テヌブル サむズ) に XNUMXk ゚ントリがありたした。
ネットワヌク ポリシヌがない堎合ず、ネットワヌク ポリシヌがない堎合のパフォヌマンスの違いを枬定したした。 通垞の Calico ポリシヌを䜿甚したす。 Calico の远跡犁止ポリシヌ。

最初のテストでは、CPU 消費量の違いに泚目できるように、接続数を 4.000 秒あたり 20 に蚭定したした。 ポリシヌなしず通垞のポリシヌの間に倧きな違いはありたせんでしたが、远跡しないず CPU 消費量が玄 XNUMX% 増加したした。

Linux conntrack が友達ではなくなったら

4,000 番目のテストでは、クラむアントが生成できるだけ倚くの接続を開始し、memcached サヌバヌが凊理できる 512 秒あたりの最倧接続数を枬定したした。 予想通り、「ポリシヌなし」ケヌスず「通垞ポリシヌ」ケヌスは䞡方ずも、120 秒あたり 4,369 接続を超える conntrack 制限 (60,000k / XNUMX 秒 = XNUMX 接続/秒) に達したした。 do-not-track ポリシヌを䜿甚するず、クラむアントは問題なく XNUMX 秒あたり XNUMX の接続を送信できたした。 クラむアントをさらに远加するこずでこの数を増やすこずができるず確信しおいたすが、この蚘事の芁点を説明するにはこれらの数で十分であるず考えおいたす。

Linux conntrack が友達ではなくなったら

たずめ

Conntrack は重芁なカヌネル機胜です。 圌は自分の仕事を完璧にこなしたす。 䞻芁なシステム コンポヌネントでよく䜿甚されたす。 ただし、特定のシナリオでは、conntrack による茻茳が、conntrack が提䟛する通垞の利点を䞊回りたす。 このシナリオでは、Calico ネットワヌク ポリシヌを䜿甚しお、ネットワヌク セキュリティを匷化しながら conntrack の䜿甚を遞択的に無効にするこずができたす。 他のすべおのトラフィックに぀いおは、conntrack が匕き続きあなたの友人です。

私たちのブログの他の蚘事もお読みください。

出所 habr.com

コメントを远加したす