2010. gadÄ uzÅÄmums Wargaming bija 50 serveri un vienkÄrÅ”s tÄ«kla modelis: backend, frontend un ugunsmÅ«ris. Serveru skaits pieauga, modelis kļuva sarežģītÄks: inscenÄÅ”ana, izolÄti VLAN ar ACL, tad VPN ar VRF, VLAN ar ACL uz L2, VRF ar ACL uz L3. Galva griežas? VÄlÄk bÅ«s jautrÄk.
Kad bija 16 000 serveru, kļuva neiespÄjami strÄdÄt bez plÄ«sumiem ar tik daudziem neviendabÄ«giem segmentiem. TÄpÄc mÄs nonÄcÄm pie cita risinÄjuma. MÄs paÅÄmÄm Netfilter steku, pievienojÄm tam Consul kÄ datu avotu un ieguvÄm Ätri izplatÄ«tu ugunsmÅ«ri. ViÅi aizstÄja ACL marÅ”rutÄtÄjos un izmantoja tos kÄ ÄrÄjo un iekÅ”Äjo ugunsmÅ«ri. Lai dinamiski pÄrvaldÄ«tu rÄ«ku, mÄs izstrÄdÄjÄm BEFW sistÄmu, kas tika izmantota visur: no lietotÄju piekļuves pÄrvaldÄ«Å”anas produktu tÄ«klam lÄ«dz tÄ«kla segmentu izolÄÅ”anai viens no otra.
ViÅÅ” jums pastÄstÄ«s, kÄ tas viss darbojas un kÄpÄc jums vajadzÄtu Å”o sistÄmu aplÅ«kot tuvÄk. Ivans Agarkovs (annmuor) - uzÅÄmuma Minskas attÄ«stÄ«bas centra TehniskÄs apkopes daļas infrastruktÅ«ras droŔības grupas vadÄ«tÄjs. Ivans ir SELinux fans, viÅam patÄ«k Perl un viÅÅ” raksta kodu. BÅ«dams informÄcijas droŔības grupas vadÄ«tÄjs, viÅÅ” regulÄri strÄdÄ ar žurnÄliem, rezerves kopijÄm un R&D, lai aizsargÄtu Wargaming no hakeriem un nodroÅ”inÄtu visu uzÅÄmuma spÄļu serveru darbÄ«bu.
VÄsturiskÄ informÄcija
Pirms pastÄstÄ«Å”u, kÄ mÄs to izdarÄ«jÄm, es jums pastÄstÄ«Å”u, kÄ mÄs vispÄr nonÄcÄm pie tÄ un kÄpÄc tas bija vajadzÄ«gs. Lai to izdarÄ«tu, atgriezÄ«simies 9 gadus atpakaļ: 2010. gads, tikko parÄdÄ«jÄs World of Tanks. Wargaming bija aptuveni 50 serveri.
UzÅÄmuma servera izaugsmes diagramma.
Mums bija tÄ«kla modelis. Uz to laiku tas bija optimÄls.
TÄ«kla modelis 2010. gadÄ.
PriekÅ”galÄ ir sliktie puiÅ”i, kuri vÄlas mÅ«s salauzt, bet tai ir ugunsmÅ«ris. AizmugursistÄmai nav ugunsmÅ«ra, bet tur ir 50 serveri, mÄs tos visus zinÄm. Viss darbojas labi.
4 gadu laikÄ serveru parks pieauga 100 reižu lÄ«dz 5000. ParÄdÄ«jÄs pirmie izolÄtie tÄ«kli - inscenÄjums: tie nevarÄja nonÄkt ražoÅ”anÄ, un tur bieži darbojÄs lietas, kas varÄtu bÅ«t bÄ«stamas.
TÄ«kla modelis 2014. gadÄ.
PÄc inerces mÄs izmantojÄm vienas un tÄs paÅ”as aparatÅ«ras daļas, un viss darbs tika veikts izolÄtos VLAN: ACL tiek ierakstÄ«ti VLAN, kas atļauj vai liedz kÄdu savienojumu.
2016. gadÄ serveru skaits sasniedza 8000. Wargaming absorbÄja citas studijas, un parÄdÄ«jÄs papildu saistÄ«tie tÄ«kli. Å Ä·iet, ka tie ir mÅ«sÄjie, bet ne gluži: VLAN bieži nedarbojas partneriem, jums ir jÄizmanto VPN ar VRF, izolÄcija kļūst sarežģītÄka. ACL izolÄcijas maisÄ«jums pieauga.
TÄ«kla modelis 2016. gadÄ.
LÄ«dz 2018. gada sÄkumam maŔīnu parks bija pieaudzis lÄ«dz 16 000. Bija 6 segmenti, pÄrÄjos neskaitÄ«jÄm, ieskaitot slÄgtos, kuros glabÄjÄs finanÅ”u dati. Ir parÄdÄ«juÅ”ies konteineru tÄ«kli (Kubernetes), DevOps, mÄkoÅtÄ«kli, kas savienoti, izmantojot VPN, piemÄram, no IVS. Noteikumu bija daudz ā tas bija sÄpÄ«gi.
TÄ«kla modelis un izolÄcijas metodes 2018. gadÄ.
IzolÄcijai mÄs izmantojÄm: VLAN ar ACL uz L2, VRF ar ACL uz L3, VPN un daudz ko citu. PÄrÄk daudz.
ProblÄmas
Ikviens dzÄ«vo ar ACL un VLAN. Kas noticis? Uz Å”o jautÄjumu atbildÄs Harolds, slÄpjot sÄpes.
Bija daudz problÄmu, bet bija piecas lielas.
Ä¢eometriskais cenu pieaugums jauniem noteikumiem. Katra jauna noteikuma pievienoÅ”ana prasÄ«ja ilgÄku laiku nekÄ iepriekÅ”ÄjÄ, jo vispirms bija jÄpaskatÄs, vai Å”Äds noteikums jau pastÄv.
Segmentos nav ugunsmÅ«ra. Segmenti bija kaut kÄ atdalÄ«ti viens no otra, un iekÅ”Ä jau nebija pietiekami daudz resursu.
Noteikumi tika piemÄroti ilgu laiku. Operatori stundas laikÄ ar roku varÄtu uzrakstÄ«t vienu vietÄjo noteikumu. GlobÄlais aizÅÄma vairÄkas dienas.
GrÅ«tÄ«bas ar audita noteikumiem. PrecÄ«zÄk, tas nebija iespÄjams. Pirmie noteikumi tika uzrakstÄ«ti tÄlajÄ 2010. gadÄ, un lielÄkÄ daļa to autoru uzÅÄmumÄ vairs nestrÄdÄja.
Zems infrastruktÅ«ras kontroles lÄ«menis. TÄ ir galvenÄ problÄma ā mÄs nezinÄjÄm ļoti labi, kas notiek mÅ«su valstÄ«.
Å Ädi izskatÄ«jÄs tÄ«kla inženieris 2018. gadÄ, kad viÅÅ” dzirdÄja: āNepiecieÅ”ams vairÄk ACLā.
RisinÄjumi
2018. gada sÄkumÄ tika nolemts kaut ko darÄ«t lietas labÄ.
IntegrÄciju cena nepÄrtraukti aug. SÄkuma punkts bija tÄds, ka lielie datu centri pÄrtrauca atbalstÄ«t izolÄtus VLAN un ACL, jo ierÄ«cÄm trÅ«ka atmiÅas.
RisinÄjums: noÅÄmÄm cilvÄcisko faktoru un maksimÄli automatizÄjÄm piekļuves nodroÅ”inÄÅ”anu.
Jauno noteikumu piemÄroÅ”ana prasa ilgu laiku. RisinÄjums: paÄtrinÄt noteikumu piemÄroÅ”anu, padarÄ«t to izplatÄ«tu un paralÄlu. Tam nepiecieÅ”ama izplatÄ«ta sistÄma, lai noteikumi tiktu piegÄdÄti paÅ”i bez rsync vai SFTP tÅ«kstoÅ” sistÄmÄm.
Nav ugunsmÅ«ra segmentos. UgunsmÅ«ris segmentos sÄka parÄdÄ«ties, kad vienÄ tÄ«klÄ parÄdÄ«jÄs dažÄdi pakalpojumi. RisinÄjums: izmantojiet ugunsmÅ«ri resursdatora lÄ«menÄ« - uz resursdatora balstÄ«ti ugunsmÅ«ri. GandrÄ«z visur, kur mums ir Linux, un visur, kur mums ir iptables, tÄ nav problÄma.
GrÅ«tÄ«bas ar audita noteikumiem. RisinÄjums. SaglabÄjiet visus noteikumus vienuviet pÄrskatÄ«Å”anai un pÄrvaldÄ«bai, lai mÄs varÄtu visu pÄrbaudÄ«t.
Zems infrastruktÅ«ras kontroles lÄ«menis. RisinÄjums: uzskaitiet visus pakalpojumus un piekļuves starp tiem.
Tas ir vairÄk administratÄ«vs, nevis tehnisks process. Dažreiz mums ir 200-300 jaunumi nedÄļÄ, Ä«paÅ”i akciju un svÄtku laikÄ. TurklÄt tas ir paredzÄts tikai vienai mÅ«su DevOps komandai. Ar tik daudziem izlaidumiem nav iespÄjams redzÄt, kÄdi porti, IP un integrÄcijas ir nepiecieÅ”amas. TÄpÄc mums bija nepiecieÅ”ami Ä«paÅ”i apmÄcÄ«ti servisa vadÄ«tÄji, kuri komandÄm jautÄja: "Kas tur vispÄr ir un kÄpÄc jÅ«s to aktualizÄjÄt?"
NolÄmÄm, ka visu, ko atradÄm ar servisa vadÄ«tÄju palÄ«dzÄ«bu, ievietosim Consul un no turienes rakstÄ«sim iptables noteikumus.
KÄ mÄs nolÄmÄm to darÄ«t?
MÄs apkoposim visus pakalpojumus, tÄ«klus un lietotÄjus.
Pamatojoties uz tiem, izveidosim iptables noteikumus.
MÄs automatizÄjam kontroli.
....
PEĻŠA.
Consul nav attÄls API, tas var darboties katrÄ mezglÄ un rakstÄ«t uz iptables. Atliek vien izdomÄt automÄtiskÄs vadÄ«bas ierÄ«ces, kas iztÄ«rÄ«s nevajadzÄ«gÄs lietas, un lielÄkÄ daļa problÄmu bÅ«s atrisinÄtas! PÄrÄjo mÄs risinÄsim.
KÄpÄc konsuls?
Ir sevi labi pierÄdÄ«jis. 2014.ā15. gadÄ mÄs to izmantojÄm kÄ Vault aizmugursistÄmu, kurÄ glabÄjam paroles.
NezaudÄ datus. LietoÅ”anas laikÄ Consul datus nezaudÄja neviena negadÄ«juma laikÄ. Tas ir milzÄ«gs pluss ugunsmÅ«ra pÄrvaldÄ«bas sistÄmai.
P2P savienojumi paÄtrina izmaiÅu izplatÄ«bu. Izmantojot P2P, visas izmaiÅas notiek Ätri, nav jÄgaida stundÄm ilgi.
Ärta REST API. MÄs apsvÄrÄm arÄ« Apache ZooKeeper, taÄu tam nav REST API, tÄpÄc jums bÅ«s jÄinstalÄ kruÄ·i.
Darbojas gan kÄ Key Vault (KV), gan kÄ direktorijs (pakalpojumu atklÄÅ”ana). Varat vienlaikus uzglabÄt pakalpojumus, katalogus un datu centrus. Tas ir Ärti ne tikai mums, bet arÄ« kaimiÅu komandÄm, jo, veidojot globÄlu servisu, mÄs domÄjam plaÅ”i.
RakstÄ«ts Go, kas ir daļa no Wargaming kaudzÄ«tes. Mums patÄ«k Ŕī valoda, mums ir daudz Go izstrÄdÄtÄju.
JaudÄ«ga ACL sistÄma. ProgrammÄ Consul varat izmantot ACL, lai kontrolÄtu, kurÅ” ko raksta. MÄs garantÄjam, ka ugunsmÅ«ra noteikumi nepÄrklÄsies ne ar ko citu, un mums ar to nebÅ«s problÄmu.
Bet konsulam ir arī savi trūkumi.
Tas netiek mÄrogots datu centrÄ, ja vien jums nav biznesa versijas. To var mÄrogot tikai federÄcija.
Ä»oti atkarÄ«gs no tÄ«kla kvalitÄtes un servera slodzes. Consul nedarbosies pareizi kÄ serveris uz aizÅemta servera, ja tÄ«klÄ bÅ«s aizkavÄÅ”anÄs, piemÄram, nevienmÄrÄ«gs Ätrums. Tas ir saistÄ«ts ar P2P savienojumiem un atjauninÄjumu izplatÄ«Å”anas modeļiem.
GrÅ«tÄ«bas uzraudzÄ«t pieejamÄ«bu. Konsula statusÄ viÅÅ” var teikt, ka viss ir kÄrtÄ«bÄ, taÄu viÅÅ” jau sen nomira.
LielÄko daļu problÄmu mÄs atrisinÄjÄm, izmantojot Consul, tÄpÄc arÄ« izvÄlÄjÄmies to. UzÅÄmumam ir plÄni par alternatÄ«vu aizmuguri, taÄu mÄs esam iemÄcÄ«juÅ”ies tikt galÄ ar problÄmÄm un Å”obrÄ«d dzÄ«vojam kopÄ ar Consul.
KÄ darbojas konsuls
NosacÄ«tÄ datu centrÄ uzstÄdÄ«sim trÄ«s lÄ«dz piecus serverus. Viens vai divi serveri nedarbosies: tie nespÄs organizÄt kvorumu un izlemt, kuram ir taisnÄ«ba un kuram nav taisnÄ«ba, ja dati nesakrÄ«t. VairÄk par pieciem nav jÄgas, produktivitÄte kritÄ«sies.
Klienti savienojas ar serveriem jebkurÄ secÄ«bÄ: tie paÅ”i aÄ£enti, tikai ar karogu server = false.
PÄc tam klienti saÅem P2P savienojumu sarakstu un izveido savienojumus savÄ starpÄ.
GlobÄlÄ lÄ«menÄ« mÄs savienojam vairÄkus datu centrus. ViÅi arÄ« savieno P2P un sazinÄs.
Ja mÄs vÄlamies izgÅ«t datus no cita datu centra, pieprasÄ«jums tiek nosÅ«tÄ«ts no servera uz serveri. Å o shÄmu sauc Serf protokols. Serf protokolu, tÄpat kÄ Consul, izstrÄdÄ HashiCorp.
Daži svarīgi fakti par konsulu
Konsulam ir dokumentÄcija, kurÄ aprakstÄ«ts, kÄ tas darbojas. Es sniegÅ”u tikai atlasÄ«tus faktus, kurus ir vÄrts zinÄt.
Konsulu serveri izvÄlas meistaru no balsotÄju vidus. Katram datu centram konsuls no serveru saraksta izvÄlas galveno, un visi pieprasÄ«jumi tiek nosÅ«tÄ«ti tikai uz to neatkarÄ«gi no serveru skaita. Meistara iesaldÄÅ”ana nenoved pie pÄrvÄlÄÅ”anas. Ja kapteinis nav izvÄlÄts, pieprasÄ«jumus neviens neapkalpo.
Vai vÄlÄjÄties horizontÄlu mÄrogoÅ”anu? Atvainojiet, nÄ.
PieprasÄ«jums citam datu centram tiek nosÅ«tÄ«ts no galvenÄ uz galveno neatkarÄ«gi no tÄ, uz kuru serveri tas tika nosÅ«tÄ«ts. IzvÄlÄtais meistars saÅem 100% slodzes, izÅemot pÄrsÅ«tÄ«Å”anas pieprasÄ«jumu slodzi. Visiem datu centra serveriem ir atjauninÄta datu kopija, taÄu atbild tikai viens.
VienÄ«gais mÄrogoÅ”anas veids ir klientam iespÄjot novecojuÅ”o režīmu.
NovecojuÅ”Ä režīmÄ varat atbildÄt bez kvoruma. Å is ir režīms, kurÄ mÄs atsakÄmies no datu konsekvences, bet lasÄm nedaudz ÄtrÄk nekÄ parasti, un jebkurÅ” serveris reaÄ£Ä. Protams, ierakstÄ«Å”ana tikai caur meistaru.
Consul nekopÄ datus starp datu centriem. Kad federÄcija ir izveidota, katram serverim bÅ«s tikai savi dati. Citiem viÅÅ” vienmÄr vÄrÅ”as pie kÄda cita.
OperÄciju kodolÄ«gums netiek garantÄts Ärpus darÄ«juma. Atcerieties, ka jÅ«s neesat vienÄ«gais, kurÅ” var mainÄ«t lietas. Ja vÄlaties savÄdÄk, veiciet darÄ«jumu ar slÄdzeni.
BloÄ·ÄÅ”anas darbÄ«bas negarantÄ bloÄ·ÄÅ”anu. PieprasÄ«jums pÄriet no saimnieka uz galveno, nevis tieÅ”i, tÄpÄc nav garantijas, ka bloÄ·ÄÅ”ana darbosies, bloÄ·Äjot, piemÄram, citÄ datu centrÄ.
ACL arÄ« negarantÄ piekļuvi (daudzos gadÄ«jumos). ACL var nedarboties, jo tas tiek glabÄts vienÄ federÄcijas datu centrÄ - ACL datu centrÄ (primÄrÄ DC). Ja DC jums neatbild, ACL nedarbosies.
Viens nosaluÅ”ais meistars liks sasalst visai federÄcijai. PiemÄram, federÄcijÄ ir 10 datu centri, un vienam ir slikts tÄ«kls, un vienam galvenajam neizdodas. Visi, kas ar viÅu sazinÄsies, sastings aplÄ«: ir pieprasÄ«jums, uz to nav atbildes, pavediens sastingst. Nevar zinÄt, kad tas notiks, tikai pÄc stundas vai divÄm visa federÄcija kritÄ«s. JÅ«s neko nevarat darÄ«t.
Statuss, kvorums un vÄlÄÅ”anas tiek izskatÄ«tas atseviÅ”Ä·Ä pavedienÄ. PÄrvÄlÄÅ”ana nenotiks, statuss neko nerÄdÄ«s. JÅ«s domÄjat, ka jums ir dzÄ«vs konsuls, jÅ«s jautÄjat, un nekas nenotiek - atbildes nav. TajÄ paÅ”Ä laikÄ statuss liecina, ka viss ir kÄrtÄ«bÄ.
MÄs esam saskÄruÅ”ies ar Å”o problÄmu, un, lai no tÄs izvairÄ«tos, bija jÄpÄrbÅ«vÄ noteiktas datu centru daļas.
Consul Enterprise biznesa versijai nav daži no iepriekÅ” minÄtajiem trÅ«kumiem. Tam ir daudzas noderÄ«gas funkcijas: balsotÄju atlase, izplatÄ«Å”ana, mÄrogoÅ”ana. Ir tikai viens ābetā - izplatÄ«tÄs sistÄmas licencÄÅ”anas sistÄma ir ļoti dÄrga.
DatorurÄ·ÄÅ”ana: rm -rf /var/lib/consul - lÄ«dzeklis pret visÄm aÄ£enta slimÄ«bÄm. Ja kaut kas jums nedarbojas, vienkÄrÅ”i izdzÄsiet savus datus un lejupielÄdÄjiet datus no kopijas. VisticamÄk, konsuls strÄdÄs.
BEFW
Tagad parunÄsim par to, ko esam pievienojuÅ”i konsulam.
BEFW ir akronÄ«ms vÄrdam BackEndFireWvisi. Veidojot repozitoriju, man bija kaut kÄ jÄnosauc produkts, lai tajÄ veiktu pirmÄs pÄrbaudes saistÄ«bas. Å is nosaukums paliek.
Noteikumu veidnes
Noteikumi ir rakstÄ«ti iptables sintaksÄ.
-N BEFW
-P IEVADES KRÄJUMS
-IEVADE -m stÄvoklis ā stÄvoklis SAISTÄŖTS, IZVEIDOTS -j ACCEPT
-A IEVADE -i lo -j ACCEPT
-A IEVADE -j BEFW
Viss nonÄk BEFW Ä·ÄdÄ, izÅemot ESTABLISHED, RELATED un vietÄjais saimnieks. Veidne var bÅ«t jebkura, Å”is ir tikai piemÄrs.
KÄ BEFW ir noderÄ«gs?
Pakalpojumi
Mums ir pakalpojums, tam vienmÄr ir ports, mezgls, uz kura tas darbojas. No mÅ«su mezgla mÄs varam uz vietas pajautÄt aÄ£entam un uzzinÄt, ka mums ir kÄds pakalpojums. Var likt arÄ« birkas.
JebkurÅ” pakalpojums, kas darbojas un reÄ£istrÄts vietnÄ Consul, pÄrvÄrÅ”as par iptables noteikumu. Mums ir SSH - atvÄrts ports 22. Bash skripts ir vienkÄrÅ”s: curl un iptables, nekas cits nav vajadzÄ«gs.
Klienti
KÄ atvÄrt pieeju ne visiem, bet selektÄ«vi? Pievienojiet IP sarakstus KV krÄtuvei pÄc pakalpojuma nosaukuma.
PiemÄram, mÄs vÄlamies, lai visi desmitÄ tÄ«kla lietotÄji varÄtu piekļūt pakalpojumam SSH_TCP_22. Vai pievienot vienu mazu TTL lauku? un tagad mums ir pagaidu atļaujas, piemÄram, uz dienu.
Pieejas
MÄs savienojam pakalpojumus un klientus: mums ir serviss, KV krÄtuve ir gatava katram. Tagad mÄs dodam piekļuvi ne visiem, bet selektÄ«vi.
Grupa
Ja katru reizi rakstÄ«sim tÅ«kstoÅ”iem IP piekļuvei, mÄs nogursim. IzdomÄsim grupÄjumus ā atseviŔķu apakÅ”kopu KV. Sauksim to par Alias āā(vai grupÄm) un saglabÄsim grupas tur saskaÅÄ ar to paÅ”u principu.
Savienojamies: tagad mÄs varam atvÄrt SSH nevis speciÄli P2P, bet gan visai grupai vai vairÄkÄm grupÄm. TÄdÄ paÅ”Ä veidÄ ir TTL - jÅ«s varat pievienot grupai un Ä«slaicÄ«gi noÅemt no grupas.
IntegrÄcija
MÅ«su problÄma ir cilvÄciskais faktors un automatizÄcija. LÄ«dz Å”im mÄs to esam atrisinÄjuÅ”i Å”ÄdÄ veidÄ.
MÄs strÄdÄjam ar Puppet un nododam viÅiem visu, kas attiecas uz sistÄmu (lietojumprogrammas kodu). Puppetdb (parastais PostgreSQL) saglabÄ tur strÄdÄjoÅ”o pakalpojumu sarakstu, tos var atrast pÄc resursa veida. Tur var uzzinÄt, kurÅ” kur piesakÄs. Å im nolÅ«kam mums ir arÄ« izvilkÅ”anas pieprasÄ«jumu un sapludinÄÅ”anas pieprasÄ«jumu sistÄma.
MÄs uzrakstÄ«jÄm befw-sync ā vienkÄrÅ”u risinÄjumu, kas palÄ«dz pÄrsÅ«tÄ«t datus. PirmkÄrt, sinhronizÄcijas sÄ«kfailiem piekļūst puppetdb. Tur ir konfigurÄts HTTP API: mÄs pieprasÄm, kÄdi pakalpojumi mums ir, kas jÄdara. Tad viÅi iesniedz pieprasÄ«jumu konsulam.
Vai ir integrÄcija? JÄ: viÅi uzrakstÄ«ja noteikumus un ļÄva pieÅemt Pull Requests. Vai jums ir nepiecieÅ”ams noteikts ports vai jÄpievieno resursdators kÄdai grupai? Izvelciet pieprasÄ«jumu, pÄrskatiet ā vairs nav nepiecieÅ”ams āAtrodiet 200 citus ACL un mÄÄ£iniet kaut ko darÄ«t lietas labÄ.ā
OptimizÄcija
Pinging localhost ar tukÅ”u noteikumu Ä·Ädi aizÅem 0,075 ms.
Pievienosim Å”ai Ä·Ädei 10 000 iptables adreses. RezultÄtÄ ping palielinÄsies 5 reizes: iptables ir pilnÄ«gi lineÄrs, katras adreses apstrÄde aizÅem kÄdu laiku.
UgunsmÅ«rim, kurÄ mÄs migrÄjam tÅ«kstoÅ”iem ACL, mums ir daudz noteikumu, un tas ievieÅ” latentumu. Tas ir slikti spÄļu protokoliem.
Bet ja liekam 10 000 adreÅ”u ipset Ping pat samazinÄsies.
Lieta ir tÄda, ka ipset āOā (algoritma sarežģītÄ«ba) vienmÄr ir vienÄds ar 1, neatkarÄ«gi no tÄ, cik noteikumu ir. Tiesa, ir ierobežojums ā kÄrtulu nevar bÅ«t vairÄk par 65535. PagaidÄm dzÄ«vojam ar to: vari tos apvienot, paplaÅ”inÄt, izveidot divus ipsetus vienÄ.
GlabÄÅ”ana
LoÄ£isks iterÄcijas procesa turpinÄjums ir pakalpojuma ipset informÄcijas glabÄÅ”ana par klientiem.
Tagad mums ir tas pats SSH, un mÄs nerakstÄm 100 IP vienlaikus, bet iestatÄm ipset nosaukumu, ar kuru mums jÄsazinÄs, un Å”Ädu noteikumu DROP. To var pÄrvÄrst vienÄ noteikumÄ āKas Å”eit nav, DROPā, bet tas ir skaidrÄks.
Tagad mums ir noteikumi un kopas. Galvenais uzdevums ir izveidot kopu pirms likuma rakstÄ«Å”anas, jo pretÄjÄ gadÄ«jumÄ iptables kÄrtulu nerakstÄ«s.
VispÄrÄjÄ shÄma
Diagrammas veidÄ viss, ko es teicu, izskatÄs Å”Ädi.
MÄs apÅemamies Puppet, viss tiek nosÅ«tÄ«ts saimniekam, pakalpojumi Å”eit, ipset tur, un neviens, kas tur nav reÄ£istrÄts, nav atļauts.
Ļauj noliegt
Lai Ätri glÄbtu pasauli vai Ätri kÄdu atspÄjotu, visu Ä·Äžu sÄkumÄ mÄs izveidojÄm divus ipsets: rules_allow Šø rules_deny. KÄ tas strÄdÄ?
PiemÄram, kÄds izveido slodzi mÅ«su tÄ«meklÄ«, izmantojot robotprogrammatÅ«ras. IepriekÅ” jums bija jÄatrod viÅa IP no žurnÄliem, jÄnogÄdÄ tÄ«kla inženieriem, lai viÅi varÄtu atrast trafika avotu un viÅu aizliegt. Tagad izskatÄs savÄdÄk.
MÄs to nosÅ«tÄm konsulam, pagaidiet 2,5 sekundes, un tas ir darÄ«ts. TÄ kÄ Consul Ätri izplata, izmantojot P2P, tas darbojas visur, jebkurÄ pasaules daļÄ.
Reiz es kaut kÄ pilnÄ«bÄ pÄrtraucu WOT ugunsmÅ«ra kļūdas dÄļ. rules_allow - Ŕī ir mÅ«su apdroÅ”inÄÅ”ana pret Å”Ädiem gadÄ«jumiem. Ja kaut kur esam kļūdÄ«juÅ”ies ar ugunsmÅ«ri, kaut kur kaut kas ir bloÄ·Äts, mÄs vienmÄr varam nosÅ«tÄ«t nosacÄ«jumu 0.0/0lai Ätri visu savÄktu. VÄlÄk visu salabosim ar rokÄm.
Citi komplekti
KosmosÄ varat pievienot jebkuru citu komplektu $IPSETS$.
Par ko? Dažreiz kÄdam ir nepiecieÅ”ams ipset, piemÄram, lai atdarinÄtu kÄdas klastera daļas izslÄgÅ”anu. Ikviens var atnest jebkurus komplektus, nosaukt tos, un tie tiks izÅemti no konsula. TajÄ paÅ”Ä laikÄ komplekti var piedalÄ«ties iptables noteikumos vai darboties kÄ komanda NOOP: konsekvenci uzturÄs dÄmons.
Biedri
IepriekÅ” tas bija Å”Ädi: lietotÄjs izveidoja savienojumu ar tÄ«klu un saÅÄma parametrus caur domÄnu. Pirms jaunÄs paaudzes ugunsmÅ«ru parÄdÄ«Å”anÄs Cisco nezinÄja, kÄ saprast, kur atrodas lietotÄjs un kur atrodas IP. TÄpÄc piekļuve tika pieŔķirta tikai, izmantojot maŔīnas saimniekdatora nosaukumu.
Ko mÄs darÄ«jÄm? MÄs iestrÄgÄm brÄ«dÄ«, kad saÅÄmÄm adresi. Parasti tas ir dot1x, Wi-Fi vai VPN ā viss notiek caur RADIUS. Katram lietotÄjam mÄs izveidojam grupu pÄc lietotÄjvÄrda un ievietojam tajÄ IP ar TTL, kas ir vienÄds ar tÄ dhcp.lease - tiklÄ«dz beidzas termiÅÅ”, noteikums pazudÄ«s.
Tagad mÄs varam atvÄrt piekļuvi pakalpojumiem, tÄpat kÄ citÄm grupÄm, pÄc lietotÄjvÄrda. MÄs esam atbrÄ«vojuÅ”ies no resursdatora nosaukumiem, kad tie mainÄs, un esam noÅÄmuÅ”i slogu no tÄ«kla inženieriem, jo āāviÅiem vairs nav nepiecieÅ”ams Cisco. Tagad paÅ”i inženieri reÄ£istrÄ piekļuvi savos serveros.
IzolÄcija
TajÄ paÅ”Ä laikÄ mÄs sÄkÄm demontÄt izolÄciju. Pakalpojumu vadÄ«tÄji veica inventarizÄciju, un mÄs analizÄjÄm visus mÅ«su tÄ«klus. SadalÄ«sim tÄs vienÄs un tajÄs paÅ”Äs grupÄs, un nepiecieÅ”amajos serveros grupas tika pievienotas, piemÄram, lai noliegtu. Tagad tÄ pati inscenÄÅ”anas izolÄcija nonÄk iestudÄjuma noteikumos_noliegumÄ, bet ne paÅ”Ä iestudÄjumÄ.
ShÄma darbojas Ätri un vienkÄrÅ”i: mÄs noÅemam visus ACL no serveriem, izkraujam aparatÅ«ru un samazinÄm izolÄto VLAN skaitu.
IntegritÄtes kontrole
IepriekÅ” mums bija Ä«paÅ”s aktivizÄtÄjs, kas ziÅoja, kad kÄds manuÄli mainÄ«ja ugunsmÅ«ra noteikumu. Es rakstÄ«ju milzÄ«gu lÄ«niju ugunsmÅ«ra noteikumu pÄrbaudei, tas bija grÅ«ti. IntegritÄti tagad kontrolÄ BEFW. ViÅÅ” dedzÄ«gi rÅ«pÄjas, lai viÅa pieÅemtie noteikumi nemainÄ«tos. Ja kÄds mainÄ«s ugunsmÅ«ra noteikumus, tas viss mainÄ«s atpakaļ. āEs Ätri iestatÄ«ju starpniekserveri, lai varÄtu strÄdÄt no mÄjÄmā ā Å”Ädu iespÄju vairs nav.
BEFW kontrolÄ ipset no pakalpojumiem un sarakstu befw.conf, pakalpojumu noteikumus BEFW Ä·ÄdÄ. Bet tas neuzrauga citas Ä·Ädes un noteikumus un citus ipsets.
AvÄrijas aizsardzÄ«ba
BEFW vienmÄr saglabÄ pÄdÄjo zinÄmo labo stÄvokli tieÅ”i state.bin binÄrajÄ struktÅ«rÄ. Ja kaut kas noiet greizi, tas vienmÄr atgriežas Å”ajÄ stÄvoklÄ«.bin.
Å Ä« ir apdroÅ”inÄÅ”ana pret nestabilu konsula darbÄ«bu, kad tas nenosÅ«tÄ«ja datus vai kÄds kļūdÄ«jÄs un izmantoja noteikumus, kurus nevar piemÄrot. Lai mÄs nepaliktu bez ugunsmÅ«ra, BEFW atgriezÄ«sies jaunÄkajÄ stÄvoklÄ«, ja kÄdÄ posmÄ radÄ«sies kļūda.
KritiskÄs situÄcijÄs tÄ ir garantija, ka mums paliks strÄdÄjoÅ”s ugunsmÅ«ris. Atveram visus pelÄkos tÄ«klus, cerot, ka atnÄks admins un salabos. KÄdreiz es to ievietoÅ”u konfigurÄcijÄs, bet tagad mums ir tikai trÄ«s pelÄki tÄ«kli: 10/8, 172/12 un 192.168/16. MÅ«su konsulÄ Å”Ä« ir svarÄ«ga iezÄ«me, kas palÄ«dz mums attÄ«stÄ«ties tÄlÄk.
DemonstrÄcija: ziÅojuma laikÄ Ivans demonstrÄ BEFW demonstrÄcijas režīmu. DemonstrÄciju ir vieglÄk skatÄ«ties Video. Pieejams demonstrÄcijas pirmkods vietnÄ GitHub.
Slazdiem
Es jums pastÄstÄ«Å”u par kļūdÄm, ar kurÄm mÄs sastapÄmies.
ipset add set 0.0.0.0/0. Kas notiek, ja ipset pievienojat 0.0.0.0/0? Vai tiks pievienoti visi IP? Vai būs pieejams internets?
NÄ, mÄs iegÅ«sim kļūdu, kas mums izmaksÄs divas stundas dÄ«kstÄves. TurklÄt kļūda nedarbojas kopÅ” 2016. gada, tÄ atrodas RedHat Bugzilla ar numuru #1297092, un mÄs to atradÄm nejauÅ”i - no izstrÄdÄtÄja ziÅojuma.
Tagad tas ir stingri noteikts BEFW 0.0.0.0/0 pÄrvÄrÅ”as divÄs adresÄs: 0.0.0.0/1 Šø 128.0.0.0/1.
ipset atjaunoÅ”anas kopa < fails. Ko ipset dara, kad tu to pasaki restore? Vai jÅ«s domÄjat, ka tas darbojas tÄpat kÄ iptables? Vai tas atgÅ«s datus?
Nekas tamlÄ«dzÄ«gs ā tas tiek sapludinÄts, un vecÄs adreses nekur nepazÅ«d, jÅ«s nebloÄ·Äjat piekļuvi.
PÄrbaudot izolÄciju, mÄs atradÄm kļūdu. Tagad ir diezgan sarežģīta sistÄma - tÄ vietÄ restore held create temptad restore flush temp Šø restore temp. MijmaiÅas beigÄs: par atomitÄti, jo, ja jÅ«s to darÄt vispirms flush un Å”ajÄ brÄ«dÄ« pienÄk kÄda paciÅa, tÄ tiks izmesta un kaut kas noies greizi. TÄtad tur ir mazliet melnÄs maÄ£ijas.
konsuls kv get -datacenter=other. KÄ jau teicu, mÄs domÄjam, ka mÄs pieprasÄm dažus datus, bet mÄs vai nu saÅemsim datus, vai arÄ« saÅemsim kļūdu. MÄs to varam izdarÄ«t ar konsula starpniecÄ«bu lokÄli, taÄu Å”ajÄ gadÄ«jumÄ abi sastings.
VietÄjais Consul klients ir HTTP API iesaiÅotÄjs. Bet tas vienkÄrÅ”i uzkaras un nereaÄ£Ä tikai uz Ctrl+C, Ctrl+Z vai jebko citu kill -9 nÄkamajÄ konsolÄ. MÄs ar to saskÄrÄmies, veidojot lielu kopu. TaÄu mums vÄl nav risinÄjuma; mÄs gatavojamies Ŕīs kļūdas laboÅ”anai konsulÄ.
Konsula vadÄ«tÄjs nereaÄ£Ä. MÅ«su meistars datu centrÄ nereaÄ£Ä, mÄs domÄjam: "VarbÅ«t atkÄrtotas atlases algoritms tagad darbosies?"
NÄ, tas nedarbosies, un uzraudzÄ«ba neko nerÄdÄ«s: konsuls teiks, ka ir saistÄ«bu indekss, ir atrasts vadÄ«tÄjs, viss ir kÄrtÄ«bÄ.
KÄ mÄs ar to tiekam galÄ? service consul restart kronÄ katru stundu. Ja jums ir 50 serveri, tas nav nekas liels. Kad to bÅ«s 16 000, jÅ«s sapratÄ«sit, kÄ tas darbojas.
MÄs atbrÄ«vojÄm aparatÅ«ras un tÄ«kla inženierus no verdzÄ«bas.
Ir parÄdÄ«juÅ”Äs gandrÄ«z neierobežotas integrÄcijas iespÄjas: pat ar Kubernetes, pat ar Ansible, pat ar Python.
MÄ«nusi: Konsuls, ar kuru mums tagad ir jÄsadzÄ«vo, un ļoti augstÄs kļūdas izmaksas. PiemÄram, reiz pulksten 6 (Krievijas galvenais laiks) es kaut ko rediÄ£Äju tÄ«klu sarakstos. MÄs tajÄ laikÄ tikai bÅ«vÄjÄm siltinÄÅ”anu uzÅÄmumÄ BEFW. Kaut kur kļūdÄ«jos, Ŕķiet norÄdÄ«ju nepareizo masku, bet viss nokrita divÄs sekundÄs. Iedegas monitorings, atskrien dežurÄjoÅ”Ä atbalsta persona: "Mums viss ir!" Nodaļas vadÄ«tÄjs kļuva pelÄks, kad biznesam paskaidroja, kÄpÄc tas noticis.
Kļūdu izmaksas ir tik augstas, ka esam izstrÄdÄjuÅ”i paÅ”i savu sarežģīto profilakses procedÅ«ru. Ja to ievieÅ”at lielÄ ražoÅ”anas vietÄ, jums nav visiem jÄpieŔķir galvenÄ pilnvara pÄr konsulu. Tas beigsies slikti.
Izmaksas Es rakstÄ«ju kodu 400 stundas vienatnÄ. Mana 4 cilvÄku komanda katru mÄnesi pavada 10 stundas, lai atbalstÄ«tu visus. SalÄ«dzinot ar jebkura jaunÄs paaudzes ugunsmÅ«ra cenu, tas ir bez maksas.
PlÄni. IlgtermiÅa plÄns ir atrast alternatÄ«vu transportu, lai aizstÄtu vai papildinÄtu konsulu. VarbÅ«t tÄ bÅ«s Kafka vai kas lÄ«dzÄ«gs. Bet nÄkamajos gados dzÄ«vosim uz Consul.
TÅ«lÄ«tÄjie plÄni: integrÄcija ar Fail2ban, ar uzraudzÄ«bu, ar nftables, iespÄjams, ar citiem izplatÄ«jumiem, metrika, uzlabota uzraudzÄ«ba, optimizÄcija. ArÄ« Kubernetes atbalsts ir kaut kur plÄnos, jo tagad mums ir vairÄki klasteri un vÄlme.
VairÄk no plÄniem:
meklÄt anomÄlijas satiksmÄ;
tīkla karŔu vadība;
Kubernetes atbalsts;
PakeÅ”u komplektÄÅ”ana visÄm sistÄmÄm;
Web-UI.
MÄs pastÄvÄ«gi strÄdÄjam pie konfigurÄcijas paplaÅ”inÄÅ”anas, metrikas palielinÄÅ”anas un optimizÄcijas.
Pievienojies projektam. Projekts izrÄdÄ«jÄs forÅ”s, bet diemžÄl tas joprojÄm ir vienas personas projekts. NÄc uz GitHub un mÄÄ£inÄt kaut ko darÄ«t: apÅemties, pÄrbaudÄ«t, kaut ko ieteikt, sniegt savu vÄrtÄjumu.
TikmÄr mÄs gatavojamies Saint HighLoad++, kas notiks 6. un 7. aprÄ«lÄ« SanktpÄterburgÄ, un aicinÄm uz lielas slodzes sistÄmu izstrÄdÄtÄjus pieteikties uz atskaiti. PieredzÄjuÅ”i runÄtÄji jau zina, kÄ rÄ«koties, bet tiem, kas sÄk runÄt, mÄs iesakÄm vismaz izmÄÄ£inÄt. DalÄ«bai konferencÄ kÄ runÄtÄjam ir vairÄkas priekÅ”rocÄ«bas. Kurus var izlasÄ«t, piemÄram, beigÄs no Ŕī raksta.