Ders 11 / 13
Paket Filtreleme Çerçevesi
Paketin makine içinde geçtiği yedi durak, tablo ve zincir ayrımı ile kural değerlendirme sırası kurulur; otuz dört satırlık kural listesinin sıfır, yüklü makinede sayaç okumasının sıfır, sessiz makinede altı, açık iz sürmenin sekiz aday elediği sayılır.
İçindekiler
Önceki dersin kâhini hedefin süzgeciydi ve tünelin içinden bakıldığında o süzgeç, hedefe hiç ulaşılamamasından ayırt edilemiyordu. Sessizce düşürülen paket geriye hiçbir şey göndermez; gönderen için zaman aşımı, alan için hiçbir olay yoktur. Bu ders süzgecin içine girer.
Sorulacak soru yer sorusudur: bir paket bu makinenin içinde nereye kadar geldi ve hangi durakta karar verildi. Bu sorunun cevabı bir kural listesinde yazmaz. Liste neyin olabileceğini gösterir; hangi kuralın gerçekten çalıştığını göstermez ve bu iki cümle arasındaki fark, dersin ölçtüğü şeydir.
Duraklar, Tablolar ve Zincirler
Paket filtreleme çerçevesi, çekirdeğin ağ yığınında sabit noktalara yerleştirilmiş duraklardan oluşur. Her durakta bir ya da birden çok zincir bulunur ve zincirler tablolara göre öbeklenir. Tablo bir amaçtır: ham işleme, işaretleme, adres dönüştürme ve süzme. Zincir o amacın belirli bir duraktaki kural listesidir. Aynı durakta birden çok tablonun zinciri bulunuyorsa sıraları tablo önceliğine göre sabittir.
Paketin izlediği yol, yönlendirme kararından sonra ikiye ayrılır. Aşağıdaki döküm çalıştırılmamıştır; duraklar arasındaki sırayı göstermek için yazılmıştır:
# ornek dokum , calistirilmamistir
# yerel bir surece giden paket
arayuz -> oncesi-ham -> oncesi-donusturme -> yonlendirme-karari
-> giris-isaretleme -> giris-suzme -> servis
# baska bir arayuze iletilen paket
arayuz -> oncesi-ham -> oncesi-donusturme -> yonlendirme-karari
-> iletme-suzme -> cikis-sonrasi -> cikis-arayuzu
İki yol yönlendirme kararına kadar aynıdır ve oradan sonra bir daha birleşmez. Bu, tanıda sık yapılan bir hatanın kaynağıdır: yerel servise ulaşmayan bir paket için iletme zinciri incelenir, oysa paket oraya hiç uğramamıştır. Ya da tersi olur ve iletilecek bir paket için giriş zincirine kural yazılır. Zincirin adı kararın verildiği yeri söyler; kararın verildiği yer paketin izlediği yola bağlıdır.
Bir zincirin iki bileşeni vardır: sıralı kurallar ve bir politika. Kurallar yukarıdan aşağı değerlendirilir, ilk eşleşen kural kararı verir ve zincirin geri kalanı çalışmaz. Hiçbir kural eşleşmezse politika uygulanır. Aşağıdaki döküm de çalıştırılmamıştır ve bir çerçevenin gerçek yazımı değildir; zincir, politika ve sıra kavramlarının yerleşimini göstermek için sadeleştirilmiş bir gösterimdir:
# ornek dokum , calistirilmamistir , gercek yazim degildir
tablo suzme
zincir giris politika reddet
1 durum kurulu ya da iliskili -> kabul
2 arayuz geri-dongu -> kabul
3 hedef nokta <yonetim-noktasi> -> kabul
zincir iletme politika reddet
zincir cikis politika kabul
Kural değerlendirme sırasının tek bir liste içinde neyi değiştirdiği, Siber Güvenlik müfredatının erişim denetim listeleri dersinde ölçüldü. Burada ölçülen şey bir liste içi sıra değil, duraklar arası sıradır: bir paket bir durakta karar bulduğunda sonraki durakların zincirleri hiç çalışmaz ve oraya yazılan kural hiçbir şey yapmaz.
Karar Hangi Durakta Veriliyor
Kurgu şudur: uzaktaki bir istemci bu makinedeki bir servise ulaşamıyor. Dokuz aday neden var ve her biri kararı belirli bir durakta verdiriyor.
- EF21 — Aday neden listesi dokuz maddedir ve tüketicidir. Üçü giriş süzme zincirinde, ikisi iletme yolunda, biri ham durakta, biri işaretleme durağında, biri arayüzden önce, biri servistedir.
- EF22 — Kâhin
giris-varsayilan-reddettiseçilmiştir: hiçbir kural eşleşmiyor ve zincir politikası paketi reddediyor. - EF23 — Kural kümesi dokuz durumda da aynıdır ve 34 satırdır; değişen şey paketin akıbetidir, yapılandırma değil.
- EF24 — Sekiz okuma tanımlıdır ve dördü ikişer koşulda ölçülür: sayaç okuması yüklü ve sessiz makinede, iz sürme açık ve kapalı.
- EF25 — Yüklü makinede arka plan trafiği bütün zincir sayaçlarını artırır; sayaç farkı sınama paketine bağlanamaz.
- EF26 — İz sürme arıza öncesinde açılmış olmalıdır; kapalıyken üretilen satır 0.
- EF27 — İz sürme durağı ve nedeni birlikte bildirir; aynı durakta aynı nedenle düşen iki aday onunla da ayrılamaz.
- EF28 — Kabul kuralı giriş süzme zincirine iki konumda eklenir: başa ve sona. Sona eklenen kural, kendisinden önce eşleşen bir kural varsa hiç değerlendirilmez.
- EF29 — Aday kümesi süpürmesi sekiz, dokuz ve on adaylı listelerle yapılır.
- EF30 — Bütün sayılar tam sayımdır; rastgelelik ve tohum yoktur.
"""Paketin makine icindeki duraklari: karar hangi durakta , hangi okuma goruyor.""" YEREL = ("arayuz", "oncesi-ham", "oncesi-donusturme", "yonlendirme-karari", "giris-isaretleme", "giris-suzme", "servis") ILETME = ("arayuz", "oncesi-ham", "oncesi-donusturme", "yonlendirme-karari", "iletme-suzme", "cikis-sonrasi", "cikis-arayuzu") YOL = {"yerel": YEREL, "iletme": ILETME} ZINCIR = {"oncesi-ham", "oncesi-donusturme", "giris-isaretleme", "giris-suzme", "iletme-suzme", "cikis-sonrasi"} ADAY = { "paket-hic-gelmedi": ("yerel", 0, "yok"), "oncesi-ham-dusurdu": ("yerel", 1, "kural"), "giris-isaretleme-dusurdu": ("yerel", 4, "kural"), "giris-suzme-kural-dusurdu": ("yerel", 5, "kural"), "giris-varsayilan-reddetti": ("yerel", 5, "politika"), "durum-kurali-yok": ("yerel", 5, "kural"), "donusturme-yanlis-hedef": ("iletme", 4, "kural"), "yonlendirme-yanlis": ("iletme", 4, "kural"), "servis-dinlemiyor": ("yerel", 6, "servis"), } KURAL_SATIRI = 34 KAHIN = "giris-varsayilan-reddetti" def son_durak(a): yol, i, _ = ADAY[a] return YOL[yol][i] def ulasilmayan(a): yol, i, _ = ADAY[a] return len(YOL[yol]) - (i + 1) SINAMA = { "kural-listesi": lambda a: f"{KURAL_SATIRI}-satir", "arayuzde-yakalama": lambda a: "gelmedi" if ADAY[a][1] == 0 else "geldi", "cikis-yakalama": lambda a: "cikti" if ADAY[a][0] == "iletme" else "cikmadi", "baglanti-denemesi": lambda a: ("reddedildi" if ADAY[a][2] == "servis" else "zaman-asimi"), "sayac-yuklu": lambda a: "butun-sayaclar-artti", "sayac-sessiz": lambda a: (son_durak(a) if son_durak(a) in ZINCIR else "sayac-yok"), "iz-kapali": lambda a: "satir-yok", "iz-acik": lambda a: f"{son_durak(a)}/{ADAY[a][2]}", } SATIR = {"kural-listesi": KURAL_SATIRI, "arayuzde-yakalama": 6, "cikis-yakalama": 6, "baglanti-denemesi": 1, "sayac-yuklu": 34, "sayac-sessiz": 34, "iz-kapali": 0, "iz-acik": 12} 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] A = tuple(ADAY) print("aday neden:", len(A), "| sinama:", len(SINAMA), "| kahin:", KAHIN) print() print("aday yol son durak ulasilmayan durak") for a in A: print(f" {a:26s} {ADAY[a][0]:7s} {son_durak(a):18s} {ulasilmayan(a):9d}") print(" toplam ulasilmayan durak:", sum(ulasilmayan(a) for a in A)) print() print("sinama satir ayri yanit elenen kalan") for s in SINAMA: kalan = len(ele(A, s, SINAMA[s](KAHIN))) print(f" {s:18s} {SATIR[s]:5d} {len({SINAMA[s](a) for a in A}):11d}" f" {len(A) - kalan:7d} {kalan:6d}") print() print("arac kumesi satir ayrilamayan obek") for ad, k in (("yalniz kural listesi", ["kural-listesi"]), ("liste + baglanti denemesi", ["kural-listesi", "baglanti-denemesi"]), ("yuklu makinede dort okuma", ["kural-listesi", "arayuzde-yakalama", "baglanti-denemesi", "sayac-yuklu"]), ("sessiz makinede dort okuma", ["kural-listesi", "arayuzde-yakalama", "baglanti-denemesi", "sayac-sessiz"]), ("iz surme acik", ["iz-acik"])): o = obek(k, A) print(f" {ad:34s} {sum(SATIR[s] for s in k):5d} {len(o):8d}") if o: for x in o: print(f" {x}") print() print("giris-suzme zincirine eklenen kabul kurali kac arizayi duzeltir") for ad, kosul in ( ("zincirin basina", lambda a: ADAY[a][0] == "yerel" and ADAY[a][1] == 5), ("zincirin sonuna", lambda a: ADAY[a][0] == "yerel" and ADAY[a][1] == 5 and ADAY[a][2] == "politika")): d = [a for a in A if kosul(a)] print(f" {ad:16s} duzelen {len(d)} / {len(A)}", d) print() print("aday kumesi supurmesi") ADAY["giris-suzme-yanlis-arayuz"] = ("yerel", 5, "kural") for ad, k in (("8 aday: durum-kurali-yok cikarildi", tuple(a for a in A if a != "durum-kurali-yok")), ("9 aday: temel liste", A), ("10 aday: giris-suzme-yanlis-arayuz eklendi", A + ("giris-suzme-yanlis-arayuz",))): kalan = len(ele(k, "sayac-sessiz", SINAMA["sayac-sessiz"](KAHIN))) o = obek(["iz-acik"], k) print(f" {ad:42s} sessiz sayac elenen {len(k) - kalan:2d} kalan {kalan:2d}" f" | iz surmenin ayiramadigi obek {len(o)}" f" en buyuk {max((len(x) for x in o), default=0)}")
aday neden: 9 | sinama: 8 | kahin: giris-varsayilan-reddetti
aday yol son durak ulasilmayan durak
paket-hic-gelmedi yerel arayuz 6
oncesi-ham-dusurdu yerel oncesi-ham 5
giris-isaretleme-dusurdu yerel giris-isaretleme 2
giris-suzme-kural-dusurdu yerel giris-suzme 1
giris-varsayilan-reddetti yerel giris-suzme 1
durum-kurali-yok yerel giris-suzme 1
donusturme-yanlis-hedef iletme iletme-suzme 2
yonlendirme-yanlis iletme iletme-suzme 2
servis-dinlemiyor yerel servis 0
toplam ulasilmayan durak: 20
sinama satir ayri yanit elenen kalan
kural-listesi 34 1 0 9
arayuzde-yakalama 6 2 1 8
cikis-yakalama 6 2 2 7
baglanti-denemesi 1 2 1 8
sayac-yuklu 34 1 0 9
sayac-sessiz 34 5 6 3
iz-kapali 0 1 0 9
iz-acik 12 7 8 1
arac kumesi satir ayrilamayan obek
yalniz kural listesi 34 1
['donusturme-yanlis-hedef', 'durum-kurali-yok', 'giris-isaretleme-dusurdu', 'giris-suzme-kural-dusurdu', 'giris-varsayilan-reddetti', 'oncesi-ham-dusurdu', 'paket-hic-gelmedi', 'servis-dinlemiyor', 'yonlendirme-yanlis']
liste + baglanti denemesi 35 1
['donusturme-yanlis-hedef', 'durum-kurali-yok', 'giris-isaretleme-dusurdu', 'giris-suzme-kural-dusurdu', 'giris-varsayilan-reddetti', 'oncesi-ham-dusurdu', 'paket-hic-gelmedi', 'yonlendirme-yanlis']
yuklu makinede dort okuma 75 1
['donusturme-yanlis-hedef', 'durum-kurali-yok', 'giris-isaretleme-dusurdu', 'giris-suzme-kural-dusurdu', 'giris-varsayilan-reddetti', 'oncesi-ham-dusurdu', 'yonlendirme-yanlis']
sessiz makinede dort okuma 75 2
['durum-kurali-yok', 'giris-suzme-kural-dusurdu', 'giris-varsayilan-reddetti']
['donusturme-yanlis-hedef', 'yonlendirme-yanlis']
iz surme acik 12 2
['durum-kurali-yok', 'giris-suzme-kural-dusurdu']
['donusturme-yanlis-hedef', 'yonlendirme-yanlis']
giris-suzme zincirine eklenen kabul kurali kac arizayi duzeltir
zincirin basina duzelen 3 / 9 ['giris-suzme-kural-dusurdu', 'giris-varsayilan-reddetti', 'durum-kurali-yok']
zincirin sonuna duzelen 1 / 9 ['giris-varsayilan-reddetti']
aday kumesi supurmesi
8 aday: durum-kurali-yok cikarildi sessiz sayac elenen 6 kalan 2 | iz surmenin ayiramadigi obek 1 en buyuk 2
9 aday: temel liste sessiz sayac elenen 6 kalan 3 | iz surmenin ayiramadigi obek 2 en buyuk 2
10 aday: giris-suzme-yanlis-arayuz eklendi sessiz sayac elenen 6 kalan 4 | iz surmenin ayiramadigi obek 2 en buyuk 3
Üç Sayı
Kâhin: karar giris-suzme durağında, hiçbir kural eşleşmediği için politika tarafından
veriliyor. Sınama: kural listesi otuz dört satır basıyor; yüklü makinede sayaç okuması otuz
dört sayı veriyor; sessiz makinede aynı okuma zincir adını veriyor; açık iz sürme on iki satırda
“giris-suzme/politika” diyor. Elenen aday: kural listesi 0, yüklü sayaç 0, kapalı iz
sürme 0, bağlantı denemesi 1, sessiz sayaç 6, açık iz sürme 8.
Üstteki üç sıfır bu dersin sonucudur. Kural listesi otuz dört satırlık bir çıktıdır ve dokuz adayın hiçbirini elemez, çünkü dokuz durumda da aynı listedir. Liste yapılandırmayı gösterir, paketin akıbetini değil. Sayısı en yüksek çıktı, eleme gücü en düşük olanla aynı satırda duruyor: daha çok çıktı daha iyi tanı demek değildir.
Bağlantı denemesi bir satır basıyor ve bir aday eliyor. Oranı kural listesinden sonsuz kat iyidir, ama mutlak değeri düşüktür ve nedeni ortak tanımda kurulmuştu: düşürülen paket zaman aşımı üretir, reddedilen paket ise ayrı bir yanıt verir. Dokuz adayın sekizi zaman aşımı üretiyor.
Sayaç Neyi Kanıtlar
Sayaç okumasının iki satırı arasındaki fark, bu dersin en pratik bulgusudur. Sessiz makinede sayaç beş ayrı yanıt veriyor ve altı aday eliyor: hangi zincirin sayacı arttıysa karar orada verilmiştir. Yüklü makinede aynı okuma tek bir yanıt veriyor ve sıfır aday eliyor, çünkü arka plan trafiği bütün zincirlerin sayaçlarını artırmaktadır. Sayaç farkı vardır, sınama paketine ait olduğu gösterilemez.
Bu yüzden sayaç okuması bir yordam olarak tek başına yazılamaz. Ölçülebilir hâle gelmesi için ya trafiğin durması ya da sayacın sınama öncesinde sıfırlanıp yalnız bir paket gönderilmesi gerekir; ikincisi çalışan bir sistemde her zaman yapılamaz. Sayacın verdiği bilgi, makinenin ne kadar sessiz olduğuna bağlıdır ve bu bir araç özelliği değil, ortam özelliğidir.
İz sürmenin iki satırı aynı dersi zaman ekseninde veriyor. Açıkken on iki satır üretiyor ve sekiz aday eliyor; kapalıyken sıfır satır ve sıfır aday. Aradaki fark bir ayardır ve o ayar arızadan önce açılmış olmalıdır. Arızadan sonra iz sürmeyi açmak, geçmişteki paketi geri getirmez. Kanıt beklemez.
Açık iz sürme bile her şeyi ayıramıyor. İki öbek kalıyor: aynı zincirde aynı nedenle düşen kural arızası ile durum kuralının eksikliği, ve iletme yolunda düşen iki arıza. İz sürme durağı ve nedeni söyler; hangi kuralın eşleştiğini söylemesi ayrı bir ayrıntı düzeyi gerektirir.
Kuralı Nereye Eklemek İşe Yarar
Alt tablo çerçevenin en pahalı yanlış anlamasını sayıyor. Giriş süzme zincirine bir kabul kuralı eklendiğinde dokuz arızadan kaçı düzelir: kural zincirin başına eklenirse 3, sonuna eklenirse 1.
İki sayı arasındaki fark ilk eşleşen kural kuralından gelir. Sona eklenen kabul kuralı, kendisinden önce eşleşen bir düşürme kuralı varsa hiç değerlendirilmez; yalnız hiçbir kuralın eşleşmediği durumu, yani politikanın devreye girdiği durumu düzeltir. Kural eklendi, liste uzadı, çıktı “başarılı” döndü ve arıza sürüyor.
Kalan altı arıza için konumun hiçbir önemi yoktur, çünkü paket o zincire hiç uğramıyor. Üst tablonun son sütunu bunu sayıyor: dokuz arıza için ulaşılmayan durak toplamı 20. Paket ham durakta düşmüşse sonraki beş durak, işaretleme durağında düşmüşse sonraki iki durak hiç çalışmamıştır. O duraklara yazılan her kural, doğru yazılmış olsa bile ölü kuraldır.
Buradan çıkan sıra kuralı şudur: bir kural eklemeden önce kararın hangi durakta verildiği bulunur. Bu sıra tersine çevrildiğinde ortaya çıkan şey bir hata iletisi değil, işe yaramayan bir düzeltme ve büyüyen bir kural kümesidir.
Aday Kümesi Süpürmesi
Alt tablo aday listesini üç boyda deniyor ve sonuç önceki iki dersle aynı yöne bakıyor. Sessiz sayacın elediği aday sayısı üç listede de 6; kalan sayısı 2, 3 ve 4. Aday listesi büyüdükçe aynı okuma aynı sayıda adayı eliyor ve geriye daha fazlasını bırakıyor. İz sürmenin ayıramadığı en büyük öbek iki üyeden üçe çıkıyor, çünkü eklenen aday aynı durakta aynı nedenle düşüyor.
Özet
- Paket filtreleme çerçevesi sabit duraklardan oluşur; her durakta tablolara göre öbeklenmiş zincirler bulunur ve yönlendirme kararından sonra yerel yol ile iletme yolu bir daha birleşmez.
- Zincirde ilk eşleşen kural kararı verir ve geri kalanı çalışmaz; hiçbir kural eşleşmezse politika uygulanır.
- Otuz dört satırlık kural listesi dokuz adayın hiçbirini elemez, çünkü dokuz durumda da aynıdır. Yüklü makinede sayaç okuması da 0 eler; sessiz makinede 6, açık iz sürme 8.
- İz sürme kapalıyken 0 satır üretir ve arızadan sonra açmak geçmiş paketi geri getirmez.
- Giriş süzme zincirine eklenen kabul kuralı başa konursa 3, sona konursa 1 arızayı düzeltir; kalan altı arızada paket o zincire hiç uğramaz. Dokuz arıza için ulaşılmayan durak toplamı 20.
Sonraki Adım
Bu ders kararın nerede 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. Sonraki ders o varsayılanın kendisini ele alır. Varsayılan reddet politikası bir güvenlik kararıdır ve uygulanma sırası bir işletim kararıdır; yanlış sırada uygulandığında yöneticinin kendi erişimini kesebilir. Ölçülecek şey, uygulama sıralarının kaçının bu sonucu verdiği ve hangi yolların bedeli sıfıra indirdiğidir.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.