Konsul + iptables = :3

2010-cu ildə şirkət Döyüş oyunları 50 server və sadə şəbəkə modeli var idi: backend, frontend və firewall. Serverlərin sayı artdı, model daha mürəkkəbləşdi: səhnələşdirmə, ACL-lərlə təcrid olunmuş VLAN-lar, sonra VRF-li VPN-lər, L2-də ACL-li VLAN-lar, L3-də ACL-li VRF-lər. Baş fırlanır? Sonradan daha əyləncəli olacaq.

16 server olanda bu qədər heterojen seqmentlərlə göz yaşı olmadan işləmək mümkünsüz oldu. Beləliklə, başqa bir həll yolu tapdıq. Biz Netfilter yığınını götürdük, ona məlumat mənbəyi kimi Konsul əlavə etdik və sürətli paylanmış firewall əldə etdik. Onlar marşrutlaşdırıcılarda ACL-ləri əvəz etdilər və onlardan xarici və daxili təhlükəsizlik divarı kimi istifadə etdilər. Aləti dinamik şəkildə idarə etmək üçün biz hər yerdə istifadə olunan BEFW sistemini inkişaf etdirdik: məhsul şəbəkəsinə istifadəçi girişinin idarə edilməsindən tutmuş şəbəkə seqmentlərinin bir-birindən təcrid edilməsinə qədər.

Konsul + iptables = :3

O, sizə bunun necə işlədiyini və niyə bu sistemə daha yaxından nəzər salmağınız lazım olduğunu söyləyəcək. İvan Aqarkov (annmuor) - şirkətin Minsk inkişaf mərkəzində Texniki xidmət bölməsinin infrastruktur təhlükəsizliyi qrupunun rəhbəri. İvan SELinux pərəstişkarıdır, Perl-i sevir və kod yazır. İnformasiya təhlükəsizliyi qrupunun rəhbəri kimi o, Wargaming-i hakerlərdən qorumaq və şirkətdəki bütün oyun serverlərinin işləməsini təmin etmək üçün mütəmadi olaraq jurnallar, ehtiyat nüsxələr və R&D ilə işləyir.

Tarixi məlumat

Bunu necə etdiyimizi söyləməzdən əvvəl, ilk növbədə buna necə gəldiyimizi və nə üçün lazım olduğunu söyləyəcəyəm. Bunun üçün 9 il geriyə qayıdaq: 2010-cu ildə World of Tanks yeni çıxdı. Wargaming-in təxminən 50 serveri var idi.

Konsul + iptables = :3
Şirkət serverinin böyümə qrafiki.

Şəbəkə modelimiz var idi. O vaxt üçün optimal idi.

Konsul + iptables = :3
Şəbəkə modeli 2010.

Ön tərəfdə bizi sındırmaq istəyən pis adamlar var, lakin onun təhlükəsizlik divarı var. Backenddə firewall yoxdur, amma orada 50 server var, biz onların hamısını tanıyırıq. Hər şey yaxşı işləyir.

4 il ərzində server donanması 100 dəfə artaraq 5000-ə çatdı. İlk təcrid olunmuş şəbəkələr meydana çıxdı - səhnələşdirmə: onlar istehsala gedə bilmədilər və orada tez-tez təhlükəli ola biləcək şeylər işləyirdi.

Konsul + iptables = :3
Şəbəkə modeli 2014.

Ətalətlə biz eyni aparat parçalarından istifadə etdik və bütün işlər təcrid olunmuş VLAN-larda yerinə yetirildi: ACL-lər hansısa əlaqəyə icazə verən və ya inkar edən VLAN-lara yazılır.

2016-cı ildə serverlərin sayı 8000-ə çatdı.Wargaming digər studiyaları uddu və əlavə filial şəbəkələri meydana çıxdı. Görünür, onlar bizimdir, amma tam deyil: VLAN çox vaxt partnyorlar üçün işləmir, VRF ilə VPN istifadə etməlisən, izolyasiya daha mürəkkəbləşir. ACL izolyasiya qarışığı böyüdü.

Konsul + iptables = :3
Şəbəkə modeli 2016.

2018-ci ilin əvvəlinə maşın parkı 16-ə çatdı.000 seqment var idi, qalanlarını, o cümlədən maliyyə məlumatlarının saxlandığı qapalıları saymadıq. Konteyner şəbəkələri (Kubernetes), DevOps, VPN vasitəsilə, məsələn, IVS-dən qoşulan bulud şəbəkələri meydana çıxdı. Çoxlu qaydalar var idi - ağrılı idi.

Konsul + iptables = :3
2018-ci ildə şəbəkə modeli və izolyasiya üsulları.

İzolyasiya üçün istifadə etdik: L2-də ACL ilə VLAN, L3-də ACL ilə VRF, VPN və daha çox. Həddindən artıq çox.

Problemləri

Hər kəs ACL və VLAN ilə yaşayır. Səhv nədir? Bu suala ağrını gizlədən Harold cavab verəcək.

Konsul + iptables = :3

Problemlər çox idi, lakin beş böyük problem var idi.

  • Yeni qaydalar üçün həndəsi qiymət artımı. Hər bir yeni qaydanın əlavə edilməsi əvvəlkindən daha uzun çəkdi, çünki əvvəlcə belə bir qaydanın olub-olmadığını görmək lazım idi.
  • Seqmentlər daxilində firewall yoxdur. Seqmentlər bir növ bir-birindən ayrılmışdı və içəridə onsuz da kifayət qədər resurslar yox idi.
  • Qaydalar uzun müddət tətbiq edildi. Operatorlar bir saat ərzində bir yerli qaydanı əl ilə yaza bilərdilər. Qlobal bir neçə gün çəkdi.
  • Audit qaydaları ilə bağlı çətinliklər. Daha doğrusu, mümkün deyildi. İlk qaydalar 2010-cu ildə yazılmışdı və onların müəlliflərinin əksəriyyəti artıq şirkətdə işləmirdi.
  • İnfrastruktur nəzarətinin aşağı səviyyəsi. Əsas problem budur - biz ölkəmizdə nə baş verdiyini çox yaxşı bilmirdik.

Şəbəkə mühəndisi 2018-ci ildə “Bir az daha ACL lazımdır” deyə eşidəndə belə görünürdü.

Konsul + iptables = :3

Çözümlər

2018-ci ilin əvvəlində bununla bağlı nəsə etmək qərara alınıb.

İnteqrasiyaların qiyməti durmadan artır. Başlanğıc nöqtəsi böyük məlumat mərkəzlərinin təcrid olunmuş VLAN-ları və ACL-ləri dəstəkləməyi dayandırması idi, çünki cihazların yaddaşı bitdi.

Həll yolu: biz insan amilini aradan qaldırdıq və maksimum girişin təmin edilməsini avtomatlaşdırdıq.

Yeni qaydaların tətbiqi uzun müddət tələb edir. Həlli: qaydaların tətbiqini sürətləndirmək, onu paylanmış və paralel etmək. Bunun üçün paylanmış sistem tələb olunur ki, qaydalar rsync və ya SFTP olmadan min sistemə çatdırılsın.

Seqmentlər daxilində firewall yoxdur. Eyni şəbəkə daxilində müxtəlif xidmətlər görünəndə seqmentlər daxilində bir firewall bizə gəlməyə başladı. Həll yolu: host səviyyəsində firewalldan istifadə edin - host-based firewall. Demək olar ki, hər yerdə Linux var və hər yerdə iptables var, bu problem deyil.

Audit qaydaları ilə bağlı çətinliklər. Həll yolu: Bütün qaydaları nəzərdən keçirmək və idarə etmək üçün bir yerdə saxlayın ki, biz hər şeyi yoxlaya bilək.

İnfrastruktur üzərində nəzarətin aşağı səviyyəsi. Həll yolu: bütün xidmətlərin və onlar arasındakı girişlərin inventarını aparın.

Bu, texniki prosesdən daha çox inzibati prosesdir. Bəzən həftədə 200-300 yeni buraxılışımız olur, xüsusən promosyonlar və bayramlar zamanı. Üstəlik, bu, DevOps-un yalnız bir komandası üçündür. Bu qədər relizlərlə hansı portların, IP-lərin və inteqrasiyaların lazım olduğunu görmək mümkün deyil. Buna görə də, komandalardan soruşan xüsusi təlim keçmiş xidmət menecerlərinə ehtiyacımız var idi: "Onsuz da nə var və bunu niyə gündəmə gətirdiniz?"

Başladığımız hər şeydən sonra 2019-cu ildə bir şəbəkə mühəndisi belə görünməyə başladı.

Konsul + iptables = :3

Konsul

Qərara gəldik ki, xidmət menecerlərinin köməyi ilə tapdığımız hər şeyi Konsula yerləşdirək və oradan iptables qaydalarını yazaq.

Bunu etməyə necə qərar verdik?

  • Biz bütün xidmətləri, şəbəkələri və istifadəçiləri toplayacağıq.
  • Onların əsasında iptables qaydalarını yaradaq.
  • Biz nəzarəti avtomatlaşdırırıq.
  • ....
  • GƏR.

Konsul uzaq API deyil, o, hər node üzərində işləyə və iptables-ə yaza bilər. Qalır ki, lazımsız şeyləri təmizləyəcək avtomatik idarəetmələr tapmaqdır və problemlərin çoxu həll olunacaq! Qalanını getdikcə həll edəcəyik.

Niyə konsul?

Özünü yaxşı sübut etdi. 2014-15-ci illərdə biz ondan parolları saxladığımız Vault üçün backend kimi istifadə etdik.

Məlumat itirmir. İstifadə zamanı konsul bir qəza zamanı məlumatları itirməmişdir. Bu, bir firewall idarəetmə sistemi üçün böyük bir artıdır.

P2P əlaqələri dəyişikliklərin yayılmasını sürətləndirir. P2P ilə bütün dəyişikliklər tez gəlir, saatlarla gözləməyə ehtiyac yoxdur.

Rahat REST API. Biz Apache ZooKeeper-i də nəzərdən keçirdik, lakin onun REST API-si yoxdur, ona görə də qoltuqağaqları quraşdırmalı olacaqsınız.

Həm Açar Vault (KV), həm də Kataloq (Xidmət Kəşfi) kimi işləyir. Siz eyni anda xidmətləri, kataloqları və məlumat mərkəzlərini saxlaya bilərsiniz. Bu, təkcə bizim üçün deyil, həm də qonşu komandalar üçün əlverişlidir, çünki qlobal xidmət qurarkən biz böyük düşünürük.

Wargaming yığınının bir hissəsi olan Go-da yazılmışdır. Biz bu dili sevirik, çoxlu Go tərtibatçılarımız var.

Güclü ACL sistemi. Konsulda kimin nə yazdığına nəzarət etmək üçün ACL-lərdən istifadə edə bilərsiniz. Biz təmin edirik ki, firewall qaydaları başqa heç nə ilə üst-üstə düşməyəcək və bununla bağlı problemimiz olmayacaq.

Amma konsulun da çatışmazlıqları var.

  • Biznes versiyanız yoxdursa, məlumat mərkəzi daxilində miqyaslanmır. Yalnız federasiya tərəfindən genişləndirilə bilər.
  • Şəbəkənin keyfiyyətindən və server yükündən çox asılıdır. Şəbəkədə hər hansı bir gecikmə, məsələn, qeyri-bərabər sürət varsa, konsul məşğul serverdə server kimi düzgün işləməyəcək. Bu, P2P əlaqələri və yeni paylama modelləri ilə bağlıdır.
  • Çətinlik monitorinq mövcudluğu. Konsul statusunda hər şeyin qaydasında olduğunu deyə bilər, amma çoxdan vəfat edib.

Biz bu problemlərin əksəriyyətini Konsuldan istifadə edərkən həll etdik, ona görə də onu seçdik. Şirkətin alternativ backend planları var, lakin biz problemlərlə məşğul olmağı öyrənmişik və hazırda Konsulla yaşayırıq.

Konsul necə işləyir

Şərti məlumat mərkəzində üç-beş server quraşdıracağıq. Bir və ya iki server işləməyəcək: onlar kvorum təşkil edə bilməyəcək və məlumatlar uyğun gəlmədikdə kimin haqlı, kimin haqsız olduğuna qərar verə bilməyəcəklər. Beşdən çox mənası yoxdur, məhsuldarlıq aşağı düşəcək.

Konsul + iptables = :3

Müştərilər serverlərə istənilən qaydada qoşulurlar: eyni agentlər, yalnız bayraqla server = false.

Konsul + iptables = :3

Bundan sonra müştərilər P2P əlaqələrinin siyahısını alır və öz aralarında əlaqələr qurur.

Konsul + iptables = :3

Qlobal səviyyədə biz bir neçə məlumat mərkəzini birləşdiririk. Onlar həmçinin P2P-ni birləşdirir və ünsiyyət qururlar.

Konsul + iptables = :3

Başqa bir məlumat mərkəzindən məlumat almaq istədikdə sorğu serverdən serverə keçir. Bu sxem adlanır Serf protokolu. Serf protokolu, Konsul kimi, HashiCorp tərəfindən hazırlanmışdır.

Konsul haqqında bəzi vacib faktlar

Konsulun onun necə işlədiyini izah edən sənədləri var. Mən yalnız bilməyə dəyər olan seçilmiş faktları verəcəyəm.

Konsul xidmətçiləri seçicilər arasından usta seçirlər. Konsul hər bir məlumat mərkəzi üçün serverlər siyahısından master seçir və serverlərin sayından asılı olmayaraq bütün sorğular yalnız ona gedir. Ustaların dondurulması yenidən seçilməyə səbəb olmur. Usta seçilməyibsə, sorğulara heç kim xidmət göstərmir.

Üfüqi miqyaslama istəyirdiniz? Bağışlayın, yox.

Başqa bir məlumat mərkəzinə sorğu hansı serverə gəlməsindən asılı olmayaraq masterdan mastera keçir. Seçilmiş master, irəli sorğular üzrə yük istisna olmaqla, yükün 100% -ni alır. Məlumat mərkəzindəki bütün serverlərdə məlumatların yenilənmiş nüsxəsi var, lakin yalnız biri cavab verir.

Ölçəkləmənin yeganə yolu müştəridə köhnəlmiş rejimi aktivləşdirməkdir.

Köhnə rejimdə kvorum olmadan cavab verə bilərsiniz. Bu, məlumatların ardıcıllığından imtina etdiyimiz bir rejimdir, lakin adi haldan bir az daha sürətli oxuyur və istənilən server cavab verir. Təbii ki, yalnız usta vasitəsilə qeyd.

Konsul məlumat mərkəzləri arasında məlumatları köçürmür. Federasiya yığıldıqda, hər bir server yalnız öz məlumatlarına sahib olacaq. Başqaları üçün o, həmişə başqasına müraciət edir.

Əməliyyatdan kənar əməliyyatların atomikliyinə zəmanət verilmir. Unutmayın ki, hər şeyi dəyişə bilən tək siz deyilsiniz. Fərqli istəsəniz, kilidlə əməliyyat aparın.

Bloklama əməliyyatları kilidlənməyə zəmanət vermir. Sorğu birbaşa deyil, master-dan master-a gedir, buna görə də, məsələn, başqa bir məlumat mərkəzində blokladığınız zaman bloklamanın işləyəcəyinə zəmanət yoxdur.

ACL həmçinin girişə zəmanət vermir (bir çox hallarda). ACL işləməyə bilər, çünki o, bir federasiya məlumat mərkəzində - ACL məlumat mərkəzində (İlkin DC) saxlanılır. DC sizə cavab vermirsə, ACL işləməyəcək.

Dondurulmuş bir usta bütün federasiyanın donmasına səbəb olacaq. Məsələn, bir federasiyada 10 məlumat mərkəzi var və birinin şəbəkəsi pisdir və bir master uğursuz olur. Onunla ünsiyyətdə olan hər kəs bir dairədə ilişib qalacaq: xahiş var, ona cavab yoxdur, sap donur. Bunun nə vaxt olacağını bilmək üçün heç bir yol yoxdur, sadəcə bir-iki saatdan sonra bütün federasiya dağılacaq. Bununla bağlı edə biləcəyiniz heç bir şey yoxdur.

Status, kvorum və seçkilər ayrı bir mövzu ilə idarə olunur. Yenidən seçki olmayacaq, status heç nə göstərməyəcək. Canlı Konsulun olduğunu düşünürsən, soruşursan və heç nə olmur - cavab yoxdur. Eyni zamanda, status hər şeyin qaydasında olduğunu göstərir.

Biz bu problemlə qarşılaşdıq və bunun qarşısını almaq üçün məlumat mərkəzlərinin xüsusi hissələrini yenidən qurmalı olduq.

Konsul Müəssisəsinin biznes versiyasında yuxarıda göstərilən bəzi çatışmazlıqlar yoxdur. Onun bir çox faydalı funksiyaları var: seçicilərin seçilməsi, paylanması, miqyasının artırılması. Yalnız bir "amma" var - paylanmış sistem üçün lisenziya sistemi çox bahadır.

Həyatın hacklənməsi: rm -rf /var/lib/consul - agentin bütün xəstəliklərinin müalicəsi. Əgər bir şey sizin üçün işləmirsə, sadəcə məlumatlarınızı silin və məlumatları bir nüsxədən endirin. Çox güman ki, konsul işləyəcək.

BEFW

İndi Konsula əlavə etdiyimiz şeylərdən danışaq.

BEFW üçün qısaltmadır BuçaksavarEndFMən gedəcəmWhamısı. İlk sınaq öhdəliklərini yerinə yetirmək üçün anbarı yaradan zaman məhsulun adını birtəhər adlandırmalı oldum. Bu ad qalır.

Qayda şablonları

Qaydalar iptables sintaksisində yazılmışdır.

  • -N BEFW
  • -P INPUT DOP
  • -A INPUT -m dövlət-dövlət ƏLAQƏLİ,QURULMUŞ -j QƏBUL EDİR
  • -A GİRİŞ -i lo -j QƏBUL EDİR
  • -A GİRİŞ -j BEFW

İstisna hər şey BEFW zəncirinə keçir ESTABLISHED, RELATED və localhost. Şablon hər hansı bir şey ola bilər, bu sadəcə bir nümunədir.

BEFW necə faydalıdır?

Xidmətlər

Bizim bir xidmətimiz var, onun həmişə bir portu, işlədiyi qovşağı var. Qovşağımızdan yerli olaraq agentdən soruşa və bir növ xidmətimiz olduğunu öyrənə bilərik. Siz həmçinin etiketlər qoya bilərsiniz.

Konsul + iptables = :3

Konsulda işləyən və qeydiyyatdan keçən istənilən xidmət iptables qaydasına çevrilir. Bizdə SSH var - açıq port 22. Bash skripti sadədir: curl və iptables, başqa heç nə lazım deyil.

Müştərilər

Girişi hamıya deyil, seçmə şəkildə necə açmaq olar? IP siyahılarını xidmət adına görə KV yaddaşına əlavə edin.

Konsul + iptables = :3

Məsələn, onuncu şəbəkədəki hər kəsin SSH_TCP_22 xidmətinə daxil ola bilməsini istəyirik. Bir kiçik TTL sahəsi əlavə edilsin? indi isə müvəqqəti icazələrimiz var, məsələn, bir günlük.

Girişlər

Xidmətləri və müştəriləri birləşdiririk: xidmətimiz var, hər biri üçün KV anbarı hazırdır. İndi biz hamıya deyil, seçmə şəkildə giriş veririk.

Konsul + iptables = :3

Qruplar

Hər dəfə giriş üçün minlərlə İP yazsaq, yorulacağıq. Gəlin qruplaşmalarla çıxış edək - KV-də ayrı bir alt çoxluq. Gəlin onu Alias ​​(və ya qruplar) adlandıraq və qrupları eyni prinsipə uyğun olaraq orada saxlayaq.

Konsul + iptables = :3

Qoşulaq: indi biz SSH-ni xüsusi olaraq P2P üçün deyil, bütün qrup və ya bir neçə qrup üçün aça bilərik. Eyni şəkildə, TTL var - qrupa əlavə edə və müvəqqəti olaraq qrupdan çıxara bilərsiniz.

Konsul + iptables = :3

İnteqrasiya

Bizim problemimiz insan amili və avtomatlaşdırmadır. İndiyə qədər biz bunu bu şəkildə həll etmişik.

Konsul + iptables = :3

Biz Kukla ilə işləyirik və sistemə aid olan hər şeyi (tətbiq kodu) onlara ötürürük. Puppetdb (müntəzəm PostgreSQL) orada işləyən xidmətlərin siyahısını saxlayır, onları resurs növünə görə tapmaq olar. Orada kimin hara müraciət etdiyini öyrənə bilərsiniz. Bunun üçün bir çəkmə sorğusu və birləşmə sorğu sistemimiz də var.

Biz məlumatların ötürülməsinə kömək edən sadə bir həll olan befw-sync yazdıq. Birincisi, sinxronizasiya kukilərinə puppetdb tərəfindən daxil olur. Orada bir HTTP API konfiqurasiyası var: biz hansı xidmətlərə malik olduğumuzu, nə etməli olduğumuzu tələb edirik. Sonra konsula müraciət edirlər.

İnteqrasiya varmı? Bəli: onlar qaydaları yazdılar və Pull Sorğularının qəbul edilməsinə icazə verdilər. Müəyyən bir port lazımdır və ya hansısa qrupa host əlavə edin? Sorğunu çəkin, nəzərdən keçirin - daha "200 digər ACL tapın və bu barədə nəsə etməyə çalışın."

Optimallaşdırma

Localhost-u boş qayda zənciri ilə pingləmək 0,075 ms çəkir.

Konsul + iptables = :3

Bu zəncirə 10 iptables ünvanını əlavə edək. Nəticədə, ping 000 dəfə artacaq: iptables tamamilə xəttidir, hər bir ünvanın işlənməsi bir qədər vaxt aparır.

Konsul + iptables = :3

Minlərlə ACL-i köçürdüyümüz bir firewall üçün çoxlu qaydalarımız var və bu, gecikməni təqdim edir. Bu oyun protokolları üçün pisdir.

Amma qoysaq ipset-də 10 ünvan Ping hətta azalacaq.

Konsul + iptables = :3

Məsələ ondadır ki, ipset üçün “O” (alqoritm mürəkkəbliyi) nə qədər qayda olsa da, həmişə 1-ə bərabərdir. Doğrudur, bir məhdudiyyət var - 65535-dən çox qayda ola bilməz.Hələlik biz bununla yaşayırıq: onları birləşdirə, genişləndirə, birində iki ipset edə bilərsiniz.

saxlama

İterasiya prosesinin məntiqi davamı ipset-də xidmət üçün müştərilər haqqında məlumatların saxlanmasıdır.

Konsul + iptables = :3

İndi bizdə eyni SSH var və biz bir dəfəyə 100 IP yazmırıq, ancaq əlaqə saxlamalı olduğumuz ipsetin adını və aşağıdakı qaydanı təyin edirik. DROP. Bir qaydaya çevrilə bilər "Kim burada deyil, DROP", lakin daha aydındır.

İndi bizim qaydalarımız və dəstlərimiz var. Əsas vəzifə qaydanı yazmazdan əvvəl dəsti yaratmaqdır, çünki əks halda iptables qayda yazmayacaq.

Ümumi sxem

Diaqram şəklində dediyim hər şey belə görünür.

Konsul + iptables = :3

Biz Kuklaya öhdəlik götürürük, hər şey hosta göndərilir, burada xidmətlər, orada ipset və orada qeydiyyatdan keçməyə icazə verilmir.

İcazə verin və rədd edin

Dünyanı tez xilas etmək və ya kimisə tez söndürmək üçün bütün zəncirlərin əvvəlində iki ipset etdik: rules_allow и rules_deny. Bu necə işləyir?

Məsələn, kimsə botlarla internetimizdə yük yaradır. Əvvəllər onun IP-sini loglardan tapmalı, şəbəkə mühəndislərinə aparmalı idin ki, trafikin mənbəyini tapıb ona qadağa qoya bilsinlər. İndi fərqli görünür.

Konsul + iptables = :3

Biz onu konsula göndəririk, 2,5 saniyə gözləyin və hazır oldu. Konsul P2P vasitəsilə sürətlə payladığı üçün dünyanın hər yerində, hər yerdə işləyir.

Bir dəfə firewall ilə səhvə görə WOT-u tamamilə dayandırdım. rules_allow - bu bizim belə hallardan sığortamızdır. Əgər biz hardasa firewall ilə səhv etmişiksə, haradasa nəsə bloklanıbsa, biz həmişə şərti göndərə bilərik 0.0/0hər şeyi tez götürmək. Daha sonra hər şeyi əl ilə düzəldəcəyik.

Digər dəstlər

Siz boşluqda hər hansı digər dəstləri əlavə edə bilərsiniz $IPSETS$.

Konsul + iptables = :3

Nə üçün? Bəzən kiməsə, məsələn, klasterin bəzi hissəsinin bağlanmasını təqlid etmək üçün ipset lazımdır. Hər kəs istədiyi dəstləri gətirə bilər, adını deyə bilər və onlar Konsuldan götürüləcək. Eyni zamanda, dəstlər ya iptables qaydalarına qatıla, ya da komanda kimi çıxış edə bilər NOOP: Davamlılıq demon tərəfindən qorunacaq.

İstifadəçi

Əvvəllər belə idi: istifadəçi şəbəkəyə qoşulur və domen vasitəsilə parametrlər alırdı. Yeni nəsil firewallların yaranmasından əvvəl Cisco istifadəçinin harada olduğunu və IP-nin harada olduğunu necə başa düşəcəyini bilmirdi. Buna görə də, giriş yalnız maşının host adı vasitəsilə verildi.

Biz nə etdik? Ünvanı alan kimi ilişib qaldıq. Adətən bu dot1x, Wi-Fi və ya VPN-dir - hər şey RADIUS-dan keçir. Hər bir istifadəçi üçün istifadəçi adı ilə qrup yaradırıq və onun dhcp.lease-ə bərabər olan TTL ilə IP yerləşdiririk – müddəti bitən kimi qayda yox olacaq.

Konsul + iptables = :3

İndi biz digər qruplar kimi xidmətlərə istifadəçi adı ilə girişi aça bilərik. Biz host adları dəyişdikdə onların ağrısını aradan qaldırdıq və şəbəkə mühəndislərinin yükünü götürdük, çünki onların artıq Cisco-ya ehtiyacı yoxdur. İndi mühəndislər öz serverlərində girişi qeyd edirlər.

Izolyasiya

Eyni zamanda, izolyasiyanı sökməyə başladıq. Xidmət menecerləri inventar apardılar və biz bütün şəbəkələrimizi təhlil etdik. Gəlin onları eyni qruplara ayıraq və lazımi serverlərdə qruplar, məsələn, inkar etmək üçün əlavə edildi. İndi eyni səhnə izolyasiyası istehsalın qaydaları_deny ilə başa çatır, lakin istehsalın özündə deyil.

Konsul + iptables = :3

Sxem tez və sadə işləyir: biz bütün ACL-ləri serverlərdən çıxarırıq, aparatı boşaltırıq və təcrid olunmuş VLAN-ların sayını azaldırıq.

Dürüstlüyə nəzarət

Əvvəllər, kiminsə təhlükəsizlik duvarı qaydasını əl ilə dəyişdirdiyi zaman xəbər verən xüsusi tetikleyicimiz var idi. Firewall qaydalarını yoxlamaq üçün böyük bir linter yazırdım, çətin idi. Dürüstlük indi BEFW tərəfindən idarə olunur. Qeyrətlə qoyduğu qaydaların dəyişməməsini təmin edir. Kimsə firewall qaydalarını dəyişərsə, o, hər şeyi geri dəyişəcək. "Evdən işləyə bilmək üçün tez bir proxy qurdum" - daha belə seçimlər yoxdur.

BEFW xidmətlərdən ipset-ə nəzarət edir və befw.conf-dakı siyahı, BEFW zəncirindəki xidmət qaydaları. Ancaq digər zəncirləri və qaydaları və digər ipsetləri izləmir.

Qəzadan qorunma

BEFW həmişə sonuncu məlum yaxşı vəziyyəti birbaşa state.bin binar strukturunda saxlayır. Bir şey səhv olarsa, həmişə bu vəziyyətə qayıdır.bin.

Konsul + iptables = :3

Bu, məlumat göndərmədiyi və ya kimsə səhv etdiyi və tətbiq edilə bilməyən qaydalardan istifadə etdiyi qeyri-sabit Konsul əməliyyatından sığortadır. Firewall olmadan qalmamağımızı təmin etmək üçün hər hansı bir mərhələdə xəta baş verərsə, BEFW ən son vəziyyətə qayıdacaq.

Kritik vəziyyətlərdə bu, işləyən bir firewallla qalacağımıza zəmanətdir. Admin gəlib düzəldəcəyi ümidi ilə bütün boz şəbəkələri açırıq. Bir gün mən bunu konfiqurasiyaya qoyacağam, amma indi sadəcə üç boz şəbəkəmiz var: 10/8, 172/12 və 192.168/16. Konsulumuzda bu, daha da inkişaf etməmizə kömək edən mühüm xüsusiyyətdir.

Demo: hesabat zamanı İvan BEFW-nin demo rejimini nümayiş etdirir. Nümayişi izləmək daha asandır video. Demo mənbə kodu mövcuddur GitHub-da.

Pitfalls

Qarşılaşdığımız səhvlər haqqında sizə məlumat verəcəyəm.

ipset əlavə dəsti 0.0.0.0/0. ipset-ə 0.0.0.0/0 əlavə etsəniz nə olar? Bütün IP-lər əlavə olunacaqmı? İnternetə çıxış mümkün olacaqmı?

Xeyr, iki saatlıq fasiləyə başa gələn bir səhv alacağıq. Üstəlik, səhv 2016-cı ildən işləmir, o, RedHat Bugzilla-da #1297092 nömrəsi altında yerləşir və biz onu təsadüfən tapdıq - bir tərtibatçının hesabatından.

İndi BEFW-də bu, ciddi bir qaydadır 0.0.0.0/0 iki ünvana çevrilir: 0.0.0.0/1 и 128.0.0.0/1.

ipset bərpa dəsti < faylı. Siz ona dediyiniz zaman ipset nə edir restore? Sizcə iptables ilə eyni işləyir? Məlumatları bərpa edəcəkmi?

Belə bir şey yoxdur - birləşir və köhnə ünvanlar heç yerə getmir, girişi bloklamırsınız.

İzolyasiyanı sınaqdan keçirərkən səhv tapdıq. İndi olduqca mürəkkəb bir sistem var - əvəzinə restore həyata keçirilmişdir create tempsonra restore flush temp и restore temp. Mübadilə sonunda: atomiklik üçün, çünki bunu ilk etsəniz flush və bu anda bir paket gəlir, o, atılacaq və nəsə səhv gedəcək. Deməli, orada bir az qara sehr var.

konsul kv get -datacenter=digər. Dediyim kimi, biz bəzi data tələb etdiyimizi düşünürük, lakin ya məlumat alacağıq, ya da xəta. Biz bunu yerli konsul vasitəsilə edə bilərik, lakin bu halda hər ikisi donacaq.

Yerli Konsul müştərisi HTTP API üzərindən paketdir. Lakin o, sadəcə olaraq asılır və Ctrl+C və ya Ctrl+Z və ya başqa bir şeyə cavab vermir, yalnız kill -9 növbəti konsolda. Biz bununla böyük bir klaster qurarkən qarşılaşdıq. Ancaq hələ ki, bir həllimiz yoxdur, biz bu səhvi Konsulda düzəltməyə hazırlaşırıq.

Konsul rəhbəri cavab vermir. Məlumat mərkəzindəki ustamız cavab vermir, düşünürük: "Bəlkə yenidən seçim alqoritmi indi işləyəcək?"

Xeyr, bu işləməyəcək və monitorinq heç nə göstərməyəcək: Konsul deyəcək ki, öhdəlik indeksi var, lider tapılıb, hər şey yaxşıdır.

Bununla necə məşğul oluruq? service consul restart cron hər saat. 50 serveriniz varsa, böyük bir şey yoxdur. Onların 16-i olduqda, bunun necə işlədiyini başa düşəcəksiniz.

Nəticə

Nəticədə aşağıdakı üstünlükləri əldə etdik:

  • Bütün Linux maşınlarını 100% əhatə edir.
  • Sürət.
  • Avtomatlaşdırma.
  • Aparat və şəbəkə mühəndislərini köləlikdən azad etdik.
  • Demək olar ki, sonsuz olan inteqrasiya imkanları ortaya çıxdı: hətta Kubernetes ilə, hətta Ansible ilə, hətta Python ilə.

Eksiler: Konsul, indi yaşamalı olduğumuz konsul və səhvin çox yüksək qiyməti. Nümunə olaraq, bir dəfə axşam saat 6-da (Rusiyada praym-taym) şəbəkələrin siyahılarında nəyisə redaktə edirdim. Biz o vaxt BEFW-də sadəcə izolyasiya tikirdik. Mən haradasa səhv etdim, deyəsən yanlış maskanı göstərmişəm, amma hər şey iki saniyədə düşdü. Monitorinq yanır, növbətçi yardımçı qaçaraq gəlir: “Hər şeyimiz var!” Şöbə müdiri biznesə bunun səbəbini izah edəndə boz oldu.

Səhvlərin qiyməti o qədər yüksəkdir ki, biz öz kompleks qarşısının alınması prosedurumuzu hazırlamışıq. Bunu böyük bir istehsal saytında tətbiq etsəniz, hər kəsə Konsul üzərində master token verməyə ehtiyac yoxdur. Bunun sonu pis olacaq.

Qiymət. Təkcə 400 saat kod yazdım. 4 nəfərdən ibarət komandam ayda 10 saatını hər kəsə dəstək olmaq üçün sərf edir. İstənilən yeni nəsil təhlükəsizlik divarının qiyməti ilə müqayisədə o, pulsuzdur.

Planlar. Uzunmüddətli plan konsulu əvəz etmək və ya tamamlamaq üçün alternativ nəqliyyat tapmaqdır. Ola bilsin ki, bu, Kafka və ya buna bənzər bir şey olacaq. Amma yaxın illərdə biz Konsulda yaşayacağıq.

Dərhal planlar: Fail2ban ilə inteqrasiya, monitorinq, nftables, bəlkə də digər paylamalar, ölçülər, qabaqcıl monitorinq, optimallaşdırma. Kubernetes dəstəyi də planların bir yerindədir, çünki indi bir neçə klasterimiz və istəyimiz var.

Planlardan daha çox:

  • trafikdə anomaliyaların axtarışı;
  • şəbəkə xəritəsinin idarə edilməsi;
  • Kubernetes dəstəyi;
  • bütün sistemlər üçün paketlərin yığılması;
  • Veb-UI.

Biz daim konfiqurasiyanın genişləndirilməsi, ölçülərin artırılması və optimallaşdırma üzərində işləyirik.

Layihəyə qoşulun. Layihə gözəl çıxdı, amma təəssüf ki, hələ də bir nəfərlik layihədir. Gəl Github və bir şey etməyə çalışın: öhdəlik götürün, sınayın, nəyisə təklif edin, öz qiymətinizi verin.

Bu arada hazırlaşırıq Müqəddəs Yüksək Yük ++, 6 və 7 aprel tarixlərində Sankt-Peterburqda baş tutacaq və biz yüksək yüklü sistemlərin tərtibatçılarını dəvət edirik. hesabat üçün müraciət edin. Təcrübəli natiqlər nə edəcəyini artıq bilirlər, lakin danışmağa yeni başlayanlar üçün ən azı tövsiyə edirik sınamaq. Konfransda məruzəçi kimi iştirak etməyin bir sıra üstünlükləri var. Hansıları, məsələn, sonunda oxuya bilərsiniz bu yazı.

Mənbə: www.habr.com

Добавить комментарий