WireGuard VPN Kurulumu ve Güvenli Tünel Yapılandırması

Modern ağ güvenliği dünyasında VPN seçimi artık sadece “OpenVPN mi, IPSec mi?” sorusundan ibaret değil. WireGuard, 2015’ten bu yana sessiz sedasız gelişti ve bugün Linux çekirdeğine (5.6+) gömülü hale gelen, performansıyla rakiplerini geride bırakan bir protokol haline geldi. Sadece ~4000 satır kod, OpenVPN’in 100.000+ satırıyla kıyaslandığında hem güvenlik denetimi hem de performans açısından ciddi bir avantaj sunuyor. Ben de production ortamlarında hem site-to-site hem de road warrior senaryolarında WireGuard kullandım ve her seferinde aynı sonuca vardım: Kurulumu basit, bakımı minimal, performansı etkileyici.

WireGuard Nedir ve Neden Tercih Edilmeli

WireGuard, UDP tabanlı çalışan bir Layer 3 tünel protokolüdür. Geleneksel VPN çözümlerinin aksine, kullanıcı kimlik doğrulaması yerine kriptografik anahtar çiftlerine dayanır. Bu yaklaşım hem güvenliği hem de hızı artırıyor.

Öne çıkan özellikler:

  • ChaCha20 şifreleme algoritması ile yüksek performanslı veri şifreleme
  • Curve25519 ile Diffie-Hellman anahtar değişimi
  • Poly1305 ile mesaj doğrulama (MAC)
  • BLAKE2s hash fonksiyonu
  • SipHash24 hashtable anahtarları
  • HKDF anahtar türetme fonksiyonu
  • Minimal saldırı yüzeyi, minimal kod tabanı
  • Kernel alanında çalışma (userspace seçeneği de mevcut)

Gerçek dünyada ne anlama geliyor bunlar? 1 Gbps+ aktarım hızları, sub-millisecond bağlantı kurma süreleri ve CPU kullanımında OpenVPN’e kıyasla %60-70 daha az yük demek.

Kurulum Öncesi Hazırlık

Sistem Gereksinimleri

Ubuntu 22.04 LTS sunucuda kurulum yapacağız. Kernel 5.6 ve üzeri için WireGuard kernel modülü hazır geliyor. Daha eski sistemler için:

uname -r
# 5.15.0-91-generic gibi bir çıktı görmelisiniz

Eğer kernel 5.6 altındaysa DKMS ile kurulum gerekir, ama modern bir dağıtım kullanıyorsanız bu sorunla karşılaşmazsınız.

Senaryo Tanımı

Bu yazıda şu senaryoyu kuracağız:

  • Sunucu (server): 203.0.113.10 public IP, Ubuntu 22.04
  • İstemci 1 (laptop): Dinamik IP, Ubuntu 22.04 masaüstü
  • İstemci 2 (mobil): Android/iOS cihaz
  • VPN subnet: 10.8.0.0/24
  • Sunucu VPN IP: 10.8.0.1
  • İstemci 1 VPN IP: 10.8.0.2
  • İstemci 2 VPN IP: 10.8.0.3

Sunucu Kurulumu

Paket Kurulumu

sudo apt update && sudo apt upgrade -y
sudo apt install wireguard wireguard-tools -y

# Kurulumu doğrula
wg --version
# wireguard-tools v1.0.20210914 - https://git.zx2c4.com/wireguard-tools/

Anahtar Çifti Oluşturma

WireGuard’da her peer için bir public/private anahtar çifti gerekir. Sunucu anahtarlarını güvenli bir dizinde oluşturalım:

# /etc/wireguard dizinine geç
cd /etc/wireguard

# Doğru izinlerle çalış
umask 077

# Sunucu için private key ve public key oluştur
wg genkey | tee server_private.key | wg pubkey > server_public.key

# Anahtarları görüntüle
cat server_private.key
cat server_public.key

# İzinleri kontrol et
ls -la /etc/wireguard/
# -rw------- 1 root root  45 Jan 15 10:00 server_private.key
# -rw------- 1 root root  45 Jan 15 10:00 server_public.key

Private key’i asla kimseyle paylaşmayın ve loglarınıza düşmesine izin vermeyin. Bu, WireGuard güvenliğinin temel taşı.

Sunucu Yapılandırma Dosyası

sudo nano /etc/wireguard/wg0.conf
[Interface]
# Sunucunun VPN IP adresi
Address = 10.8.0.1/24

# WireGuard'ın dinleyeceği port (51820 standart)
ListenPort = 51820

# Sunucunun private key'i (server_private.key içeriği)
PrivateKey = <SUNUCU_PRIVATE_KEY_BURAYA>

# IP forwarding için post-up kuralları
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# DNS (isteğe bağlı)
# DNS = 1.1.1.1, 8.8.8.8

# İstemci 1 - Laptop
[Peer]
PublicKey = <ISTEMCI1_PUBLIC_KEY_BURAYA>
AllowedIPs = 10.8.0.2/32

# İstemci 2 - Mobil
[Peer]
PublicKey = <ISTEMCI2_PUBLIC_KEY_BURAYA>
AllowedIPs = 10.8.0.3/32

eth0 yerine kendi ağ arayüzünüzü kullanın. Hangi arayüzü kullandığınızı bulmak için:

ip route get 8.8.8.8 | awk '{print $5; exit}'
# eth0 veya ens3 veya enp0s3 çıkabilir

IP Forwarding Aktifleştirme

# Geçici olarak aktifleştir
echo 1 > /proc/sys/net/ipv4/ip_forward

# Kalıcı hale getir
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
sysctl -p

# Doğrula
sysctl net.ipv4.ip_forward
# net.ipv4.ip_forward = 1

Firewall Kuralları

UFW kullanıyorsanız:

# WireGuard portunu aç
sudo ufw allow 51820/udp

# SSH'ı da açık tutmayı unutma
sudo ufw allow 22/tcp

# UFW durumunu kontrol et
sudo ufw status verbose

UFW ile birlikte PostUp/PostDown kuralları bazen çakışabilir. Bu durumda /etc/ufw/before.rules dosyasına NAT kurallarını eklemek daha sağlıklı bir yöntemdir.

Servisi Başlatma

# WireGuard servisini başlat
sudo systemctl start wg-quick@wg0

# Sistem başlangıcında otomatik başlat
sudo systemctl enable wg-quick@wg0

# Durumu kontrol et
sudo systemctl status wg-quick@wg0

# WireGuard arayüzünü kontrol et
sudo wg show

wg show çıktısında interface bilgilerini ve peer listesini görmelisiniz. Henüz istemci eklenmediği için peer listesi boş gelecektir.

İstemci Kurulumu (Linux)

İstemci tarafında benzer adımları uyguluyoruz. Bu işlemleri istemci makinede yapın:

# Kurulum
sudo apt install wireguard wireguard-tools -y

# Anahtar oluştur
cd /etc/wireguard
umask 077
wg genkey | tee client1_private.key | wg pubkey > client1_public.key

# İstemci yapılandırması
sudo nano /etc/wireguard/wg0.conf

İstemci yapılandırma dosyası:

[Interface]
# İstemcinin VPN IP adresi
Address = 10.8.0.2/24

# İstemci private key
PrivateKey = <ISTEMCI1_PRIVATE_KEY_BURAYA>

# DNS (tüm trafiği tünelden geçirince önemli)
DNS = 1.1.1.1

[Peer]
# Sunucunun public key'i
PublicKey = <SUNUCU_PUBLIC_KEY_BURAYA>

# Sunucunun public IP ve portu
Endpoint = 203.0.113.10:51820

# Hangi trafiği tünelden geçireceğiz?
# 0.0.0.0/0 = tüm internet trafiği
# 10.8.0.0/24 = sadece VPN trafiği (split tunnel)
AllowedIPs = 0.0.0.0/0, ::/0

# NAT/firewall arkasındaki istemciler için keepalive
PersistentKeepalive = 25

PersistentKeepalive parametresi, NAT arkasındaki cihazların bağlantıyı canlı tutması için kritik. 25 saniye çoğu NAT implementasyonu için yeterli, ama agresif NAT’larda 15-20 saniyeye indirmeniz gerekebilir.

Şimdi istemcinin public key’ini sunucuya ekleyin:

# Sunucuda çalıştır
sudo wg set wg0 peer <ISTEMCI1_PUBLIC_KEY> allowed-ips 10.8.0.2/32

# Kalıcı hale getirmek için wg0.conf'a ekle (yukarıda gösterdik)
# ve servisi yeniden başlat
sudo systemctl restart wg-quick@wg0

İstemcide bağlantıyı başlat:

sudo systemctl start wg-quick@wg0
sudo systemctl enable wg-quick@wg0

# Bağlantıyı test et
ping 10.8.0.1

# WireGuard durumunu gör
sudo wg show

Mobil İstemci Yapılandırması (QR Kod ile)

Mobil cihazlar için QR kod kullanmak hayat kurtarıyor. Önce qrencode kuralım:

sudo apt install qrencode -y

# Mobil istemci için anahtar oluştur (sunucuda)
cd /tmp
wg genkey | tee mobile_private.key | wg pubkey > mobile_public.key

# Geçici config dosyası oluştur
cat > /tmp/mobile_client.conf << EOF
[Interface]
Address = 10.8.0.3/24
PrivateKey = $(cat /tmp/mobile_private.key)
DNS = 1.1.1.1

[Peer]
PublicKey = $(cat /etc/wireguard/server_public.key)
Endpoint = 203.0.113.10:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
EOF

# QR kod oluştur ve terminalde göster
qrencode -t ansiutf8 < /tmp/mobile_client.conf

# Sunucu config'ine mobil peer'ı ekle
sudo wg set wg0 peer $(cat /tmp/mobile_public.key) allowed-ips 10.8.0.3/32

# Geçici dosyaları sil
rm /tmp/mobile_private.key /tmp/mobile_client.conf

Telefonda WireGuard uygulamasını açıp QR kodu okutun. Bağlantı otomatik yapılandırılır.

Gelişmiş Yapılandırma: Split Tunneling

Tüm trafiği VPN’den geçirmek istemiyorsanız, sadece belirli ağların tünelden geçmesini sağlayabilirsiniz. Örneğin, şirket iç ağına (192.168.1.0/24) erişim için:

# İstemci wg0.conf içinde AllowedIPs'i değiştir
# Önceki: AllowedIPs = 0.0.0.0/0, ::/0
# Yeni:
AllowedIPs = 10.8.0.0/24, 192.168.1.0/24

Bu durumda normal internet trafiği doğrudan çıkar, sadece VPN ve şirket ağı trafiği tünelden geçer. Bant genişliği açısından verimli bir yaklaşım.

Peer Yönetimi ve İzleme

Bağlı Peer’ları İzleme

# Detaylı WireGuard durumu
sudo wg show all

# Belirli interface için
sudo wg show wg0

# Transfer istatistikleri
sudo wg show wg0 transfer

# Son handshake zamanları
sudo wg show wg0 latest-handshakes

Son handshake zamanı, bir peer’ın gerçekten bağlı olup olmadığını anlamanın en iyi yolu. Eğer son handshake 3 dakikadan eski ise, o peer’ın bağlantısında sorun var demektir.

Dinamik Peer Ekleme ve Silme

Servis restart etmeden peer ekleyip çıkarabilirsiniz:

# Yeni peer ekle
sudo wg set wg0 peer <PUBLIC_KEY> allowed-ips 10.8.0.4/32

# Peer sil
sudo wg set wg0 peer <PUBLIC_KEY> remove

# Mevcut konfigürasyonu kaydet
sudo wg showconf wg0 > /etc/wireguard/wg0.conf

Site-to-Site Tünel Kurulumu

İki ofis ağını birbirine bağlamak için site-to-site yapılandırma biraz farklı. Örneğin:

  • Ofis A: 192.168.1.0/24, WireGuard IP 10.8.0.1
  • Ofis B: 192.168.2.0/24, WireGuard IP 10.8.0.2

Ofis A sunucu config’inde Ofis B peer tanımı:

[Peer]
PublicKey = <OFIS_B_PUBLIC_KEY>
Endpoint = <OFIS_B_PUBLIC_IP>:51820
# Ofis B'nin hem VPN IP'si hem de iç ağı
AllowedIPs = 10.8.0.2/32, 192.168.2.0/24
PersistentKeepalive = 25

Ofis B’de de her iki tarafın iç ağı için route ekleyin:

# Ofis B'de Ofis A ağına route ekle
ip route add 192.168.1.0/24 via 10.8.0.1 dev wg0

Site-to-site senaryosunda her iki gateway’de de IP forwarding açık olmalı. Bunu zaten yukarıda aktifleştirdik.

Güvenlik Sertleştirme

Yapılandırma Dosyası İzinleri

# /etc/wireguard dizini ve içerikleri sadece root tarafından okunabilir olmalı
chmod 600 /etc/wireguard/wg0.conf
chmod 600 /etc/wireguard/server_private.key
chown root:root /etc/wireguard/wg0.conf

# Dizin izinleri
chmod 700 /etc/wireguard/

Preshared Key (PSK) Kullanımı

Post-quantum güvenlik için her peer çiftine ek bir preshared key ekleyebilirsiniz:

# PSK oluştur
wg genpsk > /etc/wireguard/client1.psk

# Sunucu config'ine ekle
[Peer]
PublicKey = <ISTEMCI_PUBLIC_KEY>
PresharedKey = <PSK_ICERIGI_BURAYA>
AllowedIPs = 10.8.0.2/32

PSK, mevcut şifrelemenin üzerine ek bir simetrik şifreleme katmanı ekler. Özellikle hassas ortamlarda önerilir.

Fail2ban ile Kaba Kuvvet Koruması

WireGuard geçersiz paketleri sessizce düşürdüğü için brute force saldırılarına karşı doğası gereği dayanıklı. Ancak sunucu loglarını izlemek iyi pratik:

# WireGuard loglarını görüntüle
sudo journalctl -u wg-quick@wg0 -f

# Kernel loglarında WireGuard mesajları
sudo dmesg | grep wireguard

Sorun Giderme

Bağlantı kurulamıyorsa sistematik yaklaşın:

# 1. Servis durumunu kontrol et
sudo systemctl status wg-quick@wg0

# 2. Port açık mı?
sudo ss -ulnp | grep 51820

# 3. Firewall kurallarını kontrol et
sudo iptables -L -n -v | grep MASQUERADE

# 4. IP forwarding aktif mi?
cat /proc/sys/net/ipv4/ip_forward

# 5. Peer handshake var mı?
sudo wg show wg0 latest-handshakes

# 6. Sunucu tarafından paketi görebiliyor musun?
sudo tcpdump -i eth0 -n udp port 51820

En sık karşılaşılan sorunlar:

  • PostUp/PostDown’da yanlış interface adı: eth0 yerine ens3 veya enp2s0 olabilir, mutlaka kontrol edin
  • IP forwarding kapalı: sysctl -p çalıştırıldıktan sonra değeri doğrulayın
  • Yanlış AllowedIPs: İstemci ve sunucu tarafındaki AllowedIPs uyumsuzluğu bağlantı sorunlarının %40’ını oluşturur
  • UFW ve iptables çakışması: UFW aktifse PostUp kuralları yerine UFW üzerinden yönetin

Performans Optimizasyonu

# MTU optimizasyonu - WireGuard overhead'i için
# Standart MTU 1500, WireGuard için 1420 önerilir
sudo ip link set mtu 1420 dev wg0

# wg0.conf içinde kalıcı MTU ayarı
[Interface]
Address = 10.8.0.1/24
MTU = 1420

Yüksek throughput ortamlarda SO_REUSEPORT ve multi-queue özelliklerinden yararlanmak için WireGuard kernel modülünü optimize edebilirsiniz, ancak çoğu production senaryosu için varsayılan ayarlar yeterli.

Sonuç

WireGuard, sysadmin toolbox’ınıza eklemeniz gereken o nadir araçlardan biri: Öğrenmesi kolay, yönetmesi kolay, güçlü kriptoğrafi. Bu yazıda sunucu kurulumundan site-to-site yapılandırmaya, mobil istemciden güvenlik sertleştirmeye kadar geniş bir yelpazede WireGuard’ı ele aldık.

Production’a geçmeden önce birkaç hatırlatma:

  • Private key’lerinizi asla version control sistemlerine (Git vs.) commit etmeyin
  • PSK kullanımını ciddi ortamlarda mutlaka değerlendirin
  • Peer handshake sürelerini monitoring sisteminize ekleyin, Prometheus + Grafana ile harika bir WireGuard dashboard oluşturabilirsiniz
  • Yapılandırma değişikliklerini her zaman bir staging ortamında test edin

Birkaç yıl önce OpenVPN’den WireGuard’a geçtiğimde en şaşırdığım şey, aynı donanımda %40 daha yüksek throughput elde etmekti. Eğer hala OpenVPN veya IPSec kullanıyorsanız, test ortamınızda WireGuard’a bir şans verin. Büyük ihtimalle geri dönmek istemeyeceksiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir