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.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
TCP + listener
- 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ı
- 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ı
- 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ı
- 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
- 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
- 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ı
- 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ı
- 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ı
- 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
- 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
- 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ı
- 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ı
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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?
- Hayır. listenerPresent=false; sonuç not-established.
- 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"}
- Hayır. Remote tuple’lar farklı.
- 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
- RFC 9293 — TCP2.2 Key TCP Concepts · 3.1 Header Format · 3.2 Terminology · 3.3.2 State Machine Overview · 3.9.1 The User/TCP Interface
- RFC 768 — UDPFormat · Fields
- Linux man-pages — socket(7)DESCRIPTION · Socket-layer functions
- Linux man-pages — bind(2)DESCRIPTION
- Linux man-pages — listen(2)DESCRIPTION
- Linux man-pages — ip(7)Address format · Special and reserved addresses: INADDR_LOOPBACK and INADDR_ANY
- Red Hat Enterprise Linux 9 — nftables2.7.2 Security requirements to the firewall script · 2.7.4 Writing and activating the nftables script: INPUT/OUTPUT/FORWARD and ct state
- RFC 5737 — Documentation IPv43 Documentation Address Blocks