İçeriğe geç
academia.sh

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-reddetti seç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.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat