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.
