Consul + iptables = :3

In u 2010 a cumpagnia Wargaming ci era 50 servitori è un mudellu simplice di rete: backend, frontend è firewall. U numaru di servitori criscinu, u mudellu hè diventatu più cumplessu: staging, VLAN isolati cù ACL, dopu VPN cù VRF, VLAN cù ACL in L2, VRF cù ACL in L3. A testa gira? Serà più divertente dopu.

Quandu ci era 16 000 servitori, hè diventatu impussibile di travaglià senza lacrime cù tanti segmenti eterogenei. Allora avemu ghjuntu cù una altra suluzione. Avemu pigliatu u Netfilter stack, aghjunghjia u Consul cum'è una fonti di dati, è avemu un firewall distribuitu veloce. Hanu rimpiazzatu l'ACL in i routers è l'utilizanu cum'è un firewall esternu è internu. Per gestisce dinamicamente l'uttellu, avemu sviluppatu u sistema BEFW, chì hè stata utilizata in ogni locu: da a gestione di l'accessu di l'utilizatori à a reta di u produttu à l'isolamentu di i segmenti di a rete l'un l'altru.

Consul + iptables = :3

Ellu vi diciarà cumu si travaglia tuttu è perchè duvete piglià un ochju più vicinu à stu sistema. Ivan Agarkov (annumuor) - capu di u gruppu di sicurità di l'infrastruttura di a divisione di Manutenzione in u centru di sviluppu di a cumpagnia di Minsk. Ivan hè un fan di SELinux, ama Perl, è scrive codice. Cum'è u capu di u gruppu di sicurità di l'infurmazioni, travaglia regularmente cù logs, backups è R & D per prutege Wargaming da i pirate è assicurà l'operazione di tutti i servitori di ghjocu in a cumpagnia.

Fondo Storicu

Prima di dicu cumu avemu fattu, vi dicu cumu avemu ghjuntu à questu in u primu locu è perchè era necessariu. Per fà questu, andemu in daretu à 9 anni: 2010, World of Tanks hè ghjustu apparsu. Wargaming avia circa 50 servitori.

Consul + iptables = :3
Graficu di crescita di u servitore di a cumpagnia.

Avemu avutu un mudellu di rete. Per quellu tempu era ottimali.

Consul + iptables = :3
U mudellu di rete in 2010.

Ci sò i cattivi in ​​u front-end chì volenu rompeci, ma hà un firewall. Ùn ci hè micca firewall in u backend, ma ci sò 50 servitori quì, i sapemu tutti. Tuttu travaglia bè.

In 4 anni, a flotta di u servitore hà crisciutu 100 volte, à 5000. I primi reti isolati apparsu - staging: ùn puderanu micca andà à a pruduzzione, è ci sò spessu cose chì currenu quì chì puderanu esse periculosi.

Consul + iptables = :3
U mudellu di rete in 2014.

Per inerzia, avemu usatu i stessi pezzi di hardware, è tuttu u travagliu hè statu realizatu nantu à VLAN isolati: ACL sò scritti à i VLAN, chì permettenu o deneganu qualchì tipu di cunnessione.

In 2016, u nùmeru di servitori hà righjuntu 8000 XNUMX. Wargaming assorbiu altri studiosi, è apparsu reti di affiliazione supplementari. Sembranu esse i nostri, ma micca abbastanza: VLAN spessu ùn funziona micca per i partenarii, avete aduprà VPN cù VRF, l'isolamentu diventa più cumplicatu. U mischju d'insulazione ACL hà crisciutu.

Consul + iptables = :3
U mudellu di rete in 2016.

À u principiu di l'annu 2018, a flotta di machini avia crisciutu à 16 000. Ci era segmenti 6, è ùn avemu micca cuntatu u restu, cumpresi quelli chjusi in quale i dati finanziarii sò stati guardati. Reti di cuntainer (Kubernetes), DevOps, rete di nuvola cunnessi via VPN, per esempiu, da un IVS, sò apparsu. Ci era parechje regule - era doloroso.

Consul + iptables = :3
U mudellu di rete è i metudi di isolamentu in 2018.

Per l'isolamentu avemu usatu: VLAN cù ACL in L2, VRF cù ACL in L3, VPN è assai di più. Troppu.

Problemi

Tutti campanu cù ACL è VLAN. Chì ci hè? Sta quistione serà rispostu da Harold, ammucciendu u dulore.

Consul + iptables = :3

Ci era parechje prublemi, ma ci era cinque massivi.

  • Aumentu di u prezzu geometricu per e novi regule. Ogni regula nova hà pigliatu più di più per aghjunghje chì a precedente, perchè era necessariu prima di vede s'ellu ci era digià una regula cusì.
  • Nisun firewall in i segmenti. I segmenti eranu in qualchì manera siparati l'una di l'altru, è ùn ci era digià abbastanza risorse in l'internu.
  • I reguli sò stati applicati per un bellu pezzu. L'operatori puderanu scrive una regula locale à a manu in una ora. U glubale hà pigliatu parechji ghjorni.
  • Difficultà cù e regule di auditing. Più precisamente, ùn era micca pussibule. I primi reguli sò stati scritti in u 2010, è a maiò parte di i so autori ùn anu più travagliatu per a cumpagnia.
  • Bassu livellu di cuntrollu di l'infrastruttura. Questu hè u prublema principali - ùn sapemu micca bè ciò chì passava in u nostru paese.

Hè ciò chì pareva un ingegnere di rete in 2018 quandu hà intesu: "Aviu bisognu di più ACL".

Consul + iptables = :3

Soluzioni

À u principiu di 2018, hè statu decisu di fà qualcosa.

U prezzu di l'integrazioni hè sempri crescente. U puntu di partenza era chì i grandi centri di dati anu cessatu di supportà VLAN è ACL isolati perchè i dispositi mancavanu di memoria.

Soluzione: avemu sguassatu u fattore umanu è automatizatu a prestazione di accessu à u massimu.

E novi regule piglianu assai tempu per applicà. Soluzione: accelerà l'applicazione di e regule, rende distribuite è parallella. Questu hè bisognu di un sistema distribuitu in modu chì e regule sò mandate stessu, senza rsync o SFTP à mille sistemi.

Nisun firewall in i segmenti. Un firewall in segmenti hà cuminciatu à vene à noi quandu parechji servizii apparsu in a stessa reta. Soluzione: aduprate un firewall à u livellu di l'ospite - firewalls basati in l'ospiti. Quasi in ogni locu avemu Linux, è in ogni locu avemu iptables, questu ùn hè micca un prublema.

Difficultà cù e regule di auditing. Soluzione: Mantene tutte e regule in un locu per rivisione è gestione, cusì pudemu audità tuttu.

Bassu livellu di cuntrollu di l'infrastruttura. Soluzione: piglià un inventariu di tutti i servizii è accessi trà elli.

Questu hè più un prucessu amministrativu chè un prucessu tecnicu. Calchì volta avemu 200-300 novi versioni à settimana, soprattuttu durante prumuzioni è vacanze. Inoltre, questu hè solu per una squadra di i nostri DevOps. Cù tante versioni, hè impussibile di vede chì porti, IP, è integrazioni sò necessarii. Per quessa, avemu bisognu di gestori di serviziu speciale chì anu dumandatu à e squadre: "Chì ci hè in ogni modu è perchè l'avete purtatu?"

Dopu tuttu ciò chì avemu lanciatu, un ingegnere di rete in 2019 hà cuminciatu à vede cusì.

Consul + iptables = :3

Cònzulu

Avemu decisu chì avemu da mette tuttu ciò chì avemu trovu cù l'aiutu di i gestori di serviziu in Consul è da quì scriveremu règule iptables.

Cumu avemu decisu di fà questu?

  • Cuglieremu tutti i servizii, e rete è l'utilizatori.
  • Creemu regule iptables basatu annantu à elli.
  • Avemu automatizatu u cuntrollu.
  • ....
  • Prufittu.

Consul ùn hè micca una API remota, pò eseguisce nantu à ogni node è scrive in iptables. Tuttu ciò chì resta hè di vene cun cuntrolli automatichi chì puliranu e cose inutili, è a maiò parte di i prublemi seranu risolti! Avemu da travaglià u restu mentre andemu.

Perchè Cunsul?

S'hè pruvatu bè. In 2014-15, l'avemu utilizatu cum'è backend per Vault, in quale almacenamu password.

Ùn perde micca dati. Duranti u tempu di usu, Consul ùn hà micca persu dati durante una sola accidente. Questu hè un grande plus per un sistema di gestione di firewall.

I cunnessione P2P acceleranu a diffusione di u cambiamentu. Cù P2P, tutti i cambiamenti venenu rapidamente, senza bisognu di aspittà per ore.

API REST convenientu. Avemu ancu cunsideratu Apache ZooKeeper, ma ùn hà micca una API REST, cusì avete da installà crutches.

Funziona cum'è un Key Vault (KV) è un Directory (Service Discovery). Pudete almacenà servizii, cataloghi è centri di dati in una volta. Questu hè cunvenutu micca solu per noi, ma ancu per i squadre vicini, perchè quandu custruisce un serviziu globale, pensemu in grande.

Scrittu in Go, chì face parte di a pila di Wargaming. Amemu sta lingua, avemu parechji sviluppatori Go.

Putente sistema ACL. In Consul, pudete aduprà ACL per cuntrullà quale scrive ciò chì. Guarantimu chì e regule di u firewall ùn si sovrapponenu micca cù qualcosa altru è ùn averemu micca prublemi cù questu.

Ma u Consul hà ancu i so inconvenienti.

  • Ùn scala micca in un centru di dati, salvu ùn avete una versione cummerciale. Hè scalabile solu da a federazione.
  • Moltu dipende da a qualità di a reta è di a carica di u servitore. Cunsul ùn travaglià bè cum'è un servitore in un servitore occupatu s'ellu ci sò qualchi lags in a reta, per esempiu, vitezza irregolari. Questu hè dovutu à e cunnessione P2P è l'aghjurnà mudelli di distribuzione.
  • Difficultà à monitorà a dispunibilità. In u statutu di Cunsul pò dì chì tuttu va bè, ma hè mortu assai tempu fà.

Avemu risoltu a maiò parte di sti prublemi, mentri cù Consul, chì hè per quessa avemu sceltu lu. A cumpagnia hà prughjetti per un backend alternativu, ma avemu amparatu à trattà cù prublemi è sò attualmente vivenu cun Consul.

Cume travaglia Consul

Stallaremu da trè à cinque servitori in un centru di dati cundiziunali. Unu o dui servitori ùn anu micca travagliatu: ùn puderanu micca urganizà un quorum è decide quale hè ghjustu è quale hè sbagliatu quandu i dati ùn currispondenu micca. Più di cinque ùn hà micca sensu, a produtividade scenderà.

Consul + iptables = :3

Clienti cunnessi à i servitori in ogni ordine: i stessi agenti, solu cù a bandiera server = false.

Consul + iptables = :3

Dopu questu, i clienti ricevenu una lista di cunnessione P2P è custruiscenu cunnessione trà elli.

Consul + iptables = :3

À u livellu glubale, cunnettamu parechji centri di dati. Anu ancu cunnette P2P è cumunicà.

Consul + iptables = :3

Quandu vulemu ricuperà e dati da un altru centru di dati, a dumanda passa da u servitore à u servitore. Stu schema hè chjamatu Protokollu di u servitore. U protocolu Serf, cum'è Consul, hè sviluppatu da HashiCorp.

Certi fatti impurtanti circa Consul

Consul hà a documentazione chì descrive cumu funziona. Daraghju solu fatti selezziunati chì valenu a pena sapè.

I servitori di cunsulate selezziunate un maestru trà l'elettori. Cunsul selezziunà un maestru da a lista di servitori per ogni centru di dati, è tutte e dumande vanu solu à questu, indipendentemente da u numeru di servitori. A congelazione di u maestru ùn porta micca à a rielezzione. Se u maestru ùn hè micca sceltu, e dumande ùn sò micca servite da nimu.

Vulete scala horizontale? Scusate, nò.

Una dumanda à un altru centru di dati va da maestru à maestru, indipendentemente da quale servitore hè vinutu. U maestru sceltu riceve 100% di a carica, eccettu per a carica nantu à e dumande in avanti. Tutti i servitori in u centru di dati anu una copia aghjurnata di e dati, ma solu unu risponde.

L'unicu modu di scala hè di attivà u modu stale nantu à u cliente.

In modu stale, pudete risponde senza quorum. Questu hè un modu in quale rinuncemu a cunsistenza di dati, ma leghje un pocu più veloce di u solitu, è ogni servitore risponde. Naturalmente, arregistramentu solu attraversu u maestru.

Cunsul ùn copia dati trà i centri di dati. Quandu una federazione hè assemblata, ogni servitore avarà solu i so dati. Per l'altri, si volta sempre à qualchissia altru.

L'atomicità di l'operazioni ùn hè micca garantita fora di una transazzione. Ricurdativi chì ùn site micca l'unicu chì pò cambià e cose. Sè vo vulete diversu, fà una transazzione cù un serratura.

L'operazione di bloccu ùn guarantisci micca u bloccu. A dumanda va da u maestru à u maestru, è micca direttamente, per quessa, ùn ci hè micca una guaranzia chì u bluccatu hà da travaglià quandu avete bluccatu, per esempiu, in un altru centru di dati.

ACL ùn guarantisci micca ancu l'accessu (in parechji casi). L'ACL ùn pò micca travaglià perchè hè guardatu in un centru di dati di a federazione - in u centru di dati ACL (DC Primariu). Se u DC ùn vi risponde micca, l'ACL ùn viaghja micca.

Un maestru congelatu farà congelare tutta a federazione. Per esempiu, ci sò 10 centri di dati in una federazione, è unu hà una mala reta, è un maestru falla. Tutti quelli chì cumunicanu cun ellu saranu in un cercolu: ci hè una dumanda, ùn ci hè micca risposta, u filu si congela. Ùn ci hè manera di sapè quandu questu succede, solu in una ora o duie tutta a federazione cascarà. Ùn ci hè nunda chì pudete fà.

U statutu, u quorum è l'elezzioni sò trattati da un filu separatu. A rielezzione ùn succederà, u statutu ùn mostrarà nunda. Pensate chì avete un Consul vivu, dumandate, è nunda ùn succede - ùn ci hè risposta. À u listessu tempu, u statutu mostra chì tuttu hè bè.

Avemu scontru stu prublema è duvemu ricustruisce parti specifiche di centri di dati per evità.

A versione cummerciale di Consul Enterprise ùn hà micca alcuni di i svantaghji sopra. Hà parechje funzioni utili: selezzione di l'elettori, distribuzione, scala. Ci hè solu un "ma" - u sistema di licenza per un sistema distribuitu hè assai caru.

Life hacking: rm -rf /var/lib/consul - una cura per tutte e malatie di l'agente. Se qualcosa ùn viaghja micca per voi, sguassate i vostri dati è scaricate i dati da una copia. Hè assai prubabile, u Consul hà da travaglià.

BEFW

Avà parlemu di ciò chì avemu aghjustatu à Consul.

BEFW hè un acronimu per BackEndFiraWtutti. Aviu avutu a nome di u pruduttu in qualchì modu quandu aghju creatu u repository per mette in u primu test commits. Stu nomu ferma.

Modelli di regula

E regule sò scritte in a sintassi iptables.

  • -N BEFW
  • -P INPUT DROP
  • -A INPUT -m state-state RELATED,STABLISHED -j ACCEPT
  • -A INPUT -i lo -j ACCEPT
  • -A INPUT -j BEFW

Tuttu entra in a catena BEFW, eccettu ESTABLISHED, RELATED è locale host. U mudellu pò esse qualcosa, questu hè solu un esempiu.

Cumu hè utile BEFW?

Servizi

Avemu un serviziu, hà sempre un portu, un node nantu à quale corre. Da u nostru node, pudemu dumandà localmente à l'agente è scopre chì avemu qualchì tipu di serviziu. Pudete ancu mette tags.

Consul + iptables = :3

Ogni serviziu chì hè in esecuzione è registratu cù Consul si trasforma in una regula iptables. Avemu SSH - open port 22. U script Bash hè simplice: curl è iptables, nunda di più hè necessariu.

Clienti

Cumu apre l'accessu micca à tutti, ma selettivamente? Aghjunghjite listi IP à l'almacenamiento KV per nome di serviziu.

Consul + iptables = :3

Per esempiu, vulemu chì tutti nantu à a decima reta per pudè accede à u serviziu SSH_TCP_22. Aghjunghjite un picculu campu TTL? è avà avemu permessi tempuranee, per esempiu, per un ghjornu.

Accessi

Cunnettamu servizii è clienti: avemu un serviziu, u almacenamentu KV hè prontu per ognunu. Avà damu accessu micca à tutti, ma selettivamente.

Consul + iptables = :3

i gruppi

Se scrivemu millaie di IP per accessu ogni volta, avemu da esse stanchi. Andemu cun raggruppamenti - un subset separatu in KV. Chjamemu Alias ​​​​(o gruppi) è magazzini gruppi quì secondu u listessu principiu.

Consul + iptables = :3

Cunnetteremu: avà pudemu apre SSH micca specificamente per P2P, ma per un gruppu sanu o parechji gruppi. In u listessu modu, ci hè TTL - pudete aghjunghje à un gruppu è caccià da u gruppu temporaneamente.

Consul + iptables = :3

Integrazione

U nostru prublema hè u fattore umanu è l'automatizazione. Finu a ora avemu risoltu cusì.

Consul + iptables = :3

Avemu u travagliu cù Puppet, è trasfiriri tuttu ciò chì riguarda u sistema (codice applicazione) à elli. Puppetdb (PostgreSQL regular) guarda una lista di servizii chì sò in esecuzione, ponu esse truvati per tipu di risorsa. Quì pudete scopre quale si applica induve. Avemu ancu un sistema di dumanda di pull è fusione per questu.

Avemu scrittu befw-sync, una suluzione simplice chì aiuta à trasfiriri dati. Prima, i cookies di sincronia sò accessu da puppetdb. Una API HTTP hè cunfigurata quì: dumandemu chì servizii avemu, ciò chì deve esse fattu. Allora facenu una dumanda à u Consul.

Ci hè integrazione ? Iè: anu scrittu e regule è permettenu di accettate Pull Requests. Avete bisognu di un certu portu o aghjunghje un òspite à qualchì gruppu? Pull Request, review - ùn più "Truvate 200 altre ACL è pruvate à fà qualcosa".

Ottimizazione

U ping localhost cun una catena di regula vacante dura 0,075 ms.

Consul + iptables = :3

Aghjunghjemu 10 000 indirizzi iptables à sta catena. In u risultatu, u ping aumenterà 5 volte: iptables hè cumplettamente lineare, processà ogni indirizzu pigghia un pocu di tempu.

Consul + iptables = :3

Per un firewall induve migremu millaie di ACL, avemu assai regule, è questu introduce a latenza. Questu hè male per i protokolli di ghjoculi.

Ma si mettemu 10 indirizzi in ipset U ping serà ancu diminuitu.

Consul + iptables = :3

U puntu hè chì "O" (algoritmu cumplessità) per ipset hè sempre uguali à 1, ùn importa quante regule ci sò. True, ci hè una limitazione - ùn pò esse più di e regule 65535. Per avà vivemu cun questu: pudete combine, espansione, fate dui ipsets in unu.

Storage

Una continuazione logica di u prucessu di iterazione hè l'almacenamiento d'infurmazioni nantu à i clienti per u serviziu in ipset.

Consul + iptables = :3

Avà avemu u stessu SSH, è ùn scrivemu micca 100 IP à una volta, ma stabilisce u nome di l'ipset cù quale avemu bisognu di cumunicà, è a regula seguente DROP. Pò esse cunvertitu in una regula "Quale ùn hè micca quì, DROP", ma hè più chjaru.

Avà avemu regule è sete. U compitu principale hè di fà un settore prima di scrive a regula, perchè altrimenti iptables ùn scrive micca a regula.

Schema generale

In a forma di un diagramma, tuttu ciò chì aghju dettu pare cusì.

Consul + iptables = :3

Ci impegnemu à Puppet, tuttu hè mandatu à l'ospite, i servizii quì, ipset quì, è quellu chì ùn hè micca registratu ùn hè micca permessu.

Permette è ricusà

Per salvà rapidamente u mondu o disattivà rapidamente qualcunu, à u principiu di tutte e catene avemu fattu dui ipsets: rules_allow и rules_deny. Cumu funziona?

Per esempiu, qualchissia crea una carica in u nostru Web cù bots. Nanzu, avete bisognu di truvà a so IP da i logs, pigliate à l'ingegneri di a rete, per pudè truvà a fonte di u trafficu è pruibisce. Sembra diversu avà.

Consul + iptables = :3

Mandemu à Consul, aspittà 2,5 seconde, è hè fattu. Siccomu Consul distribuisce rapidamente attraversu P2P, travaglia in ogni locu, in ogni parte di u mondu.

Una volta ch'e aghju fermatu completamente WOT per un sbagliu cù u firewall. rules_allow - questu hè a nostra assicurazione contru tali casi. Se avemu fattu un sbagliu in un locu cù u firewall, qualcosa hè bluccatu in qualchì locu, pudemu sempre mandà un cundizionale. 0.0/0per piglià prestu tuttu. In seguitu, riparà tuttu cù a manu.

Altri seti

Pudete aghjunghje qualsiasi altri setti in u spaziu $IPSETS$.

Consul + iptables = :3

Perchè? Calchì volta qualchissia hà bisognu di ipset, per esempiu, per emulà l'arrestu di una parte di u cluster. Qualchissia pò purtà ogni set, li nomu, è ch'elli seranu pigliati da Consul. À u listessu tempu, i setti ponu o participà à e regule iptables o agisce cum'è una squadra NOOP: A cunsistenza serà mantinuta da u demone.

Utilizatori

Nanzu, era cusì: l'utilizatore cunnessu à a reta è ricevutu paràmetri attraversu u duminiu. Prima di l'avventu di i firewall di nova generazione, Cisco ùn sapia micca cumu capisce induve era l'utilizatore è induve l'IP era. Dunque, l'accessu hè statu cuncessu solu per mezu di u nome d'ospite di a macchina.

Chì avemu fattu ? Avemu chjappu in u mumentu chì avemu ricevutu l'indirizzu. Di solitu questu hè dot1x, Wi-Fi o VPN - tuttu passa per RADIUS. Per ogni utilizatore, creamu un gruppu per nome d'utilizatore è mette una IP in questu cù un TTL chì hè uguale à u so dhcp.lease - appena expire, a regula sparirà.

Consul + iptables = :3

Avà pudemu apre l'accessu à i servizii, cum'è altri gruppi, per nome d'utilizatore. Avemu toltu u dulore di i nomi d'ospiti quandu cambianu, è avemu pigliatu u pesu di l'ingegneri di rete perchè ùn anu più bisognu di Cisco. Avà l'ingegneri stessi registranu l'accessu à i so servitori.

Isulamentu

À u listessu tempu, avemu principiatu à dismantle l'insulation. I gestori di serviziu anu fattu un inventariu, è avemu analizatu tutte e nostre rete. Dividemu in i stessi gruppi, è nantu à i servitori necessarii i gruppi sò stati aghjuntu, per esempiu, per nigà. Avà u listessu isolamentu di staging finisci in i reguli_deny di a pruduzzione, ma micca in a pruduzzione stessu.

Consul + iptables = :3

U schema funziona rapidamente è simplicemente: sguassate tutti l'ACL da i servitori, scaricate l'hardware, è riducemu u numeru di VLAN isolati.

U cuntrollu di integrità

Nanzu, avemu avutu un attivatore speciale chì informava quandu qualchissia hà cambiatu manualmente una regula di firewall. Scrivu un linter enormu per verificà e regule di firewall, era difficiule. L'integrità hè avà cuntrullata da BEFW. Il s'assure avec zèle que les règles qu'il fait ne changent pas. Se qualchissia cambia e regule di u firewall, cambierà tuttu. "Aghju stallatu rapidamente un proxy per pudè travaglià da casa" - ùn ci sò più tali opzioni.

BEFW cuntrolla l'ipset da i servizii è a lista in befw.conf, i reguli di servizii in a catena BEFW. Ma ùn monitoreghja micca altre catene è regule è altri ipsets.

Prutezzione di crash

BEFW sempre guarda l'ultimu statu bè cunnisciutu direttamente in a struttura binaria state.bin. Se qualcosa va male, sempre torna à questu state.bin.

Consul + iptables = :3

Questu hè assicuranza contru u funziunamentu di u Cunsul inestabile, quandu ùn hà micca mandatu dati o qualcunu hà fattu un sbagliu è hà utilizatu regule chì ùn pò micca esse applicatu. Per assicurà chì ùn avemu micca lasciatu senza un firewall, BEFW torna à l'ultimu statu se un errore si trova in ogni stadiu.

In situazioni critichi, questu hè una guaranzia chì avemu da esse lasciatu cù un firewall di travagliu. Apermu tutte e rete grise in a speranza chì l'amministratore vinarà è ripara. Qualchese ghjornu metteraghju questu in i cunfigurazioni, ma avà avemu solu trè rete grise: 10/8, 172/12 è 192.168/16. In u nostru Consul, questu hè una funzione impurtante chì ci aiuta à sviluppà più.

Demo: durante u rapportu, Ivan mostra u modu demo di BEFW. Hè più faciule per fighjà a manifestazione видео. Demo codice fonte disponibile nantu à GitHub.

Pitfalls

Vi dicu di i bug chì avemu scontru.

ipset add set 0.0.0.0/0. Chì succede se aghjunghje 0.0.0.0/0 à ipset? Tutti l'IP seranu aghjuntu? L'accessu à Internet serà dispunibule?

Innò, averemu un bug chì ci hà custatu duie ore di downtime. Inoltre, u bug ùn hà micca travagliatu da u 2016, si trova in RedHat Bugzilla sottu u numeru #1297092, è l'avemu trovu per accidenti - da un rapportu di sviluppatore.

Avà hè una regula stretta à BEFW chì 0.0.0.0/0 si trasforma in dui indirizzi: 0.0.0.0/1 и 128.0.0.0/1.

ipset restore set < file. Chì face ipset quandu li dite restore? Pensate chì funziona u listessu cum'è iptables? Ritruvà dati?

Nunda cusì - face una fusione, è i vechji indirizzi ùn vanu in ogni locu, ùn bluccà micca l'accessu.

Avemu trovu un bug durante a prova di isolamentu. Avà ci hè un sistema piuttostu cumplessu - invece di restore tenutu create tempdopu restore flush temp и restore temp. À a fine di u swap: per l'atomicità, perchè si fate prima flush è in questu mumentu ghjunghje qualchì pacchettu, serà scartatu è qualcosa andarà male. Allora ci hè un pocu di magia nera.

consul kv get -datacenter = altru. Cumu l'aghju dettu, pensemu chì dumandemu qualchi dati, ma avemu da ottene o dati o un errore. Pudemu fà questu in u locu via Consul, ma in questu casu i dui si congelanu.

U cliente Consul locale hè un wrapper nantu à l'API HTTP. Ma solu si ferma è ùn risponde micca à Ctrl + C, o Ctrl + Z, o qualcosa, solu kill -9 in a prossima cunsola. Avemu scontru questu quandu eramu custruendu un grande cluster. Ma ùn avemu micca una suluzione ancu; avemu preparatu per riparà stu errore in Consul.

U capu di u Consulu ùn risponde micca. U nostru maestru in u centru di dati ùn risponde micca, pensemu: "Forse l'algoritmu di reselection hà da travaglià avà?"

Innò, ùn hà micca travagliatu, è u monitoraghju ùn mostrarà nunda: u Consul diciarà chì ci hè un indice d'impegnu, un capu hè statu trovu, tuttu va bè.

Cumu facemu cun questu? service consul restart in cron ogni ora. Sì avete 50 servitori, ùn hè micca grande affare. Quandu ci sò 16 000 di elli, capirete cumu funziona.

cunchiusioni

In u risultatu, avemu ricevutu i seguenti vantaghji:

  • Copertura 100% di tutte e macchine Linux.
  • Velocità.
  • L'automatizazione.
  • Avemu liberatu l'ingegneri di hardware è di rete da a schiavitù.
  • E pussibilità d'integrazione sò apparsu chì sò quasi illimitati: ancu cù Kubernetes, ancu cù Ansible, ancu cù Python.

Минусы: Consul, cù quale avemu avà à campà, è u costu assai altu di errore. Per esempiu, una volta à 6 pm (prime time in Russia) aghju editatu qualcosa in i listi di rete. Eramu solu custruendu l'insulazione à BEFW à l'epica. Aghju fattu un sbagliu in qualchì locu, pare chì aghju indicatu a maschera sbagliata, ma tuttu hè cascatu in dui seconde. U monitoraghju si accende, a persona di supportu in turnu vene in corsa: "Avemu tuttu!" U capu di u dipartimentu hè diventatu grisgiu quandu spiegò à l'affari perchè questu hè accadutu.

U costu di l'errore hè cusì altu chì avemu ghjuntu cù a nostra propria prucedura di prevenzione cumplessa. Se implementate questu nantu à un grande situ di produzzione, ùn avete micca bisognu di dà un token maestru nantu à Consul à tutti. Questu finirà male.

U costu Aghju scrittu codice per 400 ore solu. U mo squadra di 4 persone passa 10 ore à u mese in supportu per tutti. Comparatu à u prezzu di qualsiasi firewall di nova generazione, hè liberu.

Piani. U pianu à longu andà hè di truvà trasportu alternativu per rimpiazzà o cumplementari Consul. Forse sarà Kafka o qualcosa di simile. Ma in l'anni à vene camperemu di Cunsul.

Piani immediati: integrazione cù Fail2ban, cun monitoraghju, cù nftables, possibbilmente cù altre distribuzioni, metriche, monitoraghju avanzatu, ottimisazione. U supportu di Kubernetes hè ancu in un locu in i piani, perchè avà avemu parechji clusters è u desideriu.

Più da i piani:

  • ricerca di anomalie in u trafficu;
  • gestione di carte di rete;
  • supportu Kubernetes;
  • assemblea pacchetti per tutti i sistemi;
  • Web-UI.

Travagliemu constantemente per espansione a cunfigurazione, aumentendu metrica è ottimisazione.

Unisci à u prugettu. U prugettu hè statu bellu, ma, sfurtunatamenti, hè sempre un prughjettu di una sola persona. Venite à GitHub è pruvate à fà qualcosa: impegnà, pruvà, suggerisce qualcosa, dà a vostra valutazione.

Intantu ci preparemu Saint HighLoad++, chì avarà da u 6 d'aprile è 7 in San Petruburgu, è invitamu i sviluppatori di sistemi d'alta carica. dumandà un rapportu. I parlanti sperimentati sanu digià ciò chì facenu, ma per quelli chì sò novi à parlà ricumandemu almenu pruvà. A participazione à a cunferenza cum'è parlante hà una quantità di vantaghji. Pudete leghje quale, per esempiu, à a fine stu articulu.

Source: www.habr.com

Add a comment