---
title: 'Erişim Denetim Listeleri'
source: 'https://academia.sh/tr/kurslar/kablosuz-ve-guvenlik/erisim-denetim-listeleri'
course: 'Kablosuz Ağlar ve Ağ Güvenliği'
language: tr
updated: '2026-08-17T18:07:21+00:00'
license: 'CC BY-SA 4.0'
---

# Erişim Denetim Listeleri

Aynı kırk akışta dört kural kümesi: yedi kurallık dar küme 40/40 doğru, altı kurallık geniş küme 2 akış fazladan geçirir, sekiz kurallık bozuk sıralı küme de 2 geçirir ve 1 kuralı gölgeler, yedi kurallık sıkılaştırılmış küme ise sızıntıyı sıfırlarken 2 akışı fazladan durdurur.

Önceki ders diziyi sabit tuttu ve onu işleten düzeneği değiştirdi. Durum bilgili düzenek
yedi kuralla kırk akışın kırkında niyetle aynı kararı verdi — ama o yedi kuralın doğru yedi
kural olduğunu hiçbir yerde göstermedik. Kabul edilmişti.

Bu ders bunun tersini yapar: düzenek sabittir, değişen şey dizinin kendisidir. Bir
**erişim denetim listesi (access control list)** sıralı bir (eylem, ölçüt) çiftleri
dizisidir; ölçüt, yazılan alanların hepsinin birden tutmasını ister ve yazılmayan alan her
değeri karşılar. Sorusu şudur: bir kural kümesinin niyeti ne kadar karşıladığını, kümeye
bakarak söyleyebilir miyiz?

## Diziyi Anlam Yapan İki Şey

**Değerlendirme sırası (evaluation order)** ölçütün kendisi kadar belirleyicidir. Akış
diziye baştan girer, ilk eşleşen kuralın eylemi uygulanır, dizi orada biter. Aynı kuralları
başka bir sırayla dizmek başka bir sınır çizer.

**Örtük ret (implicit deny)** dizinin bittiği yerde durur ve yazılmaz. Bu dersteki dört
kümenin de bütün kuralları **geçir** eylemlidir; durduran tek şey örtük rettir. Bunun bir
ölçüm sonucu vardır: durdurulan her akış tek bir yerden, adı olmayan bir yerden durdurulur.

Siber Güvenlik müfredatının Çevre Savunması konusu erişim denetim listelerinin **yazımını**
öğretti — hangi alanın nereye geldiğini, listenin nasıl kurulduğunu. O yazım burada
tekrarlanmaz. Ölçülen şey listenin yazımı değil, **sıralı bir dizinin kendi semantiğidir**:
dizi niyetten iki yönde birden nerede ayrılıyor.

Önceki dersin yedi kurallık **dar** kümesinin yanına üç küme daha konur.

```text
# ogretilen kural dokumu , calistirilmamistir
# sozdizimi kurgudur ve hicbir cihazin bicimi degildir

genisletilmis (6) : dar kumenin ilk iki kurali tek kurala indirildi
  1  gecir  dis  dmz  *          <- 80 ve 443 yerine her bnokta
  2..6 = dar kumenin 3..7. kurallari

sirasi bozuk (8) : dar kumenin basina bir kural eklendi
  1  gecir  dmz  *    *          <- yeni , dizinin en basinda
  2..8 = dar kumenin 1..7. kurallari

sikilastirilmis (7) : dar kumenin 6. kurali daraltildi
  6  gecir  ic   dis  443        <- her bnokta yerine yalniz 443
```

## Kural Gölgelemesi

Üçüncü kümedeki değişiklik bir kuralı **erişilemez** kılar. `dmz` kaynaklı her akışı
geçiren bir kural dizinin başına konduğunda, aşağıdaki "yalnız `dmz`den `ic`e 3306" kuralına
hiçbir akış ulaşamaz — çünkü ona ulaşabilecek her akış yukarıda zaten eşleşmiştir. Buna
**kural gölgelemesi (rule shadowing)** denir.

Tanım **durağandır**: bir kural, kendinden önceki bir kuralın ölçütünü tümüyle içeriyorsa
gölgelenmiştir. Bu, trafiğe bakılmadan, yalnız diziye bakılarak söylenebilir. Ayrımın neden
önemli olduğu ölçümden sonra görülecek.

Ölçümün varsayımları:

- **AG8** — Kırk akış ortak kurgudan değiştirilmeden alınır; kaynağı, hedefi ve bağlantı
  noktası kurgudandır. Kâhin niyetin kendisidir ve kurguyu biz yazdığımız için bilinir.
- **AG9** — Dört küme de aynı düzenekte işletilir: ilk eşleşen kazanır, dizi örtük retle
  biter, akışların hepsi yeni bağlantı sayılır. Önceki dersin evre ayrımı burada yoktur.
- **AG10** — Bir kuralın yazmadığı ölçüt her değeri karşılar; yazılan ölçütlerin ise hepsi
  birden tutmalıdır.
- **AG11** — Dört kümenin kuralları da **geçir** eylemlidir. Durduran tek şey örtük rettir;
  böylece fazla duranın kaynağı tek bir yerde toplanır.
- **AG12** — Kural gölgelemesi durağan tanımlanır ve trafiğe bakmaz; eşleşme sayacı ise
  yalnız trafiğe bakar. İkisi ayrı ölçülür.
- **AG13** — Eşleşme sayacı dizinin **kesildiği** yeri sayar: akış eşleştiği ilk kuralda
  durur, sonraki kurallara hiç girmez.
- **AG14** — Kırk olaylık kümede ölçülebilen en küçük fark **1/40 = 0,025**'tir.

## Ölçüm

```python
"""Erisim denetim listeleri: kural sayisi, degerlendirme sirasi, golgeleme.

Bolum 1 - dort kume ayni kirk akista.
Bolum 2 - hangi kural kac akis esledi, ortuk rete kac akis dustu.
"""
TOHUM = 20260811
BOLGELER = ("dis", "dmz", "ic", "yonetim")
NOKTALAR = (80, 443, 22, 3306, 8080)


def uretec(tohum):
    d = tohum % 2147483646 + 1

    def r(n):
        nonlocal d
        d = (d * 48271) % 2147483647
        return d % n
    return r


def akislar(sayi=40, tohum=TOHUM):
    r, liste = uretec(tohum), []
    for i in range(sayi):
        liste.append({"no": i + 1, "kaynak": BOLGELER[r(4)],
                      "hedef": BOLGELER[r(4)], "bnokta": NOKTALAR[r(5)]})
    return liste


def politika(a):
    """Niyet: disaridan yalniz DMZ'nin web kalemine; yonetime disaridan kimse."""
    if a["kaynak"] == "dis":
        return a["hedef"] == "dmz" and a["bnokta"] in (80, 443)
    if a["kaynak"] == "dmz":
        return a["hedef"] == "ic" and a["bnokta"] == 3306
    if a["kaynak"] == "yonetim":
        return True
    return a["hedef"] != "yonetim"


def fark(olaylar, niyet, duzenek):
    d = {"dogru_gecti": 0, "dogru_durdu": 0, "yanlis_gecti": 0, "yanlis_durdu": 0}
    for o in olaylar:
        n, g = niyet(o), duzenek(o)
        if n and g:
            d["dogru_gecti"] += 1
        elif not n and not g:
            d["dogru_durdu"] += 1
        elif g:
            d["yanlis_gecti"] += 1
        else:
            d["yanlis_durdu"] += 1
    return d


def kural_dizisi(kurallar):
    """Ilk eslesen kazanir; sonda ortuk ret."""
    def calis(a):
        for eylem, olcut in kurallar:
            if all(a[k] == v for k, v in olcut.items()):
                return eylem
        return False
    return calis


def golgeli(kurallar):
    """Kendinden onceki bir kuralin tumuyle kapsadigi kurallarin sirasi."""
    liste = []
    for i, (_, olcut) in enumerate(kurallar):
        for _, onceki in kurallar[:i]:
            if all(olcut.get(k) == v for k, v in onceki.items()):
                liste.append(i)
                break
    return liste


def golgelenen(kurallar):
    return len(golgeli(kurallar))


def izle(kurallar, ak):
    """Her kuralin esledigi akis sayisi ve ortuk rete dusen akis sayisi."""
    sayac, ortuk = [0] * len(kurallar), 0
    for a in ak:
        for i, (_, olcut) in enumerate(kurallar):
            if all(a[k] == v for k, v in olcut.items()):
                sayac[i] += 1
                break
        else:
            ortuk += 1
    return sayac, ortuk


DAR = [(True, {"kaynak": "dis", "hedef": "dmz", "bnokta": 80}),
       (True, {"kaynak": "dis", "hedef": "dmz", "bnokta": 443}),
       (True, {"kaynak": "dmz", "hedef": "ic", "bnokta": 3306}),
       (True, {"kaynak": "yonetim"}),
       (True, {"kaynak": "ic", "hedef": "dmz"}),
       (True, {"kaynak": "ic", "hedef": "dis"}),
       (True, {"kaynak": "ic", "hedef": "ic"})]

GENIS = [(True, {"kaynak": "dis", "hedef": "dmz"})] + DAR[2:]
SIRASI_BOZUK = [(True, {"kaynak": "dmz"})] + DAR
SIKI = DAR[:5] + [(True, {"kaynak": "ic", "hedef": "dis", "bnokta": 443})] + DAR[6:]

KUMELER = (("dar", DAR), ("genişletilmiş", GENIS),
           ("sırası bozuk", SIRASI_BOZUK), ("sıkılaştırılmış", SIKI))
AK = akislar()

print(f"akış {len(AK)} | niyetin geçirdiği {sum(1 for a in AK if politika(a))} "
      f"| niyetin durdurduğu {sum(1 for a in AK if not politika(a))}")
print()
print(f"{'kural kümesi':<16s} {'kural':>5s} {'gölgelenen':>10s} {'örtük ret':>9s} "
      f"{'doğru':>5s} {'fazla geçen':>11s} {'fazla duran':>11s}")
for ad, k in KUMELER:
    d = fark(AK, politika, kural_dizisi(k))
    _, ortuk = izle(k, AK)
    print(f"{ad:<16s} {len(k):5d} {golgelenen(k):10d} {ortuk:9d} "
          f"{d['dogru_gecti'] + d['dogru_durdu']:5d} {d['yanlis_gecti']:11d} "
          f"{d['yanlis_durdu']:11d}")

print()
print("dar kümede kural başına eşleşme:", izle(DAR, AK)[0])
print("sırası bozuk kümede kural başına eşleşme:")
sayac, ortuk = izle(SIRASI_BOZUK, AK)
golge = golgeli(SIRASI_BOZUK)
for i, ((_, olcut), n) in enumerate(zip(SIRASI_BOZUK, sayac)):
    print(f"  {i + 1}. {str(olcut):<48s} {n:3d}"
          f"  {'gölgelenmiş' if i in golge else ''}".rstrip())
print(f"  örtük ret{'':42s} {ortuk:3d}")

print()
for ad, k in KUMELER[1:]:
    d = kural_dizisi(k)
    print(f"{ad}: fazla geçen",
          [(a["no"], a["kaynak"], a["hedef"], a["bnokta"])
           for a in AK if d(a) and not politika(a)],
          "| fazla duran",
          [(a["no"], a["kaynak"], a["hedef"], a["bnokta"])
           for a in AK if politika(a) and not d(a)])
```

```
akış 40 | niyetin geçirdiği 22 | niyetin durdurduğu 18

kural kümesi     kural gölgelenen örtük ret doğru fazla geçen fazla duran
dar                  7          0        18    40           0           0
genişletilmiş        6          0        16    38           2           0
sırası bozuk         8          1        16    38           2           0
sıkılaştırılmış      7          0        20    38           0           2

dar kümede kural başına eşleşme: [0, 1, 0, 11, 4, 3, 3]
sırası bozuk kümede kural başına eşleşme:
  1. {'kaynak': 'dmz'}                                  2
  2. {'kaynak': 'dis', 'hedef': 'dmz', 'bnokta': 80}    0
  3. {'kaynak': 'dis', 'hedef': 'dmz', 'bnokta': 443}   1
  4. {'kaynak': 'dmz', 'hedef': 'ic', 'bnokta': 3306}   0  gölgelenmiş
  5. {'kaynak': 'yonetim'}                             11
  6. {'kaynak': 'ic', 'hedef': 'dmz'}                   4
  7. {'kaynak': 'ic', 'hedef': 'dis'}                   3
  8. {'kaynak': 'ic', 'hedef': 'ic'}                    3
  örtük ret                                            16

genişletilmiş: fazla geçen [(3, 'dis', 'dmz', 3306), (18, 'dis', 'dmz', 8080)] | fazla duran []
sırası bozuk: fazla geçen [(23, 'dmz', 'yonetim', 8080), (39, 'dmz', 'yonetim', 8080)] | fazla duran []
sıkılaştırılmış: fazla geçen [] | fazla duran [(30, 'ic', 'dis', 3306), (35, 'ic', 'dis', 3306)]
```

## Kural Saymak Politika Ölçmez

Dört satırı kural sayısına göre okursak sıra şudur: 6, 7, 7, 8. Doğru sayısına göre
okursak sıra şudur: 38, 40, 38, 38. İki sıralama arasında bir bağ yok.

**Yedi kural iki kez yazıldı ve iki ayrı sonuç verdi.** Dar küme 40/40 doğru; sıkılaştırılmış
küme aynı kural sayısıyla 38. **Sekiz kural yedi kuraldan iyi değil:** sırası bozuk küme bir
kural daha uzun ve 38'de kaldı. **Altı kural yedi kuraldan sade değil:** genişletilmiş küme
bir kural kısa ve yine 38. Kümenin uzunluğu, niyetten sapmasına dair hiçbir şey söylemiyor.

Sapmanın **yönü** de kümeden okunamıyor. Üç kusurlu kümenin üçü de 38 doğru veriyor, ama:

**Genişletilmiş küme 2 fazla geçen, 0 fazla duran.** Bir kuralın bağlantı noktası alanı
silindi ve `dis`ten `dmz`ye giden iki akış — biri 3306, biri 8080 — niyet onları
durduracakken geçti. Kural sayısı bir azaldı, açık yüzey iki akış büyüdü.

**Sırası bozuk küme 2 fazla geçen, 0 fazla duran.** Dizinin başına eklenen kural `dmz`
kaynaklı her şeyi geçiriyor; `dmz`den yönetim bölgesine giden iki akış böyle sızdı. Oysa
niyetin en kesin cümlesi buydu: yönetim bölgesine dışarıdan kimse.

**Sıkılaştırılmış küme 0 fazla geçen, 2 fazla duran.** Burada hiçbir sızıntı yok — kâğıt
üzerinde kusursuz. Bedeli öbür sütunda: `ic`ten `dis`e giden iki akış, bağlantı noktaları
443 olmadığı için kesildi ve niyet ikisini de geçirecekti. Yalnız sızıntıyı sayan bir
denetim bu kümeyi dar kümeden ayırt edemez.

İkişer akış, kırklık bir kümede **0,050**'lik paylardır; ölçülebilen en küçük fark
**0,025** olduğuna göre ikisi de ölçüm bandının içindedir.

## Sıfır Eşleşme İki Ayrı Şey Söyler

Alt tablo dizinin işleyişini kural kural gösteriyor. Sırası bozuk kümede iki kuralın
eşleşmesi **0**: ikinci kural (`dis dmz 80`) ve dördüncü kural (`dmz ic 3306`). Sayaç ikisi
için de aynı şeyi yazıyor. Nedenleri aynı değil.

İkinci kural erişilebilir; kırk akışın içinde ona uyan akış yok. Trafik değişirse eşleşir.
Dördüncü kural ise **erişilemez**: ona ulaşabilecek her akış birinci kuralda kesiliyor.
Trafik ne olursa olsun eşleşmeyecek. Sayaç bu ikisini ayırt edemez; **durağan tarama**
ayırt eder ve son sütunda yalnız dördüncüsünü işaretler. Dar kümede de üçüncü kuralın
eşleşmesi 0'dır ve orada gölgelenen kural yoktur — aynı gözlem, başka neden.

Gölgelenen kuralın eylemi gölgeleyeninkinden **başka** olsaydı sonuç bu kadar sessiz
olmazdı. Bu dersteki dört kümenin de bütün kuralları geçir eylemliydi (AG11). Karışık bir
dizide, geniş bir **geçir** kuralının altında kalan bir **durdur** kuralı yazıldığı hâlde
hiç uygulanmaz; dizi, yazarının kapattığını sandığı bir yolu açık tutar. Durağan tarama iki
durumu da aynı biçimde işaretler — eylemleri karşılaştırmak taramanın işi değildir — ama
işaretin ağırlığı aynı değildir: birinde yalnız okunabilirlik, öbüründe politikanın kendisi
bozulur.

Gölgelenen kuralın kendisi bu ölçümde zarar vermiyor. Onu gölgeleyen kuralla aynı eylemi
taşıyor, dolayısıyla silinmesi kırk akışta hiçbir kararı değiştirmez. Zarar veren şey
gölgeleyen kuraldır ve zararı başka bir yerde ödenir: iki akışın yönetim bölgesine
sızmasında. Gölgelenen kural bir **belirtidir**, sızıntının kendisi değil. Belirtinin
söylediği şudur: diziyi okuyan biri "`dmz`den `ic`e yalnız veri kalemi açık" satırını
görüp inanır, oysa iki satır yukarısı o bölgeyi zaten tümüyle açmıştır. Kural dizisi,
okunduğu gibi çalışmıyor.

## Açık Kalan Yüzeyler ve Daraltmalar

**Birinci yüzey — silinen ölçüt alanı.** Genişletilmiş kümede bağlantı noktası alanının
silinmesi bir kural kazandırdı ve iki akış sızdırdı. **Daraltma:** ölçütü yazmak. Bedeli
tam olarak bir kuraldır ve karşılığında fazla geçen **2**'den **0**'a iner. Ölçüt alanı
silinerek yapılan sadeleştirme, kural sayısını okuyan bir denetimde iyileşme gibi görünür.

**İkinci yüzey — dizinin başına konan geniş kural.** Bir bölgenin tümünü açan kural en
başa konduğunda kendinden sonraki bütün daraltmaları etkisizleştirir. **Daraltma:**
yerleştirmeyi ekleme sırasına değil **ölçüt kapsamına** göre yapmak — dar ölçütlü kurallar
önce, geniş olanlar sonra — ve diziyi her değişiklikten sonra durağan taramadan geçirmek.
Tarama bu kümede gölgelenen kuralı yakalıyor ve geniş kuralı işaret ediyor.

**Üçüncü yüzey — örtük retin sessizliği.** Sıkılaştırılmış kümede örtük ret **20** akış
kesiyor; bunların **18**'i niyetin de kestiği akışlar, **2**'si fazla duran. İkisi de aynı
yerden, adı olmayan bir yerden kesiliyor ve karşılarında bir kural adı yok. **Daraltma:**
dizinin sonuna, eylemi **durdur** olan ve her ölçütü açık bırakan bir kural yazmak. Kararı
değiştirmez — örtük ret zaten aynısını yapıyordu — ama durdurulan akışı sayılabilir kılar.
Fazla duran ancak sayılabildiği yerde ölçülebilir.

## Özet

- Bir erişim denetim listesinin anlamı ölçütlerinden değil, ölçütler ile değerlendirme
  sırasının birlikte kurduğu diziden gelir; dizi yazılmayan bir örtük retle biter.
- Aynı kırk akışta dar küme **7** kuralla 40/40 doğru verir; genişletilmiş küme **6**
  kuralla **2** fazla geçen, sırası bozuk küme **8** kuralla **2** fazla geçen ve **1**
  gölgelenen kural, sıkılaştırılmış küme **7** kuralla **2** fazla duran üretir.
- Kural sayısı ile niyetten sapma arasında bağ yoktur: yedi kural iki kez yazıldı, biri 40
  biri 38 doğru verdi. **Kural saymak politika ölçmez.**
- Sapmanın yönü de kümeden okunmaz; üç kusurlu küme de 38 doğru verir ama ikisi fazladan
  geçirir, biri fazladan durdurur.
- Sıfır eşleşme iki ayrı nedenden gelir — kullanılmayan kural ile erişilemez kural — ve
  sayaç ikisini ayırt edemez; kural gölgelemesi ancak durağan taramayla görülür.
- Gölgelenen kural bir belirtidir; sızıntıyı üreten şey onu gölgeleyen geniş kuraldır.

## Sonraki Adım

Bu dersteki bütün kurallar dört ad üzerine yazıldı: `dis`, `dmz`, `ic`, `yonetim`. Bu adlar
kurgudan geldi ve sorgulanmadı — sanki ağın bölgeleri verilmiş şeylermiş gibi. Oysa bölge
sayısı bir tasarım kararıdır: aynı ağ iki bölgeye de bölünebilir, altıya da. Sonraki ders
kuralları sabit bir niyetten türetip bölge grafiğini değiştirir ve iki şeyi birden ölçer:
bölge sayısı arttıkça kaç kural gerekiyor, ve bölgeleri birleştirmek ile bölmek niyetten
sapmayı hangi yönde kaydırıyor.
