Uzaktan çalışan ekipler, şubeler arası bağlantılar ya da evden yönetilen sunucular için VPN hâlâ temel bir ihtiyaç. WireGuard, IPsec ve OpenVPN gibi köklü seçeneklere göre çok daha küçük bir kod tabanı ve sabit, modern bir şifreleme seti sunar. Proje, kodun bireyler tarafından bile kolayca denetlenebilir olmasını tasarım ilkesi olarak öne çıkarır. Bu rehberde WireGuard'ın güvenlik modelini, anahtar yönetimini, sunucu ve istemci yapılandırmasını, AllowedIPs ile erişim kontrolünü ve günlük denetim komutlarını resmî WireGuard belgeleri ile wg(8) ve wg-quick(8) kılavuzlarına dayanarak ele alıyoruz.

WireGuard'ın güvenlik modeli

WireGuard, şifreleme algoritması seçimini yöneticiye bırakmaz; tüm bağlantılar aynı, önceden belirlenmiş primitiflerle kurulur. Bu yaklaşım, yanlış yapılandırılmış şifre takımları ya da eski algoritmalara geri düşme gibi sorunları baştan ortadan kaldırır.

BileşenKullanım amacı
Noise protokol çerçevesi (Noise_IKpsk2)İki mesajlık el sıkışma ve anahtar değişimi
Curve25519Eliptik eğri tabanlı anahtar anlaşması
ChaCha20-Poly1305Kimlik doğrulamalı şifreleme
BLAKE2sÖzetleme ve mesaj doğrulama kodları
HKDFAnahtar türetme
SipHash24Hash tablosu anahtarları


Resmî protokol belgesine göre el sıkışma; mükemmel ileri gizlilik (perfect forward secrecy), tarafların kimliklerinin gizlenmesi ve hizmet dışı bırakma saldırılarına karşı önlem sağlar. Oturum anahtarları yaklaşık 120 saniyede bir yenilenir. Veri paketlerinde geri sarılamayan 64 bitlik bir sayaç ve 2000 paketlik kayan pencere kullanılır; bu sayede UDP'nin sırasız teslimatına izin verilirken tekrar oynatma (replay) saldırıları engellenir.

Güvenlik açısından belki de en önemli özellik sessizliktir: belgelere göre WireGuard, tanımadığı eşlerden gelen paketlere yanıt vermez. Doğru anahtara sahip olmayan bir tarayıcı için UDP portu kapalıymış gibi görünür. Sunucu yük altındayken ise pahalı kriptografik işlemlere geçmeden önce paketin gönderildiği IP'nin sahipliğini kanıtlayan çerez tabanlı doğrulamalar (mac1/mac2) istenir.

Kriptografik anahtar yönlendirme: AllowedIPs

WireGuard'ın erişim kontrolü, "cryptokey routing" adı verilen bir modele dayanır. Her eşin (peer) bir açık anahtarı ve bir AllowedIPs listesi vardır. Bu liste iki görev görür:


  • Gönderirken yönlendirme tablosu: Hedef IP hangi eşin AllowedIPs aralığına düşüyorsa paket o eşin anahtarıyla şifrelenip ona gönderilir.
  • Alırken erişim kontrol listesi: Bir eşten gelen paketin çözülmüş kaynak IP'si o eşin AllowedIPs aralığında değilse paket arayüze kabul edilmez.



Bu nedenle AllowedIPs, güvenlik açısından en kritik ayardır. Sunucu tarafında her istemciye yalnızca kendi tünel adresini (ör. /32) vermek, bir istemcinin başka bir istemcinin adresini taklit etmesini engeller.

Kurulum ve anahtar üretimi

WireGuard, Linux'un yanı sıra Windows, macOS, BSD, iOS ve Android'de de çalışır. Linux'ta araçlar dağıtımın paket yöneticisinden kurulur (Debian/Ubuntu'da wireguard-tools paketi).

Anahtarlar, dosya izinleri kısıtlanarak üretilmelidir:

CODE TERMINAL
umask 077
wg genkey | tee sunucu.key | wg pubkey > sunucu.pub
wg genkey | tee istemci1.key | wg pubkey > istemci1.pub
wg genpsk > istemci1.psk


umask 077 komutu, oluşturulan anahtar dosyalarının yalnızca sahibi tarafından okunabilmesini sağlar. wg genpsk ile üretilen isteğe bağlı ön paylaşımlı anahtar (PresharedKey), wg(8) kılavuzuna göre açık anahtar kriptografisinin üzerine ek bir simetrik katman ekleyerek kuantum sonrası dirence katkı sağlar. Her eş çifti için ayrı bir PSK kullanılması önerilir.

Özel anahtarlar hiçbir zaman e-posta, sohbet ya da sürüm kontrol sistemi üzerinden paylaşılmamalıdır. İdeal yöntem, her cihazın kendi özel anahtarını kendi üzerinde üretmesi ve yalnızca açık anahtarı karşı tarafa iletmesidir.

Sunucu yapılandırması

wg-quick aracı, yapılandırmayı varsayılan olarak /etc/wireguard/ARAYUZ.conf dosyasından okur. Örnek bir sunucu dosyası (/etc/wireguard/wg0.conf):

CODE TERMINAL
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = 

[Peer]
# istemci1 - dizüstü
PublicKey = 
PresharedKey = 
AllowedIPs = 10.8.0.2/32

[Peer]
# istemci2 - telefon
PublicKey = 
PresharedKey = 
AllowedIPs = 10.8.0.3/32


Dosya özel anahtar içerdiği için izinleri daraltılmalıdır:

CODE TERMINAL
chmod 600 /etc/wireguard/wg0.conf


Arayüzü başlatmak ve açılışta otomatik devreye almak için:

CODE TERMINAL
wg-quick up wg0
systemctl enable wg-quick@wg0


ListenPort belirtilmezse port rastgele seçilir; sunucuda sabit bir port kullanılması ve güvenlik duvarında yalnızca bu UDP portunun açılması gerekir.

İstemci yapılandırması

CODE TERMINAL
[Interface]
Address = 10.8.0.2/32
PrivateKey = 
DNS = 10.8.0.1

[Peer]
PublicKey = 
PresharedKey = 
Endpoint = vpn.ornek.com:51820
AllowedIPs = 10.8.0.0/24
PersistentKeepalive = 25


Burada iki tasarım kararı önemlidir:

İstemci AllowedIPs değeriSonuç
10.8.0.0/24 (ve gerekirse iç ağ aralıkları)Bölünmüş tünel: yalnızca kurum ağına giden trafik VPN'den geçer
0.0.0.0/0, ::/0Tam tünel: tüm trafik VPN'den geçer, wg-quick varsayılan rotayı ip-rule ile yönetir


wg-quick kılavuzuna göre bir eşin AllowedIPs değeri 0.0.0.0/0 ya da ::/0 içerdiğinde araç bu eşi otomatik olarak varsayılan ağ geçidi yapar. Kamuya açık Wi-Fi ağlarında tam tünel tercih edilebilir; kurumsal erişimde ise bölünmüş tünel gereksiz trafik yükünü azaltır.

PersistentKeepalive, istemci NAT ya da durum takibi yapan bir güvenlik duvarı arkasındaysa bağlantının açık kalmasını sağlar; wg(8) kılavuzu bu durumda 25 saniyeyi önerir. Sunucu tarafında genellikle gerekmez.

Sunucuyu ağ geçidi yapmak

İstemcilerin sunucu üzerinden iç ağa ya da internete çıkması isteniyorsa IP yönlendirme açılmalı ve güvenlik duvarında gerekli kurallar tanımlanmalıdır:

CODE TERMINAL
sysctl -w net.ipv4.ip_forward=1


Kalıcı olması için bu ayar /etc/sysctl.d/ altındaki bir dosyaya yazılmalıdır. wg-quick'in PostUp ve PostDown seçenekleri, arayüz açılırken ve kapanırken bash komutları çalıştırmayı sağlar; %i ifadesi arayüz adına dönüşür. Güvenlik duvarı kurallarını bu kancalarla arayüze bağlamak, kuralların tünelle birlikte açılıp kapanmasını sağlar. Yönlendirme açıldığında FORWARD zincirinde varsayılan reddet politikası uygulanmalı, yalnızca wg0'dan gelen ve izin verilen hedeflere giden trafik kabul edilmelidir.

Sertleştirme kontrol listesi


  • Eş başına en dar AllowedIPs: Sunucuda her istemciye yalnızca /32 (IPv6'da /128) tünel adresi verin.
  • Eş başına ayrı anahtar ve PSK: Aynı anahtar çiftini birden fazla cihazda kullanmayın; kaybolan bir cihazın [Peer] bölümünü silmek erişimi anında keser.
  • Yapılandırma dosyası izinleri: /etc/wireguard dizini ve .conf dosyaları yalnızca root tarafından okunabilir olmalı.
  • Tek açık port: Güvenlik duvarında yalnızca WireGuard'ın UDP portunu açın; yönetim servislerini (SSH, panel) internete değil tünel adresine bağlayın.
  • SaveConfig kullanımına dikkat: SaveConfig = true, arayüz kapanırken çalışan yapılandırmayı dosyaya yazar ve elle yaptığınız değişikliklerin üzerine yazılmasına yol açabilir.
  • Yeni eşleri kesintisiz ekleme: Arayüzü kapatmadan değişiklikleri uygulamak için wg syncconf wg0 <(wg-quick strip wg0) kullanılabilir; wg-quick strip, dosyadaki wg-quick'e özgü seçenekleri ayıklar.
  • Güncel tutma: Çekirdek ve wireguard-tools paketlerini dağıtım güncellemeleriyle birlikte güncelleyin.



İzleme ve denetim

Durum kontrolü için wg show komutu kullanılır:

CODE TERMINAL
wg show wg0
wg show wg0 latest-handshakes
wg show wg0 transfer
wg show wg0 dump


KomutNe gösterir
wg show wg0Eşler, uç noktalar, AllowedIPs, son el sıkışma ve aktarım özeti
latest-handshakesHer eşin son başarılı el sıkışma zamanı (Unix zaman damgası)
transferEş başına alınan ve gönderilen bayt miktarı
dumpBetiklerle işlenmeye uygun, sekmeyle ayrılmış ayrıntılı çıktı


Güvenlik izleme açısından son el sıkışma zamanı değerli bir göstergedir: normalde çevrimdışı olması beklenen bir cihazın gece yarısı el sıkışması, ya da hiç beklenmeyen bir uç nokta IP'si, anahtarın ele geçirildiğine işaret edebilir. dump çıktısını düzenli aralıklarla toplayıp SIEM'e göndermek, bu tür anormalliklerin fark edilmesini kolaylaştırır. WireGuard'ın dolaşım (roaming) özelliği nedeniyle eşin uç nokta adresi, doğrulanmış son paketin kaynağına göre değişebilir; beklenmeyen ülke ya da ASN'lerden gelen uç noktalar incelenmelidir.

Sık yapılan hatalar


  • Sunucuda bir istemciye 0.0.0.0/0 tanımlamak: Bu, tüm trafiğin o istemciye yönlendirilmesine ve diğer eşlerin erişiminin bozulmasına yol açar. Tam tünel ayarı istemci tarafında yapılır.
  • İki eşe çakışan AllowedIPs aralıkları vermek: Aynı aralık yalnızca bir eşe ait olabilir; son tanımlanan eş aralığı devralır.
  • El sıkışma görülmüyorsa önce UDP portunun güvenlik duvarında açık olduğunu, sonra iki taraftaki açık anahtarların doğru eşleştiğini kontrol edin. WireGuard yanlış anahtarla gelen paketlere yanıt vermediği için hata mesajı almazsınız.



Kaynaklar
TR Siber Ekibi Yazar · TRSiber
← Ana sayfaya dön