{"id":41051,"date":"2020-02-05T21:28:58","date_gmt":"2020-02-05T18:28:58","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/consul-iptables-3"},"modified":"2020-02-05T21:28:58","modified_gmt":"2020-02-05T18:28:58","slug":"consul-iptables-3","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sl\/blog\/consul-iptables-3","title":{"rendered":"Consul + iptables = :3","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>V letu 2010 je imelo podjetje <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/wargaming\/\">Wargaming<\/a><\/noindex> 50 stre\u017enikov in preprost omre\u017eni model: backend, frontend in po\u017earni zid. \u0160tevilo stre\u017enikov se je pove\u010devalo, model pa se je zapletel: stadi, izolirani VLAN z ACL, nato VPN z VRF, VLAN z ACL na L2, VRF z ACL na L3. Se vam je zavrtelo? Naprej bo \u0161e bolj zabavno.<\/p>\n<p>Ko je \u0161tevilo stre\u017enikov naraslo na 16.000, je bilo nemogo\u010de delati brez solz s tako velikim \u0161tevilom raznolikih segmentov. Zato so pri\u0161li do druge re\u0161itve. Vzeli so sklad Netfilter, mu dodali Consul kot vir podatkov in dobili hiter distribucijski po\u017earni zid. S tem so nadomestili ACL na usmerjevalnikih in ga uporabljali kot zunanji in notranji po\u017earni zid. Za dinami\u010dno upravljanje z orodjem so razvili sistem BEFW, ki so ga uporabili povsod: od upravljanja dostopa uporabnikov v proizvodno omre\u017eje do izolacije segmentov omre\u017eja drug od drugega.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/246e74278f413749a676599b5ce986a5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKako vse to deluje in zakaj bi se morali zanimati za ta sistem, bo predstavil <strong>Ivan Agarokov<\/strong> (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/annmuor\/\" class=\"user_link\">annmuor<\/a><\/noindex>) \u2014 vodja skupine infrastrukturne varnosti oddelka Maintenance v Minskem razvojnem centru podjetja. Ivan je obo\u017eevalec SELinux, ljubi Perl, pi\u0161e kodo. Kot vodja skupine za varnost informacij redno dela z logi, varnostnimi kopijami in R&amp;D, da za\u0161\u010diti Wargaming pred hekerji in zagotovi nemoteno delovanje vseh igralnih stre\u017enikov v podjetju.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<center><div class=\"youtube-placeholder\" data-id=\"4zP67uYnsR4\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/4zP67uYnsR4\/hqdefault.jpg\" alt=\"Predvajaj video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h2>Zgodovinski pregled<\/h2>\n<p>\nPreden povem, kako smo to po\u010deli, bom razlo\u017eil, kako smo sploh pri\u0161li do tega in zakaj je bilo to potrebno. Zato se vrnimo devet let nazaj: leto 2010, ko so se prvi\u010d pojavile igre World of Tanks. Podjetje Wargaming je imelo pribli\u017eno 50 stre\u017enikov.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/64e1c2839363dbdf59ba5f11bb13530e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Graf rasti stre\u017enikov podjetja.<\/em><\/p>\n<p>Imeli smo omre\u017eni model. Za tisti \u010das je bil najbolj\u0161i.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/c0509324e2a83882a9792ba75612ceea.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Omre\u017eni model leta 2010.<\/em><\/p>\n<p>Na frontend-u \u017eivijo slabi fantje, ki nas \u017eelijo zlomi, vendar tam obstaja po\u017earni zid. Na backendu pa ni po\u017earnega zida, vendar tam deluje 50 stre\u017enikov, vse jih poznamo. Vse deluje dobro.<\/p>\n<p>V \u0161tirih letih se je \u0161tevilo stre\u017enikov pove\u010dalo 100-krat, na 5000. Pojavili so se prvi izolirani omre\u017eja \u2014 stadi: ne morejo v produkcijo, pogosto pa so se tam vrteli nevarni elementi.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/08e1d7670ce1a1346e49d87c67c4be1b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Omre\u017eni model leta 2014.<\/em><\/p>\n<p>Po inerciji so uporabljali iste strojne naprave in vse delo je potekalo na izoliranih VLAN: na VLAN-ih so zapisani ACL, ki dovolijo ali prepovejo dolo\u010deno povezavo.<\/p>\n<p>V letu 2016 je \u0161tevilo stre\u017enikov doseglo 8000. Wargaming je prevzel druge studije, pojavile so se dodatne partnerske mre\u017ee. Teoreti\u010dno so na\u0161i, a niso popolnoma: za partnerje VLAN pogosto ne deluje, zato je potrebno uporabiti VPN z VRF, izolacije pa se zapletajo. Me\u0161anica izolacij ACL je nara\u0161\u010dala.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/a6580c9551730447e16d7881eb102275.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Mre\u017eni model v letu 2016.<\/em><\/p>\n<p>Do za\u010detka leta 2018 je \u0161tevilo strojev naraslo na 16.000. Imeli smo 6 segmentov, ostale smo ignorirali, vklju\u010dno s skritimi, v katerih so bili shranjeni finan\u010dni podatki. Pojavili so se omre\u017eni kontejnerji (Kubernetes), DevOps, obla\u010dna omre\u017eja, povezana preko VPN, na primer iz IWS. Pravil je bilo preve\u010d \u2013 bilo je bole\u010de.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/ec44e6a60da98daa4bbf2bca2e3b2e1a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Mre\u017eni model in na\u010dini izolacije v letu 2018.<\/em><\/p>\n<p>Za izolacijo smo uporabljali: VLAN z ACL na L2, VRF z ACL na L3, VPN in \u0161e marsikaj drugega. Preve\u010d je bilo.<\/p>\n<h2>Te\u017eave<\/h2>\n<p>\nVsi \u017eivijo z ACL in VLAN. Kaj je sploh narobe? Na to vpra\u0161anje bo odgovoril Harold, ki skriva bole\u010dino.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/4df5105af3bce515d80e8e5f3e14c027.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBilo je veliko te\u017eav, a mno\u017ei\u010dnih \u2013 pet.<\/p>\n<ul>\n<li><strong>Geometrijska rast cene novih pravil<\/strong>. Vsako novo pravilo je bilo dodano dlje kot prej\u0161nje, ker je bilo najprej treba preveriti, ali tak\u0161no pravilo \u017ee obstaja.<\/li>\n<li><strong>V segmentih ni po\u017earnega zidu<\/strong>. Segmenti so se nekako lo\u010dili med seboj, znotraj pa je \u017ee primanjkovalo virov.<\/li>\n<li><strong>Pravila so se dolgo uporabljala. <\/strong>Operaterji so lahko eno lokalno pravilo napisali ro\u010dno v eni uri. Globalno je trajalo ve\u010d dni.<\/li>\n<li><strong>Te\u017eave z revizijo pravil<\/strong>. Natan\u010dneje, to ni bilo mogo\u010de. Prva pravila so bila napisana \u017ee leta 2010 in ve\u010dina njihovih avtorjev \u017ee ni delala v podjetju.<\/li>\n<li><strong>Nizka raven nadzora nad infrastrukturo<\/strong>. To je glavni problem \u2013 slabo smo vedeli, kaj se sploh dogaja.<\/li>\n<\/ul>\n<p>\nTako je izgledal omre\u017eni in\u017eenir v letu 2018, ko je sli\u0161al: 'Potrebujemo \u0161e malo ACL'.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/8366d3092558ebb15a4ba6d8e5702032.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Re\u0161itve<\/h2>\n<p>\nNa za\u010detku leta 2018 je bilo odlo\u010deno, da je treba nekaj narediti glede tega.<\/p>\n<p><strong>Cena integracij nenehno raste. <\/strong>Izhodi\u0161\u010dna to\u010dka je bila, da so veliki datcentri prenehali podpirati izolirane VLAN in ACL, ker so se naprave napolnile.<\/p>\n<p>Re\u0161itev: odpravili smo \u010dlove\u0161ki faktor in \u010dim bolj avtomatizirali zagotavljanje dostopa.<\/p>\n<p><strong>Nova pravila se dolgo uporabljajo. <\/strong>Re\u0161itev: pospe\u0161iti uporabo pravil, jo narediti distribuirano in paralelno. Za to potrebujemo distribucijski sistem, da se pravila dostavljajo sama, brez rsync ali SFTP na tiso\u010d sistemov.<\/p>\n<p><strong>Odsotnost po\u017earnega zidu znotraj segmentov. <\/strong>V notranjih segmentih se je za\u010del pojavljati po\u017earni zid, ko so se znotraj iste mre\u017ee pojavile razli\u010dne storitve. Re\u0161itev: uporabiti po\u017earni zid na ravni gostitelja \u2014 host-based firewalls. Prakti\u010dno povsod imamo Linux in povsod so iptables, to ni te\u017eava.<\/p>\n<p><strong>Te\u017eave z revizijo pravil.<\/strong> Re\u0161itev: shraniti vsa pravila na enem mestu za pregled in upravljanje, tako bomo lahko vse revizirali.<\/p>\n<p><strong>Nizek nivo nadzora nad infrastrukturo. <\/strong>Re\u0161itev: opraviti inventuro vseh storitev in dostopov med njimi.<\/p>\n<p>To je bolj administrativen proces kot tehni\u010den. V\u010dasih imamo 200-300 novih izdaj na teden, \u0161e posebej med promocijami in prazniki. Pri tem gre le za eno ekipo na\u0161ih DevOps. S tako \u0161tevilnimi izdajami je nemogo\u010de videti, katere porte, IP, integracije so potrebne. Zato smo potrebovali posebej usposobljene vodje storitev, ki so spra\u0161evali ekipe: 'Kaj sploh imate in zakaj ste to postavili?'<\/p>\n<p>Po vsem, kar smo zagnali, je leta 2019 na\u0161 mre\u017eni in\u017eenir izgledal \u017ee tako.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/ccca25d7f7bb7f70638725addc6d99ed.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Consul<\/h2>\n<p>\nOdlo\u010dili smo se, da vse, kar smo na\u0161li s pomo\u010djo vodij storitev, postavimo v Consul in od tam napi\u0161emo pravila iptables.<\/p>\n<p>Kako smo se odlo\u010dili to narediti?<\/p>\n<ul>\n<li>Zbrali bomo vse storitve, mre\u017ee in uporabnike.<\/li>\n<li>Na njihovi osnovi bomo oblikovali pravila iptables.<\/li>\n<li>Avtomatizirali bomo nadzor.<\/li>\n<li>\u2026.<\/li>\n<li>PROFIT.<\/li>\n<\/ul>\n<p>\nConsul ni oddaljen API, deluje lahko na vsakem vozli\u0161\u010du in pi\u0161e v iptables. Ostane le \u0161e, da zmirovanja nadzora, ki bodo odstranjevala odve\u010dne elemente, in ve\u010dina te\u017eav bo re\u0161ena! Preostalo bomo dodelali v postopku.<\/p>\n<h3>Zakaj Consul?<\/h3>\n<p>\n<strong>Se je dobro izkazal. <\/strong>V letih 2014-15 smo ga uporabljali kot backend za Vault, kjer shranjujemo gesla.<\/p>\n<p><strong>Ne izgublja podatkov.<\/strong>. Med uporabo Consula ni izgubil podatkov v nobeni nesre\u010di. To je ogromen plus za sistem upravljanja po\u017earnega zidu.<\/p>\n<p><strong>P2P povezave pospe\u0161ujejo \u0161irjenje sprememb.<\/strong>. S P2P vse spremembe pridejo hitro, ni potrebno \u010dakati ve\u010d ur.<\/p>\n<p><strong>Priro\u010den REST API.<\/strong> Opremljali smo tudi Apache ZooKeeper, vendar nima REST API, zato bi morali postaviti delovne obrate.<\/p>\n<p><strong>Deluje tako kot shranjevanje klju\u010dev (KV) kot tudi kot katalog (Service Discovery).<\/strong>. Hraniti je mogo\u010de storitve, kataloge, podatkovne centre. To je priro\u010dno ne le za nas, ampak tudi za sosednje ekipe, ker pri ustvarjanju globalne storitve razmi\u0161ljamo na obse\u017een na\u010din.<\/p>\n<p><strong>Napisano v Go, ki je del skladov Wargaming. <\/strong>Obo\u017eavamo ovaj jezik, imamo mnogo Go programera.<\/p>\n<p><strong>Mo\u0107an ACL sistem. <\/strong>U Consulu, pomo\u0107u ACL-a, mo\u017eete upravljati time ko i \u0161ta mo\u017ee pisati. Garantujemo da pravila vatrozida ne\u0107e biti u sukobu i da ne\u0107emo imati problema s tim.<\/p>\n<p>Ali Consul ima i nedostataka.<\/p>\n<ul>\n<li><strong>Ne skalira se unutar data centra ako nemate poslovnu verziju. <\/strong>Skalira se samo federacijom.<\/li>\n<li><strong>Veoma zavisi od kvaliteta mre\u017ee i optere\u0107enja servera. <\/strong>Consul ne\u0107e raditi ispravno kao server na optere\u0107enom serveru ako su u mre\u017ei neki lagovi, na primer, neujedna\u010dena brzina. To je povezano sa P2P povezivanjem i modelima distribucije a\u017euriranja.<\/li>\n<li><strong>Te\u0161ko\u0107e s pra\u0107enjem dostupnosti<\/strong>. U statusu Consula mo\u017ee pisati da je sve u redu, a on je ve\u0107 davno umro.<\/li>\n<\/ul>\n<p>\nVe\u0107inu ovih problema smo re\u0161avali tokom kori\u0161\u0107enja Consula, zato smo ga i izabrali. U firmi postoje planovi za alternativni backend, ali smo nau\u010dili da se borimo s problemima i trenutno \u017eivimo s Consulom.<\/p>\n<h3>Kako funkcioni\u0161e Consul<\/h3>\n<p>\nU hipoteti\u010dki data centar instaliramo servere \u2014 od tri do pet. Jedan ili dva servera ne\u0107e odgovarati: ne\u0107e mo\u0107i da organizuju kvorum i odlu\u010de ko je u pravu, a ko nije, kada se podaci ne podudaraju. Vi\u0161e od pet servera nije smisleno, performanse \u0107e opasti.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/96153c4e9075b067b34a63ceba5b80f0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK.serverima se klijenti povezuju u bilo kom redu: isti agenti, samo sa oznakom <code>server = false<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/0854d1286c18bb5e7c1130c6734154a9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n. Nakon toga, klijenti dobijaju listu P2P veza i uspostavljaju me\u0111usobne veze.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/2457cb7707c27cc23f6e13415119b91d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa globalnom nivou povezujemo nekoliko data centara me\u0111usobno. Oni se tako\u0111e povezuju P2P i komuniciraju.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/3b4ae922eb8d2a6a9a79425e769505d7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKada \u017eelimo da preuzmemo podatke iz drugog data centra, zahtev ide od servera do servera. Ova \u0161ema se naziva <strong>Serf protokol<\/strong>. Serf protokol, kao i Consul, je razvoj HashiCorp-a.<\/p>\n<h3>Nekoliko va\u017enih \u010dinjenica o Consulu<\/h3>\n<p>\nConsul ima dokumentaciju koja opisuje njegov rad. Navesti \u0107u samo selektivne \u010dinjenice koje bi trebalo znati.<\/p>\n<p><strong>Consul serveri biraju vo\u0111u iz redova glasova<\/strong>. Consul bira vo\u0111u iz liste servera za svaki data centar, i svi zahtevi idu samo njemu, bez obzira na broj servera. Zagu\u0161enje vo\u0111e ne dovodi do ponovnog izbora. Ako vo\u0111a nije izabran \u2014 zahtevi se ne obra\u0111uju.<\/p>\n<blockquote><p>Da li ste \u017eeleli horizontalno skaliranje? \u017dao nam je, nema toga.<\/p><\/blockquote>\n<p> Zahteva za drugem podatkovnem centru poteka od mojstra do mojstra, ne glede na to, na katerem stre\u017eniku se je pojavila. Izbrani mojster prevzame 100 % obremenitve, razen obremenitve za posredovanje zahtev. Aktualna kopija podatkov je na vseh stre\u017enikih podatkovnega centra, vendar odgovarja samo en.<\/p>\n<blockquote><p>Edini na\u010din za pove\u010danje obremenitve je, da omogo\u010dite stale-na\u010din na odjemalcu.<\/p><\/blockquote>\n<p>V stale-na\u010dinu lahko odgovarjate brez kvoruma. To je na\u010din, v katerem se odpovemo doslednosti podatkov, vendar beremo nekoliko hitreje kot obi\u010dajno, in odgovori kateri koli stre\u017enik. Seveda se zapisuje samo preko mojstra.<\/p>\n<p><strong>Consul ne kopira podatkov med podatkovnimi centri.<\/strong>Pri zbiranju federacije ima vsak stre\u017enik samo svoje podatke. Po drugih se vedno obra\u010da na nekoga drugega.<\/p>\n<p><strong>Atomarnost operacij ni zagotovljena izven transakcije.<\/strong>Ne pozabite, da lahko nekaj spremenite ne le vi. \u010ce \u017eelite druga\u010de, izvedite transakcijo z zaklepanjem.<\/p>\n<p><strong>Zaklepne operacije ne zagotavljajo zaklepanja.<\/strong>Zahteva poteka od mojstra do mojstra, ne neposredno, zato ni zagotovil, da bo zaklep deloval, ko zaklepate, na primer, v drugem podatkovnem centru.<\/p>\n<p><strong>ACL tudi ne zagotavlja dostopa (v mnogih primerih).<\/strong>ACL morda ne bo deloval, ker se shranjuje v enem podatkovnem centru federacije \u2014 v ACL podatkovnem centru (Primarni DC). \u010ce vam DC ne odgovori, ACL ne bo deloval.<\/p>\n<p><strong>Eden zamrznjen mojster bo povzro\u010dil zamrznitev celotne federacije.<\/strong>Na primer, v federaciji je 10 podatkovnih centrov, v enem pa je slaba mre\u017ea in eden mojster pade. Vsi, ki komunicirajo z njim, se bodo zaleteli nazaj: zahteva, ni odgovora, nit se zastoji. Ni\u010desar ne boste mogli storiti, da bi vedeli, kdaj se bo to zgodilo, preprosto bo \u010dez uro ali dve padla cela federacija.<\/p>\n<p>Status, kvorum in volitve obravnava lo\u010dena nit. Ponovne volitve ne bodo potekale, status ne bo ni\u010desar pokazal. Mislite, da imate \u017eivi Consul, po\u0161ljete zahtevo, in ni\u010d se ne zgodi \u2014 ni odgovora. Medtem pa status ka\u017ee, da je vse v redu.<\/p>\n<p>S to te\u017eavo smo se sre\u010dali, morali smo preoblikovati dolo\u010dene dele podatkovnih centrov, da bi se ji izognili.<\/p>\n<p><strong>V poslovni razli\u010dici Consul Enterprise ni nekaterih zgoraj navedenih pomanjkljivosti.<\/strong>To je polno uporabnih funkcij: izbira volivcev, razporejanje, raz\u0161irjanje. Obstaja le ena \"ampak\" \u2014 licen\u010dni sistem za razdeljen sistem je zelo drag.<\/p>\n<p>Koristni nasvet: <code>rm -rf \/var\/lib\/consul<\/code> \u2014 zdravilo za vse bolezni agenta. \u010ce vam kaj ne deluje, preprosto izbri\u0161ite svoje podatke in nalo\u017eite podatke iz varnostne kopije. Verjetno bo Consul za\u010del delovati.<\/p>\n<h2>BEFW<\/h2>\n<p>\nZdaj se pogovorimo o tem, kar smo dodali v Consul.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wgnet\/befw\">BEFW<\/a><\/noindex> \u2014 je akronim za <strong>B<\/strong>ack<strong>E<\/strong>nd<strong>F<\/strong>ire<strong>W<\/strong>all. Morali smo dati nekako ime izdelku, ko sem ustvarjal repozitorij za prve testne predloge. To ime je ostalo.<\/p>\n<h3>Predloge pravil<\/h3>\n<p>\nPravila so napisana v sintaksi iptables.<\/p>\n<ul>\n<li>-N BEFW<\/li>\n<li>-P INPUT DROP<\/li>\n<li>-A INPUT -m state\u2014state RELATED,ESTABLISHED -j ACCEPT<\/li>\n<li>-A INPUT -i lo -j ACCEPT<\/li>\n<li>-A INPUT -j BEFW<\/li>\n<\/ul>\n<p>\nVse gre v verigo BEFW, razen <code>ESTABLISHED<\/code>, <code>RELATED<\/code> in localhost. Predloga je lahko kakr\u0161na koli, to je le primer.<\/p>\n<p>Kaj prina\u0161a BEFW?<\/p>\n<h3>Storitve<\/h3>\n<p>\nImamo storitev, vedno ima vrata, nod, na kateri deluje. Z na\u0161e node lahko lokalno vpra\u0161amo agenta in ugotovimo, da imamo kak\u0161no storitev. Tudi oznake lahko dodajamo.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/6d8c74db37e2e1eed971cfa6947cc5c8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVsaka storitev, ki se izvaja in je registrirana v Consul, postane pravilo iptables. Imamo SSH \u2014 odpiramo vrata 22. Bash skript je preprost: curl in iptables, ni\u010d drugega ne potrebujemo.<\/p>\n<h3>Klijenti<\/h3>\n<p>\nKako odpreti dostop ne vsem, temve\u010d selektivno? Po imenu storitve sestaviti IP-sezname v KV-shranjevanju.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/11a5af5aad9e848565458f168a1eee64.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa primer, \u017eelimo, da se vsi iz desete mre\u017ee lahko pove\u017eejo s storitvijo SSH_TCP_22. Dodamo eno majhno polje TTL? in zdaj imamo za\u010dasne dovoljenja, na primer, za en dan.<\/p>\n<h3>Dostopi<\/h3>\n<p>\nPovezujemo storitve in stranke: imamo storitev, za vsak pripravljeno KV-shranjevanje. Zdaj dajemo dostop ne vsem, temve\u010d selektivno.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/d1119fbb226595184cac8d9ce7a924e3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Skupine<\/h3>\n<p>\n\u010ce bomo vsakokrat pisali tiso\u010de IP-jev za dostop, se bomo utrudili. Ustanovimo grupacije \u2014 lo\u010den podmno\u017eek v KV. Poimenovali ga bomo Alias (ali skupine) in tam hranimo skupine po istem principu.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/67c6ab76cc25a3973739bdd44b69cef9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPovezujemo: zdaj lahko odprete SSH ne samo na P2P, temve\u010d na celo skupino ali ve\u010d skupin. Enako velja za TTL \u2014 lahko dodajate v skupino in za\u010dasno odstranjujete iz skupine.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/a00b7db5087a96730c2725090f33e2b0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Integracija<\/h3>\n<p>\nNa\u0161a te\u017eava \u2014 \u010dlove\u0161ki faktor in avtomatizacija. Zaenkrat smo jo re\u0161ili tako.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/ce7a0c16543d0624453e6bdada3b8f03.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSodelujemo s Puppet-ter in prena\u0161amo vse, kar se nana\u0161a na sistem (kodo aplikacij). V puppetdb (obi\u010dajni PostgreSQL) hranimo seznam storitev, ki so tam zagnane, te lahko najdemo po vrsti virov. Prav tako lahko ugotovimo, kdo se kam obra\u010da. Imamo tudi sistem za pull request in merge request za to.<\/p>\n<p>Napisali smo befw-sync \u2013 najpreprostej\u0161o re\u0161itev, ki pomaga pri prenosu podatkov. Najprej se sync cookies obrnejo na puppetdb. Tam je nastavljen HTTP API: povpra\u0161amo, katere storitve imamo, kaj je treba opraviti. Nato se izvede poizvedba v Consul.<\/p>\n<p>Ali obstaja integracija? Da: napisali smo pravila, dovolili sprejemanje Pull Requesta. Potreben je nek port ali dodati gostitelja v kak\u0161no skupino? Pull Request, pregled \u2013 brez iskanja 'najdi 200 drugih ACL in poskusi to re\u0161iti'.<\/p>\n<h3>Optimizacija<\/h3>\n<p>\nPing localhost z praznim veri\u017enim nizom pravil traja 0,075 ms.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/39263844f79c4795af05dc3ecb734394.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDodali bomo v to verigo 10.000 naslovov iptables. Posledi\u010dno se ping pove\u010da petkrat: iptables je popolnoma linearno, obdelava vsakega naslova traja dolo\u010den \u010das.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/e6c314155c3a34fdf61e40479ecb26c3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZa po\u017earni zid, v katerega migriramo tiso\u010de ACL, imamo veliko pravil, to pa prina\u0161a zamudo. Za igralne protokole je to slabo.<\/p>\n<p>Ampak \u010de jih postavimo <strong>10.000 naslovov v ipset<\/strong> se ping celo zmanj\u0161a.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/2dd844d9324d057ba9ab098e501a1e51.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNamen je v tem, da je 'O' (zapletenost algoritma) za ipset vedno enaka 1, ne glede na to, koliko pravil je tam. Res je, da obstaja omejitev \u2013 pravil ne more biti ve\u010d kot 65535. Zaenkrat smo s tem zadovoljni: lahko jih kombiniramo, \u0161irimo, naredimo dva ipset v enem.<\/p>\n<h3>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435<\/h3>\n<p>\nLogi\u010dna nadaljevanja procesa iteracij je shranjevanje informacij o strankah za storitev v ipset.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/126069799d95594be8611237e935189d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZdaj imamo isti SSH, in ne vpisujemo takoj 100 IP, ampak dolo\u010dimo ime ipseta, s katerim se moramo povezati, in naslednje pravilo <code>DROP<\/code>. Lahko ga preoblikujemo v eno pravilo 'Kdor ni tukaj, tisti DROP', ampak tako je bolj pregledno.<\/p>\n<p>Zdaj imamo pravila in sete. Glavna naloga je narediti set, preden napi\u0161emo pravilo, ker sicer iptables ne bo zabele\u017eil pravila.<\/p>\n<h3>Splo\u0161ni diagram<\/h3>\n<p>\nV obliki sheme izgleda vse, kar sem povedal, tako.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/4046e921cb5f466f8af5a6af1fcd151c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCommitamo v Puppet, vse se po\u0161lje na gostitelja, storitve so tukaj, ipset tam, tistih, ki tam niso zapisani, ne spustijo.<\/p>\n<h3>Allow &amp; deny<\/h3>\n<p>\nDa bi hitro re\u0161ili svet ali hitro nekomu onemogo\u010dili dostop, smo na za\u010detku vseh verig naredili dva ipset: <code>rules_allow<\/code> in <code>rules_deny<\/code>. Kako to deluje?<\/p>\n<p>Na primer, nekdo ustvarja obremenitve z botom na na\u0161i spletni strani. Pred tem je bilo potrebno poiskati njegov IP naslov v dnevnikih, ga predati omre\u017enim in\u017eenirjem, da bi na\u0161li vir prometa in ga blokirali. Zdaj to izgleda druga\u010de.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/6e7f906919536cab2c283ba6ceb0472d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPo\u0161ljemo v Consul, po\u010dakamo 2,5 sekunde in to je to. Ker Consul hitro distribuira preko P2P, deluje povsod, kjerkoli v svetu.<\/p>\n<p>Enkrat sem povsem ustavil WOT, ker sem se zmotil s po\u017earnim zidom. <code>rules_allow<\/code> \u2014 to je na\u0161 zavarovanje v takih primerih. \u010ce kje naredimo napako s po\u017earnim zidom in nekaj blokiramo, lahko vedno po\u0161ljemo pogojni <code>0.0\/0<\/code>, da hitro vse sprostimo. Potem pa bomo vse popravili ro\u010dno.<\/p>\n<h3>Drugi nizi<\/h3>\n<p>\nLahko dodajate vse druge nize v prostoru <code>$IPSETS$<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/4e1e337b35da81cd7324b2adc106b085.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZakaj? V\u010dasih nekdo potrebuje ipset, na primer, da emulira izklop nekega dela klasterja. Vsak lahko prinese kakr\u0161nekoli nize, jih poimenuje in ti se bodo pobrali iz Consula. Hkrati lahko nizi sodelujejo v pravilih iptables ali pa slu\u017eijo kot ekipa <code>NOOP<\/code>: konzistentnost bo vzdr\u017eevana z demonom.<\/p>\n<h3>Korisnici<\/h3>\n<p>\nPrej je bilo tako: uporabnik se je povezal v omre\u017eje in preko domene prejel parametre. Pred pojavom nove generacije po\u017earnih zidov Cisco ni znala razumeti, kje je uporabnik in kje IP. Zato je bilo dostop omogo\u010deno le preko ime stroj.<\/p>\n<p>Kaj smo naredili? Vklu\u010dili smo se v trenutku pridobivanja naslova. Obi\u010dajno je to dot1x, Wi-Fi ali VPN \u2014 vse gre preko RADIUS-a. Za vsakega uporabnika ustvarimo skupino po imenu uporabnika in vanjo umestimo IP s TTL, ki enak njegovemu dhcp.lease \u2014 takoj ko pote\u010de, pravilo izgine.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/04550475c6af49d094c18b1d5b89123a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZdaj lahko odpiramo dostop do storitev, kot v druge skupine, po uporabni\u0161kem imenu. Oznanili smo se te\u017eav, ko se ime stroj spremeni, in razbremenili omre\u017ene in\u017eenirje, ker jim ve\u010d ni treba upravljati s Cisco. Zdaj in\u017eenirji sami zapisujejo dostop na svojih stre\u017enikih.<\/p>\n<h3>Izolacija<\/h3>\n<p>\nHkrati smo za\u010deli obravnavati izolacijo. Upravitelji storitev so naredili inventuro, mi pa smo analizirali vsa omre\u017eja. Razdelili jih bomo v enake skupine, na potrebne stre\u017enike pa dodali skupine, na primer, v deny. Izolacija stanja zdaj pade v rules_deny pri produkciji, vendar ne v samo produkcijo.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/60fe7407013aa64b853791f8def627cc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa\u010drt deluje hitro in preprosto: odstranimo vse ACL s stre\u017enikov, razbremenimo strojno opremo in zmanj\u0161amo \u0161tevilo izoliranih VLAN-ov.<\/p>\n<h3>Nadzor celovitosti<\/h3>\n<p>\nV preteklosti smo imeli poseben spro\u017eilec, ki je obve\u0161\u010dal, ko je kdo ro\u010dno spremenil pravilo po\u017earnega zidu. Napisal sem velik linter za preverjanje pravil po\u017earnega zidu, kar je bilo zahtevno. Zdaj celovitost nadzira BEFW. Skrbno spremlja, da se pravila, ki jih ustvarja, ne spreminjajo. \u010ce kdo spremeni pravila po\u017earnega zidu, se vrnejo nazaj. \"Hitro sem vzpostavil proxy, da delam od doma\" \u2014 tak\u0161nih mo\u017enosti ve\u010d ni.<\/p>\n<p>BEFW nadzira ipset iz storitev in seznama v befw.conf, pravila storitev v verigi BEFW. Ne spremlja pa drugih verig in pravil ter drugih ipsetov.<\/p>\n<h3>Za\u0161\u010dita pred napakami<\/h3>\n<p>\nBEFW vedno shrani zadnje uspe\u0161no stanje neposredno v binarni strukturi state.bin. \u010ce gre kaj narobe, se vedno vrne na to state.bin.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/724f3537c06a7135fa6397f9ddd5630f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTo je zavarovanje pred nestabilnim delovanjem Consula, ko podatki niso bili poslani ali je kdo naredil napako in uporabil pravila, ki jih ni mogo\u010de uporabiti. Da ne bi ostali brez po\u017earnega zidu, se BEFW vrne na zadnje stanje, \u010de pride do napake na kateremkoli koraku.<\/p>\n<p>V kriti\u010dnih situacijah je to jamstvo, da bomo ostali z delujo\u010dim po\u017earnim zidom. Odpremo vse sive omre\u017ene povezave v upanju, da bo skrbnik pri\u0161el in to popraviti. Neko\u010d bom to prenesel v konfiguracije, a zdaj imamo preprosto tri sive mre\u017ee: 10\/8, 172\/12 in 192.168\/16. V sklopu na\u0161ega Consula je to pomembna zna\u010dilnost, ki nam pomaga napredovati.<\/p>\n<p><em>Demo: med predstavitvijo Ivan prikazuje demo na\u010din delovanja BEFW. Prikaz je la\u017eje gledati na <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/4zP67uYnsR4?t=1663\">video<\/a><\/noindex>. Izvorna koda demota je dostopna <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wgnet\/befw\/tree\/master\/demo\">na GitHubu<\/a><\/noindex>.<\/em><\/p>\n<h2>Skrbi<\/h2>\n<p>\nPovedal bom o napakah, s katerimi smo se sre\u010dali.<\/p>\n<p><strong>ipset add set 0.0.0.0\/0. <\/strong>Kaj se zgodi, \u010de dodamo v ipset 0.0.0.0\/0? Ali se dodajo vsi IP naslovi? Se odpre dostop do interneta? <\/p>\n<p>Ne, dobili bomo napako, ki nas je stala dveh ur zastoja. Ta napaka namre\u010d ne deluje \u017ee od leta 2016, le\u017ei v RedHat Bugzilli pod \u0161tevilko #1297092, odkrili pa smo jo povsem naklju\u010dno \u2014 iz poro\u010dila razvijalca.<\/p>\n<p>Zdaj v BEFW velja strogo pravilo, da <code>0.0.0.0\/0<\/code> se spremeni v dve naslovni \u0161tevilki: <code>0.0.0.0\/1<\/code> in <code>128.0.0.0\/1<\/code>.<\/p>\n<p><strong>ipset restore set &lt; file. <\/strong>Kaj naredi ipset, ko mu re\u010dete <code>restore<\/code>? \u0412\u044b \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a\u0436\u0435, \u043a\u0430\u043a iptables? \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435?<\/p>\n<p>Ni tako \u2014 izvede zdru\u017eitev, in stari naslovi nikamor ne gredo, dostopa ne zaprete.<\/p>\n<p>Napako smo na\u0161li, ko smo testirali izolacijo. Zdaj tam deluje precej zapleten sistem \u2014 namesto <code>restore<\/code> poteka <code>create temp<\/code>, zatim <code>restore flush temp<\/code> in <code>restore temp<\/code>. Na koncu swap: za atomarnost, ker \u010de najprej izvedete <code>flush<\/code> In this moment, if a package comes, it will be discarded and something will go wrong. So there\u2019s a bit of black magic involved.<\/p>\n<p><strong>consul kv get -datacenter=other. <\/strong>As I mentioned earlier, we think we are requesting some data, but we will either get data or an error. We can do this through Consul locally, but in this case, both will hang.<\/p>\n<p>The local Consul client is a wrapper around the HTTP API. But it hangs and doesn't respond to either Ctrl+C, Ctrl+Z, or anything, only to <code>kill -9<\/code> a neighboring console. We faced this when building a large cluster. But we currently have no solution; we are preparing to fix this bug in Consul.<\/p>\n<p><strong>The Consul leader is not responding. <\/strong>Our master in the data center is not responding, and we think: \u201cSurely, the reelection algorithm will kick in now?\u201d <\/p>\n<p>No, it won't, and the monitoring will show nothing: Consul will say that the commitment index exists, the leader is found, everything is fine.<\/p>\n<p>How are we fighting this? <code>service consul restart<\/code> in cron every hour. If you have 50 servers, it\u2019s not a problem. When you have 16,000, you will understand how it works.<\/p>\n<h2>Zaklju\u010dek<\/h2>\n<p>\nAs a result, we gained the following advantages:<\/p>\n<ul>\n<li>100% coverage of all Linux machines.<\/li>\n<li>Hitrost.<\/li>\n<li>Automation.<\/li>\n<li>We freed hardware and network engineers from slavery.<\/li>\n<li>Integration opportunities have become virtually limitless: with Kubernetes, Ansible, or Python.<\/li>\n<\/ul>\n<p>\n<strong>\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438<\/strong>: Consul, with which we now have to live, and the cost of mistakes is extremely high. For example, once at 6 PM (prime time in Russia), I was editing network lists. We were just building isolation on BEFW. I made a mistake somewhere, apparently specified the wrong mask, and everything crashed in two seconds. Monitoring lights up, the support on duty comes running: \u201cEverything is down!\u201d The head of the department turned gray explaining to the business why this happened.<\/p>\n<p>The cost of mistakes is so high that we devised our own complex preventive procedure. If you\u2019re implementing this in a large production environment, do not grant the master token over Consul to everyone randomly. It will end poorly.<\/p>\n<p><strong>Costs. <\/strong>I wrote code for 400 hours alone. My team of 4 spends 10 hours a month to support everyone. Compared to the cost of any next-gen firewall, this is free.<\/p>\n<p><strong>Plans. <\/strong>The long-term plan is to look for an alternative transport to replace or supplement Consul. Perhaps it will be Kafka or something similar. But for the next few years, we will live with Consul.<\/p>\n<p>Najbli\u017eji na\u010drti: integracija s Fail2ban, nadzorom, z nftables, morda tudi z drugimi distribucijami, metrike, raz\u0161irjeni nadzor, optimizacija. Podpora za Kubernetes je prav tako v na\u010drtu, saj imamo trenutno ve\u010d klasterjev in \u017eeljo.<\/p>\n<p>\u0160e iz na\u010drtov:<\/p>\n<ul>\n<li>iskanje anomalij v prometu;<\/li>\n<li>upravljanje s topologijo omre\u017eja;<\/li>\n<li>podpora za Kubernetes;<\/li>\n<li>kompilacija paketov za vse sisteme;<\/li>\n<li>Web-UI.<\/li>\n<\/ul>\n<p>\nStalno delamo na raz\u0161iritvi konfiguracije, pove\u010devanju metrik in optimizaciji.<\/p>\n<p><i>Pridru\u017eite se projektu. Projekt je izjemen, a \u017eal je trenutno to projekt enega \u010dloveka. Pridite na <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wgnet\/befw\">GitHub <\/a><\/noindex>in poskusite nekaj storiti: oddajte prispevek, testirajte, predlagajte, dajte svoje mnenje.<\/i><\/p>\n<blockquote><p>Medtem se pripravljamo na <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/spb\/2020\">Saint HighLoad++<\/a><\/noindex>, ki bo 6. in 7. aprila v Sankt Peterburgu, in vabimo razvijalce visoko obremenjenih sistemov, <noindex><a rel=\"nofollow\" href=\"https:\/\/conf.ontico.ru\/lectures\/propose?conference=hl2020-spb\">da se prijavijo za predavanje<\/a><\/noindex>. Izku\u0161eni predavatelji \u017ee vedo, kaj storiti, novince v nastopih pa priporo\u010damo, da si vsaj <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/spb\/2020\/speakers\">preizkusiti<\/a><\/noindex>. Udele\u017eba na konferenci kot predavatelj prina\u0161a vrsto prednosti. Kaj, si lahko preberete, na primer, na koncu <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/486142\/\">ovog \u010dlanka<\/a><\/noindex>.<\/p><\/blockquote>\n<p>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/486842\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 2010 \u0433\u043e\u0434\u0443 \u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Wargaming \u0431\u044b\u043b\u043e 50 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c: \u0431\u044d\u043a\u0435\u043d\u0434, \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434 \u0438 \u0444\u0430\u0439\u0440\u0432\u043e\u043b. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0440\u043e\u0441\u043b\u043e, \u043c\u043e\u0434\u0435\u043b\u044c \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u043b\u0430\u0441\u044c: \u0441\u0442\u0435\u0439\u0434\u0436\u0438\u043d\u0433\u0438, \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 VLAN \u0441 ACL, \u043f\u043e\u0442\u043e\u043c VPN \u0441 VRF, VLAN c ACL \u043d\u0430 L2, VRF \u0441 ACL \u043d\u0430 L3. \u0417\u0430\u043a\u0440\u0443\u0436\u0438\u043b\u0430\u0441\u044c \u0433\u043e\u043b\u043e\u0432\u0430? \u0414\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0435\u043b\u0435\u0435. \u041a\u043e\u0433\u0434\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0441\u0442\u0430\u043b\u043e 16 000 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0435\u0437 \u0441\u043b\u0435\u0437 \u0441 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":41052,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-41051","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 2010 \u0433\u043e\u0434\u0443 \u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Wargaming \u0431\u044b\u043b\u043e 50 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c: \u0431\u044d\u043a\u0435\u043d\u0434, \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434 \u0438 \u0444\u0430\u0439\u0440\u0432\u043e\u043b.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sl\/blog\/consul-iptables-3\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Consul + iptables = :3 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 2010 \u0433\u043e\u0434\u0443 \u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Wargaming \u0431\u044b\u043b\u043e 50 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c: \u0431\u044d\u043a\u0435\u043d\u0434, \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434 \u0438 \u0444\u0430\u0439\u0440\u0432\u043e\u043b.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sl\/blog\/consul-iptables-3\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-05T18:28:58+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-05T18:28:58+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Consul + iptables = :3 | ProHoster","description":"Leta 2010 je imela podjetje Wargaming 50 stre\u017enikov in preprosto omre\u017eno zasnovo: zadnji del, sprednji del in po\u017earni zid.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/consul-iptables-3","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Consul + iptables = :3 | ProHoster","og:description":"\u0412 2010 \u0433\u043e\u0434\u0443 \u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Wargaming \u0431\u044b\u043b\u043e 50 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c: \u0431\u044d\u043a\u0435\u043d\u0434, \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434 \u0438 \u0444\u0430\u0439\u0440\u0432\u043e\u043b.","og:url":"https:\/\/prohoster.info\/sl\/blog\/consul-iptables-3","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-05T18:28:58+00:00","article:modified_time":"2020-02-05T18:28:58+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"41051","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:24:42","updated":"2022-10-01 10:00:06","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/41051","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=41051"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/41051\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/41052"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=41051"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=41051"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=41051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}