Kur Linux conntrack nuk është më një mik për ju

Kur Linux conntrack nuk është më një mik për ju

Ndjekja e lidhjeve (“conntrack”) Ă«shtĂ« njĂ« funksion kryesor i grumbullit tĂ« rrjetit nĂ« bĂ«rthamĂ«n Linux. Ajo i lejon bĂ«rthamĂ«s tĂ« ndjekĂ« tĂ« gjitha lidhjet ose rrjedhat logjike tĂ« rrjetit dhe nĂ« kĂ«tĂ« mĂ«nyrĂ« tĂ« identifikojĂ« tĂ« gjithĂ« paketat qĂ« pĂ«rbĂ«jnĂ« çdo rrjedh, nĂ« mĂ«nyrĂ« qĂ« ato tĂ« mund tĂ« pĂ«rpunohen sĂ« bashku.

Conntrack është një funksion i rëndësishëm i bërthamës, që përdoret në disa raste kryesore:

  • NAT mbĂ«shtetet nĂ« informacionin nga conntrack, kĂ«shtu qĂ« ai mund tĂ« trajtojĂ« nĂ« mĂ«nyrĂ« tĂ« njĂ«jtĂ« tĂ« gjitha paketat nga njĂ« rrjedh. PĂ«r shembull, kur njĂ« pod i drejtohet njĂ« shĂ«rbimi Kubernetes, balancuesi i ngarkesĂ«s kube-proxy pĂ«rdor NAT pĂ«r tĂ« drejtuar trafikun nĂ« njĂ« pod tĂ« caktuar brenda klasterit. Conntrack regjistron se pĂ«r njĂ« lidhje tĂ« caktuar, tĂ« gjitha paketat qĂ« dĂ«rgohen nĂ« IP-nĂ« e shĂ«rbimit duhet tĂ« dĂ«rgohen nĂ« tĂ« njĂ«jtin pod, dhe se paketat qĂ« kthehen nga pod-i i prapavijĂ«s duhet tĂ« kthehen pĂ«rsĂ«ri nga NAT nĂ« pod-in nga i cili erdhi kĂ«rkesa.
  • Firewally me mbikĂ«qyrje tĂ« gjendjes, si Calico, bazohen nĂ« informacionin nga conntrack pĂ«r tĂ« shtuar trafikun "pĂ«rgjigjĂ«s" nĂ« listĂ«n e bardhĂ«. Kjo ju lejon tĂ« shkruani njĂ« politikĂ« rrjeti qĂ« thotĂ«: "lejoni pod-in tim tĂ« lidhet me çdo adresĂ« IP tĂ« largĂ«t" pa pasur nevojĂ« tĂ« shkruani njĂ« politikĂ« pĂ«r tĂ« lejuar pĂ«rgjigjen e trafikut. (Pa kĂ«tĂ«, do tĂ« duhej tĂ« shtonit njĂ« rregull shumĂ« mĂ« pak tĂ« sigurt "lejoni paketa nĂ« pod-in tim nga çdo IP.")

Për më tepër, conntrack zakonisht rrit performancën e sistemit (duke reduktuar konsumimin e kohës së procesorit dhe vonesat e paketave), pasi vetëm paketi i parë në një rrjedhë
duhet të kalojë përpunimin e plotë të stack-ut të rrjetit për të përcaktuar çfarë të bëjë me të. Shikoni postimin "Krahasimi i mënyrave kube-proxy", për të parë një shembull të kësaj në punë.

Megjithatë, conntrack ka kufizimet e tij...

Pra, ku gjithçka shkoi keq?

Tabeli conntrack ka një madhësi maksimale të konfigurueshme dhe, nëse ajo mbushet, lidhjet zakonisht fillojnë të refuzohen ose të ndërpriten. Për të menaxhuar trafikun e shumicës së aplikacioneve, tabela zakonisht ka mjaft hapësirë të lirë dhe kjo kurrë nuk do të bëhet një problem. Megjithatë, ka disa skenarë ku ia vlen të mendoni për përdorimin e tabelës conntrack:

  • Rasti mĂ« i dukshĂ«m Ă«shtĂ« nĂ«se serveri juaj po pĂ«rpunon njĂ« numĂ«r jashtĂ«zakonisht tĂ« madh lidhjesh aktive tĂ« njĂ«kohshme. PĂ«r shembull, nĂ«se tabela juaj conntrack Ă«shtĂ« e konfiguruar pĂ«r 128k regjistrime, por keni > 128k lidhje tĂ« njĂ«kohshme, me siguri do tĂ« pĂ«rballeni me njĂ« problem!
  • NjĂ« rast pak mĂ« pak i dukshĂ«m Ă«shtĂ« nĂ«se serveri juaj po pĂ«rpunon njĂ« numĂ«r tĂ« madh lidhjesh nĂ« sekondĂ«. Edhe nĂ«se lidhjet janĂ« tĂ« shkurtra, ato vazhdojnĂ« tĂ« ndiqen nga Linux pĂ«r njĂ« periudhĂ« tĂ« caktuar kohe (nĂ« mĂ«nyrĂ« standarde 120s). PĂ«r shembull, nĂ«se tabela juaj conntrack Ă«shtĂ« e konfiguruar pĂ«r 128 mijĂ« regjistrime dhe po pĂ«rpiqeni tĂ« pĂ«rpunoni 1100 lidhje nĂ« sekondĂ«, ato do ta kalojnĂ« madhĂ«sinĂ« e tabelĂ«s conntrack, madje edhe nĂ«se lidhjet janĂ« shumĂ« tĂ« shkurtra (128k / 120s = 1092 lidhje / s).

Ka there janĂ« disa lloje aplikacionesh nißesh qĂ« bien nĂ« kĂ«to kategori. PĂ«r mĂ« tepĂ«r, nĂ«se keni shumĂ« armiq, mbushja e tabelĂ«s conntrack tĂ« serverit tuaj me shumĂ« lidhje gjysmĂ« tĂ« hapura mund tĂ« pĂ«rdoret si njĂ« pjesĂ« e njĂ« sulmi tĂ« tipit "refuzim shĂ«rbimi" (DoS). NĂ« tĂ« dy rastet, conntrack mund tĂ« bĂ«het njĂ« ngushticĂ« kufizuese nĂ« sistemin tuaj. NĂ« disa raste, rregullimi i parametrave tĂ« tabelĂ«s conntrack mund tĂ« jetĂ« i mjaftueshĂ«m pĂ«r tĂ« pĂ«rmbushur nevojat tuaja — duke rritur madhĂ«sinĂ« ose duke reduktuar kohĂ«t e pritjes conntrack (por nĂ«se e bĂ«ni kĂ«tĂ« gabim, do tĂ« pĂ«rballeni me vĂ«shtirĂ«si tĂ« mĂ«dha). PĂ«r raste tĂ« tjera, do tĂ« nevojitet tĂ« anashkaloni conntrack pĂ«r trafikun agresiv.

Shembulli real

Merrni njĂ« shembull konkret: njĂ« ofrues i madh SaaS me tĂ« cilin kemi punuar kishte njĂ« sĂ«rĂ« serverash memcached nĂ« hoste (jo nĂ« makina虚), secili prej tĂ« cilĂ«ve pĂ«rballonte mbi 50,000 lidhje kalimtare nĂ« sekondĂ«.

Ata eksperimento për konfigurimin conntrack, rritën madhësitë e tabelave dhe shkurtuan kohën e gjurmimit, por konfigurimi ishte i pasigurt, duke rritur ndjeshëm konsumimin e RAM-it, që ishte një problem (rreth GB)! Ndërsa lidhjet ishin kaq të shkurtra sa që conntrack nuk krijonte përfitim të zakonshëm në performancë (ulje e konsumit të CPU ose vonesave të paketeve).

Si alternativë, ata iu drejtuan Calico. Politikat e rrjetit të Calico lejojnë që të mos përdoret conntrack për një lloj të caktuar trafiku (duke përdorur për politikën opsionin doNotTrack). Kjo u siguroi atyre nivelin e nevojshëm të performancës plus një nivel të shtuar sigurie, që ofrohet nga Calico.

ÇfarĂ« do tĂ« bĂ«het pĂ«r tĂ« shmangur conntrack?

  • Politikat e rrjetit do-not-track zakonisht duhet tĂ« jenĂ« simetrike. NĂ« rastin e ofruesit SaaS: aplikacionet e tyre punonin brenda njĂ« zone tĂ« mbrojtur dhe, pĂ«rmes politikĂ«s sĂ« rrjetit, ata mund tĂ« shtonin nĂ« listĂ«n e bardhĂ« trafikun nga aplikacione specifike tĂ« tjera, tĂ« cilave u jepej leja pĂ«r tĂ« aksesuar memcached.
  • Politika do-not-track nuk merr parasysh drejtimin e lidhjes. KĂ«shtu, nĂ« rastin e njĂ« sulmi ndaj serverit memcached, teorikisht Ă«shtĂ« e mundur tĂ« pĂ«rpiqeni tĂ« lidhni çdo klient memcached, nĂ«se ai pĂ«rdor portin e saktĂ« tĂ« origjinĂ«s. MegjithatĂ«, nĂ«se keni pĂ«rcaktuar nĂ« mĂ«nyrĂ« korrekte politikĂ«n e rrjetit pĂ«r klientĂ«t tuaj memcached, kĂ«to pĂ«rpjekje pĂ«r lidhje gjithsesi do tĂ« refuzohen nga ana e klientit.
  • Politika do-not-track zbatohet pĂ«r çdo paketĂ«, ndryshe nga politikat e zakonshme, tĂ« cilat zbatohet vetĂ«m pĂ«r paketĂ«n e parĂ« nga rrjedha. Kjo mund tĂ« rrisĂ« konsumimin e burimeve CPU pĂ«r njĂ« paketĂ«, sepse pĂ«r çdo paketĂ« nevojitet tĂ« zbatohet politika. Por pĂ«r lidhjet e shkurtra, ky konsum balançohet nga ulja e burimeve pĂ«r pĂ«rpunimin e conntrack. PĂ«r shembull, nĂ« rastin e njĂ« ofruesi SaaS, numri i paketave pĂ«r çdo lidhje ishte shumĂ« i vogĂ«l, prandaj shpenzimi shtesĂ« i burimeve CPU pĂ«r zbatimin e politikave pĂ«r çdo paketĂ« ishte i justifikuar.

Le të fillojmë testet.

Ne kemi kryer një test në një pod me server memcached dhe shumicë pod-esh klient memcached të lëshuar në nodë të largët, në mënyrë që të mundnim të kryenim një numër të madh lidhjesh në sekondë. Serveri me pod-in e serverit memcached kishte 8 bërthama dhe 512k regjistrime në tabelën conntrack (në përmasë standarde të tabelës për hostin).
Ne matëm ndryshimin në performancë midis: pa politikën rrjetore; me politikën standarde Calico; dhe politikën Calico do-not-track.

Për testin e parë, ne caktuam numrin e lidhjeve në 4.000 në sekondë, kështu që mundëm të fokusohemi në ndryshimin e konsumit të CPU. Nuk kishte dallime të rëndësishme midis mungesës së politikës dhe politikës standarde, por do-not-track rriti konsumimin e CPU përafërsisht me 20%:

Kur Linux conntrack nuk është më një mik për ju

Në testin e dytë, ne aktivizuam sa më shumë lidhje që mundëm të gjeneronim klientët tanë dhe matëm numrin maksimal të lidhjeve në sekondë që mund të trajtonte serveri ynë memcached. Siç pritej, në rastin e "pa politika" dhe "politika e zakonshme", të dy arritën limitin conntrack të mbi 4,000 lidhjeve në sekondë (512k / 120s = 4,369 lidhje/s). Me politikën do-not-track, klientët tanë dërguan 60,000 lidhje në sekondë pa asnjë problem. Jemi të sigurt se mund të rritnim këtë numër duke lidhur më shumë klientë, por ndjejmë se këto numra janë mjaftueshëm për të ilustruar mesazhin e këtij artikulli!

Kur Linux conntrack nuk është më një mik për ju

Përfundimi

Conntrack është një funksion i rëndësishëm i bërthamës. Ai kryen detyrën e tij shumë mirë. Përdoret shpesh nga komponentët kyç të sistemit. Megjithatë, në disa skenarë të caktuar, ngarkesa për shkak të conntrack tejkalon përfitimet e zakonshme që ai ofron. Në këtë skenar, politikat rrjetore Calico mund të përdoren për të çaktivizuar selektivisht përdorimin e conntrack që ndihmon në rritjen e nivelit të sigurisë rrjetore. Për të gjithë trafikun tjetër, conntrack vazhdon të mbetet shoku juaj!

Shihni gjithashtu artikuj të tjerë në blogun tonë:

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster