Siber Güvenlik etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Siber Güvenlik etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

10 Temmuz 2026 Cuma

Modern Phishing Saldırı Vektörleri: Güvenlik Tehditlerine Karşı Güncel Rehber

2026 yılının ikinci yarısına girerken, siber güvenlik alanında en önemli tehditlerden biri olan phishing saldırıları hala aktif ve gelişmeye devam ediyor. Bu saldırılarda saldırganlar, kurbanlarını sahte web siteleri, sahte e-postalar veya sahte mesajlar aracılığıyla kişisel bilgilerini veya parolalarını çalmaya çalışırlar.

Phishing saldırı vektörleri son yıllarda önemli ölçüde değişti. Artık sadece e-posta veya web siteleri değil, sosyal medya, mesajlaşma uygulamaları ve telefon aramaları da saldırı noktaları haline geldi. Bu nedenle, güvenlik önlemlerini güncellemek ve personelin eğitimini sağlamak daha da önemli hale geldi.

Phishing Saldırı Tipleri

Spear Phishing: Hedefli saldırılar, belirli bir kişi veya grup hedeflenerek gerçekleştirilir. Whaling: Yüksek düzeydeki yöneticilere yönelik saldırılar, genellikle daha sofistike ve hedefli olur. Smishing ve Vishing: SMS ve telefon aramaları üzerinden gerçekleştirilen phishing saldırıları, kurbanların dikkatini çekmek için thường daha acil veya önemli gibi sunulur.

Güvenlik Önlemleri

Şifre Yönetimi: Güçlü ve benzersiz şifreler kullanmak, iki faktörlü kimlik doğrulama (2FA) uygulamak, güncel antivirüs yazılımları kullanmak ve periyodik güvenlik güncellemeleri yapmak, phishing saldırılarına karşı önemli önlemlerdir. Ayrıca, personel eğitimi ve farkındalık artırma çalışmaları, kuruluşların güvenlik duruşlarını güçlendirmelerine yardımcı olur.

Siber güvenlik alanında sürekli eğitim ve güncellemeler, phishing saldırılarına karşı etkili bir savunma oluşturmak için kritik öneme sahiptir. 2026 yılında, güvenlik uzmanları ve kuruluşlar, bu tehditlerle mücadele için proaktif ve sürekli bir yaklaşım benimsemelidir.

6 Mart 2026 Cuma

Modern Phishing Saldırı Vektörleri: 2026'da Siber Güvenlikte En Yeni Tehditler

2026 yılında siber güvenlikte en önemli tehditlerden biri olan phishing saldırıları, her geçen gün daha da sofistike hale geliyor. Bu saldırıların modernen vektörleri, geleneksel yöntemlerin ötesine geçerek artificial intelligence (AI) ve machine learning (ML) gibi teknolojileri kullanıyor.

Phishing saldırılarının temel amacı, kurbanlardan kişisel veri ve parola gibi hassas bilgileri çalmaktır. Bu saldırılar, e-posta, telefon ve sosyal medya gibi çeşitli kanallardan gerçekleştirilebilir. 2026'da phishing saldırılarının en önemli özellikleri arasında sahte web siteleri, sahte e-posta ve sahte mesajlar yer alıyor.

Phishing Saldırı Vektörleri

2026'da phishing saldırı vektörleri arasında aşağıdaki olanlar yer alıyor:

  • Spear Phishing: Hedefli phishing saldırıları, kurbanların kişisel verileri ve alışkanlıkları hakkında bilgi toplayarak gerçekleştirilir.
  • Whaling: Yüksek düzeydeki yöneticilere yönelik phishing saldırıları, şirketin iç işleyişini ve finansal bilgilerini hedef alır.
  • Smishing: Short Message Service (SMS) aracılığıyla gerçekleştirilen phishing saldırıları, kurbanların cephaneliğini ve parola bilgilerini çalmayı amaçlar.

Phishing Saldırılarına Karşı Korunma

2026'da phishing saldırılarına karşı korunmak için aşağıdaki önlemler alınabilir:

  • Güçlü Parolalar: Parola oluştururken güçlü ve benzersiz parolalar tercih edilmelidir.
  • Two-Factor Authentication (2FA): İki faktörlü kimlik doğrulama, phishing saldırılarına karşı ek bir güvenlik katmanı sağlar.
  • Güncel Yazılım: Yazılım ve operasyonel sistem güncellemeleri, güvenlik açıklarını kapatmak için önemlidir.

Phishing saldırıları, 2026'da siber güvenlikte en önemli tehditlerden biri olmaya devam ediyor. Güçlü parolalar, iki faktörlü kimlik doğrulama ve güncel yazılımlar gibi önlemler, phishing saldırılarına karşı korunmak için alınabilir.

26 Şubat 2026 Perşembe

Modern Phishing Saldırı Vektörleri: 2026 Yılının Güvenlik Tehdidi

2026 yılının güvenlik tehditlerine baktığımızda, phishing saldırılarının hala en önemli sorunlardan biri olduğunu görüyoruz. Phishing, sahte e-posta veya web siteleri aracılığıyla kullanıcıların kişisel bilgilerini çalmaya yönelik bir tür siber saldırıdır. Bu saldırılar, güvenlik duvarlarını ve antivirüs yazılımlarını atlatarak hedeflerine ulaşabilir.

Modern phishing saldırı vektörleri, geleneksel yöntemlerin ötesine geçerek artificial intelligence (AI) ve machine learning (ML) gibi teknolojileri kullanır. Bu, saldırganların daha hedefli ve özelleştirilmiş saldırılar düzenmesine olanak tanır. Örneğin, sahte sosyal medya hesapları veya sahte müşteri hizmetleri gibi yöntemlerle kullanıcıları kandırmaya çalışabilirler.

Phishing Saldırı Türleri

Phishing saldırıları çeşitli türlerde olabilir. Spear phishing, belirli bir kişi veya gruba yönelik özel olarak tasarlanmış saldırılar anlamına gelir. Whaling, yüksek düzeydeki yöneticilere veya karar alıcılara yönelik daha sofistike saldırılardır. Smishing ve vishing ise short message service (SMS) ve voice over internet protocol (VoIP) gibi iletişim kanallarını kullanır.

Güvenlik Önlemleri

Kullanıcılar, güçlü parolalar kullanmalı, iki faktörlü kimlik doğrulama (2FA) gibi ek güvenlik önlemlerine başvurmalı ve güncel antivirüs yazılımları ile güvenlik duvarlarını sürekli olarak güncellemelidir. Ayrıca, sahte e-posta ve web siteleri hakkında dikkatli olmalı ve şüpheli aktiviteler hakkında hemen güvenlik ekibine bildirimde bulunmalıdır.

Siber güvenlik uzmanları, phishing saldırılarına karşı sürekli eğitim ve bilinçlendirme çalışmaları yürütmeli ve güvenlik açıklarını düzenli olarak denetlemelidir. Bu, kurumların ve bireylerin veri güvenliğini korumak için kritik önem taşır.

8 Şubat 2026 Pazar

IPv6’ya Geçiş Rehberi: Dual Stack, DNS ve Güvenlik Ayarlarıyla Adım Adım Kurulum

IPv6 neden şimdi gündemde?

IPv4 adreslerinin pratikte tükenmesi, CGNAT kullanımının artması ve uzaktan erişim senaryolarının çoğalması IPv6’yı “bir gün geçeriz” seviyesinden çıkarıp gerçek bir ihtiyaç hâline getirdi. IPv6 sadece daha fazla adres demek değil; doğru planlandığında daha temiz bir ağ tasarımı, daha az NAT bağımlılığı ve modern güvenlik yaklaşımlarına daha uyumlu bir altyapı anlamına geliyor. Bu yazıda, ev/ofis ölçeğinden başlayıp küçük işletmeye kadar uygulanabilecek şekilde Dual Stack (IPv4+IPv6 birlikte) kurulumu, DNS kayıtları ve temel güvenlik adımlarını pratik bir rehber olarak ele alacağım.

1) Ön koşullar: ISS ve modem/router desteğini doğrulayın

Önce internet servis sağlayıcınızın (ISS) IPv6 sağladığını kontrol edin. Birçok ISS, DHCPv6-PD (Prefix Delegation) ile router’a bir “prefix” (örneğin /56 veya /64) atar. Modem/router arayüzünüzde IPv6 menüsünü bulun; “Native IPv6”, “DHCPv6”, “Prefix Delegation” gibi seçenekler görmelisiniz. Eğer cihazınız çok eskiyse IPv6 desteklese bile gelişmiş firewall/RA ayarlarını sunmayabilir. Bu aşamada hedefiniz: router’ın WAN tarafında IPv6 adresi alması ve LAN tarafına prefix dağıtabilmesi.

2) Dual Stack kurulum: IPv4’e dokunmadan IPv6’yı ekleyin

En sorunsuz geçiş yaklaşımı Dual Stack’tir. Çünkü cihazlar ve uygulamalar IPv6’yı destekliyorsa onu kullanır, desteklemiyorsa IPv4 ile devam eder. Router’da IPv6’yı etkinleştirdikten sonra genellikle iki kritik ayar vardır: DHCPv6-PD ve RA (Router Advertisement). DHCPv6-PD ile ISS’den aldığınız prefix, LAN’a dağıtılır. RA ise istemcilere “bu ağda IPv6 var, varsayılan ağ geçidi benim” bilgisini duyurur. Çoğu ev router’ında “SLAAC” (Stateless Address Autoconfiguration) otomatik gelir; bu sayede Windows, macOS, Linux ve mobil cihazlar IPv6 adresini kendisi üretir.

Kurulumdan sonra istemci tarafta doğrulama yapın. Windows’ta ipconfig, Linux/macOS’ta ip a komutuyla global IPv6 adresi görmelisiniz (genellikle 2000::/3 aralığında). Ardından bir IPv6 test sitesine girip erişimi doğrulayın. Eğer “IPv6 var ama internet yok” gibi bir durum oluşursa, çoğunlukla DNS veya firewall kuralı hatasıdır.

3) DNS tarafı: AAAA kayıtları, ters kayıt ve split-horizon

IPv6’da web sunucunuzu veya evdeki servislerinizi dışarı açacaksanız DNS’e AAAA kaydı eklemeniz gerekir. Örneğin example.com için hem A (IPv4) hem AAAA (IPv6) kaydı eklemek, istemcinin en uygun protokolle bağlanmasını sağlar. Bazı sistemler IPv6’yı tercih edebilir; bu yüzden IPv6’nız stabil değilse AAAA kaydını eklemek “yavaş açılıyor” şikâyetlerine yol açabilir. En iyi pratik: önce IPv6 bağlantısını ve firewall’ı sağlamlaştırın, sonra AAAA kaydını yayınlayın.

Kurumsal tarafta iç ağ isim çözümlemesi için split-horizon DNS (içeride farklı, dışarıda farklı kayıt döndürme) kullanılıyorsa, IPv6’yı her iki tarafta da tutarlı planlamak önemlidir. İçeride özel servisler için ULA (fc00::/7) kullanmak cazip görünse de çoğu senaryoda ISS’den gelen global prefix ile devam etmek, NAT benzeri karmaşıklıklardan kaçınmanızı sağlar. Ters DNS (PTR) kaydı ise genellikle barındırma sağlayıcı/ISS tarafında yönetilir; e-posta gibi servisler planlıyorsanız ihmal etmeyin.

4) Güvenlik: “NAT yoksa güvensiz” yanılgısı ve doğru firewall

IPv4 dünyasında NAT, yanlışlıkla “güvenlik duvarı” yerine kondu. IPv6’da her cihazın global adres alabilmesi, doğru yapılandırılmamış ağlarda yüzey alanını artırır. Bu yüzden IPv6’ya geçerken yapılacak en kritik iş, router üzerinde stateful firewall kurallarını kontrol etmektir. İyi haber: Çoğu modern router, IPv6’da varsayılan olarak dışarıdan içeri gelen bağlantıları engeller, içeriden dışarıya izin verir.

Kontrol etmeniz gerekenler: WAN’dan LAN’a inbound trafiğin kapalı olması, yönetim arayüzünün (web/SSH) internetten erişime açık olmaması, UPnP benzeri otomatik port açma mekanizmalarının IPv6’da ne yaptığı ve misafir ağlarının IPv6 izolasyonu. Ayrıca IoT cihazlar için ayrı VLAN veya misafir SSID kullanıyorsanız, IPv6 tarafında da aynı segmentasyonun uygulandığından emin olun. IPv6’da “port taraması daha zor” gibi iddialar pratikte güvenlik stratejisi değildir; temel yaklaşım yine aynıdır: minimum yetki, segmentasyon ve güncel yazılım.

5) Adres planlama: /64, /56 ve küçük ölçekli iyi pratikler

IPv6’da tipik bir LAN segmenti /64 kullanır. ISS’den /56 alıyorsanız teoride 256 adet /64 alt ağınız vardır; bu da “her VLAN’a bir /64” yaklaşımını kolaylaştırır. Ev/ofis için basit bir plan: ana ağ, misafir ağı ve IoT ağı için üç ayrı /64 ayırmak. Router bunu otomatik yapabiliyorsa harika; yapamıyorsa en azından tek bir /64 ile başlayıp ileride genişletebilirsiniz. Burada amaç, büyüdükçe yamalı bohça olmamak.

6) Sorun giderme: En sık karşılaşılan 5 problem

1) IPv6 var görünüyor ama site açılmıyor: DNS çözümlemesi veya firewall sorunu olabilir. İstemcide farklı DNS deneyin (ISS DNS’i, güvenilir bir genel DNS). 2) Bazı cihazlar IPv6 alıyor bazıları almıyor: RA yayınları kapalı olabilir veya Wi‑Fi izolasyonu/ACL engeli vardır. 3) Oyunlarda/VoIP’de sorun: Uygulama IPv6’yı kötü yönetiyor olabilir; geçici olarak AAAA kaydını kaldırmak veya istemci tarafında IPv6 önceliğini düşürmek test amaçlı yapılabilir. 4) Prefix sık değişiyor: ISS dinamik prefix veriyorsa, dış erişim için dinamik DNS ve otomatik güncelleme şarttır. 5) Port açmadan servis yayınlamak: IPv6’da NAT yok diye her şey açık değildir; yine firewall’da ilgili portlara izin vermelisiniz.

Sonuç: IPv6’yı kontrollü şekilde devreye alın

IPv6’ya geçişi “bir gecede IPv4’ü kapatalım” şeklinde düşünmek yerine, Dual Stack ile başlayıp adım adım olgunlaştırmak en sağlıklı yoldur. Önce ISS ve router uyumluluğunu doğrulayın, sonra RA/DHCPv6-PD ile istemcilere stabil adresleme sağlayın, DNS’te AAAA kayıtlarını kontrollü yayınlayın ve en önemlisi IPv6 firewall kurallarını bilinçli yönetin. Doğru kurulduğunda IPv6, erişilebilirliği artırır ve ağ yönetimini daha öngörülebilir hâle getirir.

7 Şubat 2026 Cumartesi

Cloudflare Tunnel ile Evdeki Sunucunuza Statik IP Olmadan Güvenli Erişim (Adım Adım Kurulum)

Cloudflare Tunnel nedir ve neden tercih edilmeli?

Evde NAS, Raspberry Pi, mini PC ya da bir Docker sunucusu çalıştırıyorsanız, dışarıdan güvenli erişim genellikle iki seçeneğe sıkışır: port yönlendirme (NAT) veya VPN. Port yönlendirme pratik görünse de güvenlik riskleri ve dinamik IP gibi sorunlar doğurabilir. Cloudflare Tunnel (eski adıyla Argo Tunnel) ise statik IP’ye ihtiyaç duymadan, router’da port açmadan ve servislerinizi doğrudan internete maruz bırakmadan dış erişim sağlayan modern bir yöntemdir.

Tunnel mantığı basittir: Yerel ağınızdaki bir “connector” (cloudflared) Cloudflare’a doğru dışarıya bir bağlantı başlatır. Dışarıdan gelen istekler Cloudflare üzerinden bu tünel aracılığıyla içerdeki servise iletilir. Böylece ev IP’niz ifşa olmaz, saldırı yüzeyiniz küçülür ve Cloudflare’ın WAF/Rate Limiting gibi korumalarıyla entegre olursunuz.

Ön koşullar

Bu öğreticide örnek olarak yerel ağda çalışan bir web servisini (ör. http://localhost:8080) yayınlayacağız. İhtiyacınız olanlar: Cloudflare hesabı, Cloudflare’a eklenmiş bir alan adı (ör. example.com), tüneli çalıştıracağınız bir makine (Linux önerilir; Docker da olur) ve yayınlanacak servis.

Not: Cloudflare Tunnel ile yalnızca web uygulamaları değil, uygun yapılandırma ile çeşitli TCP servisleri de yönetilebilir. Ancak en temiz ve güvenli senaryo, HTTP/HTTPS tabanlı servisleri Cloudflare Access ile kimlik doğrulama ekleyerek yayınlamaktır.

1) Cloudflare’da Tunnel oluşturma

Cloudflare paneline girin ve ilgili domaini seçin. Sol menüde Zero Trust (veya “Access/Zero Trust”) bölümüne geçin. Buradan Networks > Tunnels menüsünü açıp Create a tunnel ile yeni bir tünel oluşturun. Tünele anlaşılır bir ad verin (ör. “ev-sunucu”).

Cloudflare size kurulum adımlarını gösterecek. Bu aşamada iki yol var: doğrudan binary kurmak ya da Docker ile çalıştırmak. İleri seviye kullanıcılar için Docker, otomasyon ve taşınabilirlik açısından daha rahattır.

2) Docker ile cloudflared çalıştırma

Cloudflare panelinde “Run the connector” adımında bir token üretilir. Bu token tünelin kimliğidir. Token’ı kopyalayın ve tüneli çalıştıracağınız makinede aşağıdaki komutu kullanın:

docker run -d --name cloudflared --restart unless-stopped cloudflare/cloudflared:latest tunnel --no-autoupdate run --token YOUR_TOKEN

Bu komut, cloudflared’ı arka planda başlatır ve makine yeniden başladığında otomatik ayağa kaldırır. Sorun yaşarsanız logları görmek için:

docker logs -f cloudflared

Burada “connected” benzeri bir ifade görüyorsanız tüneliniz Cloudflare’a başarıyla bağlanmıştır.

3) Public hostname tanımlama (subdomain yönlendirme)

Şimdi dış dünyadan erişilecek adresi belirleyeceğiz. Yine Zero Trust panelinde ilgili tünelin içine girin ve Public Hostnames bölümünden yeni kayıt ekleyin. Örneğin:

Subdomain: panel
Domain: example.com
Path: (boş bırakabilirsiniz)
Service: http://localhost:8080

Bu ayarla https://panel.example.com isteği Cloudflare üzerinden tünelinize gelir ve yereldeki 8080 portuna yönlenir. Router’da port açmadığınız için servisiniz “internete açık” hale gelmez; yalnızca Cloudflare tüneli üzerinden erişilebilir olur.

4) Güvenliği bir üst seviyeye taşıma: Cloudflare Access

Tünel çalışsa bile erişimi herkese açık bırakmak istemezsiniz. Cloudflare’ın en büyük artısı burada başlar: Access policy ile kimlerin gireceğini belirleyebilirsiniz. Zero Trust panelinde Access > Applications bölümüne gidip “Self-hosted” uygulama ekleyin ve aynı hostname’i (panel.example.com) seçin.

Ardından bir politika tanımlayın. Örneğin yalnızca belirli e-posta adreslerine izin verin (Google/Microsoft ile SSO da mümkün). Bu sayede URL’yi bilen herkes değil, sadece yetkili kullanıcılar giriş yapabilir. Bu yaklaşım klasik Basic Auth’tan daha esnek ve denetlenebilir bir güvenlik katmanı sunar.

5) Sık yapılan hatalar ve ipuçları

Servis “Bad Gateway” veriyor: Genellikle yereldeki servis yanlış portta çalışıyordur veya yalnızca 127.0.0.1 yerine belirli bir arayüze bağlıdır. Docker içinden başka bir konteynıra yönlendiriyorsanız ağ ayarlarınızı kontrol edin.

HTTPS/sertifika konusu: Cloudflare dışarıya HTTPS sunar. İçerideki servisiniz HTTP olabilir; bu yaygın bir kullanımdır. Ancak içeride de TLS istiyorsanız origin sertifikası gibi seçenekler mevcut.

Performans ve gecikme: Tunnel trafiği Cloudflare POP’ları üzerinden geçer. Çoğu ev senaryosunda gecikme farkı ihmal edilebilir düzeydedir; asıl sınır genellikle ev internetinizin upload hızıdır.

Log ve izleme: Zero Trust üzerinden bağlantı denemelerini ve Access loglarını inceleyin. Şüpheli denemelerde rate limiting veya ek erişim kısıtları uygulayabilirsiniz.

Sonuç

Cloudflare Tunnel, evde barındırdığınız servisleri statik IP olmadan, port açmadan ve daha kontrollü şekilde yayınlamak için güncel ve güçlü bir çözümdür. Özellikle Cloudflare Access ile birlikte kullanıldığında, “herkese açık admin paneli” gibi riskli senaryoları neredeyse tamamen ortadan kaldırır. Eğer self-hosted uygulamalarınız var ve güvenliği ciddiye alıyorsanız, bu yaklaşım modern bir varsayılan haline gelmeye başladı.

6 Şubat 2026 Cuma

Siber Güvenlikte Otomasyon: Docker ve Proxmox ile Sanal Ortamların Güvenli Yapılandırılması

Siber güvenlik, günümüzde teknolojinin her alanına nüfuz ettiği için kritik bir öneme sahip. Siber güvenlik measuresının etkili bir şekilde uygulanması, veri güvenliği ve sanal ortamların korunması için çok önemlidir. Bu makalede, Docker ve Proxmox gibi araçların kullanımı ile sanal ortamların güvenli bir şekilde yapılandırılmasının nasıl möglich olduğunu inceleyeceğiz.

Amaç

Sanal ortamların güvenli yapılandırılması, siber tehditlere karşı korunmak için çok önemlidir. Bu amaçla, sanal makinelerin ve konteynırların güvenli bir şekilde oluşturulması ve yönetilmesi için otomasyon araçları kullanılmaktadır. Bu makalede, Docker ve Proxmox gibi araçların kullanımı ile sanal ortamların güvenli yapılandırılmasının nasıl mümkün olduğunu inceleyeceğiz.

TEKNİK MANTIGI

Docker ve Proxmox, sanal ortamların oluşturulması ve yönetilmesi için kullanılan popüler araçlardır. Docker, konteynır tabanlı bir sistemdir ve uygulamaların bağımsız olarak çalışmasını sağlar. Proxmox, sanal makinelerin oluşturulması ve yönetilmesi için kullanılan bir diğer araçtır.

Ön Koşullar

Bu makalede anlatılan adımları takip edebilmek için, aşağıdaki ön koşullara sahip olmak gerekir: - Linux işletim sistemi hakkında temel bilgi sahibi olmak - Docker ve Proxmox hakkında temel bilgi sahibi olmak - Sanal makineler ve konteynırlar hakkında temel bilgi sahibi olmak

Adım Adım Anlatım

Aşağıdaki adımları takip ederek, Docker ve Proxmox kullanarak sanal ortamların güvenli bir şekilde yapılandırılmasını sağlayabilirsiniz:

Adım 1: Docker ve Proxmox kurulumu

İlk adım, Docker ve Proxmox araçlarını kurmaktır. Docker ve Proxmox resmi sitelerinden indirerek kurulumu gerçekleştirebilirsiniz.

Adım 2: Sanal makinelerin oluşturulması

Proxmox kullanarak sanal makineler oluşturabilirsiniz. Sanal makineler, uygulamaların bağımsız olarak çalışmasını sağlar.

Adım 3: Konteynırların oluşturulması

Docker kullanarak konteynırlar oluşturabilirsiniz. Konteynırlar, uygulamaların bağımsız olarak çalışmasını sağlar.

Adım 4: Güvenlik ayarlarının yapılandırılması

Güvenlik ayarları, siber tehditlere karşı korunmak için çok önemlidir. Docker ve Proxmox kullanarak güvenlik ayarlarını yapılandırabilirsiniz.

SONUÇ

Bu makalede, Docker ve Proxmox kullanarak sanal ortamların güvenli bir şekilde yapılandırılmasının nasıl mümkün olduğunu inceledik. Siber güvenlik measuresının etkili bir şekilde uygulanması için, sanal ortamların güvenli bir şekilde yapılandırılması çok önemlidir. Docker ve Proxmox gibi araçlar, sanal ortamların güvenli bir şekilde oluşturulması ve yönetilmesi için kullanılır.

Siber Güvenlikte Otomasyonun Rolü: Teknik Bir Rehber

Siber güvenlik, günümüzde teknolojinin her geçen gün daha da fazla entegre olduğu worldümüzde kritik bir öneme sahip olmuştur. Bu alanda otomasyonun rolü, güvenlik operasyonlarını daha verimli ve etkin bir şekilde yürütülmesini sağlar. Bu rehberde, siber güvenlikte otomasyonun temel prensiplerini, faydalarını ve uygulanma yöntemlerini inceleyeceğiz.

Otomasyon, güvenlik ekiplerinin daha çok stratejik ve yüksek düzeyli görevlere odaklanmasını sağlar. Otomasyonun birincil avantajı, güvenlik operasyonlarının hızını artırarak daha hızlı müdahale olanakları sunmasıdır. Bir siber saldırı meydana geldiğinde, hızlı ve etkili bir yanıt verme kabiliyeti, zararın minimize edilmesinde kritik bir faktördür.

Siber güvenlik otomasyonu, tehditlerin tanımlanması, analiz edilmesi ve bertaraf edilmesi süreçlerini içerir. Bu, genellikle güvenlik bilgi ve olay yönetimi (SIEM) sistemleri, güvenlik orchestration, otomasyon ve response (SOAR) platformları ve security automation gibi araçlar aracılığıyla gerçekleştirilir. Bu araçlar, güvenlik ekiplerinin daha verimli çalışmasını sağlar ve insan hatası riskini azaltır.

Ancak, siber güvenlik otomasyonu sadece teknoloji değildir. Etkili bir otomasyon stratejisi, iş süreçlerinin, politika ve prosedürlerin ve eğitimli personelin bir bileşimidir. Güvenlik ekipleri, otomasyonun faydalarını tam olarak yararlanabilmek için bunları dikkatlice planlamalı ve uygulamalıdır.

Modern yazılım dilleri de siber güvenlik otomasyonunda önemli bir rol oynar. Örneğin, Python gibi diller, güvenlik araçları ve otomasyon betikleri geliştirmek için sıklıkla kullanılır. Bu diller, güvenlik uzmanlarına komplex görevleri otomatikleştirmek için mạnh ve esnek bir platform sağlar.

Sonuç olarak, siber güvenlikte otomasyon, güvenlik operasyonlarını daha verimli, hızlı ve etkili hale getirmek için kritik bir bileşendir. Güvenlik ekipleri, otomasyonun faydalarını tam olarak yararlanabilmek için doğru araçları, iş süreçlerini ve eğitimli personeli bir araya getirmelidir. Bu şekilde, kurumlar themselves daha güçlü bir siber güvenlik duruşu oluşturabilir ve günümüzün complex tehditlerine karşı daha iyi korunabilir.

Sunucusuz Mimaride JWT Doğrulama: AWS Lambda Authorizer ile API Gateway’i Güvenli Hale Getirme

Amaç: API’yi anahtar paylaşmadan güvenli çağırmak

Sunucusuz (serverless) mimarilerde API yayınlamak hızlıdır; ancak güvenlik çoğu projede “sonra bakarız” diye ertelenir. Özellikle AWS API Gateway + Lambda ile bir REST/HTTP API açtığınızda, istekleri kimlerin çağırabildiğini belirlemenin en temiz yollarından biri JWT (JSON Web Token) doğrulamasıdır. Bu yazıda, API Gateway’in önüne Lambda Authorizer koyarak Bearer token doğrulaması yapan pratik ve ileri seviye bir kurulum anlatıyorum. Hedefimiz: Her istekte token’ı kontrol etmek, geçerliyse isteği arka uç Lambda’ya iletmek, değilse daha kapıdayken kesmek.

JWT ve Lambda Authorizer mantığı

JWT, genellikle bir kimlik sağlayıcı (Auth0, Cognito, Keycloak veya kendi servisiniz) tarafından imzalanan ve istemcinin “ben buyum” iddiasını taşıyan bir tokendir. Token’ın güvenliği, içeriğinin şifreli olmasından değil, imzasının doğrulanabilir olmasından gelir. API Gateway tarafında bunu iki şekilde çözebilirsiniz: HTTP API kullanıyorsanız çoğu durumda yerleşik JWT Authorizer yeterlidir; REST API veya özel doğrulama ihtiyaçlarında ise Lambda Authorizer daha esnektir. Lambda Authorizer, gelen isteğin Authorization header’ını okur, token’ı doğrular, ardından “Allow/Deny” kararı döner.

Ön koşullar

Bu öğreticinin akıcı ilerlemesi için şu bileşenlere ihtiyacınız var: AWS hesabı, bir API Gateway (REST API veya HTTP API), en az bir backend Lambda (asıl iş mantığınız), bir de doğrulama için Authorizer Lambda. Ayrıca token’ı imzalayan tarafın kullandığı anahtara erişebilmelisiniz: HS256 kullanıyorsanız “shared secret”, RS256/ECDSA kullanıyorsanız public key veya JWKS endpoint.

Adım 1: Authorizer Lambda’nın temel yapısı

Önerim, üretimde RS256 + JWKS yaklaşımını kullanmanızdır; böylece gizli anahtar API tarafında tutulmaz. Authorizer Lambda’da yapılacak iş mantığı kısaca şöyledir: (1) Authorization header’dan “Bearer ” kısmını ayıklayın, (2) token’ın header bölümünden “kid” değerini okuyun, (3) JWKS’ten doğru public key’i çekip cache’leyin, (4) imzayı ve kritik claim’leri doğrulayın: iss (issuer), aud (audience), exp (süre), gerekiyorsa scope veya rol bilgisi. Doğrulama geçerse Allow policy; geçmezse Deny.

Node.js örnek akışında popüler kütüphaneler: jose (JWT doğrulama), JWKS için jwks-rsa benzeri çözümler. Python tarafında PyJWT veya python-jose iş görür. Buradaki kritik detay, Lambda’nın her çağrılışında JWKS’e gitmemek için global değişkende cache tutmaktır. API trafiğiniz yükseldiğinde en çok farkı bu optimizasyon yaratır.

Adım 2: Policy üretimi ve “context” taşıma

REST API “Lambda Authorizer” kullanıyorsanız dönüşte IAM policy belgesi üretirsiniz. Bu policy, hangi method ARN’lerine izin verildiğini söyler. Ayrıca kullanıcının kimliğini backend Lambda’ya taşımak için “context” alanını kullanabilirsiniz. Örneğin doğrulanan token’dan sub (kullanıcı id) ve email gibi bilgileri seçip context’e koyarsınız. Backend Lambda’da bu değerler event’in authorizer bölümünde gelir ve tekrar token parse etmeye gerek kalmaz. Bu hem performans hem de kod sadeliği sağlar.

HTTP API kullanıyorsanız format farklıdır; ancak mantık aynı kalır: Doğrulama sonucu “isAuthorized” ve “context” ile döndürülür. Hangisini seçerseniz seçin, mümkün olduğunca az veri taşıyın: id, rol ve gerekliyse tenant bilgisi çoğu senaryo için yeterlidir.

Adım 3: API Gateway’e Authorizer bağlama

AWS konsolunda API Gateway’in ilgili endpoint/method ayarlarına girip “Authorization” kısmında Lambda Authorizer seçersiniz. REST API’de method bazlıdır; HTTP API’de route bazlıdır. Burada dikkat edilmesi gereken iki nokta var: Identity source olarak “Authorization” header’ını seçmek ve gerekiyorsa authorizer caching ayarlarını doğru yapmak. Token başına cache kullanacaksanız TTL’i çok yüksek tutmayın; rol değişikliği gibi durumlarda eski izinler bir süre daha geçerli kalabilir.

Güvenlikte ince ayar: iss, aud, clock skew ve scope

Sadece imza doğrulamak yeterli değildir. En sık yapılan hata, token’ın kimin tarafından üretildiğini doğrulamadan kabul etmektir. Mutlaka iss değerini sabit bir beklenen değerle karşılaştırın. Benzer şekilde aud, token’ın hangi uygulama için üretildiğini gösterir; yanlış audience kabul edilirse başka bir uygulamanın token’ı sizin API’nize sızabilir. Saat kayması (clock skew) için 30–60 saniyelik tolerans pratikte işleri kolaylaştırır. Ayrıca “scope” veya “permissions” claim’lerinden endpoint bazlı yetkilendirme yapabilirsiniz: Örneğin /admin route’u için “admin:read” yoksa Deny döndürmek gibi.

Test ve hata ayıklama ipuçları

İlk testte Postman veya curl ile iki senaryoyu deneyin: geçerli token ile 200, geçersiz/expired token ile 401/403. CloudWatch Logs’ta Authorizer Lambda loglarını izleyin. Üretimde loglara token’ın tamamını basmayın; güvenlik açısından sadece token’ın “sub” gibi kimlik alanlarını veya hash’lenmiş bir parçasını yazdırmak daha sağlıklıdır. Ayrıca JWKS erişimi için VPC içinde çalışıyorsanız NAT gereksinimi doğabilir; bu tür ağ detayları doğrulamanın “durduk yere çalışmıyor” gibi görünmesine neden olur.

Sonuç

Lambda Authorizer ile JWT doğrulaması, serverless API’lerde güvenliği kapıdan başlatmanın en esnek yollarından biri. Doğru yapılandırıldığında hem maliyeti düşük tutar hem de kimlik doğrulama/yetkilendirme kararlarını merkezi hâle getirir. JWKS cache, iss-aud kontrolü ve minimal context taşıma gibi detaylara dikkat ettiğinizde, performans ve güvenlik tarafında “profesyonel seviye” bir kurulum elde edersiniz.

2 Şubat 2026 Pazartesi

Evde Kendi VPN’ini Kur: WireGuard ile Güvenli ve Hızlı Bağlantı Rehberi

WireGuard Nedir ve Neden Tercih Edilmeli?

Ev dışındayken ev ağınıza güvenli biçimde erişmek, halka açık Wi‑Fi’da trafiğinizi şifrelemek veya kendi kişisel VPN’inizi kurup üçüncü taraf hizmetlere bağımlılığı azaltmak istiyorsanız, WireGuard son yılların en pratik çözümlerinden biri. OpenVPN gibi köklü alternatiflere göre daha az bileşenle çalışır, kurulum ve bakım tarafı daha sade ilerler. Performans tarafında ise özellikle mobil cihazlarda hızlı bağlanma süresi ve düşük gecikme avantajı dikkat çeker.

Bu rehberde, evdeki bir Linux sunucusu (ör. Ubuntu) üzerinde WireGuard kurup telefonu veya dizüstünü güvenli şekilde bağlamayı adım adım anlatacağım. Anlatım ileri seviye sayılabilecek ağ konularına değinse de, komutları takip ederek güvenli bir kurulum yapmak mümkün.

Ön Koşullar: Ne Gerekli?

Kuruluma başlamadan önce şu hazırlıklar işinizi kolaylaştırır: (1) İnternete bağlı ve mümkünse 7/24 açık bir Linux makine (Ubuntu 22.04/24.04 gibi), (2) Modem/router üzerinde port yönlendirme yapabilme yetkisi, (3) Statik IP’niz yoksa bir DDNS alan adı (No-IP, DuckDNS vb.), (4) Sunucuda yönetici yetkisi (sudo). Ayrıca ev internetiniz CGNAT arkasındaysa port yönlendirme çalışmayabilir; bu durumda sağlayıcınızdan gerçek IP talep etmek veya ters tünel gibi farklı mimariler düşünmek gerekir.

1) WireGuard Kurulumu (Ubuntu)

Önce paketleri güncelleyin ve WireGuard’ı kurun:

Komutlar:
sudo apt update
sudo apt install -y wireguard

Ardından sunucu için anahtar çiftini üretin. Anahtarları doğru izinlerle saklamak güvenlik açısından kritik:

Komutlar:
umask 077
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key

2) Sunucu Yapılandırması: wg0.conf

WireGuard arayüzünü wg0 adıyla yapılandıralım. Aşağıdaki örnek, VPN ağı olarak 10.10.10.0/24 kullanır. Sunucuya 10.10.10.1 veriyoruz. Ayrıca IP yönlendirmeyi ve NAT’ı da ekliyoruz ki istemciler internet çıkışını VPN üzerinden yapabilsin (isteğe bağlı).

/etc/wireguard/wg0.conf dosyasını oluşturun:

Komut:
sudo nano /etc/wireguard/wg0.conf

Örnek içerik:
[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = (server_private.key içeriği)

PostUp = ufw route allow in on wg0 out on eth0; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = ufw route delete allow in on wg0 out on eth0; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Not: Sunucunuzun dış bacak arayüz adı eth0 olmayabilir (ör. enp0s3). ip a ile kontrol edip wg0.conf içinde güncelleyin.

3) IP Forwarding Açma

VPN istemcilerinin ağlar arası paket iletebilmesi için kernel IP yönlendirmeyi açın:

Komutlar:
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl --system

4) Güvenlik Duvarı ve Port Yönlendirme

Sunucuda UFW kullanıyorsanız, WireGuard portunu açın:

Komutlar:
sudo ufw allow 51820/udp
sudo ufw enable

Router tarafında UDP 51820 portunu sunucunun yerel IP’sine yönlendirin. Eğer DDNS kullanıyorsanız, istemci yapılandırmasında IP yerine alan adınızı yazabilirsiniz.

5) İstemci (Telefon/Dizüstü) Anahtarı ve Peer Ekleme

Şimdi bir istemci oluşturalım. İsterseniz anahtarları istemci cihazında üretebilirsiniz; burada sunucuda üretip sonra istemciye aktaracağız:

Komutlar:
umask 077
wg genkey | tee /etc/wireguard/client1_private.key | wg pubkey > /etc/wireguard/client1_public.key

İstemciye 10.10.10.2 verelim. Sunucu yapılandırmasına istemciyi bir Peer olarak eklemek için wg0.conf dosyasının sonuna şunu ekleyin:

Ek satırlar:
[Peer]
PublicKey = (client1_public.key içeriği)
AllowedIPs = 10.10.10.2/32

6) İstemci Konfigürasyonu (WireGuard Uygulaması)

Telefonunuzda WireGuard uygulamasında yeni tünel oluşturup aşağıdaki yapıyı kullanın. Endpoint kısmına ev IP’nizi veya DDNS alan adınızı yazın. “AllowedIPs” alanı önemlidir: Tüm trafiği VPN’e yönlendirmek için 0.0.0.0/0 kullanılabilir; sadece ev ağına erişmek istiyorsanız daha dar bir aralık tanımlayın.

Örnek istemci dosyası:
[Interface]
PrivateKey = (client1_private.key içeriği)
Address = 10.10.10.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = (server_public.key içeriği)
Endpoint = alanadiniz-or-ipniz:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

“PersistentKeepalive” özellikle mobil ağlarda veya NAT arkasında bağlantının düşmesini engellemek için faydalıdır.

7) Servisi Başlatma ve Test

Sunucuda WireGuard arayüzünü ayağa kaldırın ve otomatik başlatmayı etkinleştirin:

Komutlar:
sudo systemctl enable --now wg-quick@wg0
sudo wg show

İstemciden bağlandıktan sonra sunucuda “latest handshake” alanının güncellendiğini görmelisiniz. İstemci tarafında IP’nizi kontrol ederek trafiğin VPN üzerinden gidip gitmediğini anlayabilirsiniz. Eğer sadece ev ağına erişmek istiyorsanız, “AllowedIPs” değerini örneğin 192.168.1.0/24 gibi yerel ağa göre daraltmak performans ve yönlendirme karmaşıklığı açısından daha temiz olabilir.

Sık Karşılaşılan Sorunlar ve İpuçları

El sıkışma (handshake) yok: Port yönlendirme yanlış olabilir, sunucu güvenlik duvarı UDP 51820’yi engelliyor olabilir veya CGNAT nedeniyle dışarıdan erişim mümkün değildir.

Bağlanıyor ama internet yok: NAT (MASQUERADE) kuralı eksik olabilir, yanlış dış arayüz adı girilmiş olabilir veya IP forwarding açık değildir.

Güvenlik önerisi: WireGuard yapılandırmalarını yedekleyin ama özel anahtarları düz metin olarak paylaşmayın. İstemci kaybolursa ilgili peer’i sunucudan kaldırın ve anahtarları yenileyin.

Sonuç

WireGuard ile kendi VPN’inizi kurmak, hem hız hem de kontrol açısından çoğu “tek tık VPN” hizmetinden daha tatmin edici bir çözüm sunar. Kurulumun özü; doğru anahtar yönetimi, doğru port yönlendirme ve temiz bir yönlendirme/NAT kural seti oluşturmaktan geçiyor. Bir kez oturttuktan sonra yeni cihaz eklemek de sadece yeni bir peer tanımlamak kadar basit hale geliyor.

6 Ocak 2026 Salı

Cloudflare Zero Trust ile Uzak Erişimde VPN’siz Güvenli Tünel: Tailscale Alternatifi mi?

VPN yorgunluğuna modern bir alternatif

Uzaktan çalışma kalıcılaştıkça, ofis ağına erişim için klasik VPN kurulumları birçok ekipte “gerekli ama can sıkan” bir rutine dönüştü. Sertifika yenilemeleri, port yönlendirme, split-tunnel karmaşası, performans düşüşü ve mobil cihazlarda kopmalar… Bu noktada Cloudflare Zero Trust, özellikle küçük ekiplerden ileri seviye homelab kullanıcılarına kadar geniş bir kitle için “VPN’siz güvenli erişim” fikrini pratik hale getiriyor. Bu yazıda, Cloudflare’ın WARP ve Tunnel yaklaşımını adım adım kurulum mantığıyla ele alacak; hangi senaryolarda Tailscale benzeri çözümlere alternatif olabileceğini inceleyeceğiz.

Zero Trust mimarisi neyi değiştiriyor?

Geleneksel VPN’de cihaz “ağın içine” girer; yetki kontrolü çoğu zaman ağ segmenti ve firewall kurallarıyla yapılır. Zero Trust yaklaşımı ise “önce doğrula, sonra en az ayrıcalıkla eriştir” felsefesine dayanır. Cloudflare tarafında bu; kullanıcı kimliği (SSO/OTP), cihaz durumu, uygulama bazlı erişim ve kayıtlı politikalarla yönetilir. Yani hedef, tüm ağa tünel açmak değil; ihtiyaç duyulan uygulamaya güvenli bir şekilde eriştirmektir. Özellikle admin panelleri, dahili dashboard’lar, Git sunucuları, staging ortamları veya NAS arayüzleri gibi “internet’e açmak istemediğiniz” servisler için bu yaklaşım oldukça temiz çalışır.

Ön hazırlık: Hesap, alan adı ve temel kavramlar

Başlamak için bir Cloudflare hesabına ve mümkünse Cloudflare’a yönlendirilmiş bir alan adına ihtiyacınız var. Şu iki kavramı netleştirelim: Cloudflare Tunnel, içerideki bir sunucudan Cloudflare’a “dışarı doğru” güvenli bir bağlantı başlatır; böylece ev/iş yerindeki NAT arkasında kalan servisleri port açmadan yayınlayabilirsiniz. Access ise bu yayına kimlerin, hangi koşullarda erişeceğini belirler. Kullanıcı tarafında ise WARP istemcisi, cihazın trafiğini belirli politikalara göre Cloudflare ağı üzerinden yönetmenizi sağlar (her zaman şart değil, birazdan anlatacağım).

Adım adım: Cloudflare Tunnel ile içerideki servisi yayınlama

Kurulumun en kritik noktası, içeride erişmek istediğiniz servisin (ör. 192.168.1.10:3000 üzerindeki bir dashboard) dışarıdan port açmadan erişilebilir hale gelmesidir. Bunun için içerideki makineye cloudflared ajanını kurarsınız. Kurulum komutu işletim sistemine göre değişse de mantık sabittir: Cloudflare panelinde bir “Tunnel” oluşturulur, size verilen kimlik bilgileriyle ajan yetkilendirilir ve bir yönlendirme kuralı tanımlanır.

Ardından “Public Hostname” kısmında örneğin dash.ornekalanadi.com gibi bir alt alan adı belirleyip, hedefi http://localhost:3000 veya yerel IP:port şeklinde tanımlarsınız. Burada önemli bir avantaj var: Port açmadığınız için saldırı yüzeyiniz ciddi şekilde azalır; ayrıca IP’niz değişse bile tünel içeriden çıktığı için erişim bozulmaz. Ev internetinde CGNAT kullananlar için bu, tek başına büyük bir kazanım.

Kimlik doğrulama: Access politikalarıyla “kim girebilir?” sorusunu çözmek

Tunnel tek başına servisi yayınlar; güvenlik tarafı ise Access ile tamamlanır. Cloudflare Zero Trust panelinde “Access → Applications” bölümünden az önce yayınladığınız host için bir uygulama tanımlarsınız. Sonrasında bir politika eklersiniz: örneğin sadece belirli e-posta alan adlarından (@sirket.com) gelen kullanıcılar girsin; ya da sadece tek tek tanımladığınız e-posta adresleri izinli olsun.

Daha ileri senaryoda SSO (Google Workspace, Microsoft Entra ID vb.) entegre edip MFA zorunlu kılabilirsiniz. Böylece servis internete “açık” görünse bile, gerçek erişim bir kimlik katmanının arkasında kalır. Üstelik bu, uygulamanızın kendi login sisteminden bağımsız bir ek güvenlik perdesi oluşturur.

WARP istemcisi ne zaman gerekli?

Birçok kişi WARP’ı “VPN gibi” düşünür; aslında WARP çoğu zaman uç cihaz politikasını işletmek için kullanılır. Eğer hedefiniz sadece web tabanlı bir arayüze (HTTP/HTTPS) erişmekse, Tunnel + Access çoğu senaryoda yeterlidir ve kullanıcılar tarayıcı üzerinden doğrulanarak erişir. Ancak SMB/RDP/SSH gibi tarayıcı dışı protokoller veya özel IP aralıklarına erişim gibi durumlarda WARP + Private Network kurgusu devreye girer. Bu sayede cihaz, Cloudflare üzerinden iç ağdaki belirli IP aralıklarına güvenli biçimde yönlendirilir.

Performans, güvenlik ve pratik kullanım değerlendirmesi

Performans tarafında en büyük değişken, Cloudflare POP noktalarına olan yakınlığınız ve içerideki uplink kalitenizdir. Web panelleri ve API erişimleri genellikle akıcı çalışır. Güvenlikte ise port açmamak, kaba kuvvet denemelerini ve servis keşfini azaltır; Access katmanı da kimlik doğrulamayı standartlaştırır. Günlük pratikte en sevdiğim taraf, yeni bir servis eklemenin “bir DNS kaydı + bir Access politikası” mantığıyla hızlıca yapılabilmesidir.

Peki Tailscale ile kıyas? Tailscale daha çok “cihazdan cihaza özel ağ” hissini çok iyi verir; Cloudflare Zero Trust ise “uygulama bazlı yayın ve kontrol” konusunda güçlüdür. Eğer hedefiniz ekip içi dahili web uygulamalarını güvenli sunmak ve merkezi erişim politikası yönetmekse Cloudflare yaklaşımı daha derli toplu olabilir. Tam tersine, cihazlar arası esnek dosya paylaşımı, mesh ağ kolaylığı ve geniş protokol çeşitliliği arıyorsanız Tailscale hâlâ çok iddialı.

Sonuç: Kimler denemeli?

Evinde NAS arayüzünü, Home Assistant’ı, bir monitoring panelini veya şirket içinde staging ortamını internet’e “açmadan” uzaktan erişmek isteyen herkes Cloudflare Zero Trust’ı denemeli. Özellikle port yönlendirme yapmadan ve MFA ile güvenliği artırarak ilerlemek isteyenler için modern bir çözüm sunuyor. İlk kurulumda kavramlar biraz yeni gelebilir; fakat bir kez oturduğunda, VPN’e dönüş ihtiyacı ciddi ölçüde azalıyor.

4 Eylül 2025 Perşembe

Passkey (WebAuthn) ile Parolasız Giriş: Node.js ve SimpleWebAuthn ile Adım Adım Entegrasyon

Passkey (WebAuthn) ile Parolasız Giriş: Neden ve Nasıl?

Parolasız giriş dünyasında Passkey teknolojisi (WebAuthn/FIDO2) hızla standart hâline geliyor. Kimlik avı direnci, cihazlar arası senkronizasyon ve hızlı kullanıcı deneyimi sayesinde klasik parolaların yerini alıyor. Bu yazıda, Node.js ve @simplewebauthn kütüphanesini kullanarak bir web uygulamasına Passkey tabanlı kimlik doğrulamayı nasıl entegre edeceğinizi adım adım anlatıyorum. Rehber, modern tarayıcılar (Chrome, Safari, Edge) ve platformlar (iOS, Android, macOS, Windows) ile uyumludur.

Ön Koşullar ve Genel Mimari

Başlamadan önce Node.js 18+ sürümü, HTTPS ile çalışan bir alan adı (localhost için self-signed sertifika), temel Express.js bilgisi ve veri saklamak için bir veritabanı (ör. PostgreSQL, MongoDB veya basit bir bellek deposu) gerekli. Mimari olarak iki akış vardır: Kayıt (Registration) ve Giriş (Authentication). Kayıtta sunucu, kullanıcıya bir challenge üretir ve tarayıcı navigator.credentials.create() ile güvenli bir anahtar çifti oluşturur. Girişte ise sunucu yeni bir challenge üretir ve tarayıcı navigator.credentials.get() ile imza üretip doğrulatır.

Proje Kurulumu

mkdir passkey-demo && cd passkey-demo komutlarıyla klasörü oluşturun. Ardından npm init -y ve npm i express @simplewebauthn/server cors cookie-session komutlarını çalıştırın. Geliştirme için npm i -D typescript ts-node @types/express @types/cookie-session ekleyebilirsiniz. HTTPS için bir ters proxy ya da self-signed sertifika kullanın; WebAuthn çoğu senaryoda güvenli köken (https) ister.

Sunucu Tarafı: Temel Ayarlar

Express uygulamasında kök alan adınızı rpID olarak tanımlayın (ör. example.com). origin değeri tam protokol ve alan adını içermeli (ör. https://example.com). Kullanıcı oturumunda veya Redis gibi bir depoda challenge saklayın.

import express from 'express';
import { generateRegistrationOptions, verifyRegistrationResponse, generateAuthenticationOptions, verifyAuthenticationResponse } from '@simplewebauthn/server';
import session from 'cookie-session';

const app = express();
app.use(express.json());
app.use(session({ name: 'sess', keys: ['secret'], maxAge: 600000 }));

const rpID = 'example.com';
const origin = 'https://example.com';

Kayıt Akışı (Registration)

1) Options uç noktası: Kullanıcı kayıt olurken sunucu challenge üretir ve istemciye gönderir. Kullanıcı tanımlayıcısını (user.id) kalıcı bir değerden oluşturun.

app.post('/register/options', async (req, res) => {
  const { username, displayName } = req.body;
  const userId = 'user-' + username; // Örnek amaçlı
  const options = await generateRegistrationOptions({
    rpName: 'Passkey Demo',
    rpID,
    userID: userId,
    userName: username,
    userDisplayName: displayName || username,
    attestationType: 'none',
  });
  req.session.challenge = options.challenge;
  res.json(options);
});

2) Doğrulama uç noktası: İstemci, navigator.credentials.create() sonucunu bu uç noktaya gönderir. Sunucu doğrular, credential’ı veritabanına kaydeder.

app.post('/register/verify', async (req, res) => {
  const body = req.body; // client response
  const expectedChallenge = req.session.challenge;
  const verification = await verifyRegistrationResponse({
    response: body,
    expectedChallenge,
    expectedOrigin: origin,
    expectedRPID: rpID,
  });
  if (!verification.verified) return res.status(400).json({ ok: false });
  // credential kaydet: id, publicKey, counter, transports
  res.json({ ok: true });
});

Giriş Akışı (Authentication)

1) Options uç noktası: Sunucu, kullanıcıya bağlı mevcut credential’lara göre allowCredentials ile bir challenge üretir.

app.post('/login/options', async (req, res) => {
  const { username } = req.body;
  const userCreds = await loadUserCredentials(username); // DB'den çekin
  const options = await generateAuthenticationOptions({
    rpID,
    allowCredentials: userCreds.map(c => ({ id: c.id, type: 'public-key' })),
  });
  req.session.challenge = options.challenge;
  res.json(options);
});

2) Doğrulama uç noktası: İstemciden gelen imzayı doğrulayın, sayaç değerini güncelleyin ve oturumu başlatın.

app.post('/login/verify', async (req, res) => {
  const body = req.body;
  const expectedChallenge = req.session.challenge;
  const user = await findUserByCredentialId(body.rawId);
  const verification = await verifyAuthenticationResponse({
    response: body,
    expectedChallenge,
    expectedOrigin: origin,
    expectedRPID: rpID,
    authenticator: user.authenticator, // publicKey & counter
  });
  if (!verification.verified) return res.status(401).json({ ok: false });
  // counter güncelle, session başlat
  res.json({ ok: true });
});

İstemci Tarafı: WebAuthn API Kullanımı

Kayıt sırasında sunucudan aldığınız PublicKeyCredentialCreationOptions nesnesini navigator.credentials.create() içine verin. Tarayıcı, platform anahtarı (ör. iCloud Anahtar Zinciri, Google Password Manager) veya güvenlik anahtarı (YubiKey) ile cihaz üzerinde anahtar üretir.

const opts = await fetch('/register/options', { method: 'POST', body: JSON.stringify({ username }) }).then(r => r.json());
const cred = await navigator.credentials.create({ publicKey: opts });
await fetch('/register/verify', { method: 'POST', body: toJSON(cred) });

Girişte navigator.credentials.get() çağrısı yapılır. Sunucunun sağladığı PublicKeyCredentialRequestOptions ile imza üretilir ve doğrulama uç noktasına gönderilir.

const opts = await fetch('/login/options', { method: 'POST', body: JSON.stringify({ username }) }).then(r => r.json());
const assertion = await navigator.credentials.get({ publicKey: opts });
await fetch('/login/verify', { method: 'POST', body: toJSON(assertion) });

Test, Hata Ayıklama ve Uyumluluk

Geliştirmede https zorunludur; aksi takdirde tarayıcı çağrıları reddedebilir. Mobil cihazlarda test için aynı ağda çalışan https bir endpoint kullanın veya tünelleme (ngrok, Cloudflare Tunnel) tercih edin. Safari’de rpID uyumsuzluğu sık görülür; alan adınız ile origin’iniz birebir eşleşsin. Hata mesajlarını ayrıntılarıyla log’layın; özellikle challenge uyuşmazlığı, origin hatası ve RP ID hataları en yaygın sorunlardır.

Güvenlik ve UX İpuçları

- Challenge değerlerini tek kullanımlık ve kısa ömürlü saklayın; oturum veya Redis idealdir.

- Kullanıcı başına birden fazla credential kaydına izin verin; cihaz değişimlerinde deneyimi iyileştirir.

- resident key ve user verification politikalarını ihtiyaca göre ayarlayın; güçlü güvenlik için required tercih edin.

- Geriye dönük uyumluluk için geçici olarak sihirli bağlantı (magic link) veya tek kullanımlık kodları sunabilirsiniz.

- Üretimde anahtar materyalini ve sayaç değerlerini güvenilir bir veritabanında şifreli saklayın; yedeklemeleri planlayın.

Sonuç

Passkey (WebAuthn/FIDO2) ile parolasız giriş, hem güvenliği hem de kullanıcı deneyimini ileriye taşır. Node.js ve @simplewebauthn ile kurulum birkaç uç nokta ve doğru yapılandırma ile tamamlanabilir. Doğru rpID/origin eşleşmesi, güvenli challenge yönetimi ve çoklu credential desteği ile modern, kimlik avına dayanıklı ve hızlı bir giriş akışı elde edersiniz. Ürününüz büyüdükçe; cihaz senkronizasyonu, kurtarma stratejileri ve kurumsal güvenlik anahtarları ile çözümü olgunlaştırabilirsiniz.

19 Eylül 2024 Perşembe

Siber Güvenlik Yüksek Lisans Proje Fikirleri

 Ahmet Yesevi Üniversitesi'nde yüksek lisans yapıyorum. Siber güvenlik alanıyla ilgili bir proje ödevi hazırlamamız gerekiyor bu dönem ve proje fikri için bir süredir düşünüyorum. Son olarak yapay zeka destekli sohbetler ve fikir alışverişlerinden sonra sanırım proje konumu buldum. Aslında proje ödevi konusunu 10 hatta 20'lerden en son 2'ye kadar düşürmüştüm ancak artık kararımı verdim. Penetrasyon testleriyle ilgili bir başlık belirledim kendime ve bu alanda proje-dönem ödevi hazırlamayı düşünüyorum. Umarım altından kalkabilir ve başarılı bir şekilde ödevimi teslim ederek yüksek lisansımı tamamlayabilirim. Ödevim sırasında bilgisayarıma sanal laboratuvar kurmayı ve çeşitli uygulama testlerini vs. kendi sanal ortamımda denemeyi düşünüyorum. Bir sürü araç ve kullanacağım yazılımlar olacak ve çoğunun mantığını öğrenerek ödevime bunu aktarabilmek gerekiyor. Umarım başarırım, belki buradan da zaman zaman güncelleme geçerim.

1 Ocak 2022 Cumartesi

Umask İle Kullanıcı Yetkilerini Sınırlandırmak

Yeni bir kullanıcı oluşturulduğunda diğer kullanıcıların erişimine kapalı olarak gelmesini sağlamak için etc dizini altındaki login.defs dosyası içerisinde bulunan UMASK değeri 077 olarak güncellenir ve dosya kaydedilir.

Bunun için:

sudo nano /etc/login.defs

Ubuntu


29 Aralık 2021 Çarşamba

Ubuntu Parola Yönetimi - pwquality

Parola yönetimi için yüklenmesi gereken paket

sudo apt install libpam-pwquality

Düzenlemek için:

sudo gedit /etc/security/pwquality.conf

27 Aralık 2021 Pazartesi

Shell Escape ve Hak Yükseltme

 Bir kullanıcıya sh. dosyası için yetki verilirse ve bu dosya için yazma ve değişiklik yapma gibi haklara sahip olursa editörün içerisine yazdığı sudo -i komutu ile mevcut oturumunu root olarak güncelleyebilir.

Örneğin bu komutu bir nano editörü ile açıp tellme.sh olarak kaydedelim.

#!/bin/bash

echo "merhaba"

sudo -i

Ardından bu dosya normal bir kullanıcıdayken sudo ./tellme.sh olarak çalıştırılırsa konsola "merhaba" yazılır ancak kullanıcı hesabı da "root" olarak yükseltilmiş olur.

Diğer bir örnekte de bir kullanıcıya /etc/ssh/ssh_config dosyasını düzenleme yetkisi veriliyor: Ancak burada da yukarıdaki örneğe benzer bir durum var. ssh_config dosyası çalıştırıldığında ve ekrana !bash komutu girildiğinde yine burada da shell escape denilen olay gerçekleşir ve root hesabına geçiş yapılır.