wg-easy ile WireGuard Web Arayüzü Kurulumu

WireGuard’ı elle kurmak, konfig dosyalarıyla boğuşmak, her yeni kullanıcı için QR kod üretmeye çalışmak… Bunları yaşadıysanız, wg-easy’nin hayatınızı ne kadar kolaylaştıracağını anlarsınız. wg-easy, WireGuard VPN sunucusunu Docker üzerinde çalıştıran ve buna modern bir web arayüzü ekleyen açık kaynaklı bir proje. Teknik bilgisi sınırlı kullanıcıları bile dahil edebileceğiniz, yönetimi merkezileştiren ve günlük operasyonları ciddi ölçüde hızlandıran bir çözüm.

Bu yazıda wg-easy’yi sıfırdan kuracağız, güvenli hale getireceğiz ve gerçek dünya senaryolarında nasıl kullanacağınızı göstereceğiz.

Gereksinimler ve Ön Hazırlık

Başlamadan önce ortamınızın hazır olduğundan emin olmanız gerekiyor. Ben bu kurulumu Ubuntu 22.04 üzerinde test ettim, Debian 11/12 ve Ubuntu 20.04 için de aynı adımlar geçerli.

Sunucu gereksinimleri:

  • Ubuntu 20.04/22.04 veya Debian 11/12
  • En az 1 CPU, 512MB RAM (pratikte 1GB öneririm)
  • Statik IP adresi veya dinamik DNS
  • Root veya sudo yetkisi
  • Docker ve Docker Compose kurulu olmalı

Port gereksinimleri:

  • 51820/UDP: WireGuard VPN portu
  • 51821/TCP: wg-easy web arayüzü (değiştirilebilir)

Öncelikle sistemi güncelleyelim ve Docker’ı kuralım:

# Sistem güncellemesi
sudo apt update && sudo apt upgrade -y

# Gerekli paketler
sudo apt install -y curl wget git ufw

# Docker kurulumu
curl -fsSL https://get.docker.com | sh

# Kullanıcıyı docker grubuna ekle
sudo usermod -aG docker $USER

# Docker Compose kurulumu (eğer ayrı kurulum gerekiyorsa)
sudo apt install -y docker-compose-plugin

# Docker servisini başlat
sudo systemctl enable docker
sudo systemctl start docker

# Kurulumu doğrula
docker --version
docker compose version

Kernel modülünü de kontrol etmek iyi bir alışkanlık:

# WireGuard kernel modülünü kontrol et
modprobe wireguard
lsmod | grep wireguard

# Eğer modül yoksa kur
sudo apt install -y wireguard-tools linux-headers-$(uname -r)

IP Forwarding Ayarı

WireGuard’ın düzgün çalışması için IP forwarding aktif olmalı. Bu adımı atlamak, VPN bağlantısı kurulsa bile internet erişiminin çalışmaması sonucunu doğurur.

# IP forwarding'i geçici olarak aktif et (test için)
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1

# Kalıcı hale getir
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding=1" | sudo tee -a /etc/sysctl.conf

# Değişiklikleri uygula
sudo sysctl -p

# Doğrula
cat /proc/sys/net/ipv4/ip_forward
# Çıktı: 1

UFW Firewall Yapılandırması

Güvenlik duvarını doğru yapılandırmak kritik. Özellikle UFW ile Docker birlikte kullanıldığında dikkatli olmanız gereken noktalar var.

# Mevcut durumu kontrol et
sudo ufw status

# SSH'a izin ver (kilitleme yaşamamak için önce bunu yap!)
sudo ufw allow 22/tcp

# WireGuard portuna izin ver
sudo ufw allow 51820/udp

# Web arayüzü portu (sadece güvenilir IP'lerden erişim önerilir)
sudo ufw allow 51821/tcp

# UFW'yi etkinleştir
sudo ufw enable

# Durumu kontrol et
sudo ufw status verbose

Eğer web arayüzüne sadece belirli IP’lerden erişmek istiyorsanız:

# Sadece kendi IP'nizden web arayüzüne erişim
sudo ufw allow from 203.0.113.50 to any port 51821
sudo ufw deny 51821/tcp

wg-easy Docker Compose Kurulumu

Şimdi asıl işe geliyoruz. wg-easy için bir dizin oluşturup Docker Compose dosyamızı hazırlayalım:

# Çalışma dizini oluştur
sudo mkdir -p /opt/wg-easy
cd /opt/wg-easy

Docker Compose dosyasını oluşturun:

cat > /opt/wg-easy/docker-compose.yml << 'EOF'
version: "3.8"

volumes:
  etc_wireguard:

services:
  wg-easy:
    environment:
      # Sunucunuzun public IP'si veya domain adı
      - WG_HOST=vpn.sirketiniz.com
      
      # Web arayüzü şifresi (bcrypt hash kullanımı önerilir)
      - PASSWORD_HASH=$$2y$$10$$hBCoykrB95WSzuV4fafBzOHWKu9sbyVa34GJr8VV5R/pIelfEMYyG
      
      # WireGuard portu
      - WG_PORT=51820
      
      # Web arayüzü portu
      - PORT=51821
      
      # VPN subnet
      - WG_DEFAULT_ADDRESS=10.8.0.x
      
      # DNS sunucuları (VPN üzerinden)
      - WG_DEFAULT_DNS=1.1.1.1,8.8.8.8
      
      # Maximum transfer ünitesi
      - WG_MTU=1420
      
      # Persistent keepalive
      - WG_PERSISTENT_KEEPALIVE=25
      
      # Tüm trafiği VPN üzerinden yönlendir
      - WG_ALLOWED_IPS=0.0.0.0/0,::/0
      
      # Pre/Post up/down scriptleri için
      - WG_PRE_UP=
      - WG_POST_UP=iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
      - WG_PRE_DOWN=
      - WG_POST_DOWN=iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

    image: ghcr.io/wg-easy/wg-easy
    container_name: wg-easy
    volumes:
      - etc_wireguard:/etc/wireguard
    ports:
      - "51820:51820/udp"
      - "51821:51821/tcp"
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1
EOF

Önemli not: PASSWORD_HASH değerini kendiniz oluşturmanız gerekiyor. Düz metin şifre de kullanabilirsiniz ama production ortamında hash kullanmak çok daha güvenli.

Şifre hash’i oluşturmak için:

# bcrypt hash oluştur
docker run --rm -it ghcr.io/wg-easy/wg-easy wgpw 'SifreNizBuraya'

# Çıktı şu formatta gelecek:
# PASSWORD_HASH='$2b$12$...'

# docker-compose.yml içinde $ işaretlerini $$ ile escape etmeyi unutmayın!
# $2b$ -> $$2b$$ şeklinde

Servisi Başlatma ve Doğrulama

# wg-easy'yi başlat
cd /opt/wg-easy
docker compose up -d

# Container durumunu kontrol et
docker compose ps

# Logları izle
docker compose logs -f wg-easy

# Container içine bak
docker exec -it wg-easy wg show

Her şey yolundaysa web arayüzüne http://sunucu-ip:51821 adresinden erişebilirsiniz. Şifrenizi girin ve ana dashboard’a ulaşırsınız.

Web Arayüzünden Kullanıcı Yönetimi

wg-easy’nin en güçlü yanı burada. Web arayüzü üzerinden:

  • Yeni VPN kullanıcısı oluşturabilirsiniz
  • QR kod üretip mobil cihazlara anında aktarabilirsiniz
  • Kullanıcı konfigürasyon dosyalarını indirebilirsiniz
  • Kullanıcıları devre dışı bırakabilir veya silebilirsiniz
  • Her kullanıcının ne kadar veri transferi yaptığını görebilirsiniz

Yeni kullanıcı oluştururken isim alanına anlamlı bir şey yazın. Örneğin “ahmet-macbook” veya “muhasebe-ofis-pc” gibi. İleride kimi devre dışı bırakacağınızı karıştırmazsınız.

Nginx ile Reverse Proxy ve HTTPS

Web arayüzünü 51821 portuyla açıkta bırakmak ideal değil. Nginx ile önüne geçip HTTPS ekleyelim:

# Nginx kur
sudo apt install -y nginx certbot python3-certbot-nginx

# Nginx konfigürasyonu oluştur
sudo nano /etc/nginx/sites-available/wg-easy
cat > /etc/nginx/sites-available/wg-easy << 'EOF'
server {
    listen 80;
    server_name vpn.sirketiniz.com;

    location / {
        proxy_pass http://127.0.0.1:51821;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
    }
}
EOF

# Symlink oluştur
sudo ln -s /etc/nginx/sites-available/wg-easy /etc/nginx/sites-enabled/

# Nginx konfigürasyonunu test et
sudo nginx -t

# Nginx'i yeniden başlat
sudo systemctl restart nginx

# SSL sertifikası al (domain DNS'i sunucuya işaret etmeli)
sudo certbot --nginx -d vpn.sirketiniz.com

# Otomatik yenilemeyi test et
sudo certbot renew --dry-run

SSL kurulumundan sonra web arayüzüne https://vpn.sirketiniz.com üzerinden erişebilirsiniz. 51821 portunu artık firewall’da kapatabilirsiniz.

Gerçek Dünya Senaryosu: Şirket VPN’i

Diyelim ki 15 kişilik bir şirketsiniz ve uzaktan çalışan ekibinizin ofis ağına güvenli bağlanmasını istiyorsunuz. wg-easy ile bunu nasıl organize edersiniz?

Senaryo detayları:

  • Ofis sunucusu: 203.0.113.10 (public IP)
  • Ofis iç ağı: 192.168.1.0/24
  • VPN subnet: 10.8.0.0/24
  • Çalışanlar: 12 kişi, farklı şehirlerden bağlanıyor

Bu senaryoda WG_ALLOWED_IPS ayarını değiştirmeniz gerekiyor. Tüm trafiği VPN’den geçirmek yerine sadece ofis ağı trafiğini tünellemek daha verimli:

# docker-compose.yml içinde split tunneling için
- WG_ALLOWED_IPS=192.168.1.0/24,10.8.0.0/24

Bu sayede çalışanlar internet trafiklerini kendi bağlantılarından kullanırken sadece ofis kaynaklarına erişirken VPN’den geçerler. Hem bant genişliği tasarrufu hem de daha iyi kullanıcı deneyimi.

Ofis içi kaynakları erişilebilir kılmak için routing ayarı:

# Ofis sunucusunda (VPN sunucusu aynı zamanda gateway ise)
# docker-compose.yml post-up scriptine ekle:
- WG_POST_UP=iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip route add 192.168.1.0/24 via 10.8.0.1

Yedekleme ve Geri Yükleme

VPN konfigürasyonları ve kullanıcı bilgileri Docker volume’da saklanıyor. Bunları düzenli yedeklemek şart:

# Manuel yedekleme
docker compose stop wg-easy
sudo tar -czf /backup/wg-easy-$(date +%Y%m%d).tar.gz /var/lib/docker/volumes/wg-easy_etc_wireguard
docker compose start wg-easy

# Otomatik yedekleme için cron job
sudo crontab -e
# Şunu ekle:
# 0 2 * * * docker compose -f /opt/wg-easy/docker-compose.yml stop wg-easy && tar -czf /backup/wg-easy-$(date +%Y%m%d).tar.gz /var/lib/docker/volumes/wg-easy_etc_wireguard && docker compose -f /opt/wg-easy/docker-compose.yml start wg-easy

Geri yükleme için:

# Container'ı durdur
docker compose stop wg-easy

# Volume'u temizle ve yedekten geri yükle
docker volume rm wg-easy_etc_wireguard
sudo tar -xzf /backup/wg-easy-20240115.tar.gz -C /

# Container'ı tekrar başlat
docker compose start wg-easy

Monitoring ve Log Takibi

Kullanıcıların bağlantı durumunu, hangi IP’den bağlandıklarını ve veri transferini takip etmek için:

# Aktif VPN bağlantılarını göster
docker exec -it wg-easy wg show

# Daha detaylı çıktı
docker exec -it wg-easy wg show all

# Container loglarını izle (gerçek zamanlı)
docker compose logs -f wg-easy

# Son 100 satır log
docker compose logs --tail=100 wg-easy

# Belirli tarih aralığında loglar
docker compose logs --since="2024-01-01" --until="2024-01-31" wg-easy

Daha kapsamlı monitoring için Prometheus ve Grafana entegrasyonu da yapılabilir ama bu ayrı bir yazı konusu.

Sık Karşılaşılan Sorunlar

Container başlamıyor: Genellikle NET_ADMIN capability eksikliği veya kernel modülü sorunu. docker compose logs wg-easy ile detaylı hataya bakın.

Kullanıcılar bağlanıyor ama internet yok: IP forwarding aktif değil veya iptables kuralları eksik. WG_POST_UP içindeki iptables kurallarını ve network interface adını kontrol edin (eth0 yerine ens3 veya farklı olabilir).

# Network interface adını öğren
ip link show
# veya
ip route get 8.8.8.8 | awk '{print $5; exit}'

QR kod okutulmuyor: MTU değeri sorunu olabilir. WG_MTU=1280 ile deneyin, bazı ağlarda daha küçük MTU gerekebiliyor.

Web arayüzüne erişilemiyor: Firewall kuralları ve Docker port binding’ini kontrol edin:

# Port binding'i kontrol et
sudo ss -tlnp | grep 51821

# Docker network durumu
docker network ls
docker inspect wg-easy

Güvenlik Sertleştirme Önerileri

wg-easy’yi production’da kullanmadan önce şu adımları atmanızı kesinlikle tavsiye ederim:

  • Fail2ban kurun: Web arayüzüne brute force saldırılarına karşı
  • Web arayüzünü IP kısıtlamasına alın: Sadece yönetici IP’lerinden erişim
  • Düzenli şifre rotasyonu: Özellikle ekip değişikliklerinde
  • Kullanıcı audit’i: Ayrılan çalışanların hesaplarını hemen devre dışı bırakın
  • Container imajını güncel tutun: docker compose pull ile periyodik güncelleme
# wg-easy'yi güncelle
cd /opt/wg-easy
docker compose pull
docker compose up -d

# Eski imajları temizle
docker image prune -f

Sonuç

wg-easy, WireGuard’ın güçlü güvenliğini kullanıcı dostu bir arayüzle birleştiriyor. Özellikle teknik bilgisi farklı seviyelerde olan ekipleri yönetmek zorunda olan sysadminler için gerçek bir zaman tasarrufu. Kurulum süreci bir saatin altında tamamlanıyor, kullanıcı ekleme işlemi dakikalar alıyor ve sorun takibi web arayüzünden oldukça kolay hale geliyor.

Tek dikkat etmeniz gereken nokta, web arayüzünün güvenliği. HTTPS zorunlu, IP kısıtlaması şiddetle tavsiye edilir ve şifre yönetimine özen gösterin. Bunları sağladığınızda wg-easy, küçük ve orta ölçekli şirketler için kurumsal VPN çözümlerine ciddi bir alternatif oluyor.

Bir sonraki adım olarak wg-easy’yi mevcut kimlik doğrulama sistemlerinizle (LDAP, OAuth) entegre etmeyi araştırabilirsiniz. Şu an için built-in destek sınırlı olsa da, reverse proxy katmanında bu entegrasyonları yapmak mümkün.

Yorum yapın