{"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\/hr\/blog\/consul-iptables-3","title":{"rendered":"Consul + iptables = :3","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Godine 2010. tvrtka <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/wargaming\/\">Wargaming<\/a><\/noindex> imala je 50 poslu\u017eitelja i jednostavan mre\u017eni model: backend, frontend i vatrozid. Broj poslu\u017eitelja rastao je, model se slo\u017eio: stagingovi, izolirani VLAN s ACL, zatim VPN s VRF, VLAN s ACL na L2, VRF s ACL na L3. Zbuni? Bit \u0107e zabavnije.<\/p>\n<p>Kada je broj poslu\u017eitelja dosegao 16.000, bilo je nemogu\u0107e raditi bez suza s tolikim brojem heterogenih segmenata. Stoga su osmislili drugo rje\u0161enje. Uzmeli su Netfilter okvir, dodali mu Consul kao izvor podataka i dobili brzi distribuirani vatrozid. Zamijenili su ACL na usmjeriva\u010dima i koristili ga kao vanjski i unutarnji vatrozid. Za dinami\u010dko upravljanje alatom razvili su sustav BEFW koji se primjenjivao posvuda: od upravljanja pristupom korisnika u proizvodnu mre\u017eu do izoliranja segmenata mre\u017ee jedni od drugih.<\/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 to sve funkcionira i za\u0161to biste se trebali zainteresirati za ovaj sustav, objasnit \u0107e <strong>Ivan Agarov<\/strong> (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/annmuor\/\" class=\"user_link\">annmuor<\/a><\/noindex>) \u2014 voditelj grupe infrastrukturne sigurnosti sektora Odr\u017eavanje u Minsk centru razvoja tvrtke. Ivan je obo\u017eavatelj SELinuxa, voli Perl, pi\u0161e kod. Kao voditelj grupe informacijske sigurnosti, redovito radi s logovima, backupovima i R&amp;D-om kako bi za\u0161titio Wargaming od hakera i osigurao rad svih igra\u010dkih poslu\u017eitelja u tvrtki.<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=\"Pogledajte 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>Povijesne informacije<\/h2>\n<p>\nPrije nego \u0161to objasnim kako smo to radili, ispri\u010dat \u0107u kako smo uop\u0107e do\u0161li do toga i za\u0161to je to bilo potrebno. Za to se vra\u0107amo devet godina unazad: 2010. godina, tek su se pojavili World of Tanks. Tvrtka Wargaming imala je otprilike 50 poslu\u017eitelja.<\/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>Grafikon rasta poslu\u017eitelja tvrtke.<\/em><\/p>\n<p>Imali smo mre\u017eni model. Za to vrijeme bio je optimalan.<\/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>Mre\u017eni model u 2010.<\/em><\/p>\n<p>Na frontendu \u017eive lo\u0161i momci koji nas \u017eele sru\u0161iti, ali tu je vatrozid. Na backendu vatrozid ne postoji, ali tu je 50 poslu\u017eitelja, sve ih poznajemo. Sve funkcionira dobro.<\/p>\n<p>Tijekom 4 godine broj poslu\u017eitelja pove\u0107ao se 100 puta, na 5000. Pojavile su se prve izolirane mre\u017ee \u2014 stagingovi: oni ne mogu u produkciju, a \u010desto su se tamo vrtili sadr\u017eaji koji su mogli biti opasni.<\/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>Mre\u017eni model u 2014.<\/em><\/p>\n<p>I dalje smo koristili iste ure\u0111aje, a sav rad odvijao se na izoliranim VLAN-ovima: ACL-ovi se pi\u0161u za VLAN-ove koji dopu\u0161taju ili zabranjuju odre\u0111enu vezu.<\/p>\n<p>Do 2016. godine broj poslu\u017eitelja dosegao je 8000. Wargaming je preuzimao druge studije, pojavljivale su se dodatne partnerske mre\u017ee. Na\u0161i su, ali ne ba\u0161: za partnere VLAN \u010desto ne radi, treba koristiti VPN s VRF-om, a izolacije su postajale slo\u017eenije. Mje\u0161avina izolacija ACL je rasla.<\/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 2016. godine.<\/em><\/p>\n<p>Do po\u010detka 2018. godine park strojeva porastao je na 16 000. Segmenta je bilo 6, a ostale nismo brojili, uklju\u010duju\u0107i zatvorene, u kojima su se \u010duvali financijski podaci. Pojavili su se mre\u017eni kontejneri (Kubernetes), DevOps, obla\u010dne mre\u017ee povezane putem VPN-a, na primjer, iz IVS-a. Pravila je bilo jako mnogo \u2014 bilo je bolno.<\/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 i metode izolacije 2018. godine.<\/em><\/p>\n<p>Za izolaciju smo koristili: VLAN s ACL-om na L2, VRF s ACL-om na L3, VPN i jo\u0161 mnogo toga. Previ\u0161e.<\/p>\n<h2>Problemi<\/h2>\n<p>\nSvi \u017eive s ACL-om i VLAN-om. \u0160to uop\u0107e nije u redu? Na to pitanje odgovor \u0107e dati Harold, skrivaju\u0107i bol.<\/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 mnogo problema, ali masovnih \u2014 pet.<\/p>\n<ul>\n<li><strong>Geometrijski rast cijene za nova pravila<\/strong>. Svako novo pravilo dodavalo se du\u017ee nego prethodno, jer je prvo trebalo provjeriti nema li ve\u0107 takvog pravila.<\/li>\n<li><strong>Nema vatrozida unutar segmenata<\/strong>. Segmenti su jedni od drugih nekako odvojeni, unutar ve\u0107 nedostaje resursa.<\/li>\n<li><strong>Pravila su se dugo primjenjivala. <\/strong>Rukama jedno lokalno pravilo operateri su mogli napisati za sat. Globalno je trajalo nekoliko dana.<\/li>\n<li><strong>Pote\u0161ko\u0107e s revizijom pravila<\/strong>. To\u010dnije, bila je nemogu\u0107a. Prva pravila pisana su jo\u0161 2010. godine, a veliki dio njihovih autora ve\u0107 nije radio u tvrtki.<\/li>\n<li><strong>Niska razina kontrole infrastrukture<\/strong>. To je glavni problem \u2014 slabo smo znali \u0161to se s nama uop\u0107e doga\u0111a.<\/li>\n<\/ul>\n<p>\nOvako je izgledao mre\u017eni in\u017eenjer 2018. godine kada je \u010duo: \u201eTreba jo\u0161 malo ACL-a\u201d.<\/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>Rje\u0161enja<\/h2>\n<p>\nPo\u010detkom 2018. godine odlu\u010deno je ne\u0161to u\u010diniti po tom pitanju.<\/p>\n<p><strong>Cijena integracija neprekidno raste. <\/strong>Polazna to\u010dka bila je to \u0161to su veliki podatkovni centri prestali podr\u017eavati izolirane VLAN-ove i ACL-e, jer je ponestalo memorije na ure\u0111ajima.<\/p>\n<p>Rje\u0161enje: uklonili smo ljudski faktor i maksimalno automatizirali davanje pristupa.<\/p>\n<p><strong>Nova pravila primjenjuju se dugo. <\/strong>Rje\u0161enje: ubrzati primjenu pravila, u\u010diniti je distribuiranom i paralelnom. Za to je potreban distribuirani sustav, kako bi se pravila sama isporu\u010divala, bez rsync-a ili SFTP-a na tisu\u0107u sustava.<\/p>\n<p><strong>Nedostatak vatrozida unutar segmenata. <\/strong>Vatrozid unutar segmenata po\u010deo je stizati do nas kada su se unutar jedne mre\u017ee pojavljivali razli\u010diti servisi. Rje\u0161enje: koristiti vatrozid na razini hosta \u2014 host-based firewalls. Gotovo svugdje imamo Linux, a svugdje postoje iptables, to nije problem.<\/p>\n<p><strong>Problemi s auditom pravila.<\/strong> Rje\u0161enje: pohraniti sva pravila na jednome mjestu radi pregleda i upravljanja, tako \u0107emo mo\u0107i sve auditirati.<\/p>\n<p><strong>Nizak nivo kontrole nad infrastrukturom. <\/strong>Rje\u0161enje: provesti inventarizaciju svih servisa i pristupa me\u0111u njima.<\/p>\n<p>To je vi\u0161e administrativni proces nego tehni\u010dki. Ponekad imamo 200-300 novih izdanja tjedno, posebno tijekom akcija i praznika. A to je samo za jedan tim na\u0161ih DevOps-a. Sa tolikim brojem izdanja nije mogu\u0107e vidjeti i razumjeti koji su potrebni portovi, IP-ovi, integracije. Stoga su nam trebali posebno obu\u010deni menad\u017eeri servisa koji su ispitivali timove: \"\u0160to uop\u0107e imate i za\u0161to ste to pokrenuli?\"<\/p>\n<p>Nakon svega \u0161to smo pokrenuli, mre\u017eni in\u017eenjer u 2019. godini izgledao je ve\u0107 ovako.<\/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>\nOdlu\u010dili smo da sve \u0161to smo prona\u0161li uz pomo\u0107 menad\u017eera servisa stavimo u Consul i odatle \u0107emo pisati pravila iptables.<\/p>\n<p>Kako smo odlu\u010dili to raditi?<\/p>\n<ul>\n<li>Sakupljamo sve servise, mre\u017ee i korisnike.<\/li>\n<li>Na temelju njih \u0107emo napraviti pravila iptables.<\/li>\n<li>Automatizirat \u0107emo kontrolu.<\/li>\n<li>\u2026.<\/li>\n<li>PROFIT.<\/li>\n<\/ul>\n<p>\nConsul nije udaljeni API, mo\u017ee raditi na svakom \u010dvoru i pisati u iptables. Ostaje samo osmisliti automatska sredstva kontrole koja \u0107e ukloniti suvi\u0161no i velika ve\u0107ina problema \u0107e biti rije\u0161ena! Ostatak \u0107emo doraditi u procesu.<\/p>\n<h3>Za\u0161to Consul?<\/h3>\n<p>\n<strong>Dobar se pokazao. <\/strong>2014-15. godine koristili smo ga kao backend za Vault, u kojem pohranjujemo lozinke.<\/p>\n<p><strong>Ne gubi podatke.<\/strong>. Tijekom kori\u0161tenja Consul nije gubio podatke ni tijekom jedne nesre\u0107e. To je ogroman plus za sustav upravljanja vatrozidom.<\/p>\n<p><strong>P2P veze ubrzavaju \u0161irenje promjena.<\/strong>. Sa P2P sve promjene dolaze brzo, nije potrebno \u010dekati satima.<\/p>\n<p><strong>Pogodan REST API.<\/strong> Razmatrali smo tako\u0111er Apache ZooKeeper, ali on nema REST API, morat \u0107emo koristiti improvizacije.<\/p>\n<p><strong>Radi i kao spremi\u0161te klju\u010deva (KV) i kao katalog (Service Discovery)<\/strong>. Mo\u017eemo pohranjivati istovremeno servise, kataloge, data centre. To je zgodno ne samo za nas, nego i za susjedne timove, jer grade\u0107i globalni servis, razmi\u0161ljamo o skalabilnosti.<\/p>\n<p><strong>Napisano na Go, koji je dio Wargamingovog stoga. <\/strong>Volimo ovaj jezik, imamo puno Go programera.<\/p>\n<p><strong>Mo\u0107an ACL sustav. <\/strong>U Consulu mo\u017eete upravljati tko i \u0161to mo\u017ee pisati pomo\u0107u ACL-a. Jam\u010dimo da pravila vatrozida ne\u0107e imati nikakvih preklapanja i da ne\u0107emo imati problema s tim.<\/p>\n<p>No, Consul ima i nedostatke.<\/p>\n<ul>\n<li><strong>Ne skalira se unutar podatkovnog centra, osim ako nemate poslovnu verziju. <\/strong>Skalira se samo putem federacije.<\/li>\n<li><strong>Vrlo ovisi o kvaliteti mre\u017ee i optere\u0107enju poslu\u017eitelja. <\/strong>Consul ne\u0107e raditi ispravno kao poslu\u017eitelj na optere\u0107enom poslu\u017eitelju ako mre\u017ea ima problema, kao \u0161to su nepravilne brzine. To je povezano s P2P vezama i modelima distribucije a\u017euriranja.<\/li>\n<li><strong>Te\u0161ko\u0107e s pra\u0107enjem dostupnosti<\/strong>. U statusu Consul mo\u017ee pisati da je sve u redu, a on je ve\u0107 odavno pao.<\/li>\n<\/ul>\n<p>\nVe\u0107inu tih problema rije\u0161ili smo tijekom eksploatacije Consula, zbog \u010dega je i odabran. Firma ima planove za alternativni backend, ali nau\u010dili smo se boriti s problemima i trenutno \u017eivimo s Consulom.<\/p>\n<h3>Kako radi Consul<\/h3>\n<p>\nU hipotetski podatkovni centar postavljamo poslu\u017eitelje \u2014 od tri do pet. Jedan ili dva poslu\u017eitelja ne bi bila dovoljna: ne bi mogli organizirati kvorum i odlu\u010diti tko je u pravu, a tko nije, kada se podaci ne poklapaju. Vi\u0161e od pet nema smisla, 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 \/>\nKlijenti se povezuju s poslu\u017eiteljima u bilo kojem redoslijedu: isti agenti, samo s 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 \/>\nNakon toga klijenti dobijaju popis P2P veza i stvaraju veze me\u0111usobno.<\/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 globalnoj razini povezujemo nekoliko podatkovnih centara. Tako\u0111er se 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 preuzeti podatke iz drugog podatkovnog centra, zahtjev ide od poslu\u017eitelja do poslu\u017eitelja. Ova shema se naziva <strong>Serf protokolom<\/strong>. Serf protokol, kao i Consul, je razvoj HashiCorpa.<\/p>\n<h3>Nekoliko va\u017enih \u010dinjenica o Consulu<\/h3>\n<p>\nConsul ima dokumentaciju koja opisuje njegov rad. Navest \u0107u samo odabrane \u010dinjenice koje vrijedi znati.<\/p>\n<p><strong>Consul poslu\u017eitelji biraju vo\u0111u me\u0111u glasa\u010dima<\/strong>. Consul bira vo\u0111u iz popisa poslu\u017eitelja za svaki podatkovni centar, a svi zahtjevi idu samo k njemu, bez obzira na broj poslu\u017eitelja. Zastoj vo\u0111e ne dovodi do ponovnog izbora. Ako vo\u0111a nije izabran \u2014 zahtjevi se ne obra\u0111uju.<\/p>\n<blockquote><p>\u017deljeli ste horizontalno skaliranje? \u017dao mi je, ne.<\/p><\/blockquote>\n<p> Zahtev za drugi data centar ide od majstora do majstora, bez obzira na to na koji server je do\u0161ao. Odabrani majstor prima 100% optere\u0107enja, osim optere\u0107enja za prosle\u0111ivanje zahteva. Aktuelna kopija podataka postoji na svim serverima data centra, ali odgovara samo jedan.<\/p>\n<blockquote><p>Jedini na\u010din da se skalira je uklju\u010divanje stale moda na klijentu.<\/p><\/blockquote>\n<p>U stale modu mo\u017ee se odgovarati bez kvoruma. To je re\u017eim u kojem odustajemo od konzistentnosti podataka, ali se \u010dita malo br\u017ee nego obi\u010dno, a odgovara bilo koji server. Naravno, zapis se vr\u0161i samo preko majstora.<\/p>\n<p><strong>Consul ne kopira podatke izme\u0111u data centara<\/strong>. Tokom prikupljanja federacije, svaki server \u0107e imati samo svoje podatke. Za druge se uvek obra\u0107a drugom.<\/p>\n<p><strong>Atomarnost operacija nije zagarantovana van transakcije<\/strong>. Zapamtite, da promeniti ne\u0161to mo\u017eete ne samo vi. Ako \u017eelite druga\u010dije, izvr\u0161ite transakciju sa zaklju\u010davanjem.<\/p>\n<p><strong>Zaklju\u010davaju\u0107e operacije ne garantuju zaklju\u010davanje<\/strong>. Zahtev ide od majstora do majstora, a ne direktno, pa nema garancija da \u0107e zaklju\u010davanje raditi kada izvr\u0161avate zaklju\u010davanje, na primer, u drugom data centru.<\/p>\n<p><strong>ACL tako\u0111e ne garantuje pristup (u mnogim slu\u010dajevima)<\/strong>. ACL mo\u017ee da ne proradi, jer se \u010duva u jednom data centru federacije \u2014 u ACL data centru (Primarni DC). Ako Data Centar ne odgovori, ACL ne\u0107e raditi.<\/p>\n<p><strong>Jedan zamrznuti majstor mo\u017ee uzrokovati zamrzavanje cele federacije<\/strong>. Na primer, u federaciji sa 10 data centara, a u jednom lo\u0161a mre\u017ea, i jedan majstor pada. Svi koji komuniciraju s njim \u0107e se u krug zamrznuti: ide zahtev, na njega nema odgovora, thread se zamrzava. Ne\u0107ete mo\u0107i znati kada \u0107e se to desiti, jednostavno \u0107e, za sat ili dva, cela federacija pasti. Ni\u0161ta ne mo\u017eete u\u010diniti povodom toga.<\/p>\n<p>Status, kvorum i izbori obra\u0111uju se posebnim tokom. Ponovni izbori se ne\u0107e dogoditi, status ni\u0161ta ne\u0107e pokazati. Mislite da imate \u017eivog Consula, tra\u017eite, i ni\u0161ta se ne de\u0161ava \u2014 nema odgovora. U tom trenutku status pokazuje da je sve u redu.<\/p>\n<p>Susretali smo se s tim problemom, morali smo rekonstrisati odre\u0111ene delove data centara kako bismo ga izbegli.<\/p>\n<p><strong>U poslovnoj verziji Consul Enterprise nema nekih nedostataka iznad<\/strong>. Ima mnogo korisnih funkcija: izbor glasova, raspodjela, skaliranje. Postoji samo jedan \u201eali\u201c \u2014 sustav licenciranja za distribuirani sustav je vrlo skup.<\/p>\n<p>Life hack: <code>rm -rf \/var\/lib\/consul<\/code> \u2014 lijek za sve bolesti agenta. Ako vam ne\u0161to ne radi, jednostavno obri\u0161ite svoje podatke i u\u010ditajte podatke iz kopije. Najvjerojatnije \u0107e Consul po\u010deti raditi.<\/p>\n<h2>BEFW<\/h2>\n<p>\nSada \u0107emo razgovarati o tome \u0161to smo dodali u Consul.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wgnet\/befw\">BEFW<\/a><\/noindex> \u2014 to je akronim od <strong>B<\/strong>ack<strong>E<\/strong>nd<strong>F<\/strong>ire<strong>W<\/strong>all. Moralo se nekako nazvati proizvod, kada sam stvarao repozitorij, da se tu stave prvih testnih commit-ova. To ime je ostalo.<\/p>\n<h3>Predlo\u0161ci pravila<\/h3>\n<p>\nPravila su napisana u sintaksi iptables.<\/p>\n<ul>\n<li>-N BEFW<\/li>\n<li>-P INPUT DROP<\/li>\n<li>-A INPUT -m state-state 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>\nSve ide u lanac BEFW, osim <code>ESTABLISHED<\/code>, <code>RELATED<\/code> i localhost. Predlo\u017eak mo\u017ee biti bilo \u0161to, ovo je samo primjer.<\/p>\n<p>Koliko je BEFW koristan?<\/p>\n<h3>Usluge<\/h3>\n<p>\nImamo servis, u njemu uvijek postoji port, \u010dvor na kojem radi. Iz svog \u010dvora mo\u017eemo lokalno pitati agenta i saznati da imamo neki servis. Tako\u0111er mo\u017eemo postaviti oznake.<\/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 \/>\nSvaki servis koji je pokrenut i registriran u Consulu postaje pravilo iptables. Imamo SSH \u2014 otvaramo port 22. Bash skripta je jednostavna: curl i iptables, vi\u0161e nije potrebno.<\/p>\n<h3>Klijenti<\/h3>\n<p>\nKako otvoriti pristup ne svima, ve\u0107 selektivno? Po imenu servisa skladi\u0161titi IP-liste u KV skladi\u0161tu.<\/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 primjer, \u017eelimo da svi iz desete mre\u017ee mogu pristupiti servisu SSH_TCP_22. Dodajemo jedno malo polje TTL? i sada imamo privremena odobrenja, na primjer, na jedan dan.<\/p>\n<h3>Pristupi<\/h3>\n<p>\nPovezujemo servise i klijente: imamo servis, za svaki je spremno KV skladi\u0161te. Sada ne dajemo pristup svima, ve\u0107 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>Grupe<\/h3>\n<p>\nAko svaki put pi\u0161emo tisu\u0107e IP-ova za pristupe, umorit \u0107emo se. Smislit \u0107emo grupacije \u2014 poseban podskup u KV. Nazvat \u0107emo ga Alias (ili grupe) i pohraniti \u0107emo tamo grupe prema istom 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: sada mo\u017eemo otvoriti SSH ne konkretno na P2P, ve\u0107 na cijelu grupu ili nekoliko grupa. Tako\u0111er imamo TTL \u2014 mo\u017eemo dodavati i uklanjati iz grupe privremeno.<\/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\u0161 problem je ljudski faktor i automatizacija. Trenutno smo ga rije\u0161ili na ovaj na\u010din.<\/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 \/>\nRadimo s Puppetom i tamo prenosimo sve \u0161to se odnosi na sustav (kod aplikacija). U puppetdb (obi\u010dan PostgreSQL) pohranjuje se popis usluga koje su pokrenute, a mogu se prona\u0107i prema vrsti resursa. Tamo se tako\u0111er mo\u017ee vidjeti tko se s kim povezuje. Tako\u0111er imamo sustav za povla\u010denje zahtjeva i zahtjeva za spajanje.<\/p>\n<p>Napisali smo befw-sync \u2014 najjednostavnije rje\u0161enje koje poma\u017ee pri prijenosu podataka. Prvo sync cookies se obra\u0107aju puppetdb-u. Tamo je postavljen HTTP API: tra\u017eimo koje usluge imamo, \u0161to treba u\u010diniti. Zatim se \u0161alje zahtjev u Consul.<\/p>\n<p>Postoji li integracija? Da: napisali smo pravila, odobrili prihva\u0107anje Pull Requesta. Treba li neki port ili dodati host u neku grupu? Pull Request, pregled \u2014 vi\u0161e nikakvih \"Prona\u0111i 200 drugih ACL i poku\u0161aj ne\u0161to s tim u\u010diniti\".<\/p>\n<h3>Optimizacija<\/h3>\n<p>\nPing localhost s praznim nizom pravila traje 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 \/>\nDodajmo u ovaj niz 10 000 adresa iptables. Kao rezultat, ping \u0107e se pove\u0107ati 5 puta: iptables je potpuno linearno, obrada svake adrese traje odre\u0111eno vrijeme.<\/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 vatrozid u koji migriramo tisu\u0107e ACL-a, imamo mnogo pravila, a to unosi ka\u0161njenje. To je lo\u0161e za igra\u010dke protokole.<\/p>\n<p>Ali ako stavimo <strong>10 000 adresa u ipset<\/strong> ping \u0107e se \u010dak smanjiti.<\/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 \/>\nBit je u tome da je 'O' (slo\u017eenost algoritma) za ipset uvijek jednako 1, bez obzira na to koliko pravila ima. Istina je da postoji ograni\u010denje \u2014 pravila ne smiju biti vi\u0161e od 65535. Dok s tim \u017eivimo: mogu se kombinirati, pro\u0161iriti, napraviti dva ipseta u jednom.<\/p>\n<h3>Pohrana<\/h3>\n<p>\nLogi\u010dan nastavak procesa iteracija je pohranjivanje informacija o klijentima za uslugu u 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 \/>\nSada imamo isti SSH, i ne zapisujemo odmah 100 IP adresa, ve\u0107 postavljamo ime ipseta s kojim trebamo komunicirati i sljede\u0107e pravilo <code>PADAJ<\/code>. Mo\u017ee se preoblikovati u jedno pravilo \u201eTko nije ovdje, taj DROP\u201d, ali tako je preglednije.<\/p>\n<p>Sada imamo pravila i skupove. Glavni cilj je napraviti skup prije nego \u0161to napi\u0161emo pravilo, jer ina\u010de iptables ne\u0107e zapisati pravilo.<\/p>\n<h3>Op\u0107a shema<\/h3>\n<p>\nU obliku sheme, sve \u0161to sam rekao izgleda ovako.<\/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 u Puppet, sve se \u0161alje na host, usluge su ovdje, ipset tamo, a tko tamo nije upisan, ne mo\u017ee u\u0107i.<\/p>\n<h3>Dopusti &amp; negiraj<\/h3>\n<p>\nDa bismo brzo spa\u0161avali svijet ili brzo nekoga isklju\u010dili, na po\u010detku svih lanaca napravili smo dva ipseta: <code>rules_allow<\/code> i <code>rules_deny<\/code>. Kako to radi?<\/p>\n<p>Na primjer, netko stvara optere\u0107enje na na\u0161em Webu putem botova. Nekada je bilo potrebno prona\u0107i njegov IP u logovima, odnijeti ga mre\u017enim in\u017eenjerima kako bi prona\u0161li izvor prometa i blokirali ga. Sada to izgleda druga\u010dije.<\/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 \/>\n\u0160aljemo u Consul, \u010dekamo 2,5 s, i gotovo. Budu\u0107i da Consul brzo raspore\u0111uje zahvaljuju\u0107i P2P-u, funkcionira posvuda, u bilo kojem dijelu svijeta.<\/p>\n<p>Jednom sam potpuno zaustavio WOT, pogrije\u0161iv\u0161i s vatrozidom. <code>rules_allow<\/code> \u2014 to je na\u0161e osiguranje od takvih situacija. Ako negdje pogrije\u0161imo s vatrozidom, ne\u0161to se blokira, uvijek mo\u017eemo poslati uvjetni <code>0.0\/0<\/code>, kako bismo brzo sve podigli. Kasnije \u0107emo sve popraviti ru\u010dno.<\/p>\n<h3>Drugi setovi<\/h3>\n<p>\nMogu se dodavati bilo koji drugi setovi u 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 \/>\nZa\u0161to? Ponekad su nekome potrebni ipset, na primjer, kako bi simulirali isklju\u010denje nekog dijela klastera. Svatko mo\u017ee donijeti bilo koje setove, nazvati ih i oni \u0107e se povu\u0107i iz Consula. Pri tome setovi mogu sudjelovati u pravilima iptables, ili biti poput <code>NOOP<\/code>: konzistencija \u0107e biti odr\u017eavana demonima.<\/p>\n<h3>Korisnici<\/h3>\n<p>\nNekada je bilo tako: korisnik se spojio na mre\u017eu i preko domene dobio parametre. Prije pojave sljede\u0107e generacije vatrozida, Cisco nije mogla razumjeti gdje je korisnik, a gdje IP. Zato je pristup bio odobren samo putem hostname-a ra\u010dunala.<\/p>\n<p>\u0160to smo mi u\u010dinili? Uklju\u010dili smo se u trenutku dobivanja adrese. Obi\u010dno je to dot1x, Wi-Fi ili VPN \u2014 sve ide preko RADIUS-a. Za svakog korisnika kreiramo grupu po imenu korisnika i stavljamo u nju IP s TTL-om koji jednako odgovara njegovom dhcp.lease \u2014 \u010dim istekne, pravilo nestaje.<\/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 \/>\nSada mo\u017eemo otvarati pristup uslugama, kao i u druge grupe, po korisni\u010dkom imenu. Oslobodili smo se boli s hostname-ima, kada se oni mijenjaju, i skinuli optere\u0107enje s mre\u017enih in\u017eenjera, jer im vi\u0161e nije potrebna Cisco. Sada in\u017eenjeri sami postavljaju pristupe na svojim serverima.<\/p>\n<h3>Izolacija<\/h3>\n<p>\nParalelno smo po\u010deli razmatrati izolaciju. Menad\u017eeri usluga su napravili inventar, a mi smo analizirali sve na\u0161e mre\u017ee. Razdvojit \u0107emo ih na iste grupe, a na potrebnim serverima grupe smo dodali, na primjer, u deny. Sada ista izolacija pozornice ulazi u rules_deny u produkciji, ali ne u samu produkciju.<\/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 \/>\nShema radi brzo i jednostavno: skinemo sve ACL-ove s servera, rastere\u0107ujemo hardver, smanjujemo broj izoliranih VLAN-ova.<\/p>\n<h3>Kontrola cjelovitosti<\/h3>\n<p>\nRanije smo imali poseban okida\u010d koji je prijavljivao kada netko ru\u010dno mijenja pravilo vatrozida. Pismao sam ogroman linter za provjeru pravila vatrozida, bilo je to slo\u017eeno. Sada cjelovitost nadzire BEFW. Revnosno prati da pravila koja postavljaju ne budu mijenjana. Ako netko promijeni pravila vatrozida, sve \u0107e se vratiti. 'Brzo sam pokrenuo proxy da radim od ku\u0107e' \u2014 takve opcije vi\u0161e nema.<\/p>\n<p>BEFW nadgleda ipset iz usluga i popisa u befw.conf, pravila usluga u lancu BEFW. Me\u0111utim, ne prati ostale lance i pravila i druge ipsete.<\/p>\n<h3>Za\u0161tita od kvarova<\/h3>\n<p>\nBEFW uvijek pohranjuje posljednje uspje\u0161no stanje direktno u binarnoj strukturi state.bin. Ako ne\u0161to po\u0111e po zlu, uvijek se vra\u0107a na ovaj 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 osiguranje od nestabilnog rada Consula kada nije poslao podatke ili ako je netko pogrije\u0161io i koristio pravila koja se ne mogu primijeniti. Da ne ostanemo bez vatrozida, BEFW \u0107e se vratiti na posljednje stanje ako na nekom koraku do\u0111e do gre\u0161ke.<\/p>\n<p>U kriti\u010dnim situacijama, to je garancija da \u0107emo ostati s funkcionalnim vatrozidom. Otvaramo sve sivo mre\u017ee u nadi da \u0107e administrator do\u0107i i popraviti. Nekad \u0107u to prebaciti u konfiguracije, ali trenutno imamo samo tri sive mre\u017ee: 10\/8, 172\/12 i 192.168\/16. U okviru na\u0161eg Consula, to je va\u017ena zna\u010dajka koja poma\u017ee u daljnjem razvoju.<\/p>\n<p><em>Demo: tijekom prezentacije Ivan demonstrira demo na\u010din rada BEFW-a. Najbolje je gledati demonstraciju na <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/4zP67uYnsR4?t=1663\">video<\/a><\/noindex>. Izvorni kod dema dostupan je <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wgnet\/befw\/tree\/master\/demo\">na GitHubu<\/a><\/noindex>.<\/em><\/p>\n<h2>Skriveni problemi<\/h2>\n<p>\nRe\u0107i \u0107u o gre\u0161kama s kojima smo se susreli.<\/p>\n<p><strong>ipset add set 0.0.0.0\/0. <\/strong>\u0160to se doga\u0111a ako dodate u ipset 0.0.0.0\/0? Ho\u0107e li se dodati sve IP adrese? Ho\u0107e li se otvoriti pristup internetu? <\/p>\n<p>Ne, dobit \u0107emo gre\u0161ku koja nas je ko\u0161tala dva sata zastoja. Osim toga, gre\u0161ka ne radi od 2016. godine, le\u017ei u RedHat Bugzilla pod brojem #1297092, a otkrili smo je slu\u010dajno \u2014 iz izvje\u0161taja programera.<\/p>\n<p>Sada u BEFW-u postoji strogo pravilo da <code>0.0.0.0\/0<\/code> pretvara u dvije adrese: <code>0.0.0.0\/1<\/code> i <code>128.0.0.0\/1<\/code>.<\/p>\n<p><strong>ipset restore set &lt; file. <\/strong>\u0160to radi ipset kada mu ka\u017eete <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\u0161ta sli\u010dno \u2014 radi merge, a stare adrese ne nestaju, pristup ne zatvarate.<\/p>\n<p>Gre\u0161ku smo prona\u0161li kada smo testirali izolaciju. Sada postoji prili\u010dno slo\u017een sustav \u2014 umjesto <code>restore<\/code> provodi se <code>create temp<\/code>, zatim <code>restore flush temp<\/code> i <code>restore temp<\/code>. Na kraju swap: za atomarnost, jer ako prvo provodite <code>flush<\/code> i u tom trenutku kada do\u0111e neki paket, on \u0107e biti odbijen i ne\u0161to \u0107e po\u0107i po krivu. Zato tu ima malo crne magije.<\/p>\n<p><strong>consul kv get -datacenter=other. <\/strong>Kao \u0161to sam ve\u0107 spomenuo, mislimo da tra\u017eimo neke podatke, ali \u0107emo dobiti ili podatke ili gre\u0161ku. To mo\u017eemo raditi putem Consula lokalno, ali ni u tom slu\u010daju ni to ne radi.<\/p>\n<p>Lokalni Consul klijent je omota\u010d oko HTTP API-ja. No, on jednostavno visne i ne odgovara ni na Ctrl+C, ni na Ctrl+Z, ni na \u0161to, samo na <code>kill -9<\/code> u susjednoj konzoli. S tim smo se susreli kada smo gradili veliki klaster. No, trenutno nemamo rje\u0161enja, pripremamo se za ispravak te gre\u0161ke u Consulu.<\/p>\n<p><strong>Consul lider ne odgovara. <\/strong>Na\u0161 master u data centru ne odgovara, mislimo: \"Vjerojatno \u0107e sada djelovati algoritam ponovnog izbora?\" <\/p>\n<p>Ne, ne\u0107e djelovati, i pra\u0107enje ni\u0161ta ne\u0107e pokazati: Consul \u0107e re\u0107i da postoji commitment index, lider je prona\u0111en, sve je u redu.<\/p>\n<p>Kako se s tim borimo? <code>service consul restart<\/code> u cron svaka sat. Ako imate 50 poslu\u017eitelja - nije stra\u0161no. Kada ih bude 16 000, shvatit \u0107ete kako to funkcionira.<\/p>\n<h2>Zaklju\u010dak<\/h2>\n<p>\nNa kraju smo dobili sljede\u0107e prednosti:<\/p>\n<ul>\n<li>100% pokrivenost svih Linux strojeva.<\/li>\n<li>Brzina.<\/li>\n<li>Automatizaciju.<\/li>\n<li>Osvojili smo opremu i mre\u017ene in\u017eenjere od ropstva.<\/li>\n<li>Pojavile su se mogu\u0107nosti za integraciju koje su gotovo beskrajne: bilo s Kubernetes, bilo s Ansible, bilo s Python.<\/li>\n<\/ul>\n<p>\n<strong>Nedostaci<\/strong>: Consul s kojim sada moramo \u017eivjeti, i vrlo visoka cijena gre\u0161ke. Kao primjer, jednom sam u 6 nave\u010der (prvoklasno vrijeme u Rusiji) ne\u0161to mijenjao u popisima mre\u017ea. Tada smo gradili izolaciju na BEFW. Negdje sam pogrije\u0161io, mislim da sam odabrao pogre\u0161nu masku, ali sve se sru\u0161ilo u dvije sekunde. Monitoring se pali, dolazi de\u017eurni podr\u0161ke: \"Sve nam le\u017ei!\" \u0160ef odjela je posijedio dok je obja\u0161njavao biznisu za\u0161to se to dogodilo.<\/p>\n<p>Cijena gre\u0161ke je tako visoka da smo osmislili vlastitu slo\u017eenu proceduru prevencije. Ako \u0107ete to primjenjivati u velikoj produkciji, nemojte davati master-token nad Consul svima bez reda. To \u0107e lo\u0161e zavr\u0161iti.<\/p>\n<p><strong>Tro\u0161kovi. <\/strong>Kodirao sam 400 sati sam. Moja ekipa od 4 osobe tro\u0161i 10 sati mjese\u010dno na podr\u0161ku za sve. U usporedbi s cijenom bilo kojeg novog generacijskog vatrozida, to je besplatno.<\/p>\n<p><strong>Planovi. <\/strong>Dugoro\u010dni plan je pronala\u017eenje alternativnog transporta umjesto ili dodatno uz Consul. Mogu\u0107e je da \u0107e to biti Kafka ili ne\u0161to sli\u010dno. No, u narednim godinama \u017eivjet \u0107emo na Consulu.<\/p>\n<p>Nadolaze\u0107i planovi: integracija sa Fail2ban, monitoringu, s nftables, eventualno s drugim distribucijama, metrike, napredno pra\u0107enje, optimizacija. Podr\u0161ka za Kubernetes tako\u0111er je negdje u planovima, jer trenutno imamo nekoliko klastera i \u017eelju.<\/p>\n<p>Jo\u0161 od planova:<\/p>\n<ul>\n<li>obilazak anomalija u prometu;<\/li>\n<li>upravljanje mre\u017enom kartom;<\/li>\n<li>podr\u0161ka za Kubernetes;<\/li>\n<li>izrada paketa za sve sustave;<\/li>\n<li>Web-UI.<\/li>\n<\/ul>\n<p>\nNeprestano radimo na pro\u0161irenju konfiguracije, pove\u0107anju metrika i optimizaciji.<\/p>\n<p><i>Pridru\u017eite se projektu. Projekt je ispao sjajan, ali, na\u017ealost, to je jo\u0161 uvijek projekt jednog \u010dovjeka. Do\u0111ite na <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wgnet\/befw\">GitHub <\/a><\/noindex>i poku\u0161ajte ne\u0161to u\u010diniti: komitirati, testirati, ne\u0161to predlo\u017eiti, dati svoju procjenu.<\/i><\/p>\n<blockquote><p>U me\u0111uvremenu se pripremamo za <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/spb\/2020\">Saint HighLoad++<\/a><\/noindex>, koji \u0107e se odr\u017eati 6. i 7. travnja u Sankt Peterburgu, i pozivamo programere visokoprasnih sustava <noindex><a rel=\"nofollow\" href=\"https:\/\/conf.ontico.ru\/lectures\/propose?conference=hl2020-spb\">da se prijave za izlaganje<\/a><\/noindex>. Iskusni govornici ve\u0107 znaju \u0161to raditi, a novajlicima u izlaganjima preporu\u010damo barem <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/spb\/2020\/speakers\">isprobati<\/a><\/noindex>. Sudjelovanje na konferenciji kao govornik ima nekoliko prednosti. O \u010demu se radi, mo\u017eete pro\u010ditati, na primjer, na kraju <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\/hr\/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=\"hr_HR\" \/>\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\/hr\/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":"Godine 2010. tvrtka Wargaming imala je 50 poslu\u017eitelja i jednostavan mre\u017eni model: backend, frontend i vatrozid.","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/consul-iptables-3","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/41051","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=41051"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/41051\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/41052"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=41051"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=41051"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=41051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}