OpenVPN Access Server ile Web Tabanlı Yönetim Paneli Kurulumu ve Yapılandırması

Kurumsal VPN altyapısı kurarken komut satırıyla boğuşmak yerine web tabanlı bir yönetim paneline sahip olmak, hem zaman kazandırır hem de operasyonel hataları önemli ölçüde azaltır. OpenVPN Access Server (OpenVPN AS) tam olarak bu ihtiyaca cevap veren, ticari destek seçeneğiyle birlikte gelen ve ücretsiz 2 eşzamanlı bağlantı limiti sunan bir çözümdür. Bu yazıda sıfırdan başlayarak production ortamına hazır bir OpenVPN AS kurulumu yapacağız.

Ön Gereksinimler ve Ortam Hazırlığı

Ben bu kurulumu Ubuntu 22.04 LTS üzerinde gerçekleştireceğim. Sunucunun en az 1 GB RAM ve 2 vCPU’ya sahip olması gerekiyor. Küçük kurumlar için bu yeterli olsa da 50 üzeri eşzamanlı bağlantı bekliyorsanız 4 GB RAM ve 4 vCPU düşünmelisiniz.

Başlamadan önce sistemin güncel olduğundan emin olalım:

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget gnupg2 ca-certificates lsb-release

Firewall tarafında açık olması gereken portlar şunlar:

  • TCP 443: Web yönetim paneli ve HTTPS üzerinden VPN trafiği
  • TCP 943: OpenVPN AS yönetim web arayüzü (varsayılan)
  • UDP 1194: OpenVPN standart VPN bağlantı portu
  • TCP 22: SSH erişimi (kısıtlamayı unutmayın)

UFW kullanıyorsanız şu komutlarla portları açabilirsiniz:

sudo ufw allow 22/tcp
sudo ufw allow 443/tcp
sudo ufw allow 943/tcp
sudo ufw allow 1194/udp
sudo ufw enable
sudo ufw status verbose

OpenVPN Access Server Kurulumu

OpenVPN AS’yi resmi depolardan kurmak en sağlıklı yöntemdir. Manuel indirme yapmak yerine repo ekleme yolunu tercih ediyorum çünkü güvenlik güncellemelerini otomatik olarak almanızı sağlıyor.

# OpenVPN AS GPG anahtarını ekle
curl -fsSL https://as-repository.openvpn.net/as-repo-public.gpg | 
  sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/openvpn-as.gpg

# Repoyu sisteme ekle
echo "deb [arch=amd64] http://as-repository.openvpn.net/as/debian $(lsb_release -cs) main" | 
  sudo tee /etc/apt/sources.list.d/openvpn-as-repo.list

# Paketi kur
sudo apt update
sudo apt install -y openvpn-as

Kurulum tamamlandığında terminal size önemli bilgiler verecek. Bu çıktıyı kesinlikle bir yere not edin:

Access Server web interfaces are available here:
Admin  UI: https://YOUR_SERVER_IP:943/admin
Client UI: https://YOUR_SERVER_IP:943/

To login please use the "openvpn" account with YOUR_INITIAL_PASSWORD password.

İlk şifreyi değiştirmek için hemen şu komutu çalıştırın:

sudo passwd openvpn

Web Yönetim Paneline İlk Giriş ve Temel Yapılandırma

Tarayıcınızdan https://SUNUCU_IP:943/admin adresine gidin. Tarayıcı self-signed sertifika uyarısı verecek, şimdilik geçebilirsiniz, ilerleyen bölümde Let’s Encrypt ile bu sorunu çözeceğiz.

Admin UI’ye openvpn kullanıcısıyla giriş yaptıktan sonra ilk yapmanız gereken şey Configuration > Network Settings bölümüne gitmek. Burada dikkat etmeniz gereken ayarlar:

  • Hostname or IP Address: Sunucunuzun public IP’si veya domain adı. Kullanıcıların bağlanacağı adresi buraya girin.
  • Admin Web Server (TCP): Varsayılan 943, güvenlik için farklı bir port kullanabilirsiniz.
  • VPN Server: UDP 1194 varsayılan olarak açık gelir.

Değişiklikleri kaydettikten sonra servis kendini yeniden başlatacak, bu normaldir.

VPN Protokol ve Port Ayarları

Kurumsal ortamlarda UDP 1194 genellikle firewall’lar tarafından bloke edilebilir. Bu yüzden TCP 443 üzerinden de bağlantı kabul etmesini yapılandırmanızı öneririm. Configuration > VPN Settings bölümüne gidin:

  • Routing: “Yes, using NAT” seçeneği küçük kurumlar için yeterlidir.
  • Should client Internet traffic be routed through the VPN?: Bu seçenek tüm trafiği VPN üzerinden geçirir. Sadece kurumsal kaynaklara erişim için “No” bırakabilirsiniz.
  • Allow Access From: Hangi ağlara erişim sağlanacağını burada belirleyin.

Kullanıcı Yönetimi

OpenVPN AS’nin en güçlü yönlerinden biri esnek kullanıcı yönetimidir. User Management > User Permissions bölümünden yeni kullanıcı ekleyebilirsiniz.

Komut Satırından Toplu Kullanıcı Oluşturma

Çok sayıda kullanıcı ekleyecekseniz web arayüzü yerine sacli aracını kullanmak çok daha verimlidir:

# Yeni kullanıcı oluştur
sudo /usr/local/openvpn_as/scripts/sacli --user "ali.yilmaz" 
  --key "prop_autologin" --value "false" UserPropPut

# Kullanıcıya şifre ata
sudo /usr/local/openvpn_as/scripts/sacli --user "ali.yilmaz" 
  --new_pass "GucluSifre123!" SetLocalPassword

# Kullanıcının admin yetkisi olsun mu?
sudo /usr/local/openvpn_as/scripts/sacli --user "ali.yilmaz" 
  --key "prop_superuser" --value "false" UserPropPut

# Kullanıcı profilini doğrula
sudo /usr/local/openvpn_as/scripts/sacli --user "ali.yilmaz" UserPropGet

Kullanıcı Grupları ile Erişim Kontrolü

Gerçek dünya senaryosunda farklı departmanların farklı ağ kaynaklarına erişmesi gerekir. Örneğin: Geliştirici ekibi test sunucularına erişebilirken muhasebe ekibi sadece ERP sunucusuna erişmelidir.

User Management > Group Permissions bölümünden gruplar oluşturun. Ben tipik bir kurulumda şu grupları oluşturuyorum:

  • developers: Geniş ağ erişimi, 10.8.0.0/24 ve dahili subnet
  • finance: Sadece belirli IP’lere erişim
  • remote-workers: Tam tünel modu, tüm trafik VPN üzerinden

Grup bazlı routing için More Settings altında her grup için ayrı IP havuzları tanımlayabilirsiniz.

LDAP/Active Directory Entegrasyonu

Kurumsal ortamların büyük çoğunluğunda Active Directory veya LDAP altyapısı mevcuttur. OpenVPN AS’yi bu sistemlerle entegre etmek hem güvenliği artırır hem de kullanıcı yönetimini merkezi hale getirir.

Authentication > LDAP bölümüne gidin ve şu ayarları yapın:

# LDAP entegrasyonunu sacli ile de yapabilirsiniz
sudo /usr/local/openvpn_as/scripts/sacli --key "auth.module.type" 
  --value "ldap" ConfigPut

sudo /usr/local/openvpn_as/scripts/sacli --key "auth.ldap.0.server.0.host" 
  --value "192.168.1.10" ConfigPut

sudo /usr/local/openvpn_as/scripts/sacli --key "auth.ldap.0.server.0.port" 
  --value "636" ConfigPut

sudo /usr/local/openvpn_as/scripts/sacli --key "auth.ldap.0.use_ssl" 
  --value "true" ConfigPut

sudo /usr/local/openvpn_as/scripts/sacli --key "auth.ldap.0.base_dn" 
  --value "DC=sirket,DC=com,DC=tr" ConfigPut

# Değişiklikleri uygula
sudo /usr/local/openvpn_as/scripts/sacli start

LDAP bağlantısını test etmeden önce AD sunucusuna network erişimi olduğundan emin olun:

ldapsearch -H ldaps://192.168.1.10:636 -D "CN=vpn-service,OU=ServiceAccounts,DC=sirket,DC=com,DC=tr" 
  -w "ServisHesabiSifresi" -b "DC=sirket,DC=com,DC=tr" "(sAMAccountName=test.kullanici)"

Let’s Encrypt SSL Sertifikası Entegrasyonu

Self-signed sertifika ile çalışmak, kullanıcılarınızın her bağlantıda güvenlik uyarısı görmesi anlamına gelir. Bu durumu çözmek için Let’s Encrypt kullanabilirsiniz.

Önce domain adınızın sunucunuza pointing ettiğinden emin olun. Sonra Certbot’u kurun:

sudo apt install -y certbot

# Sertifika al (OpenVPN AS 443 portunu kullandığı için standalone mod yerine bu yöntemi kullan)
sudo systemctl stop openvpnas
sudo certbot certonly --standalone -d vpn.sirket.com.tr 
  --email [email protected] --agree-tos --no-eff-email
sudo systemctl start openvpnas

Sertifikayı OpenVPN AS’ye aktarın:

# Sertifika dosyalarını kopyala
sudo cp /etc/letsencrypt/live/vpn.sirket.com.tr/fullchain.pem 
  /usr/local/openvpn_as/etc/web-ssl/ca.crt
sudo cp /etc/letsencrypt/live/vpn.sirket.com.tr/cert.pem 
  /usr/local/openvpn_as/etc/web-ssl/server.crt
sudo cp /etc/letsencrypt/live/vpn.sirket.com.tr/privkey.pem 
  /usr/local/openvpn_as/etc/web-ssl/server.key

# Servisi yeniden başlat
sudo systemctl restart openvpnas

Sertifika yenileme işlemini otomatik hale getirmek için bir cron job veya systemd timer ekleyin:

# /etc/cron.d/certbot-openvpnas dosyasını oluştur
sudo tee /etc/cron.d/certbot-openvpnas << 'EOF'
0 3 * * 1 root certbot renew --pre-hook "systemctl stop openvpnas" 
  --post-hook "cp /etc/letsencrypt/live/vpn.sirket.com.tr/fullchain.pem 
  /usr/local/openvpn_as/etc/web-ssl/ca.crt && 
  cp /etc/letsencrypt/live/vpn.sirket.com.tr/cert.pem 
  /usr/local/openvpn_as/etc/web-ssl/server.crt && 
  cp /etc/letsencrypt/live/vpn.sirket.com.tr/privkey.pem 
  /usr/local/openvpn_as/etc/web-ssl/server.key && 
  systemctl start openvpnas" --quiet
EOF

İki Faktörlü Kimlik Doğrulama (MFA)

Günümüzde VPN erişiminde MFA artık bir lüks değil zorunluluktur. OpenVPN AS, Google Authenticator ve TOTP uyumlu uygulamalarla çalışan yerleşik MFA desteği sunar.

Authentication > TOTP Multi-Factor Authentication bölümünden MFA’yı etkinleştirin. Kullanıcıların ilk girişlerinde QR kod tarayarak Google Authenticator veya Authy’ye hesap eklemeleri gerekecek.

Belirli bir kullanıcı grubu için MFA’yı zorunlu kılmak istiyorsanız:

# Tüm kullanıcılar için MFA zorunlu
sudo /usr/local/openvpn_as/scripts/sacli --key "vpn.server.google_auth.enable" 
  --value "true" ConfigPut

# Belirli kullanıcı için MFA atla (servis hesapları için gerekebilir)
sudo /usr/local/openvpn_as/scripts/sacli --user "servis.hesabi" 
  --key "prop_google_auth_required" --value "false" UserPropPut

Backup ve Restore İşlemleri

Production ortamında backup almak hayat kurtarır. OpenVPN AS konfigürasyonunu komut satırından veya web arayüzünden yedekleyebilirsiniz.

# Konfigürasyonu yedekle
sudo /usr/local/openvpn_as/scripts/sacli --output /backup/openvpnas-backup-$(date +%Y%m%d).bz2 
  GetActiveWebCerts

# Tüm konfigürasyonu export et
sudo /usr/local/openvpn_as/scripts/sacli ConfigQuery > 
  /backup/openvpnas-config-$(date +%Y%m%d).json

# Veritabanını yedekle
sudo cp -r /usr/local/openvpn_as/etc/ /backup/openvpnas-etc-$(date +%Y%m%d)/

Restore işlemi için:

# Servisi durdur
sudo systemctl stop openvpnas

# Backup'tan geri yükle
sudo cp -r /backup/openvpnas-etc-20240115/ /usr/local/openvpn_as/etc/

# Servisi başlat
sudo systemctl start openvpnas

Backup işlemini otomatize etmek için basit bir script yazabilirsiniz:

#!/bin/bash
# /usr/local/bin/openvpnas-backup.sh

BACKUP_DIR="/var/backups/openvpnas"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=30

mkdir -p "$BACKUP_DIR"

# Konfigürasyon backup
sudo /usr/local/openvpn_as/scripts/sacli ConfigQuery > 
  "$BACKUP_DIR/config_$DATE.json"

# ETC dizinini sıkıştır
sudo tar -czf "$BACKUP_DIR/etc_$DATE.tar.gz" 
  /usr/local/openvpn_as/etc/ 2>/dev/null

# Eski backupları temizle
find "$BACKUP_DIR" -type f -mtime +$RETENTION_DAYS -delete

echo "Backup tamamlandi: $DATE"
ls -lh "$BACKUP_DIR"

İzleme ve Sorun Giderme

Log Analizi

OpenVPN AS logları birkaç farklı konumda tutulur:

# Anlık VPN bağlantılarını izle
sudo tail -f /var/log/openvpnas.log

# Kimlik doğrulama logları
sudo tail -f /usr/local/openvpn_as/etc/log/as.log

# Aktif bağlantıları listele
sudo /usr/local/openvpn_as/scripts/sacli VPNStatus

# Bağlı kullanıcıları göster
sudo /usr/local/openvpn_as/scripts/sacli --user "" VPNSummary

Belirli bir kullanıcının bağlantısını zorla kesmek gerekirse:

sudo /usr/local/openvpn_as/scripts/sacli --user "ali.yilmaz" DisconnectUser

Performans İzleme

Sistemin altında ezilip ezilmediğini anlamak için:

# Eşzamanlı bağlantı sayısını kontrol et
sudo /usr/local/openvpn_as/scripts/sacli VPNStatus | grep -c "common_name"

# CPU ve bellek kullanımını izle
ps aux | grep openvpn | grep -v grep

# Network arayüz istatistikleri
cat /proc/net/dev | grep -E "(tun|tap)"

Yaygın Sorunlar ve Çözümleri

Sorun: Kullanıcı bağlanıyor ama iç ağa erişemiyor.

IP forwarding’in etkin olduğunu kontrol edin:

cat /proc/sys/net/ipv4/ip_forward
# 1 çıkması gerekiyor

# Kalıcı olarak etkinleştir
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Sorun: Web paneline erişilemiyor.

Servis durumunu ve port dinlemesini kontrol edin:

sudo systemctl status openvpnas
sudo ss -tlnp | grep -E "(443|943|1194)"
sudo journalctl -u openvpnas -n 50 --no-pager

Sorun: LDAP kimlik doğrulaması çalışmıyor.

# LDAP bağlantısını test et
sudo /usr/local/openvpn_as/scripts/sacli --user "test.kullanici" 
  --password "TestSifresi" TestLdapBind

Güvenlik Sertleştirme Önerileri

Kurulum sonrasında yapmanız gereken güvenlik ayarları:

  • Admin UI portunu değiştirin: 943’ten farklı, öngörülmesi zor bir port seçin.
  • Admin erişimini kısıtlayın: Sadece belirli IP aralıklarından admin paneline erişim izin verin. Configuration > Network Settings > Admin Access bölümünden IP whitelist ekleyin.
  • Başarısız giriş limitini ayarlayın: Brute force saldırılarına karşı Authentication > General bölümünden maksimum giriş denemesi sayısını sınırlayın.
  • TLS 1.2 ve üstünü zorunlu kılın: Eski TLS sürümlerini devre dışı bırakın.
  • Perfect Forward Secrecy: Configuration > Advanced VPN bölümünden DH anahtar boyutunu 4096 bit olarak ayarlayın.
  • Sertifika süresini kısaltın: Kullanıcı sertifikaları için 1 yıl yerine 90 gün kullanın, bu şekilde ele geçirilen sertifikaların etkisi sınırlı kalır.
# TLS minimum versiyonunu ayarla
sudo /usr/local/openvpn_as/scripts/sacli --key "vpn.server.tls_version_min" 
  --value "1.2" ConfigPut

# Zayıf cipher'ları devre dışı bırak
sudo /usr/local/openvpn_as/scripts/sacli --key "vpn.server.cipher" 
  --value "AES-256-GCM" ConfigPut

sudo /usr/local/openvpn_as/scripts/sacli start

Sonuç

OpenVPN Access Server, özellikle IT ekibi küçük olan kurumlar için VPN yönetimini ciddi ölçüde kolaylaştırıyor. Web arayüzü sayesinde teknik olmayan personel bile temel kullanıcı işlemlerini yapabilir hale geliyor.

Ücretsiz 2 bağlantı limiti kişisel kullanım veya küçük ekipler için yeterli olsa da kurumsal kullanımda lisans maliyetini göz önünde bulundurmanız gerekiyor. Büyük ölçekli dağıtımlar için community edition OpenVPN veya WireGuard tabanlı çözümler maliyet açısından daha avantajlı olabilir.

Bu yazıda anlattığım kurulumu production’a almadan önce test ortamında mutlaka deneyin, özellikle LDAP entegrasyonu ve MFA kısmında ince detaylar kurumdan kuruma farklılık gösterebilir. Herhangi bir sorunla karşılaşırsanız yorumlarda belirtebilirsiniz.

Bir yanıt yazın

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