Conswl + iptables = :3

Yn 2010 y cwmni Gemau Rhyfel roedd yna 50 o weinyddion a model rhwydwaith syml: backend, frontend a firewall. Tyfodd nifer y gweinyddwyr, daeth y model yn fwy cymhleth: llwyfannu, VLANs ynysig gydag ACLs, yna VPNs gyda VRFs, VLANs gydag ACLs ar L2, VRFs gydag ACLs ar L3. Mae pen yn troelli? Bydd yn fwy o hwyl yn nes ymlaen.

Pan oedd 16 o weinyddion, daeth yn amhosibl gweithio heb ddagrau gyda chymaint o segmentau heterogenaidd. Felly fe wnaethon ni ddod o hyd i ateb arall. Fe wnaethon ni gymryd y pentwr Netfilter, ychwanegu Conswl ato fel ffynhonnell ddata, a chawsom wal dân a ddosbarthwyd yn gyflym. Fe wnaethant ddisodli ACLs ar lwybryddion a'u defnyddio fel wal dân allanol a mewnol. Er mwyn rheoli'r offeryn yn ddeinamig, fe wnaethom ddatblygu system BEFW, a ddefnyddiwyd ym mhobman: o reoli mynediad defnyddwyr i'r rhwydwaith cynnyrch i ynysu segmentau rhwydwaith oddi wrth ei gilydd.

Conswl + iptables = :3

Bydd yn dweud wrthych sut mae'r cyfan yn gweithio a pham y dylech edrych yn agosach ar y system hon. Ivan Agarkov (annmuor) yw pennaeth grŵp diogelwch seilwaith yr adran Cynnal a Chadw yng nghanolfan ddatblygu Minsk y cwmni. Mae Ivan yn gefnogwr SELinux, yn caru Perl, ac yn ysgrifennu cod. Fel pennaeth y grŵp diogelwch gwybodaeth, mae'n gweithio'n rheolaidd gyda logiau, copïau wrth gefn ac ymchwil a datblygu i amddiffyn Wargaming rhag hacwyr a sicrhau gweithrediad pob gweinydd gêm yn y cwmni.

Gwybodaeth hanesyddol

Cyn i mi ddweud wrthych sut y gwnaethom hynny, byddaf yn dweud wrthych sut y daethom at hyn yn y lle cyntaf a pham yr oedd ei angen. I wneud hyn, gadewch i ni fynd yn ôl 9 mlynedd: 2010, World of Tanks newydd ymddangos. Roedd gan Wargaming tua 50 o weinyddion.

Conswl + iptables = :3
Siart twf gweinydd cwmni.

Roedd gennym fodel rhwydwaith. Am y cyfnod hwnnw roedd yn optimaidd.

Conswl + iptables = :3
Model rhwydwaith yn 2010.

Mae yna fechgyn drwg ar y pen blaen sydd eisiau ein torri ni, ond mae ganddo wal dân. Nid oes wal dân ar y backend, ond mae yna 50 o weinyddion yno, rydyn ni'n eu hadnabod i gyd. Mae popeth yn gweithio'n dda.

Mewn 4 blynedd, tyfodd fflyd y gweinydd 100 gwaith, i 5000. Ymddangosodd y rhwydweithiau ynysig cyntaf - llwyfannu: ni allent fynd i gynhyrchu, ac yn aml roedd pethau'n rhedeg yno a allai fod yn beryglus.

Conswl + iptables = :3
Model rhwydwaith yn 2014.

Trwy syrthni, defnyddiwyd yr un darnau o galedwedd, a gwnaed yr holl waith ar VLANs ynysig: Ysgrifennir ACLs i'r VLANs, sy'n caniatáu neu'n gwadu rhyw fath o gysylltiad.

Yn 2016, cyrhaeddodd nifer y gweinyddwyr 8000. Amsugnodd Wargaming stiwdios eraill, ac ymddangosodd rhwydweithiau cyswllt ychwanegol. Mae'n ymddangos eu bod yn perthyn i ni, ond nid yn hollol: yn aml nid yw VLAN yn gweithio i bartneriaid, mae'n rhaid i chi ddefnyddio VPN gyda VRF, mae ynysu yn dod yn fwy cymhleth. Tyfodd cymysgedd inswleiddio ACL.

Conswl + iptables = :3
Model rhwydwaith yn 2016.

Erbyn dechrau 2018, roedd y fflyd o beiriannau wedi tyfu i 16. Roedd 000 segment, ac ni wnaethom gyfrif y gweddill, gan gynnwys rhai caeedig lle roedd data ariannol yn cael ei storio. Mae rhwydweithiau cynhwysydd (Kubernetes), DevOps, rhwydweithiau cwmwl wedi'u cysylltu trwy VPN, er enghraifft, o IVS, wedi ymddangos. Roedd yna lawer o reolau - roedd yn boenus.

Conswl + iptables = :3
Model rhwydwaith a dulliau ynysu yn 2018.

Ar gyfer ynysu fe wnaethom ddefnyddio: VLAN gydag ACL ar L2, VRF gydag ACL ar L3, VPN a llawer mwy. Gormod.

Problemau

Mae pawb yn byw gydag ACL a VLAN. Beth sy'n bod? Bydd y cwestiwn hwn yn cael ei ateb gan Harold, gan guddio'r boen.

Conswl + iptables = :3

Roedd yna lawer o broblemau, ond roedd pump o rai enfawr.

  • Cynnydd geometrig pris ar gyfer rheolau newydd. Cymerodd pob rheol newydd yn hwy i'w hychwanegu na'r un flaenorol, oherwydd yn gyntaf roedd angen gweld a oedd rheol o'r fath eisoes.
  • Dim wal dân y tu mewn i segmentau. Rhywsut roedd y segmentau wedi'u gwahanu oddi wrth ei gilydd, ac nid oedd digon o adnoddau y tu mewn yn barod.
  • Defnyddiwyd y rheolau am amser hir. Gallai gweithredwyr ysgrifennu un rheol leol â llaw mewn awr. Cymerodd yr un byd-eang sawl diwrnod.
  • Anawsterau gyda rheolau archwilio. Yn fwy manwl gywir, nid oedd yn bosibl. Ysgrifennwyd y rheolau cyntaf yn ôl yn 2010, ac nid oedd y rhan fwyaf o'u hawduron bellach yn gweithio i'r cwmni.
  • Lefel isel o reolaeth seilwaith. Dyma’r brif broblem – doedden ni ddim yn gwybod yn iawn beth oedd yn digwydd yn ein gwlad.

Dyma sut olwg oedd ar beiriannydd rhwydwaith yn 2018 pan glywodd: “Angen mwy o ACL.”

Conswl + iptables = :3

Datrysiadau

Ar ddechrau 2018, penderfynwyd gwneud rhywbeth yn ei gylch.

Mae pris integreiddiadau yn tyfu'n gyson. Y man cychwyn oedd bod canolfannau data mawr wedi rhoi'r gorau i gefnogi VLANs ac ACLs ynysig oherwydd bod y dyfeisiau'n rhedeg allan o gof.

Ateb: gwnaethom ddileu'r ffactor dynol ac awtomataidd darparu mynediad i'r uchafswm.

Mae'r rheolau newydd yn cymryd amser hir i'w cymhwyso. Ateb: cyflymwch y broses o gymhwyso rheolau, ei gwneud yn ddosbarthedig ac yn gyfochrog. Mae hyn yn gofyn am system ddosbarthedig fel bod y rheolau'n cael eu cyflwyno eu hunain, heb rsync na SFTP i fil o systemau.

Dim wal dân y tu mewn i segmentau. Dechreuodd wal dân o fewn segmentau ddod atom pan ymddangosodd gwahanol wasanaethau o fewn yr un rhwydwaith. Ateb: defnyddiwch wal dân ar y lefel gwesteiwr - waliau tân yn seiliedig ar westeiwr. Bron ym mhobman mae gennym Linux, ac ym mhobman mae gennym iptables, nid yw hyn yn broblem.

Anawsterau gyda rheolau archwilio. Ateb: Cadwch yr holl reolau mewn un lle ar gyfer adolygu a rheoli, fel y gallwn archwilio popeth.

Lefel isel o reolaeth dros seilwaith. Ateb: cymerwch restr o'r holl wasanaethau a mynediad rhyngddynt.

Mae hon yn fwy o broses weinyddol nag un dechnegol. Weithiau mae gennym 200-300 o ddatganiadau newydd yr wythnos, yn enwedig yn ystod hyrwyddiadau a gwyliau. Ar ben hynny, dim ond ar gyfer un tîm o'n DevOps y mae hyn. Gyda chymaint o ddatganiadau, mae'n amhosibl gweld pa borthladdoedd, IPs, ac integreiddiadau sydd eu hangen. Felly, roedd angen rheolwyr gwasanaeth wedi’u hyfforddi’n arbennig arnom a ofynnodd i’r timau: “Beth sydd yna beth bynnag a pham wnaethoch chi ei godi?”

Ar ôl popeth a lansiwyd gennym, dechreuodd peiriannydd rhwydwaith yn 2019 edrych fel hyn.

Conswl + iptables = :3

Conswl

Fe benderfynon ni y bydden ni'n rhoi popeth roedden ni'n dod o hyd iddo gyda chymorth rheolwyr gwasanaethau yn y Conswl ac o'r fan honno bydden ni'n ysgrifennu rheolau iptables.

Sut wnaethon ni benderfynu gwneud hyn?

  • Byddwn yn casglu'r holl wasanaethau, rhwydweithiau a defnyddwyr.
  • Gadewch i ni greu rheolau iptables yn seiliedig arnynt.
  • Rydym yn awtomeiddio rheolaeth.
  • ....
  • PROFFIT.

Nid yw Conswl yn API anghysbell, gall redeg ar bob nod ac ysgrifennu at iptables. Y cyfan sydd ar ôl yw dod o hyd i reolaethau awtomatig a fydd yn glanhau pethau diangen, a bydd y rhan fwyaf o'r problemau'n cael eu datrys! Byddwn yn gweithio allan y gweddill wrth i ni fynd.

Pam Conswl?

Wedi profi ei hun yn dda. Yn 2014-15, fe wnaethom ei ddefnyddio fel backend ar gyfer Vault, lle rydym yn storio cyfrineiriau.

Nid yw'n colli data. Yn ystod yr amser defnydd, ni chollodd Conswl ddata yn ystod un ddamwain. Mae hyn yn fantais enfawr i system rheoli wal dân.

Mae cysylltiadau P2P yn cyflymu lledaeniad newid. Gyda P2P, daw pob newid yn gyflym, nid oes angen aros am oriau.

API REST cyfleus. Fe wnaethom hefyd ystyried Apache ZooKeeper, ond nid oes ganddo API REST, felly bydd yn rhaid i chi osod baglau.

Yn gweithio fel Key Vault (KV) a Chyfeiriadur (Darganfod Gwasanaeth). Gallwch storio gwasanaethau, catalogau a chanolfannau data ar unwaith. Mae hyn yn gyfleus nid yn unig i ni, ond hefyd i dimau cyfagos, oherwydd wrth adeiladu gwasanaeth byd-eang, rydym yn meddwl yn fawr.

Wedi'i ysgrifennu yn Go, sy'n rhan o stac Wargaming. Rydyn ni'n caru'r iaith hon, mae gennym ni lawer o ddatblygwyr Go.

System ACL pwerus. Yn Conswl, gallwch ddefnyddio ACLs i reoli pwy sy'n ysgrifennu beth. Rydym yn gwarantu na fydd y rheolau wal dân yn gorgyffwrdd ag unrhyw beth arall ac ni fyddwn yn cael problemau gyda hyn.

Ond mae anfanteision i Gonswl hefyd.

  • Nid yw'n graddio o fewn canolfan ddata oni bai bod gennych fersiwn busnes. Dim ond trwy ffederasiwn y gellir ei raddio.
  • Yn ddibynnol iawn ar ansawdd y rhwydwaith a llwyth y gweinydd. Ni fydd Conswl yn gweithio'n iawn fel gweinydd ar weinydd prysur os oes unrhyw oedi yn y rhwydwaith, er enghraifft, cyflymder anwastad. Mae hyn oherwydd cysylltiadau P2P a diweddaru modelau dosbarthu.
  • Anhawster monitro argaeledd. Mewn statws Conswl gall ddweud bod popeth yn iawn, ond bu farw amser maith yn ôl.

Fe wnaethom ddatrys y rhan fwyaf o'r problemau hyn wrth ddefnyddio Conswl, a dyna pam y gwnaethom ei ddewis. Mae gan y cwmni gynlluniau ar gyfer backend amgen, ond rydym wedi dysgu i ddelio â phroblemau ac ar hyn o bryd yn byw gyda Conswl.

Sut mae Conswl yn gweithio

Byddwn yn gosod tri i bum gweinydd mewn canolfan ddata amodol. Ni fydd un neu ddau o weinyddion yn gweithio: ni fyddant yn gallu trefnu cworwm a phenderfynu pwy sy'n iawn a phwy sy'n anghywir pan nad yw'r data'n cyfateb. Nid yw mwy na phump yn gwneud unrhyw synnwyr, bydd cynhyrchiant yn gostwng.

Conswl + iptables = :3

Mae cleientiaid yn cysylltu â'r gweinyddwyr mewn unrhyw drefn: yr un asiantau, dim ond gyda'r faner server = false.

Conswl + iptables = :3

Ar ôl hyn, mae cleientiaid yn derbyn rhestr o gysylltiadau P2P ac yn adeiladu cysylltiadau ymhlith ei gilydd.

Conswl + iptables = :3

Ar y lefel fyd-eang, rydym yn cysylltu sawl canolfan ddata. Maent hefyd yn cysylltu P2P ac yn cyfathrebu.

Conswl + iptables = :3

Pan fyddwn am adfer data o ganolfan ddata arall, mae'r cais yn mynd o weinydd i weinydd. Gelwir y cynllun hwn Protocol serf. Mae protocol Serf, fel Conswl, yn cael ei ddatblygu gan HashiCorp.

Rhai ffeithiau pwysig am Gonswl

Mae gan Gonswl ddogfennaeth sy'n disgrifio sut mae'n gweithio. Ni roddaf ond ffeithiau detholedig sydd yn werth eu gwybod.

Mae gweinyddwyr conswl yn dewis meistr o blith y pleidleiswyr. Mae Conswl yn dewis meistr o'r rhestr o weinyddion ar gyfer pob canolfan ddata, ac mae pob cais yn mynd iddo yn unig, waeth beth fo nifer y gweinyddwyr. Nid yw rhewi meistr yn arwain at ail-ethol. Os na ddewisir y meistr, nid yw ceisiadau yn cael eu gwasanaethu gan unrhyw un.

Oeddech chi eisiau graddio llorweddol? Sori, na.

Mae cais i ganolfan ddata arall yn mynd o feistr i feistr, ni waeth i ba weinydd y daeth. Mae'r meistr a ddewiswyd yn derbyn 100% o'r llwyth, ac eithrio'r llwyth ar geisiadau ymlaen. Mae gan bob gweinydd yn y ganolfan ddata gopi diweddar o'r data, ond dim ond un sy'n ymateb.

Yr unig ffordd i raddfa yw galluogi modd hen ar y cleient.

Yn y modd hen, gallwch ymateb heb gworwm. Mae hwn yn fodd lle rydyn ni'n rhoi'r gorau i gysondeb data, ond yn darllen ychydig yn gyflymach nag arfer, ac mae unrhyw weinydd yn ymateb. Yn naturiol, cofnodi dim ond drwy'r meistr.

Nid yw Conswl yn copïo data rhwng canolfannau data. Pan fydd ffederasiwn yn cael ei ymgynnull, dim ond ei ddata ei hun fydd gan bob gweinydd. I eraill, mae bob amser yn troi at rywun arall.

Nid yw atomigrwydd gweithrediadau wedi'i warantu y tu allan i drafodiad. Cofiwch nad chi yw'r unig un sy'n gallu newid pethau. Os ydych chi ei eisiau'n wahanol, cynhaliwch drafodiad gyda chlo.

Nid yw gweithrediadau blocio yn gwarantu cloi. Mae'r cais yn mynd o feistr i feistr, ac nid yn uniongyrchol, felly nid oes unrhyw sicrwydd y bydd y blocio yn gweithio pan fyddwch chi'n blocio, er enghraifft, mewn canolfan ddata arall.

Nid yw ACL ychwaith yn gwarantu mynediad (mewn llawer o achosion). Efallai na fydd yr ACL yn gweithio oherwydd ei fod yn cael ei storio mewn canolfan ddata un ffederasiwn - yn y ganolfan ddata ACL (Cynradd DC). Os na fydd y DC yn eich ateb, ni fydd yr ACL yn gweithio.

Bydd un meistr wedi'i rewi yn achosi i'r ffederasiwn cyfan rewi. Er enghraifft, mae yna 10 canolfan ddata mewn ffederasiwn, ac mae gan un rwydwaith gwael, ac mae un meistr yn methu. Bydd pawb sy'n cyfathrebu ag ef yn sownd mewn cylch: mae cais, nid oes ateb iddo, mae'r edau yn rhewi. Nid oes unrhyw ffordd i wybod pryd y bydd hyn yn digwydd, dim ond mewn awr neu ddwy bydd y ffederasiwn cyfan yn disgyn. Does dim byd y gallwch chi ei wneud amdano.

Ymdrinnir â statws, cworwm ac etholiadau gan edefyn ar wahân. Ni fydd ail-ethol yn digwydd, ni fydd y statws yn dangos unrhyw beth. Rydych chi'n meddwl bod gennych Gonswl byw, rydych chi'n gofyn, ac nid oes dim yn digwydd - nid oes ateb. Ar yr un pryd, mae'r statws yn dangos bod popeth yn iawn.

Rydym wedi dod ar draws y broblem hon ac wedi gorfod ailadeiladu rhannau penodol o ganolfannau data i'w hosgoi.

Nid oes gan y fersiwn busnes o Consul Enterprise rai o'r anfanteision uchod. Mae ganddo lawer o swyddogaethau defnyddiol: dewis pleidleiswyr, dosbarthu, graddio. Dim ond un “ond” sydd - mae'r system drwyddedu ar gyfer system ddosbarthedig yn ddrud iawn.

Hacio Bywyd: rm -rf /var/lib/consul - iachâd ar gyfer holl afiechydon yr asiant. Os nad yw rhywbeth yn gweithio i chi, dim ond dileu eich data a lawrlwytho'r data o gopi. Yn fwyaf tebygol, bydd Conswl yn gweithio.

BEFW

Nawr gadewch i ni siarad am yr hyn rydyn ni wedi'i ychwanegu at Gonswl.

BEFW yn acronym ar gyfer BackEndFireWI gyd. Roedd yn rhaid i mi enwi'r cynnyrch rywsut pan wnes i greu'r ystorfa er mwyn rhoi'r prawf cyntaf yn ymrwymo iddo. Erys yr enw hwn.

Templedi rheolau

Mae'r rheolau wedi'u hysgrifennu mewn cystrawen iptables.

  • -N BEFW
  • -P MEWNBWN DROP
  • -A MEWNBWN -m cyflwr—cyflwr CYSYLLTIEDIG, SEFYDLWYD -j DERBYN
  • -A MEWNBWN -i lo -j DERBYN
  • -A MEWNBWN -j BEFW

Mae popeth yn mynd i mewn i'r gadwyn BEFW, ac eithrio ESTABLISHED, RELATED a localhost. Gall y templed fod yn unrhyw beth, dim ond enghraifft yw hon.

Sut mae BEFW yn ddefnyddiol?

Gwasanaethau

Mae gennym wasanaeth, mae ganddo borthladd bob amser, nod y mae'n rhedeg arno. O'n nod, gallwn ofyn yn lleol i'r asiant a chael gwybod bod gennym ryw fath o wasanaeth. Gallwch chi hefyd roi tagiau.

Conswl + iptables = :3

Mae unrhyw wasanaeth sy'n rhedeg ac wedi'i gofrestru gyda Consul yn troi'n rheol iptables. Mae gennym SSH - porthladd agored 22. Mae'r sgript Bash yn syml: curl ac iptables, nid oes angen dim byd arall.

Cwsmeriaid

Sut i agor mynediad nid i bawb, ond yn ddetholus? Ychwanegu rhestrau IP i storfa KV yn ôl enw'r gwasanaeth.

Conswl + iptables = :3

Er enghraifft, rydym am i bawb ar y degfed rhwydwaith allu cyrchu'r gwasanaeth SSH_TCP_22. Ychwanegu un cae TTL bach? ac yn awr mae gennym drwyddedau dros dro, er enghraifft, am ddiwrnod.

Mynediadau

Rydym yn cysylltu gwasanaethau a chleientiaid: mae gennym wasanaeth, mae storfa KV yn barod ar gyfer pob un. Nawr rydyn ni'n rhoi mynediad nid i bawb, ond yn ddetholus.

Conswl + iptables = :3

Grwpiau

Os byddwn yn ysgrifennu miloedd o IPs ar gyfer mynediad bob tro, byddwn yn blino. Dewch i ni feddwl am grwpiau - is-set ar wahân yn KV. Gadewch i ni ei alw'n Alias ​​​​(neu grwpiau) a storio grwpiau yno yn ôl yr un egwyddor.

Conswl + iptables = :3

Gadewch i ni gysylltu: nawr gallwn agor SSH nid yn benodol ar gyfer P2P, ond ar gyfer grŵp cyfan neu sawl grŵp. Yn yr un modd, mae TTL - gallwch chi ychwanegu at grŵp a thynnu o'r grŵp dros dro.

Conswl + iptables = :3

Integreiddio

Ein problem yw'r ffactor dynol ac awtomeiddio. Hyd yn hyn rydym wedi ei ddatrys fel hyn.

Conswl + iptables = :3

Rydym yn gweithio gyda Puppet, ac yn trosglwyddo popeth sy'n ymwneud â'r system (cod cais) iddynt. Mae Puppetdb (PostgreSQL rheolaidd) yn storio rhestr o wasanaethau sy'n rhedeg yno, gellir eu canfod yn ôl y math o adnodd. Yno gallwch ddarganfod pwy sy'n gwneud cais ble. Mae gennym hefyd system ceisiadau tynnu a cheisiadau uno ar gyfer hyn.

Ysgrifennon ni befw-sync, ateb syml sy'n helpu i drosglwyddo data. Yn gyntaf, mae pypetdb yn cyrchu cwcis cysoni. Mae API HTTP wedi'i ffurfweddu yno: gofynnwn am ba wasanaethau sydd gennym, beth sydd angen ei wneud. Yna maent yn gwneud cais i Gonswl.

A oes integreiddio? Do: fe wnaethon nhw ysgrifennu'r rheolau a chaniatáu i Geisiadau Tynnu gael eu derbyn. Oes angen porthladd penodol arnoch chi neu ychwanegu gwesteiwr i ryw grŵp? Cais Tynnu, adolygiad - dim mwy “Dewch o hyd i 200 o ACLs eraill a cheisiwch wneud rhywbeth yn ei gylch.”

Optimization

Mae ping localhost gyda chadwyn reolau wag yn cymryd 0,075 ms.

Conswl + iptables = :3

Gadewch i ni ychwanegu 10 o gyfeiriadau iptables at y gadwyn hon. O ganlyniad, bydd y ping yn cynyddu 000 gwaith: mae iptables yn gwbl llinol, mae prosesu pob cyfeiriad yn cymryd peth amser.

Conswl + iptables = :3

Ar gyfer wal dân lle rydym yn mudo miloedd o ACLs, mae gennym lawer o reolau, ac mae hyn yn cyflwyno hwyrni. Mae hyn yn ddrwg i brotocolau hapchwarae.

Ond os rhoddwn 10 o gyfeiriadau mewn ipset Bydd y ping hyd yn oed yn gostwng.

Conswl + iptables = :3

Y pwynt yw bod “O” (cymhlethdod algorithm) ar gyfer ipset bob amser yn hafal i 1, ni waeth faint o reolau sydd. Yn wir, mae yna gyfyngiad - ni all fod mwy na rheolau 65535. Am y tro rydyn ni'n byw gyda hyn: gallwch chi eu cyfuno, eu hehangu, gwneud dau ipset mewn un.

Storio

Parhad rhesymegol o'r broses iteru yw storio gwybodaeth am gleientiaid ar gyfer y gwasanaeth mewn ipset.

Conswl + iptables = :3

Nawr mae gennym yr un SSH, ac nid ydym yn ysgrifennu 100 IPs ar unwaith, ond yn gosod enw'r ipset y mae angen i ni gyfathrebu ag ef, a'r rheol ganlynol DROP. Gellir ei drawsnewid yn un rheol “Pwy sydd ddim yma, DROP”, ond mae'n fwy clir.

Nawr mae gennym ni reolau a setiau. Y brif dasg yw gwneud set cyn ysgrifennu'r rheol, oherwydd fel arall ni fydd iptables yn ysgrifennu'r rheol.

Cynllun cyffredinol

Ar ffurf diagram, mae popeth a ddywedais yn edrych fel hyn.

Conswl + iptables = :3

Rydym yn ymrwymo i Pyped, mae popeth yn cael ei anfon at y gwesteiwr, gwasanaethau yma, ipset yno, ac ni chaniateir unrhyw un sydd heb gofrestru yno.

Caniatáu gwadu

Er mwyn achub y byd yn gyflym neu analluogi rhywun yn gyflym, ar ddechrau pob cadwyn gwnaethom ddau ipset: rules_allow и rules_deny. Sut mae'n gweithio?

Er enghraifft, mae rhywun yn creu llwyth ar ein Gwe gyda bots. Yn flaenorol, roedd yn rhaid ichi ddod o hyd i'w IP o'r logiau, mynd ag ef i beirianwyr rhwydwaith, fel y gallent ddod o hyd i ffynhonnell y traffig a'i wahardd. Mae'n edrych yn wahanol nawr.

Conswl + iptables = :3

Rydyn ni'n ei anfon at Conswl, arhoswch 2,5 eiliad, ac mae wedi'i wneud. Gan fod Conswl yn dosbarthu'n gyflym trwy P2P, mae'n gweithio ym mhobman, mewn unrhyw ran o'r byd.

Unwaith i mi stopio WOT yn llwyr oherwydd camgymeriad gyda'r wal dân. rules_allow - dyma ein hyswiriant yn erbyn achosion o'r fath. Os gwnaethom gamgymeriad yn rhywle gyda'r wal dân, mae rhywbeth wedi'i rwystro yn rhywle, gallwn bob amser anfon amodol 0.0/0i godi popeth yn gyflym. Yn ddiweddarach byddwn yn trwsio popeth â llaw.

Setiau eraill

Gallwch ychwanegu unrhyw setiau eraill yn y gofod $IPSETS$.

Conswl + iptables = :3

Am beth? Weithiau mae angen ipset ar rywun, er enghraifft, i efelychu cau rhyw ran o'r clwstwr. Gall unrhyw un ddod ag unrhyw setiau, eu henwi, a byddant yn cael eu codi gan Conswl. Ar yr un pryd, gall setiau naill ai gymryd rhan yn rheolau iptables neu weithredu fel tîm NOOP: Cedwir cysondeb gan yr ellyll.

Defnyddwyr

Yn flaenorol, roedd fel hyn: cysylltodd y defnyddiwr â'r rhwydwaith a derbyniodd baramedrau trwy'r parth. Cyn dyfodiad waliau tân cenhedlaeth newydd, nid oedd Cisco yn gwybod sut i ddeall ble roedd y defnyddiwr a ble roedd yr IP. Felly, dim ond trwy enw gwesteiwr y peiriant y rhoddwyd mynediad.

Beth wnaethom ni? Aethom yn sownd ar hyn o bryd y cawsom yr anerchiad. Fel arfer dot1x, Wi-Fi neu VPN yw hyn - mae popeth yn mynd trwy RADIUS. Ar gyfer pob defnyddiwr, rydym yn creu grŵp yn ôl enw defnyddiwr ac yn gosod IP ynddo gyda TTL sy'n hafal i'w dhcp.lease - cyn gynted ag y daw i ben, bydd y rheol yn diflannu.

Conswl + iptables = :3

Nawr gallwn agor mynediad i wasanaethau, fel grwpiau eraill, yn ôl enw defnyddiwr. Rydym wedi tynnu'r boen allan o enwau gwesteiwr pan fyddant yn newid, ac rydym wedi cymryd y baich oddi ar beirianwyr rhwydwaith oherwydd nad oes angen Cisco arnynt mwyach. Nawr mae peirianwyr eu hunain yn cofrestru mynediad ar eu gweinyddwyr.

Inswleiddio

Ar yr un pryd, dechreuon ni ddatgymalu'r inswleiddio. Cymerodd rheolwyr gwasanaeth restr, a dadansoddwyd ein holl rwydweithiau gennym. Gadewch i ni eu rhannu yn yr un grwpiau, ac ar y gweinyddwyr angenrheidiol ychwanegwyd y grwpiau, er enghraifft, i wadu. Nawr mae'r un ynysu llwyfannu yn dod i ben yn rheolau_gwadu'r cynhyrchiad, ond nid yn y cynhyrchiad ei hun.

Conswl + iptables = :3

Mae'r cynllun yn gweithio'n gyflym ac yn syml: rydym yn tynnu pob ACL o'r gweinyddwyr, yn dadlwytho'r caledwedd, ac yn lleihau nifer y VLANs ynysig.

Rheoli uniondeb

Yn flaenorol, roedd gennym ni sbardun arbennig a oedd yn adrodd pan newidiodd rhywun reol wal dân â llaw. Roeddwn i'n ysgrifennu leinin enfawr ar gyfer gwirio rheolau wal dân, roedd yn anodd. Rheolir uniondeb bellach gan BEFW. Mae'n sicrhau'n selog nad yw'r rheolau y mae'n eu gwneud yn newid. Os bydd rhywun yn newid y rheolau wal dân, bydd yn newid popeth yn ôl. “Sefydlais ddirprwy yn gyflym fel y gallwn weithio gartref” - nid oes mwy o opsiynau o'r fath.

Mae BEFW yn rheoli'r ipset o'r gwasanaethau ac yn rhestru yn befw.conf, rheolau gwasanaethau yng nghadwyn BEFW. Ond nid yw'n monitro cadwyni a rheolau eraill ac ipsetiau eraill.

Amddiffyn rhag damwain

Mae BEFW bob amser yn storio'r cyflwr da hysbys diwethaf yn uniongyrchol yn y strwythur deuaidd state.bin. Os aiff rhywbeth o'i le, mae bob amser yn dychwelyd i'r cyflwr hwn.

Conswl + iptables = :3

Mae hwn yn yswiriant yn erbyn gweithrediad Conswl ansefydlog, pan na anfonodd ddata neu pan wnaeth rhywun gamgymeriad a defnyddio rheolau na ellir eu cymhwyso. Er mwyn sicrhau nad ydym yn cael ein gadael heb wal dân, bydd BEFW yn dychwelyd i'r cyflwr diweddaraf os bydd gwall yn digwydd ar unrhyw adeg.

Mewn sefyllfaoedd argyfyngus, mae hyn yn warant y bydd wal dân weithredol ar ôl inni. Rydym yn agor pob rhwydwaith llwyd yn y gobaith y bydd y gweinyddwr yn dod i'w drwsio. Rhyw ddydd byddaf yn rhoi hwn yn y ffurfweddiadau, ond nawr dim ond tri rhwydwaith llwyd sydd gennym: 10/8, 172/12 a 192.168/16. O fewn ein Conswl, mae hon yn nodwedd bwysig sy'n ein helpu i ddatblygu ymhellach.

Demo: yn ystod yr adroddiad, mae Ivan yn dangos y modd demo o BEFW. Mae'n haws gwylio'r arddangosiad fideo. Cod ffynhonnell demo ar gael ar GitHub.

Camgymeriadau

Fe ddywedaf wrthych am y chwilod y daethom ar eu traws.

ipset ychwanegu set 0.0.0.0/0. Beth sy'n digwydd os ydych chi'n ychwanegu 0.0.0.0/0 i ipset? A fydd pob IP yn cael ei ychwanegu? A fydd mynediad i'r rhyngrwyd ar gael?

Na, fe gawn ni byg a gostiodd ddwy awr o amser segur i ni. Ar ben hynny, nid yw'r byg wedi gweithio ers 2016, mae wedi'i leoli yn RedHat Bugzilla o dan rif # 1297092, a daethom o hyd iddo ar ddamwain - o adroddiad datblygwr.

Mae bellach yn rheol lem yn BEFW hynny 0.0.0.0/0 yn troi yn ddau gyfeiriad: 0.0.0.0/1 и 128.0.0.0/1.

set adfer ipset < ffeil. Beth mae ipset yn ei wneud pan fyddwch chi'n dweud wrtho restore? Ydych chi'n meddwl ei fod yn gweithio yr un peth ag iptables? A fydd yn adennill data?

Dim byd felly - mae'n uno, ac nid yw'r hen gyfeiriadau yn mynd i unman, nid ydych chi'n rhwystro mynediad.

Daethom o hyd i nam wrth brofi ynysu. Nawr mae system braidd yn gymhleth - yn lle restore a gynhaliwyd create tempyna restore flush temp и restore temp. Ar ddiwedd y cyfnewid: am atomigedd, oherwydd os gwnewch hynny yn gyntaf flush ac ar hyn o bryd mae rhai paced yn cyrraedd, bydd yn cael ei daflu a bydd rhywbeth yn mynd o'i le. Felly mae yna ychydig o hud du yno.

consul kv cael -datacenter=arall. Fel y dywedais, credwn ein bod yn gofyn am rywfaint o ddata, ond byddwn naill ai'n cael data neu wall. Gallwn wneud hyn trwy Gonswl yn lleol, ond yn yr achos hwn bydd y ddau yn rhewi.

Mae'r cleient Conswl lleol yn lapiwr dros yr API HTTP. Ond mae'n hongian ac nid yw'n ymateb i Ctrl+C, neu Ctrl+Z, neu unrhyw beth, yn unig kill -9 yn y consol nesaf. Daethom ar draws hyn pan oeddem yn adeiladu clwstwr mawr. Ond nid oes gennym ateb eto; rydym yn paratoi i drwsio'r gwall hwn yn Consul.

Nid yw arweinydd y conswl yn ymateb. Nid yw ein meistr yn y ganolfan ddata yn ymateb, rydym yn meddwl: “Efallai y bydd yr algorithm ail-ddewis yn gweithio nawr?”

Na, ni fydd yn gweithio, ac ni fydd monitro yn dangos unrhyw beth: bydd Conswl yn dweud bod mynegai ymrwymiad, mae arweinydd wedi'i ddarganfod, mae popeth yn iawn.

Sut ydyn ni'n delio â hyn? service consul restart yn cron bob awr. Os oes gennych chi 50 o weinyddion, dim llawer. Pan fydd 16 ohonyn nhw, byddwch chi'n deall sut mae'n gweithio.

Casgliad

O ganlyniad, cawsom y manteision canlynol:

  • Sylw 100% o'r holl beiriannau Linux.
  • Cyflymder.
  • Awtomatiaeth.
  • Fe wnaethom ryddhau peirianwyr caledwedd a rhwydwaith rhag caethwasiaeth.
  • Mae posibiliadau integreiddio wedi ymddangos sydd bron yn ddiderfyn: hyd yn oed gyda Kubernetes, hyd yn oed gydag Ansible, hyd yn oed gyda Python.

Cons: Consul, gyda'r hwn y mae yn rhaid i ni yn awr fyw, a chost uchel iawn cyfeiliornad. Er enghraifft, unwaith am 6 pm (amser cyntaf yn Rwsia) roeddwn i'n golygu rhywbeth yn y rhestrau o rwydweithiau. Roeddem yn adeiladu insiwleiddio yn BEFW ar y pryd. Fe wnes i gamgymeriad yn rhywle, mae'n ymddangos fy mod wedi nodi'r mwgwd anghywir, ond syrthiodd popeth mewn dwy eiliad. Mae'r monitro'n goleuo, mae'r person cymorth ar ddyletswydd yn rhedeg: “Mae gennym ni bopeth!” Trodd pennaeth yr adran yn llwyd pan eglurodd i'r busnes pam y digwyddodd hyn.

Mae cost gwallau mor uchel fel ein bod wedi llunio ein gweithdrefn atal gymhleth ein hunain. Os gweithredwch hyn ar safle cynhyrchu mawr, nid oes angen i chi roi tocyn meistr dros Gonswl i bawb. Bydd hyn yn dod i ben yn wael.

Cost Ysgrifennais god am 400 awr yn unig. Mae fy nhîm o 4 o bobl yn treulio 10 awr y mis ar gefnogaeth i bawb. O'i gymharu â phris unrhyw wal dân cenhedlaeth newydd, mae'n rhad ac am ddim.

Cynlluniau. Y cynllun hirdymor yw dod o hyd i gludiant arall i gymryd lle neu ategu Conswl. Efallai mai Kafka neu rywbeth tebyg fydd hi. Ond yn y blynyddoedd i ddod byddwn yn byw ar Consul.

Cynlluniau ar unwaith: integreiddio â Fail2ban, gyda monitro, gyda nftables, o bosibl gyda dosbarthiadau eraill, metrigau, monitro uwch, optimeiddio. Mae cefnogaeth Kubernetes hefyd yn rhywle yn y cynlluniau, oherwydd erbyn hyn mae gennym sawl clwstwr a'r awydd.

Mwy o'r cynlluniau:

  • chwilio am anomaleddau mewn traffig;
  • rheoli mapiau rhwydwaith;
  • cefnogaeth Kubernetes;
  • cydosod pecynnau ar gyfer pob system;
  • Gwe-UI.

Rydym yn gweithio'n gyson ar ehangu'r cyfluniad, cynyddu metrigau ac optimeiddio.

Ymunwch â'r prosiect. Trodd y prosiect yn cŵl, ond, yn anffodus, mae'n dal i fod yn brosiect un person. Dewch i GitHub a cheisiwch wneud rhywbeth: ymrwymo, profi, awgrymu rhywbeth, rhoi eich asesiad.

Yn y cyfamser rydym yn paratoi ar gyfer Sant UchelLlwyth++, a fydd yn digwydd ar Ebrill 6 a 7 yn St Petersburg, ac rydym yn gwahodd datblygwyr systemau llwyth uchel gwneud cais am adroddiad. Mae siaradwyr profiadol eisoes yn gwybod beth i'w wneud, ond ar gyfer y rhai sy'n newydd i siarad rydym yn argymell o leiaf i geisio. Mae nifer o fanteision i gymryd rhan yn y gynhadledd fel siaradwr. Gallwch ddarllen pa rai, er enghraifft, ar y diwedd yr erthygl hon.

Ffynhonnell: hab.com

Ychwanegu sylw