Consul + iptables = :3

Yn 2010 it bedriuw wargaming der wiene 50 tsjinners en in ienfâldich netwurk model: backend, frontend en brânmuorre. It oantal servers groeide, it model waard komplekser: staging, isolearre VLAN's mei ACL's, dan VPN's mei VRF's, VLAN's mei ACL's op L2, VRF's mei ACL's op L3. De kop draait? It wurdt letter noch leuker.

Doe't d'r 16 servers wiene, waard it ûnmooglik om sûnder triennen te wurkjen mei safolle heterogene segminten. Sa kamen wy mei in oare oplossing. Wy namen de Netfilter-stapel, tafoege Consul oan it as gegevensboarne, en wy krigen in fluch ferspraat firewall. Se ferfongen ACL's op routers en brûkten se as in eksterne en ynterne firewall. Om it ark dynamysk te behearjen, hawwe wy it BEFW-systeem ûntwikkele, dat oeral brûkt waard: fan it behearen fan brûkerstagong ta it produktnetwurk oant it isolearjen fan netwurksegminten fan elkoar.

Consul + iptables = :3

Hy sil jo fertelle hoe't it allegear wurket en wêrom jo dit systeem tichterby moatte besjen. Ivan Agarkov (annmuor) is it haad fan 'e ynfrastruktuerfeiligensgroep fan' e Underhâldsdivyzje by it Minsk-ûntwikkelsintrum fan it bedriuw. Ivan is in SELinux fan, hâldt fan Perl, en skriuwt koade. As haad fan 'e ynformaasjefeiligensgroep wurket hy regelmjittich mei logs, backups en R&D om Wargaming te beskermjen fan hackers en de wurking fan alle spielservers yn it bedriuw te garandearjen.

Histoaryske eftergrûn

Foardat ik jo fertel hoe't wy it dien hawwe, sil ik jo fertelle hoe't wy hjir op it earste plak kamen en wêrom't it nedich wie. Om dit te dwaan, litte wy 9 jier werom gean: 2010, World of Tanks ferskynde krekt. Wargaming hie likernôch 50 tsjinners.

Consul + iptables = :3
Bedriuwstsjinner groeidiagram.

Wy hienen in netwurkmodel. Foar dy tiid wie it optimaal.

Consul + iptables = :3
Netwurkmodel yn 2010.

D'r binne minne jonges oan 'e foarkant dy't ús wolle brekke, mar it hat in firewall. D'r is gjin brânmuorre op 'e efterkant, mar d'r binne 50 tsjinners, wy kenne se allegear. Alles wurket goed.

Yn 4 jier groeide de serverfloat 100 kear, oant 5000. De earste isolearre netwurken ferskynden - staging: se koenen net nei produksje gean, en d'r wiene faak dingen dy't d'r rûnen dy't gefaarlik wêze kinne.

Consul + iptables = :3
Netwurkmodel yn 2014.

Troch inertia brûkten wy deselde stikken hardware, en al it wurk waard útfierd op isolearre VLAN's: ACL's wurde skreaun nei de VLAN's, dy't in soarte fan ferbining tastean of wegerje.

Yn 2016 berikte it oantal tsjinners 8000 XNUMX. Wargaming absorbearre oare studios, en ekstra affiliate netwurken ferskynden. Se lykje te wêzen fan ús, mar net hielendal: VLAN faak wurket net foar partners, jo moatte brûke VPN mei VRF, isolemint wurdt yngewikkelder. De ACL isolaasje mingsel groeide.

Consul + iptables = :3
Netwurkmodel yn 2016.

Oan it begjin fan 2018 wie de float fan masines útgroeid ta 16 000. D'r wiene 6 segminten, en wy rekken de rest net, ynklusyf sluten wêryn finansjele gegevens waarden opslein. Containernetwurken (Kubernetes), DevOps, wolknetwurken ferbûn fia VPN, bygelyks fan in IVS, binne ferskynd. D'r wiene in protte regels - it wie pynlik.

Consul + iptables = :3
Netwurkmodel en isolaasjemetoaden yn 2018.

Foar isolaasje brûkten wy: VLAN mei ACL op L2, VRF mei ACL op L3, VPN en folle mear. Tefolle.

Problemen

Elkenien libbet mei ACL en VLAN. Wat is der mis? Dizze fraach sil wurde beantwurde troch Harold, ferbergje de pine.

Consul + iptables = :3

D'r wiene in protte problemen, mar d'r wiene fiif massive.

  • Geometryske priisferheging foar nije regels. Elke nije regel duorre langer as de foarige, om't earst sjoen wurde moast oft der al sa'n regel wie.
  • Gjin brânmuorre binnen segminten. De segminten wiene op ien of oare manier fan elkoar skieden, en d'r wiene al net genôch middels binnen.
  • De regels waarden lange tiid tapast. Operators koenen yn in oere ien lokale regel mei de hân skriuwe. De wrâldwide duorre ferskate dagen.
  • Swierrichheden mei kontrôle regels. Mear krekter wie it net mooglik. De earste regels waarden skreaun werom yn 2010, en de measte fan har auteurs wurken net mear foar it bedriuw.
  • Leech nivo fan ynfrastruktuer kontrôle. Dit is it wichtichste probleem - wy wisten net goed wat der yn ús lân bart.

Dit is hoe't in netwurkyngenieur der yn 2018 útseach doe't hy hearde: "Noch wat mear ACL nedich."

Consul + iptables = :3

Oplossingen

Begjin 2018 is besletten om dêr wat oan te dwaan.

De priis fan yntegraasjes groeit konstant. It útgongspunt wie dat grutte datasintra ophâlde mei it stypjen fan isolearre VLAN's en ACL's, om't de apparaten sûnder ûnthâld rûnen.

Oplossing: wy hawwe de minsklike faktor fuorthelle en it oanbieden fan tagong ta it maksimum automatisearre.

It jildt foar de nije regels lang. Oplossing: fersnelle de tapassing fan regels, meitsje it ferspraat en parallel. Dit fereasket in ferspraat systeem sadat de regels wurde levere sels, sûnder rsync of SFTP nei tûzen systemen.

Gjin brânmuorre binnen segminten. In brânmuorre binnen segminten begon nei ús te kommen doe't ferskate tsjinsten binnen itselde netwurk ferskynden. Oplossing: brûk in firewall op it hostnivo - host-basearre firewalls. Hast oeral hawwe wy Linux, en oeral hawwe wy iptables, dit is gjin probleem.

Swierrichheden mei kontrôle regels. Oplossing: Hâld alle regels op ien plak foar beoardieling en behear, sadat wy alles kinne kontrolearje.

Leech nivo fan kontrôle oer ynfrastruktuer. Oplossing: nim in ynventarisaasje fan alle tsjinsten en tagongen tusken har.

Dit is mear in bestjoerlik proses dan in technysk. Soms hawwe wy 200-300 nije releases yn 'e wike, benammen tidens promoasjes en feestdagen. Boppedat is dit mar foar ien team fan ús DevOps. Mei safolle releases is it ûnmooglik om te sjen hokker havens, IP's en yntegraasjes nedich binne. Dêrom hiene wy ​​spesjaal oplaat tsjinstmanagers nedich dy't de teams fregen: "Wat is der dochs en wêrom hawwe jo it oanbrocht?"

Nei alles wat wy lansearren, begon in netwurkingenieur yn 2019 der sa út te sjen.

Consul + iptables = :3

Konsul

Wy besletten dat wy alles wat wy fûnen mei help fan tsjinstmanagers yn Consul sette en fanôf dêr iptables regels skriuwe.

Hoe hawwe wy besletten dit te dwaan?

  • Wy sille alle tsjinsten, netwurken en brûkers sammelje.
  • Litte wy iptables-regels meitsje basearre op har.
  • Wy automatisearje kontrôle.
  • ....
  • WINST.

Consul is gjin API op ôfstân, it kin op elke knooppunt rinne en skriuwe nei iptables. Alles wat oerbliuwt is om te kommen mei automatyske kontrôles dy't ûnnedige dingen sille skjinmeitsje, en de measte problemen sille wurde oplost! Wy sille de rest útwurkje as wy geane.

Wêrom konsul?

Hat himsels goed bewiisd. Yn 2014-15 hawwe wy it brûkt as backend foar Vault, wêryn wy wachtwurden opslaan.

Ferliest gjin gegevens. Yn 'e tiid fan gebrûk ferlear Consul gjin gegevens by ien ûngelok. Dit is in enoarme plus foar in firewallbehearsysteem.

P2P-ferbiningen fersnelle de fersprieding fan feroaring. Mei P2P komme alle wizigingen fluch, it is net nedich om oeren te wachtsjen.

Handige REST API. Wy hawwe ek Apache ZooKeeper beskôge, mar it hat gjin REST API, dus jo moatte krukken ynstallearje.

Wurket as sawol in Key Vault (KV) as in Directory (Service Discovery). Jo kinne tsjinsten, katalogussen en datasintra tagelyk opslaan. Dit is handich net allinich foar ús, mar ek foar oanbuorjende teams, want by it bouwen fan in wrâldwide tsjinst tinke wy grut.

Skreaun yn Go, dy't diel útmakket fan 'e Wargaming-stapel. Wy hâlde fan dizze taal, wy hawwe in protte Go-ûntwikkelders.

Krêftich ACL systeem. Yn Consul kinne jo ACL's brûke om te kontrolearjen wa't wat skriuwt. Wy garandearje dat de firewall regels net oerlaapje mei wat oars en wy sille gjin problemen mei dizze.

Mar Konsul hat ek syn neidielen.

  • Skaal net binnen in datasintrum, útsein as jo in saaklike ferzje hawwe. It is allinich skalberber troch federaasje.
  • Hiel ôfhinklik fan de kwaliteit fan it netwurk en tsjinner load. Consul sil net wurkje goed as tsjinner op in drokke tsjinner as der gjin lags yn it netwurk, Bygelyks, oneffen snelheid. Dit komt troch P2P-ferbiningen en fernijingsferdielingsmodellen.
  • Swierrichheid monitoring beskikberens. Yn konsulstatus kin er sizze dat alles goed is, mar hy is lang lyn ferstoarn.

Wy hawwe de measte fan dizze problemen oplost by it brûken fan Consul, en dêrom hawwe wy it keazen. It bedriuw hat plannen foar in alternative backend, mar wy hawwe leard om te gean mei problemen en wenje op it stuit mei Consul.

Hoe Consul wurket

Wy sille trije oant fiif servers ynstallearje yn in betingst datasintrum. Ien of twa tsjinners sille net wurkje: se kinne net in kworum organisearje en beslute wa't gelyk hat en wa is ferkeard as de gegevens net oerienkomme. Mear dan fiif makket gjin sin, de produktiviteit sil sakje.

Consul + iptables = :3

Klanten ferbine mei de servers yn elke folchoarder: deselde aginten, allinich mei de flagge server = false.

Consul + iptables = :3

Hjirnei krije kliïnten in list mei P2P-ferbiningen en bouwe ferbiningen ûnderinoar.

Consul + iptables = :3

Op wrâldwide nivo ferbine wy ​​ferskate datasintra. Se ferbine ek P2P en kommunisearje.

Consul + iptables = :3

As wy gegevens fan in oar datasintrum wolle ophelje, giet it fersyk fan tsjinner nei tsjinner. Dit skema hjit Serf protokol. It Serf-protokol, lykas Consul, wurdt ûntwikkele troch HashiCorp.

Guon wichtige feiten oer Consul

Consul hat dokumintaasje dy't beskriuwt hoe't it wurket. Ik sil allinich selektearre feiten jaan dy't it wurdich binne te witten.

Konsul-tsjinners selektearje in master út 'e kiezers. Consul selekteart in master út 'e list mei servers foar elk datasintrum, en alle oanfragen geane allinich nei it, nettsjinsteande it oantal servers. Master freezing liedt net ta werferkiezing. As de master net selektearre is, wurde oanfragen net troch ien betsjinne.

Wolle jo horizontale skaalfergrutting? Sorry, nee.

In fersyk oan in oar datasintrum giet fan master nei master, nettsjinsteande hokker server it kaam. De selektearre master ûntfangt 100% fan de lading, útsein foar de lading op foarútstribjende fersiken. Alle tsjinners yn it datasintrum hawwe in aktuele kopy fan de gegevens, mar mar ien reagearret.

De ienige manier om te skaaljen is om stale modus op 'e kliïnt yn te skeakeljen.

Yn ferâldere modus kinne jo reagearje sûnder in kworum. Dit is in modus dêr't wy opjaan gegevens gearhing, mar lêze in bytsje flugger as gewoanlik, en eltse tsjinner reagearret. Fansels, opname allinnich fia de master.

Consul kopiearret gjin gegevens tusken datasintra. As in federaasje wurdt gearstald, sil elke tsjinner allinich syn eigen gegevens hawwe. Foar oaren draait er him altyd nei in oar.

Atomiteit fan operaasjes wurdt net garandearre bûten in transaksje. Unthâld dat jo net de iennichste binne dy't dingen feroarje kinne. As jo ​​wolle dat oars, fieren in transaksje mei in slot.

Blokkearjende operaasjes garandearje gjin beskoatteljen. It fersyk giet fan master nei master, en net direkt, dus der is gjin garânsje dat it blokkearjen sil wurkje as jo bygelyks blokkearje yn in oar datasintrum.

ACL garandearret ek gjin tagong (yn in protte gefallen). De ACL kin miskien net wurkje, om't it is opslein yn ien federaasjedatasintrum - yn it ACL-datasintrum (Primary DC). As de DC jo net antwurdet, sil de ACL net wurkje.

Ien beferzen master sil de hiele federaasje befrieze. Bygelyks, d'r binne 10 datasintra yn in federaasje, en ien hat in min netwurk, en ien master mislearret. Elkenien dy't mei him kommunisearret, sil yn in sirkel sitte: der is in fersyk, der is gjin antwurd op, de tried befriest. D'r is gjin manier om te witten wannear't dit sil barre, krekt oer in oere as twa sil de hiele federaasje falle. Dêr kinst neat oan dwaan.

Status, kworum en ferkiezings wurde behannele troch in aparte tried. Wederferkiezing sil net barre, de status sil neat sjen litte. Jo tinke dat jo in live konsul hawwe, jo freegje, en neat bart - der is gjin antwurd. Tagelyk lit de status sjen dat alles goed is.

Wy hawwe dit probleem tsjinkaam en moasten spesifike dielen fan datasintra opnij opbouwe om it te foarkommen.

De saaklike ferzje fan Consul Enterprise hat guon fan 'e boppesteande neidielen net. It hat in protte nuttige funksjes: kieze kiezers, distribúsje, skaalfergrutting. D'r is mar ien "mar" - it fergunningsysteem foar in ferspraat systeem is heul djoer.

Life hacking: rm -rf /var/lib/consul - in remedie foar alle sykten fan 'e agent. As iets net foar jo wurket, wiskje jo gegevens gewoan en download de gegevens fan in kopy. Meast wierskynlik, Consul sil wurkje.

BEFW

No litte wy prate oer wat wy hawwe tafoege oan Consul.

BEFW is in akronym foar BackEndFik geanWalle. Ik moast it produkt op ien of oare manier neame doe't ik it repository oanmakke om de earste test-commits yn te setten. Dizze namme bliuwt.

Regel sjabloanen

De regels binne skreaun yn iptables syntaksis.

  • -N BEFW
  • -P INPUT DROP
  • -A INPUT -m steat - steat RELATED, Fêststeld -j AKSEPT
  • -A INPUT -i lo -j akseptearje
  • -A INPUT -j BEFW

Alles giet yn 'e BEFW-ketting, útsein ESTABLISHED, RELATED en localhost. It sjabloan kin alles wêze, dit is gewoan in foarbyld.

Hoe is BEFW nuttich?

Tsjinsten

Wy hawwe in tsjinst, it hat altyd in haven, in knooppunt wêrop it rint. Fanút ús knooppunt kinne wy ​​de agint lokaal freegje en útfine dat wy in soarte fan tsjinst hawwe. Jo kinne ek tags pleatse.

Consul + iptables = :3

Elke tsjinst dy't rint en registrearre by Consul feroaret yn in iptables-regel. Wy hawwe SSH - iepen poarte 22. It Bash-skript is ienfâldich: curl en iptables, neat oars is nedich.

Kliïnten

Hoe te iepenjen tagong net foar elkenien, mar selektyf? Foegje IP-listen ta oan KV-opslach troch tsjinstnamme.

Consul + iptables = :3

Wy wolle bygelyks dat elkenien op it tsiende netwurk tagong kin ta de SSH_TCP_22-tsjinst. Add ien lyts TTL fjild? en no hawwe wy tydlike fergunningen, bygelyks foar in dei.

Tagongen

Wy ferbine tsjinsten en kliïnten: wy hawwe in tsjinst, KV opslach is klear foar elk. No jouwe wy tagong net foar elkenien, mar selektyf.

Consul + iptables = :3

groepen

As wy elke kear tûzenen IP's skriuwe foar tagong, sille wy wurch wurde. Lit ús komme mei groepearrings - in aparte subset yn KV. Litte wy it Alias ​​(as groepen) neame en groepen dêr neffens itselde prinsipe opslaan.

Consul + iptables = :3

Litte wy ferbine: no kinne wy ​​SSH iepenje net spesifyk foar P2P, mar foar in hiele groep of ferskate groepen. Op deselde wize is d'r TTL - jo kinne tafoegje oan in groep en tydlik fuortsmite fan 'e groep.

Consul + iptables = :3

Yntegraasje

Us probleem is de minsklike faktor en automatisearring. Oant no ta hawwe wy it op dizze manier oplost.

Consul + iptables = :3

Wy wurkje mei Puppet, en oerdrage alles dat oanbelanget oan it systeem (applikaasje koade) oan harren. Puppetdb (gewoane PostgreSQL) bewarret in list mei tsjinsten dy't dêr rinne, se kinne fûn wurde troch type boarne. Dêr kinne jo útfine wa't wêr oanfreget. Wy hawwe ek in pull fersyk en gearfoegje fersyk systeem foar dit.

Wy skreaunen befw-sync, in ienfâldige oplossing dy't helpt om gegevens oer te dragen. Earst wurde syngronisaasjekoekjes tagong ta puppetdb. In HTTP API is dêr konfigurearre: wy freegje hokker tsjinsten wy hawwe, wat moat dien wurde. Dan dogge se in fersyk by konsul.

Is der yntegraasje? Ja: se skreaunen de regels en lieten Pull Requests akseptearje. Binne jo in bepaalde poarte nedich of in host taheakje oan in groep? Pull Request, review - net mear "Fyn 200 oare ACL's en besykje der wat oan te dwaan."

Optimalisaasje

It pingen fan localhost mei in lege regelketen nimt 0,075 ms.

Consul + iptables = :3

Litte wy 10 iptables-adressen tafoegje oan dizze ketting. As resultaat sil de ping 000 kear ferheegje: iptables is folslein lineêr, it ferwurkjen fan elk adres duorret wat tiid.

Consul + iptables = :3

Foar in brânmuorre dêr't wy migrearje tûzenen ACLs, wy hawwe in protte regels, en dit yntrodusearret latency. Dit is min foar gaming protokollen.

Mar as wy sette 10 adressen yn ipset De ping sil sels ôfnimme.

Consul + iptables = :3

It punt is dat "O" (algoritme kompleksiteit) foar ipset is altyd gelyk oan 1, gjin saak hoefolle regels der binne. Wier, d'r is in beheining - d'r kinne net mear wêze as 65535 regels. Foar no libje wy mei dit: jo kinne se kombinearje, útwreidzje, twa ipsets yn ien meitsje.

Storage

In logyske fuortsetting fan it iteraasjeproses is it bewarjen fan ynformaasje oer kliïnten foar de tsjinst yn ipset.

Consul + iptables = :3

No hawwe wy deselde SSH, en wy skriuwe net 100 IP's tagelyk, mar set de namme fan 'e ipset wêrmei't wy moatte kommunisearje, en de folgjende regel DROP. It kin wurde omset yn ien regel "Wa is net hjir, DROP", mar it is dúdliker.

No hawwe wy regels en sets. De wichtichste taak is om in set te meitsjen foardat de regel skriuwt, om't oars iptables de regel net skriuwe.

Algemiene regeling

Yn 'e foarm fan in diagram liket alles wat ik sei.

Consul + iptables = :3

Wy sette ús yn foar Puppet, alles wurdt stjoerd nei de host, tsjinsten hjir, ipset dêr, en elkenien dy't dêr net registrearre is, is net tastien.

Tastean & wegerje

Om de wrâld fluch te rêden of immen fluch útskeakelje, hawwe wy oan it begjin fan alle keatlingen twa ipsets makke: rules_allow и rules_deny. Hoe't it wurket?

Bygelyks, immen makket in lading op ús web mei bots. Eartiids moasten jo syn IP fan 'e logs fine, nimme it nei netwurkingenieurs, sadat se de boarne fan it ferkear fine kinne en him ferbiede. It sjocht der no oars út.

Consul + iptables = :3

Wy stjoere it nei Consul, wachtsje 2,5 sekonden, en it is dien. Sûnt Consul distribuearret fluch fia P2P, it wurket oeral, yn elk diel fan 'e wrâld.

Ienris haw ik op ien of oare manier folslein stoppe WOT troch in flater mei de brânmuorre. rules_allow - dit is ús fersekering tsjin sokke gefallen. As wy earne in flater makke hawwe mei de firewall, is wat earne blokkearre, wy kinne altyd in betingst stjoere 0.0/0alles gau op te heljen. Letter sille wy alles mei de hân reparearje.

Oare sets

Jo kinne alle oare sets yn 'e romte tafoegje $IPSETS$.

Consul + iptables = :3

Foar wat? Soms hat immen ipset nedich, bygelyks om it ôfsluten fan in part fan it kluster te emulearjen. Eltsenien kin bringe eltse sets, neam se, en se wurde ophelle fan konsul. Tagelyk kinne sets of meidwaan oan 'e iptables-regels of as in team fungearje NOOP: Konsistinsje sil wurde ûnderhâlden troch de daemon.

Brûkers

Earder wie it sa: de brûker ferbûn mei it netwurk en krige parameters fia it domein. Foar de komst fan nije generaasje firewalls wist Cisco net hoe te begripen wêr't de brûker wie en wêr't de IP wie. Dêrom waard tagong allinich ferliend fia de hostnamme fan 'e masine.

Wat hawwe wy dien? Wy rûnen fêst op it momint dat wy it adres krigen. Normaal is dit dot1x, Wi-Fi of VPN - alles giet troch RADIUS. Foar elke brûker meitsje wy in groep troch brûkersnamme en pleatse der in IP yn mei in TTL dy't gelyk is oan syn dhcp.lease - sa gau as it ferrint, sil de regel ferdwine.

Consul + iptables = :3

No kinne wy ​​tagong iepenje ta tsjinsten, lykas oare groepen, troch brûkersnamme. Wy hawwe nommen de pine út hostnammen as se feroarje, en wy hawwe nommen de lêst fan netwurk yngenieurs omdat se net mear nedich Cisco. No registrearje yngenieurs sels tagong op har servers.

Isolaasje

Tagelyk begûnen wy de isolaasje te ûntmanteljen. Servicemanagers namen in ynventarisaasje, en wy analysearren al ús netwurken. Litte wy se ferdield yn deselde groepen, en op 'e nedige servers waarden de groepen tafoege, bygelyks om te ûntkennen. No einiget deselde staging-isolaasje yn 'e regels_ûntkenning fan' e produksje, mar net yn 'e produksje sels.

Consul + iptables = :3

It skema wurket fluch en ienfâldich: wy ferwiderje alle ACL's fan 'e servers, losse de hardware en ferminderje it oantal isolearre VLAN's.

Yntegriteit kontrôle

Earder hiene wy ​​in spesjale trigger dy't rapportearre as immen in firewall-regel manuell feroare. Ik skreau in enoarme linter foar it kontrolearjen fan firewallregels, it wie lestich. Yntegriteit wurdt no kontrolearre troch BEFW. Hy soarget der iver foar dat de regels dy't er makket net feroarje. As immen feroaret de firewall regels, it sil feroarje alles werom. "Ik haw gau in proxy ynsteld, sadat ik fan hûs út wurkje koe" - d'r binne net mear sokke opsjes.

BEFW kontrolearret de ipset fan 'e tsjinsten en list yn befw.conf, de regels fan tsjinsten yn' e BEFW-keten. Mar it kontrolearret gjin oare keatlingen en regels en oare ipsets.

Crash beskerming

BEFW bewarret altyd de lêste bekende goede steat direkt yn 'e state.bin-binêre struktuer. As der wat mis giet, rôlet it altyd werom nei dizze state.bin.

Consul + iptables = :3

Dit is fersekering tsjin instabiele Consul-operaasje, as it gjin gegevens stjoerde of immen in flater makke en regels brûkte dy't net kinne wurde tapast. Om derfoar te soargjen dat wy net sûnder in brânmuorre bliuwe, sil BEFW weromdraaie nei de lêste steat as der op elts stadium in flater optreedt.

Yn krityske situaasjes is dit in garânsje dat wy sille bliuwe mei in wurkjende firewall. Wy iepenje alle grize netwurken yn 'e hope dat de admin sil komme en it reparearje. Ienris sil ik dit yn 'e konfiguraasjes sette, mar no hawwe wy gewoan trije grize netwurken: 10/8, 172/12 en 192.168/16. Binnen ús Consul is dit in wichtige funksje dy't ús helpt ús fierder te ûntwikkeljen.

Demo: tidens it rapport lit Ivan de demo-modus fan BEFW sjen. It is makliker om de demonstraasje te besjen видео. Demo boarnekoade beskikber op GitHub.

falkûlen

Ik sil jo fertelle oer de bugs dy't wy tsjinkamen.

ipset tafoegje set 0.0.0.0/0. Wat bart der as jo 0.0.0.0/0 tafoegje oan ipset? Sille alle IP's wurde tafoege? Sil ynternet tagong wêze beskikber?

Nee, wy sille in bug krije dy't ús twa oeren ûnderbrekking koste. Boppedat hat de brek net wurke sûnt 2016, it leit yn RedHat Bugzilla ûnder nûmer #1297092, en wy fûnen it per ûngelok - út in rapport fan in ûntwikkelder.

It is no in strange regel by BEFW dat 0.0.0.0/0 feroaret yn twa adressen: 0.0.0.0/1 и 128.0.0.0/1.

ipset weromsette set < triem. Wat docht ipset as jo it fertelle restore? Tinke jo dat it itselde wurket as iptables? Sil it gegevens weromhelje?

Neat sa - it fusearret, en de âlde adressen geane net oeral, jo blokkearje gjin tagong.

Wy fûnen in brek by it testen fan isolaasje. No is der in frij komplekse systeem - ynstee fan restore hâlden create tempdoe restore flush temp и restore temp. Oan 'e ein fan ruilje: foar atomiteit, want as jo it earst dogge flush en op dit stuit komt wat pakket, it sil wurde wegere en der sil wat mis gean. Sa is der in bytsje swarte magy dêr.

konsul kv krije -datacenter=oar. Lykas ik sei, tinke wy dat wy om wat gegevens freegje, mar wy sille gegevens krije as in flater. Wy kinne dit dwaan fia Consul lokaal, mar yn dit gefal sille beide befrieze.

De lokale Consul-kliïnt is in wrapper oer de HTTP API. Mar it hinget gewoan en reagearret net op Ctrl+C, of ​​Ctrl+Z, of wat dan ek kill -9 yn de folgjende konsole. Dit binne wy ​​tsjinkaam doe't wy in grut kluster bouwe. Mar wy hawwe noch gjin oplossing; wy meitsje ús foar om dizze flater yn Consul te reparearjen.

Konsul-lieder reagearret net. Us master yn it datasintrum reagearret net, wy tinke: "Miskien sil it reseleksjealgoritme no wurkje?"

Nee, it sil net wurkje, en tafersjoch sil neat sjen litte: konsul sil sizze dat der in ynsetsindeks is, in lieder is fûn, alles is goed.

Hoe geane wy ​​hjirmei om? service consul restart yn cron elk oere. As jo ​​50 tsjinners, gjin grutte deal. As d'r 16 binne, sille jo begripe hoe't it wurket.

konklúzje

As gefolch hawwe wy de folgjende foardielen krigen:

  • 100% dekking fan alle Linux-masines.
  • Speed
  • Automatisearring.
  • Wy hawwe hardware- en netwurkyngenieurs befrijd fan slavernij.
  • Der binne yntegraasjemooglikheden ferskynden dy't hast ûnbeheind binne: sels mei Kubernetes, sels mei Ansible, sels mei Python.

Минусы: Konsul, dêr't wy no mei libje moatte, en de tige hege kosten fan flater. As foarbyld, ienris om 6 oere (prime time yn Ruslân) wie ik wat oan it bewurkjen yn 'e listen fan netwurken. Wy bouden doe krekt isolaasje by BEFW. Ik makke in flater earne, it liket ik oanjûn it ferkearde masker, mar alles foel yn twa sekonden. De monitoaring ljochtet op, de helpferliener yn tsjinst komt rinnen: "Wy hawwe alles!" It haad fan de ôfdieling waard griis doe't er it bedriuw útlein wêrom't dat barde.

De kosten fan flaters binne sa heech dat wy mei ús eigen komplekse previnsjeproseduere betocht binne. As jo ​​dit ymplementearje op in grutte produksjeside, hoege jo gjin mastertoken oer Consul oan elkenien te jaan. Dit sil min einigje.

Kosten Ik skreau koade foar 400 oeren allinnich. Myn team fan 4 minsken besteget 10 oeren yn 'e moanne oan stipe foar elkenien. Yn ferliking mei de priis fan elke nije generaasje firewall, it is fergees.

Plannen. It lange-termyn plan is om alternatyf ferfier te finen om Konsul te ferfangen of oan te foljen. Miskien sil it Kafka wêze of sokssawat. Mar wy libje de kommende jierren op Konsul.

Direkte plannen: yntegraasje mei Fail2ban, mei monitoring, mei nftables, mooglik mei oare distribúsjes, metriken, avansearre monitoring, optimisaasje. Kubernetes stipe is ek earne yn 'e plannen, want no hawwe wy ferskate klusters en de winsk.

Mear út de plannen:

  • sykje nei anomalies yn ferkear;
  • netwurk map behear;
  • Kubernetes-stipe;
  • gearstalling fan pakketten foar alle systemen;
  • Web-UI.

Wy wurkje konstant oan it útwreidzjen fan de konfiguraasje, fergrutsjen fan metriken en optimalisaasje.

Doch mei oan it projekt. It projekt blykte cool te wêzen, mar spitigernôch is it noch altyd in ienpersoansprojekt. Kom nei GitHub en besykje wat te dwaan: begean, testje, wat foarstelle, jo beoardieling jaan.

Underwilens meitsje wy ús foar Sint Hege Load++, dat sil plakfine op 6 en 7 april yn Sint-Petersburch, en wy noegje ûntwikkelders fan hege-load systemen oanfreegje foar in rapport. Erfarne sprekkers witte al wat te dwaan, mar foar dyjingen dy't nij binne om te praten, advisearje wy op syn minst Besykje. Meidwaan oan de konferinsje as sprekker hat in oantal foardielen. Hokker kinne jo bygelyks oan 'e ein lêze dit artikel.

Boarne: www.habr.com

Add a comment