{"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\/it\/blog\/consul-iptables-3","title":{"rendered":"Consul + iptables = :3","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Nel 2010, l'azienda <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/wargaming\/\">Wargaming<\/a><\/noindex> aveva 50 server e un semplice modello di rete: backend, frontend e firewall. Il numero di server \u00e8 aumentato, il modello si \u00e8 fatto pi\u00f9 complesso: stage, VLAN isolate con ACL, poi VPN con VRF, VLAN con ACL su L2, VRF con ACL su L3. Ti sei gi\u00e0 confuso? Proseguiamo, sar\u00e0 ancora pi\u00f9 interessante.<\/p>\n<p>Quando il numero di server \u00e8 salito a 16.000, lavorare senza problemi con cos\u00ec tanti segmenti diversi \u00e8 diventato impossibile. Cos\u00ec hanno pensato a una soluzione alternativa. Hanno preso il stack Netfilter e gli hanno aggiunto Consul come sorgente di dati, creando un firewall distribuito veloce. Hanno sostituito le ACL sui router e lo hanno utilizzato come firewall esterno e interno. Per gestire dinamicamente lo strumento, hanno sviluppato un sistema chiamato BEFW, utilizzato ovunque: dalla gestione degli accessi degli utenti alla rete di produzione fino all'isolamento dei segmenti di rete tra di loro.<\/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 \/>\nCome funziona tutto questo e perch\u00e9 dovresti considerare seriamente questo sistema verr\u00e0 spiegato da <strong>Ivan Agarov<\/strong> (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/annmuor\/\" class=\"user_link\">annmuor<\/a><\/noindex>) \u2014 responsabile del gruppo di infrastruttura di sicurezza della divisione Maintenance presso il centro di sviluppo di Minsk dell'azienda. Ivan \u00e8 un appassionato di SELinux, ama Perl e scrive codice. In qualit\u00e0 di responsabile del gruppo di sicurezza informatica, lavora regolarmente con i log, i backup e la Ricerca e Sviluppo per proteggere Wargaming dagli hacker e garantire il funzionamento di tutti i server di gioco dell'azienda.<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=\"Riproduci 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>Nota storica<\/h2>\n<p>\nPrima di parlare di come lo abbiamo fatto, spiegher\u00f2 come siamo arrivati a questo punto e perch\u00e9 fosse necessario. Torniamo indietro di 9 anni: nel 2010, quando sono stati lanciati i World of Tanks. Wargaming aveva circa 50 server.<\/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>Grafico della crescita dei server dell'azienda.<\/em><\/p>\n<p>Avevamo un modello di rete. All'epoca era ottimale.<\/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>Modello di rete nel 2010.<\/em><\/p>\n<p>Sulla parte frontale ci sono i cattivi che vogliono romperci, ma c'\u00e8 un firewall. Sul retro non c'\u00e8 firewall, ma ci sono 50 server, e li conosciamo tutti. Tutto funziona bene.<\/p>\n<p>In 4 anni, il parco server \u00e8 cresciuto di 100 volte, fino a 5000. Sono emerse le prime reti isolate \u2014 st stage: non possono accedere alla produzione, e l\u00ec giravano spesso things che potevano essere pericolosi.<\/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>Modello di rete nel 2014.<\/em><\/p>\n<p>Per inerzia, abbiamo utilizzato gli stessi hardware, e tutto il lavoro si svolgeva su VLAN isolate: le ACL vengono scritte per le VLAN, che autorizzano o bloccano alcune connessioni.<\/p>\n<p>Nel 2016, il numero di server ha raggiunto quota 8000. Wargaming ha acquisito altri studi, sono emerse reti partner aggiuntive. Sembrano essere nostri, ma non del tutto: per i partner, le VLAN spesso non funzionano, costringendo all'uso di VPN con VRF, e le isolazioni si complicano. La mescolanza di isolamenti ACL \u00e8 aumentata.<\/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>Modello di rete nel 2016.<\/em><\/p>\n<p>All'inizio del 2018, il parco macchine \u00e8 cresciuto fino a 16.000. I segmenti erano 6, mentre gli altri non li consideravamo, inclusi quelli chiusi, in cui erano conservati dati finanziari. Sono emerse reti containeriche (Kubernetes), DevOps, reti cloud collegate tramite VPN, ad esempio, da IWS. Le regole erano moltissime \u2014 era un vero problema.<\/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>Modello di rete e modi di isolamento nel 2018.<\/em><\/p>\n<p>Per l'isolamento utilizzavamo: VLAN con ACL a L2, VRF con ACL a L3, VPN e molto altro. Troppo.<\/p>\n<h2>Problemi<\/h2>\n<p>\nTutti vivono con ACL e VLAN. Qual \u00e8 il problema? Questa domanda sar\u00e0 risposta da Harold, nascondendo il dolore.<\/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 \/>\nCi sono stati molti problemi, ma di massa \u2014 cinque.<\/p>\n<ul>\n<li><strong>Crescita geometrica dei prezzi per le nuove regole.<\/strong>. Ogni nuova regola veniva aggiunta pi\u00f9 lentamente della precedente, perch\u00e9 dovevamo prima controllare che non ci fosse gi\u00e0 una regola simile.<\/li>\n<li><strong>Non c'\u00e8 firewall all'interno dei segmenti<\/strong>. I segmenti si sono separati in qualche modo, ma all'interno gi\u00e0 non ci sono risorse sufficienti.<\/li>\n<li><strong>Le regole venivano applicate lentamente. <\/strong>A mano, un operatore poteva scrivere una regola locale in un'ora. Una regola globale richiedeva diversi giorni.<\/li>\n<li><strong>Difficolt\u00e0 con l'audit delle regole<\/strong>. Pi\u00f9 precisamente, non era possibile. Le prime regole erano state scritte nel 2010 e la maggior parte dei loro autori non lavorava pi\u00f9 in azienda.<\/li>\n<li><strong>Basso livello di controllo sull'infrastruttura<\/strong>. Questo \u00e8 il problema principale: non sapevamo affatto cosa stesse accadendo.<\/li>\n<\/ul>\n<p>\nEcco come appariva un ingegnere di rete nel 2018, quando sentiva: \u00abServono ancora un po' di ACL\u00bb.<\/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>Soluzioni<\/h2>\n<p>\nAll'inizio del 2018 si decise di fare qualcosa al riguardo.<\/p>\n<p><strong>Il costo delle integrazioni cresce continuamente. <\/strong>Il punto di partenza \u00e8 stato che i grandi data center hanno smesso di supportare VLAN isolate e ACL, perch\u00e9 la memoria sui dispositivi si era esaurita.<\/p>\n<p>Soluzione: abbiamo eliminato il fattore umano e automatizzato il massimo possibile la concessione di accesso.<\/p>\n<p><strong>Le nuove regole vengono applicate lentamente. <\/strong>Soluzione: accelerare l'applicazione delle regole, rendendola distribuita e parallela. \u00c8 necessaria una sistemazione distribuita affinch\u00e9 le regole vengano consegnate automaticamente, senza rsync o SFTP su mille sistemi.<\/p>\n<p><strong>Assenza di firewall all'interno dei segmenti. <\/strong>Il firewall interno \u00e8 diventato un problema quando sono emersi diversi servizi all'interno della stessa rete. Soluzione: utilizzare un firewall a livello di host \u2014 firewall basati su host. Ovunque abbiamo Linux, e ovunque ci sono iptables, non \u00e8 un problema.<\/p>\n<p><strong>Difficolt\u00e0 nell'audit delle regole.<\/strong> Soluzione: conservare tutte le regole in un'unica posizione per revisione e gestione, cos\u00ec possiamo effettuare un audit completo.<\/p>\n<p><strong>Basso livello di controllo dell'infrastruttura. <\/strong>Soluzione: effettuare un inventario di tutti i servizi e degli accessi tra di essi.<\/p>\n<p>Si tratta di un processo pi\u00f9 amministrativo che tecnico. A volte abbiamo 200-300 nuove versioni a settimana, specialmente durante le promozioni e le festivit\u00e0. Questo vale solo per un team dei nostri DevOps. Con un numero cos\u00ec elevato di rilasci, \u00e8 impossibile capire quali porte, IP e integrazioni siano necessari. Per questo motivo, abbiamo avuto bisogno di manager di servizio appositamente formati che chiedessero ai team: \u00abCosa avete e perch\u00e9 l'avete implementato?\u00bb<\/p>\n<p>Dopo tutto ci\u00f2 che abbiamo lanciato, nel 2019 l'ingegnere di rete appariva cos\u00ec.<\/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>\nAbbiamo deciso di inserire tutto ci\u00f2 che abbiamo trovato con l'aiuto dei manager di servizio in Consul e di scrivere da l\u00ec le regole per iptables.<\/p>\n<p>Come abbiamo deciso di procedere?<\/p>\n<ul>\n<li>Raccoglieremo tutti i servizi, le reti e gli utenti.<\/li>\n<li>Creeremo regole per iptables basate su di essi.<\/li>\n<li>Automatizzeremo il controllo.<\/li>\n<li>\u2026.<\/li>\n<li>PROFIT.<\/li>\n<\/ul>\n<p>\nConsul non \u00e8 un'API remota, pu\u00f2 funzionare su ogni nodo e scrivere in iptables. Rimane solo da ideare strumenti automatici di controllo che rimuovano il superfluo, e la maggior parte dei problemi sar\u00e0 risolta! Il resto lo perfezioneremo nel processo.<\/p>\n<h3>Perch\u00e9 Consul?<\/h3>\n<p>\n<strong>Si \u00e8 dimostrato molto efficace. <\/strong>Nel 2014-15 lo abbiamo utilizzato come backend per Vault, dove conserviamo le password.<\/p>\n<p><strong>Non perde dati<\/strong>. Durante l'uso, Consul non ha mai perso dati in caso di incidenti. Questo \u00e8 un enorme vantaggio per il sistema di gestione del firewall.<\/p>\n<p><strong>Le connessioni P2P accelerano la diffusione delle modifiche<\/strong>. Con P2P, tutte le modifiche arrivano rapidamente, non \u00e8 necessario aspettare per ore.<\/p>\n<p><strong>Un comodo REST API.<\/strong> Abbiamo considerato anche Apache ZooKeeper, ma non ha REST API, dovremmo utilizzare soluzioni di emergenza.<\/p>\n<p><strong>Funziona sia come archivio chiavi (KV) che come catalogo (Service Discovery)<\/strong>. Pu\u00f2 memorizzare servizi, cataloghi e data center contemporaneamente. Questo \u00e8 utile non solo per noi, ma anche per i team vicini, poich\u00e9 costruendo un servizio globale, pensiamo in grande.<\/p>\n<p><strong>Scritto in Go, che fa parte del stack Wargaming. <\/strong>Ci piace questo linguaggio, abbiamo molti sviluppatori Go.<\/p>\n<p><strong>Un potente sistema di ACL. <\/strong>In Consul, tramite ACL, \u00e8 possibile gestire chi pu\u00f2 scrivere e cosa. Garantiamo che le regole del firewall non si sovrapporranno a nulla e non avremo problemi a riguardo.<\/p>\n<p>Ma Consul ha anche dei difetti.<\/p>\n<ul>\n<li><strong>Non si scala all'interno del data center, se non si possiede la versione business. <\/strong>Si scala solo tramite federazione.<\/li>\n<li><strong>\u00c8 molto dipendente dalla qualit\u00e0 della rete e dal carico dei server. <\/strong>Consul non funzioner\u00e0 correttamente come server su un server sovraccarico se ci sono lag nella rete, ad esempio, una velocit\u00e0 irregolare. Questo \u00e8 legato alle connessioni P2P e ai modelli di distribuzione degli aggiornamenti.<\/li>\n<li><strong>Difficolt\u00e0 nel monitoraggio della disponibilit\u00e0<\/strong>. Nel suo stato, Consul pu\u00f2 indicare che tutto va bene, mentre in realt\u00e0 \u00e8 gi\u00e0 morto.<\/li>\n<\/ul>\n<p>\nLa maggior parte di questi problemi \u00e8 stata risolta durante l'uso di Consul, ed \u00e8 per questo che lo abbiamo scelto. L'azienda ha piani per un backend alternativo, ma abbiamo imparato a gestire i problemi e al momento viviamo con Consul.<\/p>\n<h3>Come funziona Consul<\/h3>\n<p>\nInstallemo server nel data center \u2014 da tre a cinque. Uno o due server non sono sufficienti: non saranno in grado di organizzare un quorum e decidere chi ha ragione e chi ha torto quando i dati non coincidono. Pi\u00f9 di cinque non ha senso, le prestazioni diminuiranno.<\/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 \/>\nI clienti si collegano ai server in qualsiasi ordine: gli stessi agenti, ma con il flag <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 \/>\nDopo di ci\u00f2, i clienti ricevono un elenco di connessioni P2P e stabiliscono relazioni tra di loro.<\/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 \/>\nA livello globale, colleghiamo diversi data center tra loro. Anche questi si connettono P2P e comunicano.<\/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 \/>\nQuando vogliamo prelevare dati da un altro data center, la richiesta va da server a server. Questo schema \u00e8 chiamato <strong>protocollo Serf<\/strong>. Il protocollo Serf, come Consul, \u00e8 sviluppato da HashiCorp.<\/p>\n<h3>Alcuni fatti importanti su Consul<\/h3>\n<p>\nConsul ha una documentazione che descrive il suo funzionamento. Riporter\u00f2 solo alcuni fatti selezionati che vale la pena conoscere.<\/p>\n<p><strong>I server Consul scelgono un maestro tra i votanti<\/strong>. Consul seleziona un maestro dalla lista dei server per ogni data center, e tutte le richieste vanno solo a lui, indipendentemente dal numero di server. Un blocco del maestro non porta a nuove elezioni. Se non viene scelto alcun maestro, le richieste non vengono gestite.<\/p>\n<blockquote><p>Volevate scalabilit\u00e0 orizzontale? Mi dispiace, no.<\/p><\/blockquote>\n<p> La richiesta a un altro data center va da maestro a maestro, indipendentemente dal server su cui \u00e8 arrivata. Il maestro scelto riceve il 100% del carico, tranne il carico di inoltro delle richieste. Una copia attuale dei dati \u00e8 presente su tutti i server del data center, ma risponde solo uno di essi.<\/p>\n<blockquote><p>L'unico modo per scalare \u00e8 attivare la modalit\u00e0 stale sul client.<\/p><\/blockquote>\n<p>In modalit\u00e0 stale, \u00e8 possibile rispondere senza quorum. Questa \u00e8 una modalit\u00e0 in cui rinunciamo alla coerenza dei dati, ma leggiamo un po' pi\u00f9 velocemente del solito, e risponde qualsiasi server. Naturalmente, le scritture avvengono solo tramite il master.<\/p>\n<p><strong>Consul non copia i dati tra i data center.<\/strong>Durante la raccolta della federazione, ogni server avr\u00e0 solo i propri dati. Per gli altri si rivolge sempre a qualcun altro.<\/p>\n<p><strong>L'atomicit\u00e0 delle operazioni non \u00e8 garantita al di fuori delle transazioni.<\/strong>Ricorda che a modificare qualcosa non sei solo tu. Se desideri farlo diversamente, esegui una transazione con blocco.<\/p>\n<p><strong>Le operazioni di blocco non garantiscono la sincronizzazione.<\/strong>La richiesta va da master a master, non direttamente, quindi non ci sono garanzie che il blocco funzioni quando fai un blocco, per esempio in un altro data center.<\/p>\n<p><strong>Le ACL non garantiscono l'accesso (in molti casi).<\/strong>Le ACL potrebbero non funzionare perch\u00e9 vengono memorizzate in un solo data center della federazione \u2014 nel data center delle ACL (Primary DC). Se il DC non risponde, le ACL non funzioneranno.<\/p>\n<p><strong>Un master bloccato porter\u00e0 alla sospensione dell'intera federazione.<\/strong>. Ad esempio, in una federazione di 10 data center, uno ha una rete scadente e un master che cade. Tutti quelli che comunicano con lui si bloccheranno: arriva una richiesta, non ci sono risposte, il thread si blocca. Non sar\u00e0 possibile sapere quando accadr\u00e0, semplicemente dopo un paio d'ore tutta la federazione croller\u00e0. Non potrete fare nulla al riguardo.<\/p>\n<p>Lo stato, il quorum e le elezioni vengono gestiti in un thread separato. Non ci saranno nuove elezioni, lo stato non mostrer\u00e0 nulla. Pensate di avere un Consul attivo, fate una richiesta e non succede nulla: non ci sono risposte. Nel frattempo, lo stato mostra che va tutto bene.<\/p>\n<p>Abbiamo affrontato questo problema, e abbiamo dovuto ricostruire parti specifiche dei data center per evitarlo.<\/p>\n<p><strong>Nella versione business di Consul Enterprise mancano alcuni dei difetti sopra menzionati<\/strong>. Ha molte funzionalit\u00e0 utili: selezione dei votanti, distribuzione, scalabilit\u00e0. C'\u00e8 solo un 'ma': il sistema di licenze per un sistema distribuito \u00e8 molto costoso.<\/p>\n<p>Hack della vita: <code>rm -rf \/var\/lib\/consul<\/code> \u2014 la cura per tutte le malattie dell'agente. Se qualcosa non funziona, basta eliminare i propri dati e caricare i dati da un backup. Probabilmente, Consul riprender\u00e0 a funzionare.<\/p>\n<h2>BEFW<\/h2>\n<p>\nOra parliamo di cosa abbiamo aggiunto a Consul.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wgnet\/befw\">BEFW<\/a><\/noindex> \u00e8 un acronimo di <strong>B<\/strong>ack<strong>E<\/strong>nd<strong>F<\/strong>ire<strong>W<\/strong>all. Dovevo dare un nome al prodotto quando creavo il repository per inserire i primi test commit. Questo nome \u00e8 rimasto.<\/p>\n<h3>Modelli di regole<\/h3>\n<p>\nLe regole sono scritte in sintassi 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>\nTutto fluisce nella catena BEFW, tranne <code>ESTABLISHED<\/code>, <code>RELATED<\/code> e localhost. Il modello pu\u00f2 essere qualsiasi, questo \u00e8 solo un esempio.<\/p>\n<p>Qual \u00e8 l'utilit\u00e0 di BEFW?<\/p>\n<h3>Servizi<\/h3>\n<p>\nAbbiamo un servizio, che ha sempre una porta e un nodo su cui opera. Dal nostro nodo possiamo chiedere localmente all'agente e scoprire che abbiamo un certo servizio. Possiamo anche aggiungere tag.<\/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 \/>\nQualsiasi servizio avviato e registrato in Consul si trasforma in una regola iptables. Abbiamo SSH \u2014 apriamo la porta 22. Lo script Bash \u00e8 semplice: curl e iptables, non serve altro.<\/p>\n<h3>Client<\/h3>\n<p>\nCome concedere accesso non a tutti, ma in modo selettivo? Aggiungere liste IP nello storage KV in base al nome del servizio.<\/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 \/>\nAd esempio, vogliamo che tutti dalla decima rete possano accedere al servizio SSH_TCP_22. Aggiungiamo un piccolo campo TTL? e ora abbiamo permessi temporanei, ad esempio per un giorno.<\/p>\n<h3>Accessi<\/h3>\n<p>\nColleghiamo servizi e clienti: abbiamo un servizio per ogni KV-store pronto. Ora diamo accesso non a tutti, ma in modo selettivo.<\/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>Gruppi<\/h3>\n<p>\nSe ogni volta dobbiamo scrivere migliaia di IP per gli accessi, ci stancheremo. Creeremo delle raggruppamenti \u2014 un subset separato nel KV. Lo chiameremo Alias (o gruppi) e conserveremo l\u00ec i gruppi secondo lo stesso principio.<\/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 \/>\nColleghiamo: ora possiamo aprire SSH non solo per il P2P, ma per un'intera gruppo o pi\u00f9 gruppi. Anche qui esiste TTL \u2014 possiamo aggiungere e rimuovere temporaneamente da un gruppo.<\/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>Integrazione<\/h3>\n<p>\nIl nostro problema \u00e8 il fattore umano e l'automazione. Finora lo abbiamo risolto in questo modo.<\/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 \/>\nLavoriamo con Puppet e trasferiamo tutto ci\u00f2 che riguarda il sistema (codice delle applicazioni). In puppetdb (un normale PostgreSQL) \u00e8 memorizzato l'elenco dei servizi attivi, che possono essere trovati per tipo di risorsa. Qui possiamo vedere chi si collega a cosa. Abbiamo anche un sistema di pull request e merge request per questo.<\/p>\n<p>Abbiamo scritto befw-sync \u2014 una soluzione semplice che aiuta a trasferire dati. Inizialmente, i sync dei cookie si collegano a puppetdb. L\u00ec \u00e8 configurato un API HTTP: chiediamo quali servizi abbiamo e cosa deve essere fatto. Poi viene fatta una richiesta a Consul.<\/p>\n<p>C'\u00e8 integrazione? S\u00ec: abbiamo scritto le regole, autorizzato l'accettazione delle Pull Request. Hai bisogno di una porta o di aggiungere un host a un gruppo? Pull Request, revisione \u2014 niente pi\u00f9 \"Trova altre 200 ACL e prova a fare qualcosa con questo.\"<\/p>\n<h3>Ottimizzazione<\/h3>\n<p>\nIl ping localhost con una catena di regole vuota richiede 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 \/>\nAggiungiamo a questa catena 10.000 indirizzi iptables. Di conseguenza, il ping aumenter\u00e0 di 5 volte: iptables \u00e8 completamente lineare, l'elaborazione di ogni indirizzo richiede del tempo.<\/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 \/>\nPer il firewall in cui migriamo migliaia di ACL, abbiamo molte regole, e questo introduce una latenza. \u00c8 pessimo per i protocolli di gioco.<\/p>\n<p>Ma se mettiamo <strong>10.000 indirizzi in ipset<\/strong> il ping diminuir\u00e0 anche.<\/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 \/>\nIl punto \u00e8 che 'O' (complessit\u00e0 dell'algoritmo) per ipset \u00e8 sempre uguale a 1, indipendentemente da quante regole ci siano. Tuttavia, c'\u00e8 un limite: non possono esserci pi\u00f9 di 65.535 regole. Fino ad allora, viviamo con questo: possiamo combinarle, espandere, creare due ipset in uno.<\/p>\n<h3>Archiviazione<\/h3>\n<p>\nUna logica di continuazione del processo di iterazioni \u00e8 l'archiviazione delle informazioni sui clienti per il servizio in 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 \/>\nOra abbiamo lo stesso SSH, e non scriviamo subito 100 IP, ma impostiamo il nome ipset con cui comunicare e la regola successiva. <code>ELIMINA<\/code>. Possiamo riadattarlo in una sola regola \"Chi non \u00e8 qui, viene escluso\", ma cos\u00ec \u00e8 pi\u00f9 chiaro.<\/p>\n<p>Ora abbiamo regole e set. L'obiettivo principale \u00e8 creare il set prima di scrivere la regola, altrimenti iptables non registrer\u00e0 la regola.<\/p>\n<h3>Schema generale<\/h3>\n<p>\nGrafico: tutto ci\u00f2 di cui ho parlato appare cos\u00ec.<\/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 \/>\nCommettiamo in Puppet, tutto viene inviato all'host, i servizi qui, ipset l\u00ec, e chi non \u00e8 stato registrato l\u00ec viene escluso.<\/p>\n<h3>Consenti &amp; nega<\/h3>\n<p>\nPer salvare rapidamente il mondo o disconnettere qualcuno velocemente, all'inizio di tutte le catene abbiamo creato due ipset: <code>rules_allow<\/code> e <code>rules_deny<\/code>. Come funziona?<\/p>\n<p>Ad esempio, qualcuno crea un carico sul nostro Web con dei bot. Prima dovevamo trovare il suo IP dai log, portarlo agli ingegneri di rete affinch\u00e9 trovassero la sorgente del traffico e lo bloccassero. Adesso \u00e8 diverso.<\/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 \/>\nInviamo a Consul, aspettiamo 2,5 secondi, ed \u00e8 fatto. Poich\u00e9 Consul distribuisce rapidamente grazie al P2P, funziona ovunque, in qualsiasi parte del mondo.<\/p>\n<p>Una volta ho completamente bloccato WOT per errore con il firewall. <code>rules_allow<\/code> \u2014 \u00e8 la nostra assicurazione contro tali casi. Se commettiamo un errore con il firewall e qualcosa viene bloccato, possiamo sempre inviare un <code>0.0\/0<\/code>, per ripristinare tutto rapidamente. Poi possiamo sistemare tutto manualmente.<\/p>\n<h3>Altri set<\/h3>\n<p>\nPuoi aggiungere qualsiasi altro set nello spazio <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 \/>\nPerch\u00e9? A volte qualcuno ha bisogno di ipset, ad esempio per emulare lo spegnimento di una parte del cluster. Ognuno pu\u00f2 portare i propri set, dar loro un nome e verranno prelevati da Consul. Questi set possono partecipare alle regole di iptables oppure funzionare come un comando. <code>NOOP<\/code>: la coerenza sar\u00e0 mantenuta dal demone.<\/p>\n<h3>Utenti<\/h3>\n<p>\nIn passato era cos\u00ec: l'utente si connetteva alla rete e tramite il dominio riceveva le impostazioni. Fino all'arrivo dei firewall di nuova generazione, Cisco non era in grado di comprendere dove fosse l'utente e dove fosse l'IP. Pertanto, l'accesso veniva concesso solo tramite hostname della macchina.<\/p>\n<p>Cosa abbiamo fatto? Ci siamo inseriti nel momento in cui viene ottenuto l'indirizzo. Di solito si tratta di dot1x, Wi-Fi o VPN \u2014 tutto passa attraverso RADIUS. Creiamo un gruppo per ogni utente con il nome utente e inseriamo l'IP con un TTL che corrisponde al suo dhcp.lease: non appena scade, la regola scomparir\u00e0.<\/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 \/>\nOra possiamo aprire l'accesso ai servizi, come per altri gruppi, in base al nome utente. Abbiamo eliminato il problema con gli hostname quando cambiano e ridotto il carico sugli ingegneri di rete, poich\u00e9 non hanno pi\u00f9 bisogno di Cisco. Ora gli ingegneri scrivono i permessi sui propri server.<\/p>\n<h3>Isolamento<\/h3>\n<p>\nNel frattempo, abbiamo iniziato a esaminare l'isolamento. I manager dei servizi hanno effettuato un'inventario, mentre noi abbiamo analizzato tutte le nostre reti. Le organizziamo in gruppi simili e sui server necessari abbiamo aggiunto i gruppi, per esempio, in deny. Ora lo stesso isolamento di staging passa in rules_deny per la produzione, ma non nella produzione stessa.<\/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 \/>\nSchema semplice e veloce: rimuoviamo tutte le ACL dai server, scarichiamo l'hardware, riduciamo il numero di VLAN isolate.<\/p>\n<h3>Controllo dell'integrit\u00e0<\/h3>\n<p>\nIn passato avevamo un trigger speciale che avvisava quando qualcuno cambiava manualmente una regola del firewall. Ho scritto un enorme linters per il controllo delle regole del firewall, era complicato. Ora l'integrit\u00e0 \u00e8 controllata da BEFW. Si assicura diligentemente che le regole che crea non vengano modificate. Se qualcuno cambia le regole del firewall, le ripristina. 'Ho rapidamente attivato un proxy per lavorare da casa' \u2014 non ci sono pi\u00f9 opzioni di questo tipo.<\/p>\n<p>BEFW controlla ipset dai servizi e dall'elenco in befw.conf, le regole dei servizi nella catena BEFW. Ma non monitora altre catene e regole e altri ipset.<\/p>\n<h3>Protezione da guasti<\/h3>\n<p>\nBEFW conserva sempre l'ultimo stato valido direttamente nella struttura binaria state.bin. Se qualcosa va storto, torna sempre a questo 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 \/>\nQuesta \u00e8 un'assicurazione contro il funzionamento instabile di Consul, quando non invia dati o qualcuno commette un errore utilizzando regole che non possono essere applicate. Per non rimanere senza firewall, BEFW torner\u00e0 all'ultimo stato se si verifica un errore in qualche fase.<\/p>\n<p>In situazioni critiche, questa \u00e8 la garanzia che avremo un firewall funzionante. Apriamo tutte le reti grigie nella speranza che un admin arrivi e le sistemi. Un giorno porter\u00f2 questo nei configuratori, ma per ora abbiamo solo tre reti grigie: 10\/8, 172\/12 e 192.168\/16. All'interno del nostro Consul, questa \u00e8 una caratteristica importante che aiuta a progredire.<\/p>\n<p><em>Demo: durante la presentazione Ivan mostra la modalit\u00e0 demo di BEFW. \u00c8 pi\u00f9 comodo guardare la dimostrazione su <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/4zP67uYnsR4?t=1663\">video<\/a><\/noindex>. Il codice sorgente della demo \u00e8 disponibile <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wgnet\/befw\/tree\/master\/demo\">su GitHub<\/a><\/noindex>.<\/em><\/p>\n<h2>Problemi inaspettati<\/h2>\n<p>\nParler\u00f2 dei bug che abbiamo incontrato.<\/p>\n<p><strong>ipset add set 0.0.0.0\/0. <\/strong>Cosa succede se aggiungo in ipset 0.0.0.0\/0? Tutti gli IP verranno aggiunti? Si aprir\u00e0 l'accesso a Internet? <\/p>\n<p>No, stiamo affrontando un bug che ci \u00e8 costato due ore di inattivit\u00e0. Il bug non \u00e8 stato risolto dal 2016, \u00e8 registrato su RedHat Bugzilla con il numero #1297092, e lo abbiamo trovato per caso \u2014 grazie a un rapporto del sviluppatore.<\/p>\n<p>Ora in BEFW c'\u00e8 una regola ferrea che <code>0.0.0.0\/0<\/code> si trasforma in due indirizzi: <code>0.0.0.0\/1<\/code> e <code>128.0.0.0\/1<\/code>.<\/p>\n<p><strong>ipset restore set &lt; file. <\/strong>Cosa fa ipset quando gli dici di <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>Niente di simile \u2014 esegue un merge, e i vecchi indirizzi rimangono, non chiudi l'accesso.<\/p>\n<p>Abbiamo trovato il bug mentre testavamo l'isolamento. Ora hanno un sistema piuttosto complesso \u2014 invece di <code>restore<\/code> viene eseguito <code>create temp<\/code>, poi <code>restore flush temp<\/code> e <code>restore temp<\/code>. Alla fine swap: per atomicit\u00e0, perch\u00e9 se si esegue prima <code>flush<\/code> e in quel momento arriva qualche pacchetto, verr\u00e0 scartato e qualcosa andr\u00e0 storto. Quindi c'\u00e8 un po' di magia nera.<\/p>\n<p><strong>consul kv get -datacenter=other. <\/strong>Come ho gi\u00e0 detto, pensiamo di richiedere dei dati, ma riceveremo o i dati o un errore. Possiamo farlo tramite Consul localmente, ma in questo caso si bloccheranno entrambi.<\/p>\n<p>Il client Consul locale \u00e8 un wrapper sopra l'API HTTP. Ma semplicemente si blocca e non risponde n\u00e9 a Ctrl+C, n\u00e9 a Ctrl+Z, n\u00e9 a altro, solo a <code>kill -9<\/code> nella console adiacente. Ci siamo imbattuti in questo mentre costruivamo un grande cluster. Ma al momento non abbiamo soluzioni, ci stiamo preparando a correggere questo errore in Consul.<\/p>\n<p><strong>Il leader di Consul non risponde. <\/strong>Il master nel nostro data center non risponde, ci chiediamo: \"Forse ora funzioner\u00e0 l'algoritmo di ri-elezione?\" <\/p>\n<p>No, non funzioner\u00e0 e il monitoraggio non mostrer\u00e0 nulla: Consul dir\u00e0 che l'indice di commitment c'\u00e8, il leader \u00e8 stato trovato, tutto va bene.<\/p>\n<p>Come affrontiamo questo problema? <code>service consul restart<\/code> in cron ogni ora. Se hai 50 server, non \u00e8 un problema. Quando saranno 16.000, capirai come funziona.<\/p>\n<h2>Conclusione<\/h2>\n<p>\nAlla fine abbiamo ottenuto i seguenti vantaggi:<\/p>\n<ul>\n<li>Copertura del 100% di tutte le macchine Linux.<\/li>\n<li>Velocit\u00e0.<\/li>\n<li>Automazione.<\/li>\n<li>Liberato l'hardware e gli ingegneri di rete dalla schiavit\u00f9.<\/li>\n<li>Sono emerse possibilit\u00e0 di integrazione praticamente illimitate: con Kubernetes, Ansible o Python.<\/li>\n<\/ul>\n<p>\n<strong>Svantaggi<\/strong>: Consul, con cui ora dobbiamo convivere, e il prezzo dell'errore \u00e8 molto alto. Ad esempio, una volta, alle 18:00 (ora di punta in Russia), ho modificato qualcosa nelle liste delle reti. Proprio in quel momento stavamo costruendo l'isolamento su BEFW. Ho commesso un errore, suppongo che abbia indicato la maschera sbagliata, e tutto \u00e8 crollato in due secondi. Il monitoraggio si attiva, l'operatore di supporto corre: \u00abAbbiamo tutto bloccato!\u00bb Il capo del dipartimento \u00e8 invecchiato mentre spiegava al business perch\u00e9 \u00e8 successo.<\/p>\n<p>Il prezzo dell'errore \u00e8 cos\u00ec alto che abbiamo ideato una procedura di prevenzione complessa. Se implementate questo in una grande produzione, non date il master token a Consul a tutti indiscriminatamente. Finir\u00e0 male.<\/p>\n<p><strong>Costo. <\/strong>Ho scritto codice per 400 ore da solo. Il mio team di 4 persone spende 10 ore al mese per supporto su tutti. Rispetto al costo di qualsiasi firewall di nuova generazione, questo \u00e8 gratuito.<\/p>\n<p><strong>Piani. <\/strong>Il piano a lungo termine \u00e8 trovare un'alternativa per il trasporto, in sostituzione o in aggiunta a Consul. Potrebbe essere Kafka o qualcosa di simile. Ma nei prossimi anni, continueremo a utilizzare Consul.<\/p>\n<p>Prossimi piani: integrazione con Fail2ban, monitoraggio, nftables, e possibilmente altri distribuzioni, metriche, monitoraggio avanzato, ottimizzazione. Il supporto per Kubernetes \u00e8 anche nei nostri piani, poich\u00e9 attualmente abbiamo diversi cluster e una forte motivazione.<\/p>\n<p>Altri piani includono:<\/p>\n<ul>\n<li>ricerca di anomalie nel traffico;<\/li>\n<li>gestione della mappa di rete;<\/li>\n<li>supporto per Kubernetes;<\/li>\n<li>compilazione di pacchetti per tutti i sistemi;<\/li>\n<li>Interfaccia Web.<\/li>\n<\/ul>\n<p>\nLavoriamo costantemente per espandere la configurazione, aumentare le metriche e ottimizzare.<\/p>\n<p><i>Unisciti al progetto. \u00c8 un progetto interessante, ma purtroppo al momento \u00e8 solo di una sola persona. Vieni a <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wgnet\/befw\">GitHub <\/a><\/noindex>e prova a contribuire: fare un commit, testare, proporre qualcosa, dare il tuo parere.<\/i><\/p>\n<blockquote><p>Nel frattempo, ci prepariamo per <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/spb\/2020\">Saint HighLoad++<\/a><\/noindex>, che si terr\u00e0 il 6 e 7 aprile a San Pietroburgo, e invitiamo gli sviluppatori di sistemi ad alta capacit\u00e0 <noindex><a rel=\"nofollow\" href=\"https:\/\/conf.ontico.ru\/lectures\/propose?conference=hl2020-spb\">a presentare una proposta per una relazione<\/a><\/noindex>. I relatori esperti sanno gi\u00e0 come procedere, mentre ai novizi in materia di presentazioni raccomandiamo almeno di <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/spb\/2020\/speakers\">provare<\/a><\/noindex>. Partecipare alla conferenza come relatore offre diversi vantaggi. Puoi leggere quali sono alla fine. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/486142\/\">di questo articolo<\/a><\/noindex>.<\/p><\/blockquote>\n<p>Fonte: <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 4.9.10 - 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. \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\" \/>\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\/it\/blog\/consul-iptables-3\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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. \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/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":"Nel 2010, l'azienda Wargaming gestiva 50 server e un modello di rete semplice: backend, frontend e firewall. Con il tempo, il numero dei server \u00e8 aumentato e il modello si \u00e8 complicato: ambienti di staging, VLAN isolate con ACL, poi VPN con VRF, VLAN con ACL su L2, VRF con ACL su L3. Ti \u00e8 girata la testa? Sar\u00e0 ancora pi\u00f9 interessante. Quando i server sono diventati 16.000, \u00e8 stato possibile lavorare senza problemi con","canonical_url":"https:\/\/prohoster.info\/it\/blog\/consul-iptables-3","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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. \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","og:url":"https:\/\/prohoster.info\/it\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/41051","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=41051"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/41051\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/41052"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=41051"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=41051"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=41051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}