Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-02.03

Port, socket ve firewall

IP bir host interface’ine kadar yolu tarif eder; port, socket ve firewall ise hangi transport endpoint’inin ve koşulun devreye girdiğini ayırır.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

TCP + listener

  1. TCP endpoint koşulu hazır

    192.0.2.10:51000 → 198.51.100.200:443. Listener presence fixture’da biliniyor; henüz wire handshake veya application response yok.

    Client endpoint
    TCP new flow · endpoint koşulu seçildi
    Transit firewall
    Policy henüz değerlendirilmedi
    Server endpoint
    TCP listener present · traffic almadı
  2. Firewall outbound traffic’i gözledi

    Transit policy noktasına arrival tamamlandı. NEW observer context’tir; TCP connection established sonucu değildir.

    Client endpoint
    TCP summary firewall’a gönderildi
    Transit firewall
    Alındı: outbound / NEW / TCP / dst 443
    Server endpoint
    TCP listener present · traffic almadı
  3. WEB_OUT local policy match

    Outbound NEW TCP destination 443 toy rule’ya eşleşir: allow. Local karar kendi başına server’a delivery değildir.

    Client endpoint
    Client tuple 192.0.2.10:51000
    Transit firewall
    WEB_OUT → allow
    Server endpoint
    TCP listener present · traffic almadı
  4. Allowed traffic server’a ulaştı

    Server observer şimdi traffic’i aldı. Firewall allow ile endpoint delivery ayrı adımlardır; application request body bu sahnede yok.

    Client endpoint
    Client tuple 192.0.2.10:51000
    Transit firewall
    WEB_OUT allow · forward edildi
    Server endpoint
    TCP traffic alındı · listener present
  5. Matching listener local değerlendirilir

    Eşleşen listener bulunduğu için connection kurulabilir. Bu özet, tam handshake’i, gerçek bir accepted socket c1 oluşumunu veya TLS/HTTP başarısını göstermez.

    Client endpoint
    Application response sonucu bilinmiyor
    Transit firewall
    WEB_OUT allow · forward edildi
    Server endpoint
    Listener present · establishment possible

TCP / no listener

  1. Listener condition değişti

    NORMAL case ile tuple/policy aynı; bu varyantta matching listener fixture’da yok. Gerçek service kapanışı veya OS API çalıştırılmadı.

    Client endpoint
    TCP 192.0.2.10:51000 → 198.51.100.200:443
    Transit firewall
    Policy henüz değerlendirilmedi
    Server endpoint
    Matching listener absent · traffic almadı
  2. TCP summary firewall’a ulaştı

    Firewall observer outbound NEW TCP 443 context’ini aldı. Listener presence firewall kararıyla aynı bilgi değildir.

    Client endpoint
    TCP summary gönderildi
    Transit firewall
    Alındı: outbound / NEW / TCP / dst 443
    Server endpoint
    Matching listener absent · traffic almadı
  3. Aynı WEB_OUT rule allow

    Rule koşulları normal case ile aynı olduğundan allow. Bu karar listener varlığı üretmez.

    Client endpoint
    Client tuple aynı
    Transit firewall
    WEB_OUT → allow
    Server endpoint
    Matching listener absent · traffic almadı
  4. TCP traffic endpoint’e ulaştı

    Filtering bu delivery’yi engellemedi. Matching listener’ın yokluğu ayrı local koşuldur.

    Client endpoint
    Client tuple aynı
    Transit firewall
    WEB_OUT allow · forward edildi
    Server endpoint
    TCP traffic alındı · matching listener absent
  5. Connection kurulmadı

    Bu senaryoda matching listener’ın bulunmadığı bilinmektedir; normal connection kurulamaz. Olası TCP refusal veya OS hata bildirimi çizilmez; gerçek bir ECONNREFUSED sonucu ölçülmüş değildir.

    Client endpoint
    Normal connection established değil
    Transit firewall
    Allow sonucu geçerli
    Server endpoint
    Listener absent · not-established

UDP 443

  1. Transport TCP yerine UDP

    Port sayısı yine 443; transport namespace değişti. TCP listener UDP service gibi kullanılmaz.

    Client endpoint
    UDP 192.0.2.10:51000 → 198.51.100.200:443
    Transit firewall
    Policy henüz değerlendirilmedi
    Server endpoint
    TCP listener present · UDP traffic almadı
  2. UDP datagram firewall’a ulaştı

    Toy observer bu yeni datagram context’ini NEW olarak ele alır. UDP için TCP handshake çizilmez.

    Client endpoint
    UDP summary gönderildi
    Transit firewall
    Alındı: outbound / NEW / UDP / dst 443
    Server endpoint
    TCP listener present · UDP traffic almadı
  3. Default deny local

    WEB_OUT TCP şartı eşleşmedi; RETURN şartı da yok. Default deny nedeniyle server’a transfer yapılmaz. Sessizlik gerçek bir dış hedefin state’i hakkında kanıt değildir.

    Client endpoint
    Datagram forward edilmedi
    Transit firewall
    DEFAULT → deny · no forward
    Server endpoint
    TCP listener present · UDP traffic almadı

RETURN allow

  1. Existing flow ayrı fixture koşulu

    c1 connection’ının reverse tuple’ı 198.51.100.200:443 → 192.0.2.10:51000. Observer’ın known ESTABLISHED context’i bu branch için önceden verilidir.

    Client endpoint
    Existing c1 · return summary almadı
    Transit firewall
    Known c1 context · return henüz gelmedi
    Server endpoint
    Reverse TCP summary hazır
  2. Reverse flow firewall’a ulaştı

    Observer exact reverse tuple’ı kendi known flow context’iyle ilişkilendirir. Client-controlled state label kullanılmaz.

    Client endpoint
    Existing c1 · return summary almadı
    Transit firewall
    Alındı: inbound / ESTABLISHED / known c1
    Server endpoint
    Reverse TCP summary gönderildi
  3. RETURN local match

    Known reverse flow ve ESTABLISHED observer state RETURN’e eşleşir: allow. Yeni unsolicited inbound NEW bu koşulun parçası değildir.

    Client endpoint
    Existing c1 · return summary almadı
    Transit firewall
    RETURN → allow
    Server endpoint
    Reverse TCP summary gönderildi
  4. Existing client endpoint reply aldı

    Reverse tuple 192.0.2.10:51000 endpoint’ine delivery tamamlandı. Bu bir HTTP success veya user authorization verdict’i değil, sentetik transport summary’dir.

    Client endpoint
    c1 return alındı: dst 192.0.2.10:51000
    Transit firewall
    RETURN allow · forward edildi
    Server endpoint
    Reverse TCP summary gönderildi

ROLLER · STATE · VERİ AKIŞI

Port sayısı tek başına endpoint değildir

TCP ve UDP header’ları source ve destination için 16-bit port alanları taşır: alanın sayısal aralığı 0–65535’tir. Alan aralığı her değerin aynı şekilde application’a ayrılabileceğini söylemez. TCP 443 ve UDP 443 farklı transport bağlamlarıdır. IP header’ında bu TCP/UDP port alanları yoktur; hangi transport’ın taşındığını da bilmek gerekir.

Bu örnekte client 192.0.2.10:51000’den server 198.51.100.200:443’e TCP kullanır. 51000 sentetik client port seçimidir; bütün işletim sistemlerinin sabit ephemeral range’i değildir. 443 convention’ı HTTPS düşündürür ama karşıdaki process’in ne çalıştırdığını, TLS identity’sini veya resource permission’ını kanıtlamaz. Port, adres ve transport’ı beraber okuyunca anlamlı endpoint elde edilir.

Socket bir OS nesnesi; connection iki uç arasında

Network socket, application’ın OS communication interface’iyle kullandığı nesnedir. “Socket = port” eşitliği yetersizdir: address family, transport ve local address kapsamı önemlidir. TCP connection için local ve remote IP/port çifti, transport bağlamıyla birlikte hangi conversation’ın kastedildiğini ayırır. Aynı server port’una birden fazla client connection gelebilir.

Artifact’te web-listener 198.51.100.200:443 için LISTEN durumunu gösterir. Ayrı c1 ve c2 accepted connections aynı local endpoint’i kullanır, fakat remote endpoint’leri 192.0.2.10:51000 ve 192.0.2.20:52000’dır. Bu kayıtlar kurgulanmış alan özetleridir; Linux komut çıktısı ya da memory struct dump değildir. Listener kaydı tek başına accepted connection veya HTTP response göstermez.

Bind, listen ve accept farklı işler

Linux socket API’sinde bind() socket’e local address atar; listen() uygun connection-oriented socket’i incoming connections için passive hale getirir; accept() yeni connection için ayrı socket döndürür. Buradaki normal TCP service bu rolleri kullanır. Her socket TCP listener değildir: UDP datagrams aynı listen/accept connection modeline uydurulmaz.

Local bind scope erişim beklentisini değiştirir. 127.0.0.1 loopback’i, 0.0.0.0 ise IPv4 socket binding’de any local address’i temsil eder. Wildcard bind, bütün Internet’ten ulaşılabildiği anlamına gelmez; interface, route, network namespace ve filtering ayrıca rol oynar. IPv6 wildcard ve dual-stack davranışlarını platform ayarına bakmadan aynı kurala indirgeme.

Firewall hangi noktada hangi kararı verir?

Packet filtering address, transport, port, yön ve interface gibi alanlara dayanabilir. Stateful filtering ayrıca firewall’un izlediği connection context’ini kullanır. Bu modelde FORWARD, firewall host’una ait olmayan transit traffic’i inceler; INPUT firewall host’unun kendisine gelen, OUTPUT ise onun ürettiği traffic içindir. Chain scope, rule’nun neyi koruduğunu değiştirir.

Örnekteki policy, outbound NEW TCP destination 443 için WEB_OUT allow verir. Bilinen flow’nun reverse direction’ında observerState ESTABLISHED ise RETURN allow verir; diğer koşullarda default deny uygulanır. Bu alan adları kernel/nftables syntax’ı değil, dersin kayıt alanlarıdır. UDP 443 aynı TCP rule’suyla allow olmaz. Stateful label client’ın bildirdiği güvenilir bir claim değildir; firewall gözlemcisinin kendi takip sonucudur.

Allowed, listening ve successful ayrı sonuçlar

Firewall allow yalnız o policy noktasının geçiş kararını anlatır. Matching listener yoksa normal TCP connection kurulmaz; listener varsa da routing, kapasite veya sonraki katmanlar sonucu değiştirebilir. Bu dersin no-listener branch’i fixture’da yokluğu bilinen listener nedeniyle connection kurulamamasını gösterir. Gerçek OS error code veya gönderilmiş RST capture’ı üretmez.

Connection tracking ESTABLISHED ile TCP endpoint’in state’i aynı veri kaynağı değildir. İkisini eşitleyip HTTP response alındı sonucuna atlama. UDP için stateful gözlem de tutulabilir, fakat bu TCP handshake olduğu anlamına gelmez. Return traffic rule’sunu dar tuple/yön/policy koşuluna bağlamak, her “established” yazısını application authorization gibi kullanmaktan farklıdır.

2. Red · Güven ve etki

Hareket olmadan bütün senaryoları oku

Listener yok

  1. Sayısal port servis değildir

    NO_LISTENER case’i outbound NEW TCP destinationPort=443 ister. Bir port convention’ı listener veya TLS/application identity kanıtı değildir.

    Endpoint niyeti
    TCP 443
    Forward gate
    Rule yok
    Service boundary
    Service kanıtı yok
  2. Rule bütün koşullarıyla okundu

    WEB_OUT direction=outbound, observerState=NEW, transport=TCP ve destinationPort=443 birlikte ister. Bir alan eşleşmesi bütün rule’nun eşleşmesi değildir.

    Endpoint niyeti
    TCP 443
    Forward gate
    WEB_OUT match
    Service boundary
    Service kanıtı yok
  3. Forward policy sonucu verildi

    expectedDecision=allow, expectedRule=WEB_OUT’tur. Abstract FORWARD allow, endpoint’in connection kabul ettiğini söylemez.

    Endpoint niyeti
    TCP 443
    Forward gate
    ALLOW / WEB_OUT
    Service boundary
    Service kanıtı yok
  4. Listener koşulu ayrıca duruyor

    listenerPresent=false olduğundan connectionOutcome=not-established beklenir. Firewall allow ile application endpoint eksikliği aynı anda doğru olabilir.

    Endpoint niyeti
    TCP 443
    Forward gate
    ALLOW / WEB_OUT
    Service boundary
    No listener / not-established
  5. Sessizlik tek neden taşımaz

    Browser’ın response görmemesi bu iki koşulu tek başına ayıramaz. Verilen fixture nedeni açıklar; gerçek review’da rule verdict ve listener observation ayrı istenir.

    Endpoint niyeti
    No response ≠ single cause
    Forward gate
    ALLOW / WEB_OUT
    Service boundary
    No listener / not-established
  6. Authority üst katmanda kaldı

    Connection mümkün olsa bile authentication ve object permission ayrı uygulanır. Bu abstract transit policy kernel firewall API’si, TLS handshake veya gerçek socket denemesi değildir.

    Endpoint niyeti
    No response ≠ single cause
    Forward gate
    ALLOW / WEB_OUT
    Service boundary
    UNKNOWN: application permission

Aynı port, UDP

  1. Sayısal port servis değildir

    UDP_SAME_NUMBER destinationPort=443 taşır; TCP ile aynı sayı ayrı transport namespace’inde farklı endpoint anlamına gelir.

    Endpoint niyeti
    UDP 443
    Forward gate
    Rule yok
    Service boundary
    Service kanıtı yok
  2. Rule bütün koşullarıyla okundu

    WEB_OUT direction=outbound, observerState=NEW, transport=TCP ve destinationPort=443 birlikte ister. Bir alan eşleşmesi bütün rule’nun eşleşmesi değildir.

    Endpoint niyeti
    UDP 443
    Forward gate
    WEB_OUT transport mismatch
    Service boundary
    Service kanıtı yok
  3. Forward policy sonucu verildi

    expectedDecision=deny, expectedRule=DEFAULT’tur. TCP 443 izni UDP’ye aktarılmaz; receiver’a teslim sonucu kurulmaz.

    Endpoint niyeti
    UDP 443
    Forward gate
    DENY / DEFAULT
    Service boundary
    Service kanıtı yok
  4. Listener koşulu ayrıca duruyor

    listenerPresent=false bu UDP case’inin verilen koşuludur. Ancak denial için zaten policy sınırı belirleyicidir; server request aldı diye state yazılmaz.

    Endpoint niyeti
    UDP 443
    Forward gate
    DENY / DEFAULT
    Service boundary
    Not forwarded
  5. Sessizlik tek neden taşımaz

    Browser’ın response görmemesi bu iki koşulu tek başına ayıramaz. Verilen fixture nedeni açıklar; gerçek review’da rule verdict ve listener observation ayrı istenir.

    Endpoint niyeti
    No response ≠ single cause
    Forward gate
    DENY / DEFAULT
    Service boundary
    Not forwarded
  6. Authority üst katmanda kaldı

    Connection mümkün olsa bile authentication ve object permission ayrı uygulanır. Bu abstract transit policy kernel firewall API’si, TLS handshake veya gerçek socket denemesi değildir.

    Endpoint niyeti
    No response ≠ single cause
    Forward gate
    DENY / DEFAULT
    Service boundary
    UNKNOWN: application permission

VARSAYIM · SINIR · KONTROL

Bozulan varsayım: açık sayıyı güvenilen servis saymak

TCP 443 için geçiş izni vermek, o endpoint’in beklenen web service olduğu varsayımını taşıyabilir. Bu varsayım ancak doğru bind/transport, deployment ve application/TLS kontrolüyle desteklenir. Process değişirse veya rule farklı interface scope’una uygulanırsa aynı sayısal port başka sonucu gösterebilir.

Kontrol etkisini sınırlandır: yanlış port convention’ı doğrudan resource yetkisini kanıtlamaz; ancak gereğinden geniş traffic policy bir service’e ulaşılma olasılığını değiştirebilir. Bu ders local fixture koşullarını karşılaştırır; endpoint discovery veya service probing workflow’u içermez.

Bozulan varsayım: state ve yönün aynı olması

RETURN için gereken koşul known flow’ya ait reverse tuple ve observer’ın ilgili state’idir. Sadece destination port’a ya da metindeki ESTABLISHED sözcüğüne bakmak bu bağı kaybettirir. Asymmetric path’te bir observer gerekli context’i görmemiş olabilir; bu durum bütün policy’lerin aynı sonucu vereceğini göstermez.

Deny sonucunu yorumlamak için rule scope’u ve doğru gözlem noktası gerekir. Stateful allow, web user’ın authentication veya object ownership kontrolünü kaldırmaz. Dersin rule’larını ağ ürünü için doğrudan configuration snippet olarak kullanma; fixture yalnız decision mekanizmasını açar.

Bozulan varsayım: sessizlik tek bir neden gösterir

No-listener branch’inde firewall allow ve listener absent aynı anda doğrudur. Filtered branch’inde ise listener’in var olması traffic’in ona vardığını göstermez. Telemetry olmayan bir gerçek durumda “hiç yanıt yok” bilgisi bu iki sonucu ayırmaya yetmez.

Bu ayrım root-cause reasoning içindir. Inert data’da bilinen koşulu değiştirip hangi outcome’un mümkün olduğunu tartış; dış hedefe connection denemeleri veya timing fingerprint’i çıkarmadan gerekli ek kanıtı adlandır.

3. Blue · Güvenli geliştirme ve savunma

Hareket olmadan bütün senaryoları oku

Return scope

  1. Listener ve connection ayrıldı

    web-listener 198.51.100.200:443 TCP LISTEN’dır; c1 ve c2 aynı local port ile farklı remote IP/port taşıyan ESTABLISHED endpoint kayıtlarıdır.

    Endpoint inventory
    One listener / two tuples
    Policy beklentisi
    Rule observation yok
    Scope review
    Scope incelemesi yok
  2. Observer state endpoint state değildir

    RETURN satırı inbound, observerState=ESTABLISHED ve knownFlow=true koşullarıyla allow bekler. Gerçek bir sistemde bu observer state’i transit firewall üretir; endpointState ise ilgili endpoint’in socket durumudur. Buradaki iki alan sentetik ledger’da verilmiştir, ortak bir runtime producer’dan alınmış değildir.

    Endpoint inventory
    One listener / two tuples
    Policy beklentisi
    RETURN expected allow
    Scope review
    Scope incelemesi yok
  3. Reverse flow şartı kontrol edildi

    Known flow’ya ait reverse tuple 198.51.100.200:443 → 192.0.2.10:51000’dır. Sadece port veya ESTABLISHED kelimesi flow ilişkisinin yerine geçmez.

    Endpoint inventory
    One listener / two tuples
    Policy beklentisi
    RETURN expected allow
    Scope review
    Tuple + direction + knownFlow
  4. Gerçek verdict claim’i sınırlandı

    Matrisin RETURN satırı expectedRule=RETURN ve expectedDecision=allow değerlerini taşır. Koşullar modelde bu beklentiyle uyumludur; bu satır gerçek firewall verdict’i veya packet acceptance gözlemi değildir. Çalışan sistemi doğrulamak için aynı tuple ve yöndeki transit policy kaydı ayrıca gerekir.

    Endpoint inventory
    One listener / two tuples
    Policy beklentisi
    Expected: RETURN / allow
    Scope review
    Tuple + direction + knownFlow
  5. Benign negative control korunuyor

    UNSOLICITED inbound NEW ve knownFlow=false DEFAULT deny bekler. Bu kontrol RETURN allowance ile karıştırılmaz; yeni inbound flow aynı kural kapsamında değildir.

    Endpoint inventory
    UNSOLICITED → DEFAULT deny
    Policy beklentisi
    Expected: RETURN / allow
    Scope review
    Tuple + direction + knownFlow
  6. Regression farklı katmanları tutar

    Known RETURN için allow, unsolicited ve UDP için deny beklentileri birbirinden ayrıdır. NO_LISTENER satırı da allow-but-not-established koşulunu korur. Bu kontrol matrisi gerçek filtreleme veya application başarısı sonucu sunmaz; her katmanın kendi gözlemi gerekir.

    Endpoint inventory
    UNSOLICITED → DEFAULT deny
    Policy beklentisi
    Expected: RETURN / allow
    Scope review
    Policy beklentileri ayrı; runtime bilinmiyor

Verdict kanıtı yok

  1. Listener ve connection ayrıldı

    web-listener 198.51.100.200:443 TCP LISTEN’dır; c1 ve c2 aynı local port ile farklı remote IP/port taşıyan ESTABLISHED endpoint kayıtlarıdır.

    Endpoint inventory
    One listener / two tuples
    Policy beklentisi
    Rule observation yok
    Scope review
    Scope incelemesi yok
  2. Observer state endpoint state değildir

    RETURN satırı inbound, observerState=ESTABLISHED ve knownFlow=true koşullarıyla allow bekler. Gerçek bir sistemde bu observer state’i transit firewall üretir; endpointState ise ilgili endpoint’in socket durumudur. Buradaki iki alan sentetik ledger’da verilmiştir, ortak bir runtime producer’dan alınmış değildir.

    Endpoint inventory
    One listener / two tuples
    Policy beklentisi
    RETURN expected allow
    Scope review
    Scope incelemesi yok
  3. Reverse flow şartı kontrol edildi

    Known flow’ya ait reverse tuple 198.51.100.200:443 → 192.0.2.10:51000’dır. Sadece port veya ESTABLISHED kelimesi flow ilişkisinin yerine geçmez.

    Endpoint inventory
    One listener / two tuples
    Policy beklentisi
    RETURN expected allow
    Scope review
    Tuple + direction + knownFlow
  4. Gerçek verdict claim’i sınırlandı

    Bu review kopyasında policy observation yoktur. expectedRule=RETURN yalnız expectation’dır; deny görülmemesi allow gözlemi olmaz.

    Endpoint inventory
    One listener / two tuples
    Policy beklentisi
    UNKNOWN: observed verdict
    Scope review
    Tuple + direction + knownFlow
  5. Benign negative control korunuyor

    UNSOLICITED inbound NEW ve knownFlow=false DEFAULT deny bekler. Bu kontrol RETURN allowance ile karıştırılmaz; yeni inbound flow aynı kural kapsamında değildir.

    Endpoint inventory
    UNSOLICITED → DEFAULT deny
    Policy beklentisi
    UNKNOWN: observed verdict
    Scope review
    Tuple + direction + knownFlow
  6. Regression farklı katmanları tutar

    Listener inventory ve expected return rule bilinir, observed verdict UNKNOWN kalır. Network policy kanıtı olmadan service failure’ın nedeni seçilmez.

    Endpoint inventory
    UNSOLICITED → DEFAULT deny
    Policy beklentisi
    UNKNOWN: observed verdict
    Scope review
    UNKNOWN: filter outcome

UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA

Listener, flow ve application kanıtını bağla

Listener inventory, process’in hangi local endpoint’te beklediğini gösterir. Connection kaydı iki peer tuple’ını ve endpoint’in kendi state’ini anlatır. Firewall observation policy noktasındaki rule/verdict’i verir. Application log ise request ve permission sonucunu ayrıca kaydeder. Aynı terimi dört gözlem yerine kullanma.

Fixture’daki c1/c2 bir server port’unun iki connection’a ait olabileceğini gösterir. Gerçek correlation’da timestamp, namespace/interface ve pre/post NAT tuple scope’unu doğrula. Her ürünün field adını kendi şemasıyla kontrol et; bu lesson’daki ruleId veya observerState’in gerçek log alanı olduğunu varsayma.

Pozitif ve negatif baseline beraber

Normal case: outbound NEW TCP 443 WEB_OUT ile allow, matching listener present; connection kurulması mümkün. Negative case: UDP 443 aynı rule’ya eşleşmez. Unsolicited inbound NEW default deny’dir. Known reverse flow ESTABLISHED RETURN ile allow olur. Bu policy bütün olası ürün davranışlarının envanteri değildir.

Allow-but-no-listener sonucu firewall’un çalışmadığını değil application endpoint koşulunun eksik olduğunu gösterir. Filtered branch’te server’ın “request aldı” state’ine geçmemesi gerekir. Gerçek log yoksa “deny gözlenmedi” bilgisini allow kanıtı sayma; logging/sampling/observation scope’u sınırını yaz.

Regression niyeti alanlardan doğrula

Policy review’sinde transport, direction, state kaynağı ve exact tuple koşullarını birlikte ele al. TCP allow eklerken UDP’nin yanlışlıkla açılmadığını; return traffic şartını değiştirirken yeni inbound traffic’in aynı kapsama girmediğini doğrula. Bind değişikliğinde intended local address scope’unu kontrol et.

İnceleme sonucu, görülen alanların kapsamıyla sınırlıdır. Tuple ve expectedDecision değerlerinin tutarlı olması, çalışan firewall’un aynı kararı verdiğini kanıtlamaz. Bunun için transit policy noktasının kaydı gerekir; listener ve accepted socket durumu endpoint’ten, TLS/HTTP sonucu ise ilgili üst katmandan ayrıca doğrulanır. Aynı işlem ve gözlem zamanı kurulmadan bu kayıtları tek başarı etiketi altında birleştirme.

ŞİMDİ VAKAYA UYGULA

Firewall allow ile service kabulü nerede ayrılır?

Abstract FORWARD policy, outbound TCP port 443 için allow verebilir. Buna rağmen hedefte listener yoksa connection kurulamaz. Known return flow ile yeni inbound flow farklı koşullarla değerlendirilir.

Vakadaki response hangi network yolu üzerinden taşınır? Byte, IP route, socket ve firewall bilgisini application’ın doğru kitabı döndürdüğü sonucundan ayrı değerlendir.

Bağlı vaka dosyasını aç ↗

ÖRNEĞİ BİRLİKTE OKUYALIM

Bir listener, iki connection, beş policy case’i

Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.

Ham kaydı ve alan açıklamalarını oku
{
  "scope": "Abstract transit/FORWARD policy; custom fields, not a kernel API or capture. NAT absent in this fixture.",
  "listeners": [
    {
      "id": "web-listener",
      "family": "IPv4",
      "transport": "TCP",
      "localIp": "198.51.100.200",
      "localPort": 443,
      "endpointState": "LISTEN"
    }
  ],
  "connections": [
    {
      "id": "c1",
      "family": "IPv4",
      "transport": "TCP",
      "localIp": "198.51.100.200",
      "localPort": 443,
      "remoteIp": "192.0.2.10",
      "remotePort": 51000,
      "endpointState": "ESTABLISHED"
    },
    {
      "id": "c2",
      "family": "IPv4",
      "transport": "TCP",
      "localIp": "198.51.100.200",
      "localPort": 443,
      "remoteIp": "192.0.2.20",
      "remotePort": 52000,
      "endpointState": "ESTABLISHED"
    }
  ],
  "abstractPolicy": {
    "defaultDecision": "deny",
    "rules": [
      {
        "id": "RETURN",
        "conditions": {
          "direction": "inbound",
          "observerState": "ESTABLISHED",
          "knownFlow": true
        },
        "decision": "allow"
      },
      {
        "id": "WEB_OUT",
        "conditions": {
          "direction": "outbound",
          "observerState": "NEW",
          "transport": "TCP",
          "destinationPort": 443
        },
        "decision": "allow"
      }
    ]
  },
  "cases": [
    {
      "id": "NORMAL",
      "transport": "TCP",
      "sourceIp": "192.0.2.10",
      "sourcePort": 51000,
      "destinationIp": "198.51.100.200",
      "destinationPort": 443,
      "direction": "outbound",
      "observerState": "NEW",
      "knownFlow": false,
      "listenerPresent": true,
      "expectedDecision": "allow",
      "expectedRule": "WEB_OUT",
      "connectionOutcome": "possible"
    },
    {
      "id": "RETURN",
      "transport": "TCP",
      "sourceIp": "198.51.100.200",
      "sourcePort": 443,
      "destinationIp": "192.0.2.10",
      "destinationPort": 51000,
      "direction": "inbound",
      "observerState": "ESTABLISHED",
      "knownFlow": true,
      "listenerPresent": null,
      "expectedDecision": "allow",
      "expectedRule": "RETURN",
      "connectionOutcome": "existing-flow"
    },
    {
      "id": "UDP_SAME_NUMBER",
      "transport": "UDP",
      "sourceIp": "192.0.2.10",
      "sourcePort": 51000,
      "destinationIp": "198.51.100.200",
      "destinationPort": 443,
      "direction": "outbound",
      "observerState": "NEW",
      "knownFlow": false,
      "listenerPresent": false,
      "expectedDecision": "deny",
      "expectedRule": "DEFAULT",
      "connectionOutcome": "not-forwarded"
    },
    {
      "id": "UNSOLICITED",
      "transport": "TCP",
      "sourceIp": "198.51.100.200",
      "sourcePort": 443,
      "destinationIp": "192.0.2.10",
      "destinationPort": 51000,
      "direction": "inbound",
      "observerState": "NEW",
      "knownFlow": false,
      "listenerPresent": null,
      "expectedDecision": "deny",
      "expectedRule": "DEFAULT",
      "connectionOutcome": "not-forwarded"
    },
    {
      "id": "NO_LISTENER",
      "transport": "TCP",
      "sourceIp": "192.0.2.10",
      "sourcePort": 51000,
      "destinationIp": "198.51.100.200",
      "destinationPort": 443,
      "direction": "outbound",
      "observerState": "NEW",
      "knownFlow": false,
      "listenerPresent": false,
      "expectedDecision": "allow",
      "expectedRule": "WEB_OUT",
      "connectionOutcome": "not-established"
    }
  ]
}
transport + local/remote IP/port
Connection’ın uçlarını ve transport namespace’ini ayıran tuple.
endpointState
Sentetik endpoint state; firewall conntrack state’i değil.
direction / observerState / knownFlow
Toy firewall observation koşulları; state peer’dan gelen güvenilir veri sayılmaz.
expectedRule / expectedDecision
Abstract rule eşleşmesi ve transit policy kararı.
listenerPresent / connectionOutcome
Policy allow’dan ayrı endpoint koşulu; possible bir gerçek handshake sonucu değildir.

Inert koşul ledger’ı; live sockets, nftables configuration, wire capture veya hata kodu değil. TCP handshake ayrıntıları, timeout/retry, related flows, policy ordering çeşitleri ve UDP tracking modellenmez.

İki yanlış kanı

443’e allow verdiysem web application güvenlidir ve yanıt verir.

Allow bir policy noktasının kararıdır. Transport, matching listener, path, TLS ve application permission sonucu ayrı koşul ve kanıt ister.

Bir server port’unda yalnız bir connection olabilir.

Listener aynı local endpoint için birden fazla connection kabul edebilir; remote tuple’lar conversation’ları ayırır.

SIRA SENDE

Bu hikâyeyi sen çöz.

Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.

NO_LISTENER branch’inde firewall allow. Connection’ın kurulması kesin mi?

  1. Hayır. listenerPresent=false; sonuç not-established.
  2. Evet. Allow her zaman connection success demek.
Gerekçeli cevabı oku

Hayır. listenerPresent=false; sonuç not-established. — WEB_OUT forwarding’e izin verir. Uzak endpoint’in dinlemesini veya application başarısını sağlamaz.

İki ESTABLISHED kayıt aynı local port’u kullanıyor. Aynı connection mı?

Dersten seçilen artifact alanları; öğretim örneği

connections[0]
{"id":"c1","family":"IPv4","transport":"TCP","localIp":"198.51.100.200","localPort":443,"remoteIp":"192.0.2.10","remotePort":51000,"endpointState":"ESTABLISHED"}
connections[1]
{"id":"c2","family":"IPv4","transport":"TCP","localIp":"198.51.100.200","localPort":443,"remoteIp":"192.0.2.20","remotePort":52000,"endpointState":"ESTABLISHED"}
  1. Hayır. Remote tuple’lar farklı.
  2. Evet. Local 443 bütün connection’ları birleştirir.
Gerekçeli cevabı oku

Hayır. Remote tuple’lar farklı. — Connection kimliği tek port değildir. Local/remote endpoint ve transport birlikte değerlendirilir.

UDP_SAME_NUMBER neden TCP web listener’ıyla aynı endpoint sayılmaz?

Gerekçeli cevabı oku

443 numarası TCP ve UDP namespace’lerini birleştirmez. Örnek yalnız TCP listener ve TCP WEB_OUT kuralı tanımlar; UDP branch default deny olur. Bu sonuç UDP’nin bütün sistemlerde yasak olduğunu değil, bu policy’nin kararını gösterir.

□ Endpoint kimliğine transport’u dahil ettim.

□ Deny sonucunu bu policy’ye bağladım.

Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç

Kaynaklar ve kapsam