Ders 12 / 13
Güvenlik Duvarı Kuralları
Varsayılan reddet politikasının beş adımı yüz yirmi sırada uygulanır; kırkı tam, yirmisi yarım kilitlenme üretir, son kural kümesi yüz yirmi sıranın hepsinde aynı olduğu için kuru çalışma bunların sıfırını önler ve yazım hatalarında kuru çalışma beş, uçtan deneme beş aday eler.
İçindekiler
Önceki ders kararın hangi durakta verildiğini sordu ve kâhin olarak politikayı seçti: hiçbir kural eşleşmediği için zincirin varsayılanı devreye girmişti. O varsayılan bir kaza değil, bir tercihtir. Bu ders o tercihi ve onu kurma işini ele alır.
Varsayılan reddet politikası tek bir satırdır ve o satırın ne zaman yazıldığı, ne yazdığından daha çok sonuç doğurur. Bu dersin ölçtüğü şey kuralların içeriği değil, uygulanma sırasıdır; ve bu sıranın yanlış seçilmesi, yöneticinin makineyle arasındaki tek yolu kesebilir.
Varsayılan Reddet ve Meşru Akışlar
Varsayılan reddet (default deny), bir zincirin politikasını “eşleşmeyen her şeyi reddet” olarak kurmaktır. Karşıtı varsayılan kabuldür: eşleşmeyen her şey geçer ve yasaklamak istediğiniz her durumu tek tek yazmanız gerekir. İkisi arasındaki fark bir kural sayısı farkı değil, bir hata yönü farkıdır. Varsayılan kabulde unutulan kural bir açıklık üretir; varsayılan reddette unutulan kural bir kesinti üretir. Kesinti görülür, açıklık görülmez.
Varsayılan reddet kurulurken ayakta tutulması gereken meşru akışlar vardır ve bu kurguda dört tanedir. Geri döngü akışı makinenin kendi süreçlerinin birbiriyle konuşmasıdır. Kurulu bağlantı akışı, halihazırda açık oturumların geri dönüş paketleridir. Yönetim akışı yöneticinin bu makineye ulaşma yoludur. Hizmet akışı makinenin dışarıya sunduğu servistir. Her biri bir kuralla ayakta kalır.
Beş adım vardır ve dördü izin, biri politikadır. Aşağıdaki döküm çalıştırılmamıştır ve çalıştırılabilir bir komut dizisi değildir; yalnız adımların adlarını ve iki sıralamanın farkını göstermek için yazılmıştır:
# ornek dokum , calistirilabilir bir dizi degildir # guvenli sira: reddet politikasi EN SONA birakilir 1 geri-dongu-izni 2 kurulu-baglanti-izni 3 yonetim-izni 4 hizmet-izni 5 varsayilan-reddet # kilitleyen sira: reddet , yonetim ve kurulu izinlerinden ONCE 1 varsayilan-reddet <- uzak oturum bu adimda duser 2 ... <- kalan adimlar uygulanamaz
Kilitlenme (lockout), yöneticinin kendi erişimini kesmesidir. Bu sözcük İşletim Sistemi
Kavramları kursundaki deadlock karşılığıyla aynıdır ama olay aynı değildir: orada birbirini
bekleyen iki süreç vardır ve hiçbiri ilerleyemez, burada tek bir yönetici vardır ve kendi
kanalını kapatmıştır. Ortak yanları yalnız sonucun geri döndürülemez görünmesidir.
Yüz Yirmi Sıra
Kurgu şudur: beş adım bir makinede uygulanacak ve yönetici uzaktan bağlıdır. Adımların sırası serbesttir; bütün sıralar tüketici olarak sayılır.
- EF31 — Beş adımın 120 sırası tam sayımla üretilir; örnekleme ve tohum yoktur.
- EF32 — Yöneticinin oturumu, reddet politikası uygulandığında yönetim izni ya da kurulu bağlantı izni kurallarından en az biri yerindeyse ayakta kalır.
- EF33 — Oturum düştüğünde kalan adımlar uygulanamaz; sıra orada kesilir.
- EF34 — Kurulu bağlantı izni verilip yönetim izni verilmeden reddet uygulanırsa mevcut oturum yaşar, yeni bağlantı kurulamaz; bu duruma yarım kilitlenme denir.
- EF35 — Geri alma zamanlayıcısı 120 saniyeye kurulur; süre dolduğunda önceki kural kümesi geri yüklenir.
- EF36 — Kural yazımı ölçümünde yedi aday vardır: altı yazım hatası ve hatasız durum.
- EF37 — Kuru çalışma, uygulanacak kural kümesini uygulamadan üretir ve yapısal hataları görür; niyeti bilmediği için yanlış yazılmış bir bağlantı noktasını göremez.
- EF38 — Uçtan deneme dört meşru akışın hepsini yoklar; bu yüzden altı hatanın hepsini görür, ama kural kümesinin uygulanmış olmasını gerektirir.
- EF39 — Aday kümesi süpürmesi altı, yedi ve sekiz adaylı listelerle yapılır.
- EF40 — Bütün sayılar tam sayımdır; rastgelelik ve tohum yoktur.
"""Varsayilan reddet: uygulama sirasi ve kural yazim hatalari. Bolum 1 - bes adimin 120 sirasi tuketici sayilir , kac sira kilitlenme uretir. Bolum 2 - yedi aday (alti yazim hatasi ve hatasiz durum) , dort okuma. """ from itertools import permutations ADIM = ("geri-dongu-izni", "kurulu-baglanti-izni", "yonetim-izni", "hizmet-izni", "varsayilan-reddet") GERI_ALMA = 120 def uygula(sira): """Reddet politikasi uygulanirken yonetim ya da kurulu izni yoksa uzak oturum duser; kalan adimlar uygulanamaz.""" var = set() for i, a in enumerate(sira): var.add(a) if a == "varsayilan-reddet": if not ({"yonetim-izni", "kurulu-baglanti-izni"} & var): return "tam-kilitlenme", i + 1, len(sira) - (i + 1) if "yonetim-izni" not in var: return "yarim-kilitlenme", i + 1, 0 return "guvenli", len(sira), 0 SIRALAR = list(permutations(ADIM)) SONUC = [uygula(s) for s in SIRALAR] SAYIM = {} for tur, _, _ in SONUC: SAYIM[tur] = SAYIM.get(tur, 0) + 1 print("bes adimin butun siralari:", len(SIRALAR)) for tur in ("guvenli", "yarim-kilitlenme", "tam-kilitlenme"): print(f" {tur:18s} {SAYIM.get(tur, 0):3d} / {len(SIRALAR)}" f" oran {SAYIM.get(tur, 0) / len(SIRALAR):.4f}") print(" tam kilitlenmede uygulanamayan adim toplami:", sum(u for t, _, u in SONUC if t == "tam-kilitlenme")) print(" son kural kumesi kac ayri bicimde bitiyor:", len({frozenset(s) for s in SIRALAR})) print() TAM = SAYIM["tam-kilitlenme"] print("uygulama bicimi kilitlenme harici mudahale kesinti (sn)" " kuru calismanin onledigi") for ad, kilit, mudahale, kesinti, kuru in ( ("duz uygulama", TAM, TAM, 0, 0), ("kuru calisma sonrasi", TAM, TAM, 0, 0), ("zamanlayiciyla geri alma", TAM, 0, TAM * GERI_ALMA, 0), ("ayri yonetim kanali", TAM, 0, 0, 0), ("atomik yukleme", 0, 0, 0, 0)): print(f" {ad:23s} {kilit:10d} {mudahale:16d} {kesinti:13d} {kuru:27d}") print() HATA = { "sozdizimi-hatasi": (True, True, "yonetim-akisi-kesildi"), "kural-yanlis-zincirde": (False, True, "yonetim-akisi-kesildi"), "kural-sirasi-golgeliyor": (False, True, "hizmet-akisi-kesildi"), "durum-kurali-eksik": (False, True, "geri-donus-kesildi"), "yanlis-arayuz-adi": (False, True, "yonetim-akisi-kesildi"), "yanlis-bag-noktasi": (False, False, "hizmet-akisi-kesildi"), "hata-yok": (False, False, "hepsi-gecti"), } KAHIN = "yanlis-bag-noktasi" SINAMA = { "sozdizim-denetimi": lambda a: "hata" if HATA[a][0] else "temiz", "kural-listesi": lambda a: ("kural-yok" if a == "sozdizimi-hatasi" else "baska-zincirde" if a == "kural-yanlis-zincirde" else "yerinde"), "kuru-calisma": lambda a: a if HATA[a][1] else "temiz", "uctan-deneme": lambda a: HATA[a][2], } RISK = {"sozdizim-denetimi": 0, "kural-listesi": 0, "kuru-calisma": 0, "uctan-deneme": sum(1 for a in HATA if HATA[a][2] == "yonetim-akisi-kesildi")} A = tuple(HATA) def ele(adaylar, s, yanit): return tuple(a for a in adaylar if SINAMA[s](a) == yanit) def obek(sinamalar, adaylar): o = {} for a in adaylar: o.setdefault(tuple(SINAMA[s](a) for s in sinamalar), []).append(a) return [sorted(v) for v in o.values() if len(v) > 1] print("aday:", len(A), "| kahin:", KAHIN) print() print("okuma ayri yanit elenen kalan yonetimi kesme riski") for s in SINAMA: kalan = len(ele(A, s, SINAMA[s](KAHIN))) print(f" {s:18s} {len({SINAMA[s](a) for a in A}):11d} {len(A) - kalan:7d}" f" {kalan:6d} {RISK[s]:20d}") print() print("okuma kumesi ayrilamayan obek") for ad, k in (("yalniz sozdizim denetimi", ["sozdizim-denetimi"]), ("sozdizim + kural listesi", ["sozdizim-denetimi", "kural-listesi"]), ("kuru calisma", ["kuru-calisma"]), ("uctan deneme", ["uctan-deneme"]), ("kuru calisma + uctan deneme", ["kuru-calisma", "uctan-deneme"])): o = obek(k, A) print(f" {ad:34s} {len(o):8d}", o if o else "") print() print("aday kumesi supurmesi") HATA["yanlis-kaynak-araligi"] = (False, False, "hizmet-akisi-kesildi") for ad, k in (("6 aday: durum-kurali-eksik cikarildi", tuple(a for a in A if a != "durum-kurali-eksik")), ("7 aday: temel liste", A), ("8 aday: yanlis-kaynak-araligi eklendi", A + ("yanlis-kaynak-araligi",))): kalan = len(ele(k, "kuru-calisma", SINAMA["kuru-calisma"](KAHIN))) o = obek(["kuru-calisma", "uctan-deneme"], k) print(f" {ad:38s} kuru calisma elenen {len(k) - kalan:2d} kalan {kalan:2d}" f" | iki okuma birlikte ayrilamayan obek {len(o)}" f" en buyuk {max((len(x) for x in o), default=0)}")
bes adimin butun siralari: 120 guvenli 60 / 120 oran 0.5000 yarim-kilitlenme 20 / 120 oran 0.1667 tam-kilitlenme 40 / 120 oran 0.3333 tam kilitlenmede uygulanamayan adim toplami: 140 son kural kumesi kac ayri bicimde bitiyor: 1 uygulama bicimi kilitlenme harici mudahale kesinti (sn) kuru calismanin onledigi duz uygulama 40 40 0 0 kuru calisma sonrasi 40 40 0 0 zamanlayiciyla geri alma 40 0 4800 0 ayri yonetim kanali 40 0 0 0 atomik yukleme 0 0 0 0 aday: 7 | kahin: yanlis-bag-noktasi okuma ayri yanit elenen kalan yonetimi kesme riski sozdizim-denetimi 2 1 6 0 kural-listesi 3 2 5 0 kuru-calisma 6 5 2 0 uctan-deneme 4 5 2 3 okuma kumesi ayrilamayan obek yalniz sozdizim denetimi 1 [['durum-kurali-eksik', 'hata-yok', 'kural-sirasi-golgeliyor', 'kural-yanlis-zincirde', 'yanlis-arayuz-adi', 'yanlis-bag-noktasi']] sozdizim + kural listesi 1 [['durum-kurali-eksik', 'hata-yok', 'kural-sirasi-golgeliyor', 'yanlis-arayuz-adi', 'yanlis-bag-noktasi']] kuru calisma 1 [['hata-yok', 'yanlis-bag-noktasi']] uctan deneme 2 [['kural-yanlis-zincirde', 'sozdizimi-hatasi', 'yanlis-arayuz-adi'], ['kural-sirasi-golgeliyor', 'yanlis-bag-noktasi']] kuru calisma + uctan deneme 0 aday kumesi supurmesi 6 aday: durum-kurali-eksik cikarildi kuru calisma elenen 4 kalan 2 | iki okuma birlikte ayrilamayan obek 0 en buyuk 0 7 aday: temel liste kuru calisma elenen 5 kalan 2 | iki okuma birlikte ayrilamayan obek 0 en buyuk 0 8 aday: yanlis-kaynak-araligi eklendi kuru calisma elenen 5 kalan 3 | iki okuma birlikte ayrilamayan obek 1 en buyuk 2
Sıranın Bedeli
Üst tablo yüz yirmi sırayı üç öbeğe ayırıyor. 60 sıra güvenli, 20 sıra yarım kilitlenme, 40 sıra tam kilitlenme üretiyor. Üçte biri. Reddet politikası, yönetim izni ve kurulu bağlantı izni arasında hiçbir tercih yapılmadığında bu üç adımdan hangisinin önce geleceği eşit olasılıdır ve reddetin önce gelmesi kilitlenmedir.
Yarım kilitlenmenin yirmi sırası, en sinsi öbektir. Kurulu bağlantı izni verilmiş, reddet uygulanmış, yönetim izni henüz yazılmamıştır. Yöneticinin oturumu ayaktadır; komutlar çalışmakta, çıktılar dönmektedir. Hiçbir belirti yoktur. O oturum herhangi bir nedenle kapandığında geriye dönüş yoktur ve kapanma nedeni bir ağ kesintisi, bir uçbirim kapatması ya da bir zaman aşımı olabilir. Ayakta kalan oturum, erişimin sürdüğünün kanıtı değildir.
Tam kilitlenmenin kırk sırasında bir bedel daha var: uygulanamayan adım toplamı 140. Sıra kesildiğinde kural kümesi yarım kalır ve yarım kalan küme genellikle hem yöneticiyi hem hizmeti dışarıda bırakır. Arıza tek bir erişim arızası değil, aynı anda bir hizmet kesintisidir.
Üst tablonun son satırı bu dersin en önemli bulgusudur: son kural kümesi yüz yirmi sıranın hepsinde aynıdır — bir tek biçim. Uygulanan adımların kümesi değişmiyor, yalnız sıraları değişiyor. Bunun doğrudan sonucu şudur: son kural kümesini uygulamadan üreten ve inceleyen bir kuru çalışma, bu kilitlenmelerin hiçbirini göremez. İkinci tablonun son sütunu bu yüzden baştan aşağı sıfırdır. Tehlike son durumda değil, ara durumlardadır.
Kilitlenmeyi Önleyen Yollar
İkinci tablo dört yolu bedelleriyle yan yana koyuyor.
Düz uygulama kırk kilitlenmede kırk harici müdahale demektir; her müdahale konsol düzeyinde erişim ya da makinenin başına gitmek anlamına gelir. Kuru çalışma sonrası uygulama aynı sayıları verir; kuru çalışma bu sınıf için değersizdir. Zamanlayıcıyla geri alma kırk kilitlenmeyi önlemez ama harici müdahaleyi sıfıra indirir: yüz yirmi saniyelik zamanlayıcı dolduğunda önceki kural kümesi geri yüklenir ve yönetici geri girer. Bedeli toplam 4800 saniyelik kesintidir. Ayrı yönetim kanalı da kilitlenmeyi önlemez, müdahaleyi sıfıra indirir ve kesinti üretmez; bedeli, o kanalın sürekli var olmasıdır. Atomik yükleme kural kümesini tek bir işlemde değiştirir; ara durum oluşmadığı için kilitlenme sayısı 0 olur.
Dört yolun sırası bu tablodan çıkıyor. Ara durum üretmeyen yol en iyisidir, çünkü sorunu kaynağında yok eder. Üretilen ara durumu kısa tutan yol ikincisidir. Ara durumu tolere edilebilir kılan yol üçüncüsüdür. Ara durumu yalnız inceleyen yol ise bu sınıf için hiçbir şey yapmaz.
Kilitlenmenin kendi kanıtı da yoktur ve bu, kursun üçüncü iddiasının buradaki biçimidir. Oturum düştüğü anda yöneticinin elinde kalan tek şey uçbirimde donmuş bir ekrandır; makinede ne olduğunu söyleyecek satır makinenin içindedir ve makineye girilemez. Düşürülen yönetim paketinin izi de önceki derste sayıldığı gibi kayıt açılmadıkça sıfır satırdır. Bu yüzden zamanlayıcının süresi, günlüğü okuyup karar vermeye değil, geri gelmeye göre seçilir.
Üç Sayı
Alt ölçüm kural yazımına bakıyor: küme doğru sırayla uygulanıyor, ama yazılmış kuralın kendisinde
bir hata olabilir. Kâhin: yedi adaydan gerçek olan yanlis-bag-noktasi — kural yazılmış,
sözdizimi doğru, zinciri doğru, sırası doğru ve içindeki bağlantı noktası yanlış. Sınama:
sözdizim denetimi “temiz” diyor, kural listesi kuralı “yerinde” gösteriyor, kuru çalışma “temiz”
diyor, uçtan deneme “hizmet akışı kesildi” diyor. Elenen aday: sözdizim denetimi 1, kural
listesi 2, kuru çalışma 5, uçtan deneme 5.
Son iki okuma aynı sayıda aday eliyor ve bıraktıkları iki adaylık kalıntı farklı. Kuru
çalışmanın bıraktığı çift hata-yok ile yanlis-bag-noktasi; yani kuru çalışma “temiz” dediğinde
gerçekten temiz olmakla, göremediği bir hatayı taşımak arasında ayrım yapamıyor. Uçtan denemenin
bıraktığı çift ise kural-sirasi-golgeliyor ile yanlis-bag-noktasi; ikisi de aynı akışı
kesiyor. İki okuma birlikte kullanıldığında ayrılamayan öbek 0.
Sağdaki sütun neden ikisinin de gerektiğini söylüyor. Uçtan denemenin yönetim akışını kesme riski 3: yedi adayın üçünde deneme yapılabilmesi için uygulanan küme yöneticinin kendi yolunu kapatır. Kuru çalışmanın riski 0. Doğru sıra buradan çıkar: önce risksiz okuma, sonra zamanlayıcı ya da ayrı kanal koruması altında riskli deneme. Kuru çalışma denemenin yerini almaz; denemeyi ucuzlatır, çünkü yakalayabildiği beş hatayı deneme yapılmadan eler.
Aday Kümesi Süpürmesi
Alt tablo yine üç boy deniyor. durum-kurali-eksik çıkarıldığında kuru çalışmanın elediği aday
beşten dörde iniyor, kalan yine iki. Listeye yanlis-kaynak-araligi eklendiğinde elenen sayısı
5’te kalıyor, kalan üçe çıkıyor ve iki okuma birlikte kullanıldığında bile ayrılamayan bir
öbek doğuyor: yeni aday da kuru çalışmadan kaçıyor ve aynı akışı kesiyor.
Örüntü konu boyunca aynı kaldı. Aday listesi büyüdükçe eleme sayısı sabit kalıyor, kalan belirsizlik büyüyor. Kuru çalışmanın göremediği hata türü listeye her eklendiğinde, “temiz” yanıtının anlamı bir aday daha zayıflıyor.
Özet
- Varsayılan reddet politikası dört meşru akışı ayakta tutan dört izin kuralı ister: geri döngü, kurulu bağlantı, yönetim ve hizmet.
- Beş adımın 120 sırasından 60’ı güvenli, 20’si yarım kilitlenme, 40’ı tam kilitlenme üretir; tam kilitlenmede uygulanamayan adım toplamı 140.
- Yarım kilitlenmede mevcut oturum yaşar ve hiçbir belirti vermez; ayakta kalan oturum erişimin sürdüğünün kanıtı değildir.
- Son kural kümesi yüz yirmi sıranın hepsinde aynıdır; bu yüzden kuru çalışma sıra kaynaklı kilitlenmelerin 0’ını önler. Zamanlayıcıyla geri alma ve ayrı yönetim kanalı harici müdahaleyi sıfırlar, atomik yükleme kilitlenmeyi sıfırlar.
- Kural yazım hatalarında kuru çalışma 5, uçtan deneme 5 aday eler ve bıraktıkları kalıntı farklıdır; ikisi birlikte ayrılamayan öbeği 0’a indirir. Uçtan denemenin yönetimi kesme riski 3, kuru çalışmanınki 0.
Sonraki Adım
Bu ders bir makinenin kendi kapısını nasıl kapattığını saydı. Sonraki ders ters yöne bakar: aynı makine bir ağın çıkışında durduğunda, arkasındaki makineler için adres dönüştürme yapar ve dışarıdan gelen bağlantıları içeri yönlendirir. Her yönlendirme kuralı, kapatılan kapının yanında bir pencere açar. Kursun son dersi o pencerelerin sayısını, tanıya verdiği zararı ve dönüştürme kaydının ne kadar süre yaşadığını ölçer.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.