Konsul + iptables = :3

Dina 2010 pausahaan Wargaming éta 50 server na model jaringan basajan: backend, frontend na firewall. Jumlah server tumuwuh, model jadi leuwih kompleks: pementasan, VLAN terasing kalawan ACLs, lajeng VPN kalawan VRFs, VLAN kalawan ACLs on L2, VRFs kalawan ACLs on L3. Kepala pusing? Bakal leuwih senang engké.

Nalika aya 16 server, janten teu mungkin damel tanpa cimata sareng seueur bagéan hétérogén. Ku kituna kami datang nepi ka solusi sejen. Simkuring nyandak tumpukan Netfilter, ditambahkeun Konsul salaku sumber data, sarta kami meunang firewall disebarkeun gancang. Aranjeunna ngaganti ACLs on routers sarta dipaké salaku firewall éksternal sarta internal. Pikeun ngokolakeun alat sacara dinamis, kami ngembangkeun sistem BEFW, anu dianggo di mana waé: tina ngatur aksés pangguna ka jaringan produk dugi ka ngasingkeun bagéan jaringan tina unggal anu sanés.

Konsul + iptables = :3

Anjeunna bakal nyarioskeun ka anjeun kumaha éta sadayana tiasa dianggo sareng naha anjeun kedah ningal langkung caket kana sistem ieu. Ivan Agarkov (annmuor) nyaéta kapala grup kaamanan infrastruktur divisi Pangropéa di puseur ngembangkeun Minsk parusahaan. Ivan nyaéta kipas SELinux, mikanyaah Perl, sareng nyerat kode. Salaku kapala grup kaamanan informasi, anjeunna rutin gawé bareng log, cadangan tur R & D ngajaga Wargaming ti hacker jeung mastikeun operasi sadaya server kaulinan di pausahaan.

inpo sajarah

Sateuacan kuring nyarioskeun ka anjeun kumaha urang ngalakukeun éta, kuring bakal nyarioskeun ka anjeun kumaha kami dugi ka ieu sareng naha éta diperyogikeun. Jang ngalampahkeun ieu, hayu urang balik deui ka 9 taun: 2010, Dunya tanghi ngan mucunghul. Wargaming ngagaduhan kirang langkung 50 server.

Konsul + iptables = :3
Bagan pertumbuhan server perusahaan.

Kami ngagaduhan modél jaringan. Pikeun waktos éta éta optimal.

Konsul + iptables = :3
Modél jaringan dina 2010.

Aya jalma jahat dina tungtung hareup anu rék megatkeun kami, tapi boga firewall a. Aya henteu firewall on backend nu, tapi aya 50 server aya, urang nyaho kabeh. Sagalana jalan ogé.

Dina 4 taun, armada server naek 100 kali, nepi ka 5000. Jaringan terasing munggaran muncul - pementasan: aranjeunna henteu tiasa angkat ka produksi, sareng sering aya hal-hal anu ngajalankeun anu tiasa bahaya.

Konsul + iptables = :3
Modél jaringan dina 2014.

Ku inersia, kami nganggo potongan hardware anu sami, sareng sadaya padamelan dilaksanakeun dina VLAN terasing: ACL ditulis kana VLAN, anu ngamungkinkeun atanapi mungkir sababaraha jinis sambungan.

Dina 2016, jumlah server ngahontal 8000. Wargaming nyerep studio séjén, sarta jaringan afiliasi tambahan mucunghul. Éta sigana milik urang, tapi teu cukup: VLAN sering henteu dianggo pikeun mitra, anjeun kedah nganggo VPN sareng VRF, isolasi janten langkung pajeulit. Campuran insulasi ACL tumuwuh.

Konsul + iptables = :3
Modél jaringan dina 2016.

Nepi ka awal 2018, armada mesin geus tumuwuh nepi ka 16. Aya 000 bagéan, sarta kami henteu kaétang sésana, kaasup katutup nu data finansial disimpen. Jaringan wadahna (Kubernetes), DevOps, jaringan awan anu disambungkeun via VPN, contona, ti IVS, parantos muncul. Aya seueur aturan - éta nyeri.

Konsul + iptables = :3
Model jaringan sareng metode isolasi di 2018.

Pikeun isolasi kami dipaké: VLAN kalawan ACL on L2, VRF kalawan ACL on L3, VPN tur leuwih. Seueur teuing.

Anu jadi masalah

Sarerea hirup kalawan ACL jeung VLAN. Aya naon? Patarosan ieu bakal dijawab ku Harold, nyumputkeun nyeri.

Konsul + iptables = :3

Aya seueur masalah, tapi aya lima anu ageung.

  • kanaékan harga geometric pikeun aturan anyar. Unggal aturan anyar nyandak leuwih lila pikeun nambahkeun ti nu saméméhna, sabab éta kudu ningali heula lamun aya aturan misalna.
  • Taya firewall di jero bagéan. Bagéan-bagéan éta kumaha waé dipisahkeun, sareng teu aya sumber anu cekap di jero.
  • Aturan diterapkeun pikeun lila. Operator bisa nulis hiji aturan lokal ku leungeun dina sajam. Anu global nyandak sababaraha dinten.
  • Kasesahan jeung aturan auditing. Leuwih tepat, éta teu mungkin. Aturan munggaran ditulis deui dina 2010, sareng seueur pangarangna henteu deui damel pikeun perusahaan.
  • Tingkat low kontrol infrastruktur. Ieu mangrupikeun masalah utama - urang henteu terang pisan naon anu lumangsung di nagara urang.

Ieu sapertos insinyur jaringan dina taun 2018 nalika anjeunna nguping: "Peryogikeun deui ACL."

Konsul + iptables = :3

Solusi na

Dina awal 2018, éta diputuskeun pikeun ngalakukeun hiji hal ngeunaan éta.

Harga integrasi terus ningkat. Titik awal éta yén puseur data badag dieureunkeun ngarojong VLANs terasing tur ACLs sabab alat béak memori.

Solusi: kami ngaleungitkeun faktor manusa sareng otomatis nyayogikeun aksés maksimal.

Aturan anyar butuh lila pikeun nerapkeun. Solusi: nyepetkeun aplikasi aturan, nyieun disebarkeun sarta paralel. Ieu merlukeun sistem disebarkeun supados aturan anu dikirimkeun sorangan, tanpa rsync atanapi SFTP ka sarébu sistem.

Taya firewall di jero bagéan. A firewall dina bagéan mimiti datang ka kami lamun jasa béda mucunghul dina jaringan nu sami. Solusi: ngagunakeun firewall di tingkat host - firewalls basis host. Ampir dimana-mana urang gaduh Linux, sareng dimana-mana urang gaduh iptables, ieu sanés masalah.

Kasesahan jeung aturan auditing. Solusi: Simpen sadaya aturan dina hiji tempat pikeun ditinjau sareng manajemén, supados urang tiasa ngaudit sadayana.

Tingkat low kontrol kana infrastruktur. Solusi: nyandak inventaris sadaya jasa sareng aksés diantara aranjeunna.

Ieu langkung tina prosés administrasi tibatan téknis. Kadang urang gaduh 200-300 release anyar saminggu, utamana dina mangsa promosi jeung libur. Sumawona, ieu ngan ukur pikeun hiji tim DevOps kami. Kalayan seueur sékrési, mustahil ningali naon palabuhan, IP, sareng integrasi anu diperyogikeun. Ku alatan éta, kami peryogi manajer jasa anu dilatih khusus anu naroskeun ka tim: "Naon anu aya sareng naha anjeun nyangking éta?"

Saatos sadayana anu kami luncurkeun, insinyur jaringan di 2019 mimiti siga kieu.

Konsul + iptables = :3

Konsul

Urang mutuskeun yén urang bakal nempatkeun sagalana yén kami kapanggih kalayan bantuan manajer jasa kana Konsul jeung ti dinya urang bakal nulis aturan iptables.

Kumaha urang mutuskeun pikeun ngalakukeun ieu?

  • Kami bakal ngumpulkeun sadaya jasa, jaringan sareng pangguna.
  • Hayu urang ngadamel aturan iptables dumasar kana éta.
  • Urang ngajadikeun otomatis kontrol.
  • ....
  • KEUNTUNGAN.

Konsul sanes a API jauh, eta bisa ngajalankeun on unggal titik jeung nulis ka iptables. Sadaya anu tetep nyaéta pikeun ngatur kadali otomatis anu bakal ngabersihan hal-hal anu teu perlu, sareng seueur masalah bakal direngsekeun! Urang bakal ngerjakeun sésana nalika urang angkat.

Naha Konsul?

Geus ngabuktikeun sorangan ogé. Dina 2014-15, kami nganggo éta salaku backend pikeun Vault, dimana kami nyimpen kecap akses.

Teu leungit data. Salila waktu pamakéan, Konsul teu leungit data salila kacilakaan tunggal. Ieu mangrupakeun tambah badag pikeun sistem manajemen firewall.

Sambungan P2P ngagancangkeun panyebaran parobahan. Kalayan P2P, sadaya parobihan gancang, henteu kedah ngantosan sababaraha jam.

API REST merenah. Urang ogé dianggap Apache ZooKeeper, tapi teu boga REST API, jadi Anjeun kudu masang crutches.

Gawéna salaku Key Vault (KV) sareng Diréktori (Service Discovery). Anjeun tiasa nyimpen jasa, katalog, sareng pusat data sakaligus. Ieu merenah henteu ngan keur urang, tapi ogé pikeun tim tatangga, sabab nalika ngawangun layanan global, urang pikir badag.

Ditulis dina Go, anu mangrupa bagian ti tumpukan Wargaming. Urang resep basa ieu, urang boga loba pamekar Go.

Sistim ACL kuat. Dina Konsul, anjeun tiasa nganggo ACLs pikeun ngadalikeun anu nulis naon. Kami ngajamin yén aturan firewall moal tumpang tindih sareng anu sanés sareng urang moal ngagaduhan masalah sareng ieu.

Tapi Konsul ogé boga drawbacks na.

  • Teu skala dina puseur data iwal mun boga versi bisnis. Ieu ngan scalable ku federasi.
  • Gumantung pisan kana kualitas jaringan sareng beban server. Konsul iyeu moal jalan mun leres salaku server dina server sibuk lamun aya wae lags jaringan, Contona, speed henteu rata. Ieu alatan sambungan P2P jeung update model distribution.
  • Kasadiaan ngawaskeun kasusah. Dina status Konsul anjeunna bisa disebutkeun yen sagalana geus rupa, tapi anjeunna maot lila pisan.

Kami ngarengsekeun kalolobaan masalah ieu nalika nganggo Konsul, naha éta kami milih. Pausahaan boga rencana pikeun backend alternatif, tapi urang geus diajar nungkulan masalah jeung ayeuna hirup kalawan Konsul.

Kumaha Konsul jalan

Urang bakal masang tilu nepi ka lima server dina puseur data kondisional. Hiji atawa dua server iyeu moal jalan mun: aranjeunna moal bisa ngatur quorum sarta mutuskeun saha bener jeung saha salah lamun data teu cocog. Langkung ti lima henteu aya rasa, produktivitas bakal turun.

Konsul + iptables = :3

Klién nyambung ka server dina urutan naon: agén sarua, ngan jeung bandéra server = false.

Konsul + iptables = :3

Saatos ieu, klien nampi daptar sambungan P2P sareng ngawangun sambungan diantara aranjeunna.

Konsul + iptables = :3

Di tingkat global, urang nyambungkeun sababaraha puseur data. Éta ogé nyambungkeun P2P sareng komunikasi.

Konsul + iptables = :3

Nalika urang hoyong nyandak data tina pusat data anu sanés, pamenta na ti server ka server. Skéma ieu disebut Protokol pelayan. Protokol Serf, sapertos Konsul, dikembangkeun ku HashiCorp.

Sababaraha fakta penting ngeunaan Konsul

Konsul gaduh dokuméntasi anu ngajelaskeun kumaha éta jalanna. Kuring bakal masihan ukur fakta anu dipilih anu patut dipikanyaho.

Server konsul milih master ti antara pamilih. Konsul milih master tina daptar server pikeun tiap puseur data, sarta sakabeh requests buka ngan ka dinya, paduli jumlah server. Master katirisan henteu ngakibatkeun pamilihan ulang. Lamun master teu dipilih, requests teu serviced ku saha.

Naha anjeun hoyong skala horizontal? Punten, henteu.

A pamundut ka puseur data sejen mana ti master ka master, paduli nu server eta sumping ka. Master dipilih narima 100% tina beban, iwal beban on requests maju. Kabéh server di puseur data boga salinan up-to-date data, tapi ngan hiji responds.

Hiji-hijina jalan pikeun skala nyaéta ngaktipkeun mode basi dina klien.

Dina modeu bulukan, anjeun tiasa ngabales tanpa quorum a. Ieu mangrupakeun mode nu urang nyerah konsistensi data, tapi maca saeutik leuwih gancang ti biasa, sarta server wae responds. Alami, ngarekam ukur ngaliwatan master.

Konsul henteu nyalin data antara pusat data. Nalika federasi dirakit, unggal server ngan ukur gaduh data sorangan. Pikeun batur, anjeunna salawasna ngahurungkeun ka batur.

Atomitas operasi henteu dijamin di luar transaksi. Inget yén anjeun teu ngan hiji anu bisa ngarobah hal. Upami anjeun hoyong anu béda, ngalaksanakeun transaksi kalayan konci.

Operasi blocking teu ngajamin ngonci. Paménta mana ti master ka master, sarta henteu langsung, jadi euweuh jaminan yén blocking bakal dianggo mun anjeun meungpeuk, contona, dina puseur data sejen.

ACL ogé henteu ngajamin aksés (dina seueur kasus). ACL bisa jadi teu jalan sabab disimpen dina hiji puseur data federasi - di puseur data ACL (Primer DC). Mun DC teu ngajawab anjeun, ACL moal jalan.

Hiji master beku bakal ngabalukarkeun sakabéh federasi beku. Contona, aya 10 puseur data dina federasi a, sarta salah sahiji boga jaringan goréng, sarta hiji master gagal. Saha waé anu komunikasi sareng anjeunna bakal macét dina bunderan: aya pamundut, teu aya jawabanana, benangna beku. Teu aya deui jalan pikeun terang iraha ieu bakal kajantenan, ngan dina sajam atanapi dua sadayana federasi bakal tumiba. Henteu aya anu tiasa anjeun lakukeun ngeunaan éta.

Status, kuorum sareng pamilihan diurus ku benang anu misah. Pamilihan ulang moal lumangsung, status moal nembongkeun nanaon. Anjeun mikir yén anjeun gaduh Konsul hirup, anjeun nanya, sarta euweuh kajadian - euweuh jawaban. Dina waktos anu sami, status nunjukkeun yén sadayana henteu kunanaon.

Kami parantos mendakan masalah ieu sareng kedah ngawangun deui bagian-bagian khusus pusat data pikeun ngahindarkeunana.

Versi bisnis Consul Enterprise henteu ngagaduhan sababaraha kalemahan di luhur. Éta ngagaduhan seueur fungsi anu mangpaat: milih pamilih, distribusi, skala. Aya ngan hiji "tapi" - sistem lisénsi pikeun sistem disebarkeun pisan mahal.

Hacking hirup: rm -rf /var/lib/consul - tamba pikeun sakabéh kasakit agén. Upami aya anu henteu tiasa dianggo pikeun anjeun, hapus data anjeun sareng unduh data tina salinan. Paling dipikaresep, Konsul bakal dianggo.

BEFW

Ayeuna hayu urang ngobrol ngeunaan naon anu kami tambahkeun ka Konsul.

BEFW mangrupa akronim pikeun BackEndFudarWsadayana. Kuring kedah namina produk kumaha waé nalika kuring nyiptakeun gudang pikeun nempatkeun tés anu munggaran dilakukeun. Ngaran ieu tetep.

Citakan aturan

Aturan ditulis dina sintaksis iptables.

  • -N BEFW
  • -P INPUT DROP
  • -A INPUT -m kaayaan-kaayaan RELATED, DITATAKEUN -j narima
  • -A INPUT -i lo -j NAMPA
  • -A INPUT -j BEFW

Sagalana mana kana ranté BEFW, iwal ESTABLISHED, RELATED sareng localhost. template bisa nanaon, ieu ngan hiji conto.

Kumaha mangpaat BEFW?

Jasa

Simkuring boga jasa a, éta salawasna boga port a, titik on mana eta dijalankeun. Tina titik kami, urang tiasa naroskeun sacara lokal ka agén sareng terang yén kami ngagaduhan sababaraha jinis jasa. Anjeun oge bisa nempatkeun tag.

Konsul + iptables = :3

Sakur jasa anu dijalankeun sareng didaptarkeun sareng Konsul janten aturan iptables. Simkuring gaduh SSH - buka port 22. Aksara Bash téh basajan: curl na iptables, nanaon sejenna anu diperlukeun.

klien

Kumaha carana muka aksés henteu ka sadayana, tapi sacara selektif? Tambihkeun daptar IP ka panyimpenan KV ku nami jasa.

Konsul + iptables = :3

Salaku conto, urang hoyong sadayana dina jaringan kasapuluh tiasa ngaksés jasa SSH_TCP_22. Tambahkeun hiji widang TTL leutik? tur ayeuna urang boga idin samentara, contona, pikeun sapoé.

Aksés

Urang nyambungkeun jasa jeung klien: urang boga jasa, gudang KV geus siap pikeun tiap. Ayeuna kami masihan aksés henteu ka sadayana, tapi sacara selektif.

Konsul + iptables = :3

Grup

Lamun urang nulis rébuan IP pikeun aksés unggal waktu, urang bakal capé. Hayu urang nyieun groupings - subset misah di KV. Sebutkeun Alias ​​​​(atanapi grup) sareng toko grup di dinya dumasar kana prinsip anu sami.

Konsul + iptables = :3

Hayu urang sambungkeun: ayeuna urang tiasa muka SSH teu husus pikeun P2P, tapi pikeun sakabéh grup atawa sababaraha grup. Dina cara anu sami, aya TTL - anjeun tiasa nambihan kana grup sareng ngahapus samentawis tina grup.

Konsul + iptables = :3

ngahiji

Masalah urang nyaéta faktor manusa sareng otomatisasi. Sajauh ieu kami geus direngsekeun ku cara kieu.

Konsul + iptables = :3

Kami damel sareng Wayang, sareng nransper sadayana anu aya hubunganana sareng sistem (kode aplikasi) ka aranjeunna. Puppetdb (PostgreSQL biasa) nyimpen daptar jasa anu ngajalankeun di dinya, aranjeunna tiasa dipendakan ku jinis sumber. Di dinya anjeun tiasa terang saha anu ngalamar dimana. Kami ogé ngagaduhan pamundut tarik sareng ngahijikeun sistem pamundut pikeun ieu.

Kami nyerat befw-sync, solusi saderhana anu ngabantosan mindahkeun data. Kahiji, cookie singkronisasi diaksés ku puppetdb. API HTTP dikonpigurasikeun di dinya: urang nyuhunkeun jasa naon anu urang gaduh, naon anu kedah dilakukeun. Teras aranjeunna naroskeun ka Konsul.

Naha aya integrasi? Leres: aranjeunna nyerat aturan sareng ngijinkeun Permintaan Tarik ditampi. Naha anjeun peryogi port anu tangtu atanapi tambahkeun host kana sababaraha grup? Tarik Request, review - euweuh deui "Teangan 200 ACLs sejen tur coba ngalakukeun hal ngeunaan eta."

optimasi

Ping localhost nganggo ranté aturan kosong butuh 0,075 mdet.

Konsul + iptables = :3

Hayu urang tambahkeun 10 alamat iptables kana ranté ieu. Hasilna, ping bakal ningkat 000 kali: iptables lengkep linier, ngolah unggal alamat butuh sababaraha waktu.

Konsul + iptables = :3

Pikeun firewall dimana urang migrasi rébuan ACL, urang gaduh seueur aturan, sareng ieu ngenalkeun latency. Ieu goréng pikeun protokol kaulinan.

Tapi lamun urang nempatkeun 10 alamat di ipset Ping malah bakal turun.

Konsul + iptables = :3

Intina nyaeta "O" (pajeulitna algoritma) pikeun ipset sok sarua jeung 1, euweuh urusan sabaraha aturan aya. Leres, aya watesan - teu tiasa langkung ti aturan 65535. Pikeun ayeuna urang hirup sareng ieu: anjeun tiasa ngagabungkeun aranjeunna, dilegakeun, ngadamel dua ipset dina hiji.

neundeun

A tuluyan logis tina prosés Iteration ieu nyimpen informasi ngeunaan klien pikeun layanan dina ipset.

Konsul + iptables = :3

Ayeuna urang gaduh SSH anu sami, sareng urang henteu nyerat 100 IP sakaligus, tapi nyetél nami ipset dimana urang kedah komunikasi, sareng aturan di handap ieu DROP. Ieu bisa dirobah jadi hiji aturan "Saha teu didieu, DROP", tapi leuwih jelas.

Ayeuna urang gaduh aturan sareng set. Tugas utama nyaéta nyieun set saméméh nulis aturan, sabab disebutkeun iptables moal nulis aturan.

Skéma umum

Dina bentuk diagram a, sagalana ceuk kuring kasampak kawas kieu.

Konsul + iptables = :3

Urang komitmen kana Wayang, sagalana geus dikirim ka host, jasa dieu, ipset aya, jeung saha anu teu didaptarkeun aya teu diwenangkeun.

Ngidinan & mungkir

Pikeun gancang nyalametkeun dunya atanapi gancang nganonaktipkeun batur, dina awal sadaya ranté kami ngadamel dua ipset: rules_allow и rules_deny. Kumaha gawéna?

Salaku conto, aya anu nyiptakeun beban dina Wéb kami nganggo bot. Sateuacanna, anjeun kedah milarian IP na tina log, bawa ka insinyur jaringan, supados aranjeunna tiasa mendakan sumber lalu lintas sareng ngalarang anjeunna. Sigana béda ayeuna.

Konsul + iptables = :3

Urang kirimkeun ka Konsul, antosan 2,5 detik, sarta eta geus rengse. Kusabab Konsul ngadistribusikaeun gancang ngaliwatan P2P, gawéna madhab, di mana wae di dunya.

Sakali kuring kumaha bae dieureunkeun lengkep WOT alatan kasalahan jeung firewall nu. rules_allow - ieu asuransi urang ngalawan kasus kawas. Upami urang ngalakukeun kasalahan dimana waé sareng firewall, aya anu diblokir dimana waé, urang salawasna tiasa ngirim kondisional 0.0/0pikeun gancang nyokot sagalana. Engké urang ngalereskeun sagalana ku leungeun.

susunan séjén

Anjeun tiasa nambihan set anu sanés dina rohangan $IPSETS$.

Konsul + iptables = :3

Kanggo naon? Kadang-kadang batur perlu ipset, contona, pikeun emulate shutdown sababaraha bagian tina klaster. Saha waé tiasa nyandak set naon waé, nami aranjeunna, sareng aranjeunna bakal dijemput ti Konsul. Dina waktos anu sami, set tiasa ilubiung dina aturan iptables atanapi janten tim NOOP: Konsistensi bakal dijaga ku daemon.

Pamaké

Saméméhna, éta kawas kieu: pamaké disambungkeun ka jaringan jeung narima parameter ngaliwatan domain. Sateuacan mecenghulna firewall generasi anyar, Cisco henteu terang kumaha ngartos dimana pangguna sareng dimana IP na. Ku alatan éta, aksés ieu dibales ukur ngaliwatan hostname tina mesin.

Naon anu urang lakukeun? Kami macét dina waktos nampi alamatna. Biasana ieu dot1x, Wi-Fi atanapi VPN - sadayana ngalangkungan RADIUS. Pikeun unggal pamaké, urang nyieun grup ku ngaran pamaké sarta nempatkeun hiji IP di dinya ku TTL anu sarua jeung dhcp.lease na - pas kadaluwarsa, aturan bakal ngaleungit.

Konsul + iptables = :3

Ayeuna urang tiasa muka aksés kana jasa, sapertos grup sanés, ku nami pangguna. Kami parantos ngaleungitkeun nyeri tina hostname nalika aranjeunna robih, sareng kami parantos ngaleungitkeun beban insinyur jaringan sabab henteu peryogi deui Cisco. Ayeuna insinyur sorangan ngadaptarkeun aksés dina server na.

penyekatan

Dina waktos anu sami, urang mimiti ngabongkar insulasi. Manajer jasa nyandak inventaris, sareng kami nganalisis sadaya jaringan kami. Hayu urang ngabagi kana grup anu sarua, sarta dina server diperlukeun grup ditambahkeun, contona, pikeun mungkir. Ayeuna isolasi pementasan sami mungkas dina rules_deny produksi, tapi henteu dina produksi sorangan.

Konsul + iptables = :3

skéma jalan gancang sarta basajan: urang miceun kabeh ACLs ti server, ngabongkar momotanana hardware, sarta ngurangan jumlah VLAN terasing.

Kontrol integritas

Sateuacanna, urang ngagaduhan pemicu khusus anu dilaporkeun nalika aya anu ngarobih aturan firewall sacara manual. Kuring nulis linter badag pikeun mariksa aturan firewall, éta hésé. Integritas ayeuna dikawasa ku BEFW. Anjeunna getol mastikeun yén aturan anu didamelna henteu robih. Lamun batur ngarobah aturan firewall, eta bakal ngarobah sagalana balik. "Kuring gancang nyetél proxy supados kuring tiasa damel ti bumi" - teu aya deui pilihan sapertos kitu.

BEFW ngadalikeun ipset tina jasa jeung daptar di befw.conf, aturan jasa dina ranté BEFW. Tapi éta henteu ngawas ranté sareng aturan sareng ipset sanés.

Perlindungan kacilakaan

BEFW salawasna nyimpen kaayaan alus panungtungan dipikawanoh langsung dina struktur binér state.bin. Lamun hal mana anu salah, salawasna gulungan deui state.bin ieu.

Konsul + iptables = :3

Ieu asuransi ngalawan operasi Konsul teu stabil, nalika eta teu ngirim data atawa batur nyieun kasalahan sarta dipaké aturan nu teu bisa dilarapkeun. Pikeun mastikeun yén urang teu ditinggalkeun tanpa firewall a, BEFW bakal gulung deui ka kaayaan panganyarna lamun kasalahan lumangsung dina sagala tahapan.

Dina kaayaan kritis, ieu jaminan yén urang bakal ditinggalkeun ku firewall jalan. Urang buka sadaya jaringan abu-abu dina harepan admin bakal datang jeung ngalereskeun eta. Someday kuring bakal nempatkeun ieu dina configs, tapi ayeuna urang ngan boga tilu jaringan abu: 10/8, 172/12 jeung 192.168/16. Dina Konsul kami, ieu mangrupikeun fitur penting anu ngabantosan kami langkung maju.

Demo: salami laporan, Ivan nunjukkeun mode demo BEFW. Leuwih gampang pikeun lalajo demonstrasi видео. Kode sumber demo sadia dina GitHub.

Pitfalls

Kuring gé ngabejaan Anjeun tentang bug urang encountered.

ipset nambahkeun set 0.0.0.0/0. Naon kajadian lamun nambahkeun 0.0.0.0/0 mun ipset? Naha sadayana IP bakal ditambah? Naha aksés Internét bakal sayogi?

Henteu, urang bakal nampi bug anu nyéépkeun waktos dua jam. Sumawona, bug éta henteu acan damel ti saprak 2016, ayana di RedHat Bugzilla dina nomer #1297092, sareng kami mendakan éta ku kacilakaan - tina laporan pamekar.

Ayeuna aturan ketat di BEFW éta 0.0.0.0/0 robah jadi dua alamat: 0.0.0.0/1 и 128.0.0.0/1.

ipset malikkeun set <file. Naon ipset do mun anjeun ngabejaan ka restore? Naha anjeun pikir éta jalanna sami sareng iptables? Dupi éta cageur data?

Henteu aya anu sapertos kitu - éta ngahiji, sareng alamat anu lami henteu kamana-mana, anjeun henteu ngahalangan aksés.

Kami mendakan bug nalika nguji isolasi. Ayeuna aya sistem rada kompleks - tinimbang restore dicekel create tempsaterusna restore flush temp и restore temp. Dina ahir swap: pikeun atomicity, sabab lamun ngalakukeun eta kahiji flush sarta dina momen ieu sababaraha pakét datang, éta bakal dipiceun jeung aya nu salah. Janten aya sakedik sihir hideung.

konsul kv meunang -datacenter=lain. Salaku Cenah mah, urang pikir urang nanyakeun keur sababaraha data, tapi urang boh bakal meunang data atawa kasalahan. Urang tiasa ngalakukeun ieu via Konsul lokal, tapi dina hal ieu duanana bakal freeze.

Klién Konsul lokal mangrupikeun bungkus tina API HTTP. Tapi ngan ukur ngagantung sareng henteu ngabales Ctrl + C, atanapi Ctrl + Z, atanapi naon waé kill -9 dina konsol salajengna. Urang encountered ieu nalika urang ngawangun klaster badag. Tapi kami henteu acan gaduh solusi; kami nuju nyiapkeun pikeun ngalereskeun kasalahan ieu di Konsul.

Pimpinan konsul henteu ngaréspon. Master kami di pusat data henteu ngaréspon, kami pikir: "Panginten algoritma reselection bakal dianggo ayeuna?"

Henteu, éta moal jalan, sareng ngawaskeun moal nunjukkeun nanaon: Konsul bakal nyarios yén aya indéks komitmen, pamimpin parantos kapendak, sadayana saé.

Kumaha urang nungkulan ieu? service consul restart dina cron unggal jam. Upami Anjeun gaduh 50 server, euweuh deal badag. Nalika aya 16 di antarana, anjeun bakal ngartos kumaha jalanna.

kacindekan

Hasilna, kami nampi kauntungan ieu:

  • 100% cakupan sadaya mesin Linux.
  • Laju.
  • Otomatisasi.
  • Kami ngabébaskeun insinyur hardware sareng jaringan tina perbudakan.
  • Kamungkinan integrasi parantos muncul anu ampir teu aya watesna: bahkan sareng Kubernetes, bahkan sareng Ansible, bahkan sareng Python.

Минусы: Konsul, kalawan nu urang ayeuna kudu hirup, sarta biaya pisan tinggi kasalahan. Salaku conto, sakali jam 6 sonten (waktos perdana di Rusia) kuring ngédit hiji hal dina daptar jaringan. Kami ngan ukur ngawangun insulasi di BEFW dina waktos éta. Kuring ngalakukeun kasalahan dimana waé, sigana kuring nunjukkeun masker anu salah, tapi sadayana murag dina dua detik. Pemantauan hurung, pangrojong anu ditugaskeun ngajalankeun: "Kami gaduh sadayana!" Kapala jabatan janten kulawu nalika anjeunna ngajelaskeun bisnis naha ieu kajantenan.

Biaya kasalahan anu kacida luhurna nu urang geus datang nepi ka prosedur pencegahan kompléks urang sorangan. Lamun nerapkeun ieu dina situs produksi badag, anjeun teu perlu masihan master token leuwih Konsul ka dulur. Ieu bakal mungkas parah.

Harga Kuring nulis kode pikeun 400 jam nyalira. Tim abdi 4 urang nyéépkeun 10 jam sabulan pikeun ngadukung sadayana. Dibandingkeun sareng harga firewall generasi anyar, éta gratis.

Rencana. Rencana jangka panjang nyaéta milarian transportasi alternatif pikeun ngagentos atanapi ngalengkepan Konsul. Panginten éta Kafka atanapi anu sami. Tapi dina taun-taun datang urang bakal hirup di Konsul.

Rencana langsung: integrasi sareng Fail2ban, kalayan ngawaskeun, sareng nftables, sigana sareng distribusi anu sanés, métrik, monitoring canggih, optimasi. Pangrojong Kubernetes ogé aya dina rencana, sabab ayeuna urang gaduh sababaraha klaster sareng kahayang.

Langkung ti rencana:

  • milarian anomali dina lalu lintas;
  • manajemén peta jaringan;
  • rojongan Kubernetes;
  • assembling bungkusan pikeun sakabéh sistem;
  • Wéb-UI.

Kami terus-terusan ngusahakeun ngalegaan konfigurasi, ningkatkeun métrik sareng optimasi.

Miluan proyék. Proyék éta tétéla keren, tapi, hanjakalna, éta masih mangrupikeun proyék hiji jalma. Datang ka GitHub sarta coba ngalakukeun hiji hal: komitmen, nguji, nyarankeun hal, masihan assessment Anjeun.

Samentara éta kami Nyiapkeun pikeun Saint HighLoad ++, anu bakal lumangsung dina 6 jeung 7 April di St. Petersburg, sarta kami diondang pamekar sistem beban tinggi. ngalamar laporan. Panyatur anu berpengalaman parantos terang naon anu kedah dilakukeun, tapi pikeun anu énggal nyarios, kami nyarankeun sahenteuna nyobaan. Ilubiung dina konférénsi salaku panyatur ngabogaan sajumlah kaunggulan. Anjeun tiasa maca anu mana, contona, dina tungtungna Artikel ieu.

sumber: www.habr.com

Tambahkeun komentar