Part 10 ile Windows identity katmanını eklemiştim: Active Directory, DNS, DHCP ve domain-joined client. Bu bölümde lab’i “kurulum sırasında herkes herkesle konuşsun” halinden açık bir firewall policy’ye taşıdım.
Amacım karmaşık kural yazmak değildi. Amacım her izinli yolun açıklanabilir olmasıydı.
Ne İnşa Ettim?
Geçici build-phase allow rule’larını segmentli pfSense policy ile değiştirdim:
Default duruş: deny by default
Management: Tailscale + break-glass LAN/WAN erişimi
Jumpbox: Alpine üzerinden Kali SSH yolu
Client VLAN: sadece AD, DNS, Wazuh, Windows Update
Container VLAN: sadece Docker host + n8n explicit egress
Honeypot VLAN: sadece Wazuh telemetry
Pentest VLAN: internet egress yok
Isolated VLAN: ingress yok, egress yok
Neden Önemli?
Segmentasyon sadece VLAN ve subnet değildir. Bir segment, ancak firewall policy’si rolüyle uyumluysa anlamlı hale gelir.
Kurulum aşamasında geniş allow rule’lar faydalıydı. VM’ler update aldı, installer indirdi, domain’e join oldu, package pull yaptı ve hızlı troubleshoot edildi. Ama bu kuralları final halde bırakmak mimarinin güvenlik değerini büyük ölçüde silerdi.
Bu geçiş lab’i daha gerçekçi hale getirdi:
- endpoint’ler domain servislerine erişiyor ama tüm lab’e erişmiyor;
- Wazuh telemetry alıyor ama bu geniş erişim bahanesi olmuyor;
- vulnerable sistemler contained kalıyor;
- malware-analysis hostları dışarı kaçamıyor;
- management erişimi normal network reachability’den ayrılıyor.
Topoloji Kesiti
Tailscale / MacBook
|-- pfSense management
|-- Proxmox management
|-- Alpine jumpbox
|-- Wazuh dashboard
DEFENCE / MANAGEMENT
|-- DC / DNS / DHCP
|-- Wazuh
|-- Alpine jumpbox
CLIENT
|-- Wazuh agent ve Sysmon olan Windows client
CONTAINER
|-- Docker host
|-- n8n
|-- vulnerable container'lar
PENTEST
|-- Kali
|-- vulnerable target
HONEYPOT
|-- T-Pot
ISOLATED
|-- FLARE-VM
|-- REMnux
Kurulum Adımları
VLAN 99’u İzole Etmek
Malware-analysis segmenti lab’in en katı policy’si. Bu normal bir user veya server network değil.
ISOLATED -> any: blocked
Diğer VLAN'lar -> ISOLATED: blocked
Buradaki kritik tasarım noktası şu: malware-analysis isolation hafızaya veya disipline bağlı olmamalı. Ben bir hostun ne yaptığını unutsam bile network path kapalı kalmalı.
Jumpbox’ı Management Yoluna Taşımak
Alpine VM erken kurulum altyapısı olarak başlamıştı. Lab olgunlaşınca onu management tarafına taşıdım ve stabil adres verdim.
Jumpbox: 10.10.10.50
Role: controlled SSH pivot
Jumpbox, Tailscale’in yerine geçmiyor. Tailscale remote access plane; jumpbox ise içerideki administrative pivot.
Management ve Domain Servislerini Sıkılaştırmak
Management tarafında DC, Wazuh ve jumpbox var. Bu yüzden bu segment kullanışlı kalmalı ama wide open olmamalı.
DC -> Internet: update/NTP only
DC -> Wazuh: reserved telemetry path
Jumpbox -> pfSense: SSH/HTTPS
Jumpbox -> Kali: SSH
Management -> ISOLATED: blocked
Part 10’da Windows DC ve client için Wazuh agent baseline’ını hazırladım. Buradaki firewall kararı: telemetry path’leri any-any erişimin arkasına saklanmıyor, açıkça tanımlanıyor.
Client VLAN’i Sıkılaştırmak
Windows client’ın domain controller ve Wazuh’a ihtiyacı var, tüm lab’e değil.
CLIENT -> DC: DNS, NTP, Kerberos, LDAP, SMB, RPC
CLIENT -> Wazuh: Wazuh agent traffic
CLIENT -> Internet: Windows Update HTTP/HTTPS
CLIENT -> ISOLATED: blocked
CLIENT -> everything else: blocked
Bu sayede Windows endpoint AD ve Sysmon çalışmaları için gerçekçi kalıyor ama lab’in geri kalanına ücretsiz pivot olmuyor.
Honeypot Egress’i Kısıtlamak
Honeypot segmenti gözlemlenmeli, güvenilmemeli.
HONEYPOT -> Wazuh: TCP 1514
HONEYPOT -> ISOLATED: blocked
HONEYPOT -> everything else: blocked
Bu T-Pot’u sensor island yapıyor. Gördüğünü raporlayabiliyor ama lab’e veya internete genel erişim almıyor.
Container Egress’i Kısıtlamak
Docker host update ve image pull için çıkışa ihtiyaç duyuyor. n8n outbound web access istiyor. Vulnerable container’ların internete ihtiyacı yok.
Docker host -> Wazuh: TCP 1514
Docker host -> DC: DNS
Docker host -> Web: HTTP/HTTPS
n8n -> DC: DNS
n8n -> Web: HTTP/HTTPS
Other containers: blocked by default
Buradaki faydalı kural basit: container egress VLAN’a topluca verilmiyor. Named workload bazında veriliyor.
Pentest VLAN’i Kapatmak
Kali’nin bu aşamada direkt internet erişimine ihtiyacı yok. Araştırma ve indirmeleri MacBook’ta yapıyorum, Kali’ye jumpbox üzerinden ulaşıyorum.
Jumpbox -> Kali: SSH allowed
Kali -> Internet: blocked
PENTEST -> ISOLATED: blocked
PENTEST -> everything else: blocked
Bu Kali’yi lab içindeki attack VM olarak tutuyor, general-purpose workstation’a çevirmiyor.
Management ve Break-Glass Erişimi Tanımlamak
Tailscale’i primary management plane olarak tuttum. LAN ve WAN erişimi ise sadece MacBook’tan fallback yolu.
MacBook over Tailscale -> pfSense SSH/HTTPS
MacBook over Tailscale -> Proxmox SSH/8006
MacBook over Tailscale -> Wazuh HTTPS
MacBook over Tailscale -> Jumpbox SSH
Tailscale -> ISOLATED: blocked
Tailscale -> everything else: blocked
Tasarım kararım bilinçliydi: management erişimi sadece home network’te fiziksel olarak bulunmaya değil, authenticated access’e ve bilinen admin hostlara bağlı olmalı.
Karşılaştığım Problemler
Interface yönü önemli. pfSense rule’u trafiğin girdiği interface’te değerlendirir. CLIENT-to-DC rule’u DC’nin interface’inde değil, CLIENT tabında olmalı.
This Firewall interface address’ten daha geniş. Dar management rule’larında LAN address veya WAN address, This Firewall‘dan daha hassas olabilir.
Tailscale source object değil, interface. Tailscale tabında source hâlâ MacBook’un Tailscale IP’si gibi bir IP veya alias.
DHCP reservation, unusual client identifier ile sinir bozabiliyor. Docker host için DHCP server’ın oluşturduğu stabil reservation’ı kabul ettim ve alias’ı o adrese göre yazdım.
Pass rule’lar default allow dururken sadece dokümantasyon gibi kalabilir. Allow list’in anlamlı olması için final deny rule şart.
Ne Öğrendim?
Firewall hardening’in çoğunlukla yön ve sahiplik meselesi olduğunu öğrendim. Her VLAN için üç soruya cevap vermem gerekti:
Bu segment ne tüketebilir?
Bu segment ne yayınlayabilir?
Buradan ne asla erişilebilir olmamalı?
Telemetry’nin de birinci sınıf network path olarak ele alınması gerektiğini öğrendim. Wazuh erişimi geniş rule’lardan yanlışlıkla miras kalmamalı; her ilgili segmentten açıkça izinli olmalı.
En büyük zihinsel değişim convenience ile architecture’ı ayırmak oldu. Build-phase access faydalıdır, ama son kullanma tarihi olmalı.
Doğrulama Kanıtı
Kuralları pratik reachability testleriyle doğruladım:
Kali sadece jumpbox üzerinden SSH ile erişilebilir
Kali direct internet erişimi kapalı
CLIENT domain discovery çalışıyor
CLIENT Wazuh/Sysmon telemetry Wazuh'a ulaşıyor
HONEYPOT Wazuh'a raporlayabiliyor
Docker host ve n8n sadece gerekli egress'i koruyor
ISOLATED routed lab segmentlerinden erişilemez
Tailscale management path'leri çalışıyor
Sysmon Telemetry Smoke Test
Attack simulation’a geçmeden önce, hardening sonrası endpoint telemetry’nin hâlâ Wazuh’a ulaştığını doğruladım.
Windows client’a Sysmon kurdum, Wazuh agent configuration içine Sysmon Operational channel’ını ekledim, agent’ı restart ettim ve küçük bir PowerShell process event ürettim.
Wazuh Discover içinde şu query client1 event’lerini döndürdü:
data.win.system.providerName:"Microsoft-Windows-Sysmon"
Event’lerde powershell.exe, parent process metadata ve client agent identity görünüyordu. Bu henüz detection engineering değil. Sadece firewall değişikliğinin telemetry path’i bozmadığını kanıtlıyor.
Sırada Ne Var?
Lab’de artık identity, endpoint telemetry, network telemetry ve firewall segmentation hazır. Part 12’de controlled attack simulation ve raporlama aşamasına geçeceğim: küçük bir Atomic Red Team test seti çalıştırmak, Wazuh/Sysmon event’lerini toplamak ve detection’ların gerçekten ne gösterdiğini açıklamak.
Hızlı Referans
Default rule model:
gerekli service path'leri allow
ISOLATED'i explicit block
geri kalan her şeyi block
Core telemetry:
CLIENT -> WAZUH TCP 1514
DC -> WAZUH TCP 1514
DOCKER -> WAZUH TCP 1514
HONEYPOT -> WAZUH TCP 1514
Core identity:
CLIENT -> DC DNS/Kerberos/LDAP/SMB/RPC
Management:
MacBook Tailscale IP -> pfSense / Proxmox / Wazuh / Jumpbox
MacBook LAN/WAN IP -> pfSense break-glass only














