Uzaktan çalışan bir ekip, ofisteki iç ağa erişmesi gereken bir geliştirici ya da sunucularını yalnızca güvenli bir tünel üzerinden yönetmek isteyen bir sistem yöneticisi — hepsinin ortak ihtiyacı, internetin güvenilmez ortamı içinden şifreli ve kimliği doğrulanmış bir kanal açmaktır. Ticari VPN servislerine abone olmak yerine kendi sunucunuza kuracağınız bir VPN, hem trafiğin tamamen sizin kontrolünüzde olmasını sağlar hem de dilediğiniz ağ topolojisini kurmanıza izin verir. İşte bu noktada OpenVPN, yıllardır kanıtlanmış olgunluğu ve neredeyse her platformda çalışan istemcileriyle en güvenilir seçeneklerden biri olarak öne çıkar.
Bu rehberde OpenVPN'in ne olduğunu, neden sertifika tabanlı bir kimlik doğrulama mimarisi kullandığını ve bir Ubuntu/Debian sunucuda sıfırdan çalışan bir VPN sunucusunu nasıl kuracağınızı adım adım göreceğiz. PKI (Açık Anahtar Altyapısı) üretiminden başlayıp sunucu yapılandırmasına, güvenlik duvarı ve NAT kurallarına, istemci .ovpn profili oluşturmaya ve WireGuard ile kısa bir karşılaştırmaya kadar tüm zinciri ele alacağız. Amacımız komutları körlemesine kopyalamanız değil, her adımın neden var olduğunu anlayarak kendi ortamınıza güvenle uyarlayabilmeniz.
OpenVPN Nedir ve Nasıl Çalışır?#
OpenVPN, TLS/SSL protokolünü temel alan, açık kaynaklı bir VPN yazılımıdır. Kendi sunucunuz ile istemcileriniz arasında şifreli bir tünel kurar; bu tünelin içinden geçen tüm trafik, dışarıdan bakan biri için anlamsız bir veri akışına dönüşür. OpenVPN'i benzerlerinden ayıran en önemli özellik, kullanıcı alanında (user-space) çalışması ve TLS'in tüm olgun kriptografik altyapısını doğrudan kullanmasıdır. Bu sayede sertifika doğrulaması, anahtar değişimi ve şifreleme için yıllardır savaşta sınanmış OpenSSL kütüphanesinden yararlanır.
OpenVPN iki temel çalışma modu sunar. TUN modu Layer 3 (IP) seviyesinde çalışır ve yönlendirme (routing) yaparak istemcilere ayrı bir alt ağ verir — uzaktan erişim VPN'leri için standart tercih budur. TAP modu ise Layer 2 (Ethernet) seviyesinde köprüleme (bridging) yapar ve istemciyi fiziksel olarak aynı ağdaymış gibi gösterir; ancak daha fazla broadcast trafiği ürettiği için genellikle yalnızca özel senaryolarda kullanılır. Bu rehberde en yaygın ve verimli seçenek olan TUN modunu kuracağız.
Taşıma katmanında OpenVPN, UDP veya TCP üzerinden çalışabilir. UDP daha düşük gecikme sunduğu ve VPN trafiği için doğal seçim olduğu için varsayılan olarak 1194/udp portu kullanılır. Ancak kısıtlı ağlarda (örneğin yalnızca 443 portunun açık olduğu kurumsal güvenlik duvarlarının arkasında) TCP 443 üzerinden çalıştırarak trafiği normal HTTPS gibi göstermek mümkündür.
Sertifika Tabanlı Kimlik Doğrulama Neden Önemli?#
OpenVPN'de kimlik doğrulamanın kalbi bir PKI (Public Key Infrastructure) yapısıdır. Basit bir parola yerine, her istemciye kendine ait bir özel anahtar ve bunu imzalayan bir sertifika verilir. Bu yaklaşımın klasik kullanıcı adı/parola yöntemine göre birkaç kritik üstünlüğü vardır: sertifikalar tahmin edilemez, brute-force saldırılarına karşı dayanıklıdır ve bir istemcinin erişimini iptal etmek için yalnızca ilgili sertifikayı iptal listesine (CRL) eklemeniz yeterlidir.
Sistemde üç tür bileşen bulunur. CA (Certificate Authority), tüm sertifikaları imzalayan kök otoritedir ve özel anahtarı asla sunucuya bile kopyalanmamalıdır — ideal olarak izole, çevrimdışı bir makinede saklanır. Sunucu sertifikası, istemcilerin doğru sunucuya bağlandığını doğrular. İstemci sertifikaları ise her kullanıcıyı benzersiz şekilde tanımlar. Bu üçlü yapı sayesinde hem sunucu istemciyi hem de istemci sunucuyu karşılıklı olarak doğrular; bu "mutual TLS" yaklaşımı ortadaki adam saldırılarını (MITM) etkili biçimde engeller.
Aşağıdaki tablo, iki kimlik doğrulama yaklaşımını karşılaştırıyor:
| Özellik | Parola Tabanlı | Sertifika Tabanlı |
|---|---|---|
| Brute-force direnci | Zayıf | Çok güçlü |
| Erişim iptali | Parola değiştirme | Sertifika iptali (CRL) |
| Karşılıklı doğrulama | Yok | Var (mTLS) |
| Kurulum karmaşıklığı | Basit | Orta |
| Ölçeklenebilirlik | Kısıtlı | Yüksek |
Sertifika üretimini elle openssl komutlarıyla yapmak mümkün olsa da hataya çok açıktır. Bunun yerine, OpenVPN projesinin bakımını üstlendiği easy-rsa aracını kullanacağız — PKI kurmayı birkaç komuta indiren, sektörde standart hâline gelmiş bir betik seti.
PKI ve Sertifikaların easy-rsa ile Üretilmesi#
Öncelikle gerekli paketleri kuralım. Ubuntu 22.04/24.04 veya Debian 12 üzerinde:
sudo apt update
sudo apt install openvpn easy-rsa -y
Şimdi bir PKI çalışma dizini oluşturup easy-rsa betiklerini buraya bağlayalım:
make-cadir ~/openvpn-ca
cd ~/openvpn-ca
vars dosyasını düzenleyerek kurumunuza ait varsayılan alanları belirleyebilirsiniz. Bu adım zorunlu değildir ama sertifika üretiminde tekrar tekrar soru sorulmasını engeller:
# ~/openvpn-ca/vars
set_var EASYRSA_REQ_COUNTRY "TR"
set_var EASYRSA_REQ_PROVINCE "Istanbul"
set_var EASYRSA_REQ_CITY "Istanbul"
set_var EASYRSA_REQ_ORG "Ornek Sirket"
set_var EASYRSA_REQ_EMAIL "[email protected]"
set_var EASYRSA_REQ_OU "IT"
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_CURVE "prime256v1"
Burada dikkat çeken satır EASYRSA_ALGO "ec" — modern kurulumlarda RSA yerine eliptik eğri (ECC) anahtarlar tercih edilir; çünkü aynı güvenlik seviyesini çok daha küçük anahtar boyutuyla ve daha hızlı el sıkışmayla sağlarlar. Şimdi PKI'yı başlatıp CA'yı oluşturalım:
./easyrsa init-pki
./easyrsa build-ca nopass
build-ca komutu sizden bir "Common Name" isteyecektir; buraya anlamlı bir isim (örneğin Ornek-VPN-CA) girin. Üretim ortamında nopass yerine parolalı bir CA anahtarı tercih edebilirsiniz. Ardından sunucu sertifikasını üretip imzalıyoruz:
./easyrsa build-server-full server nopass
Şimdi ilk istemcimizin sertifikasını oluşturalım. Her kullanıcı için bu adımı benzersiz bir isimle tekrarlayacaksınız:
./easyrsa build-client-full ahmet-laptop nopass
Son olarak, ileri güvenlik gizliliği (Perfect Forward Secrecy) için el sıkışma anlarına ek bir katman ekleyen ve DDoS/kimlik doğrulama sağlamlaştırması sunan iki dosyayı üretelim. ta.key, TLS öncesi bir HMAC imzası ekleyerek yetkisiz paketleri daha el sıkışma başlamadan reddeder:
openvpn --genkey secret ta.key
Bu aşamanın sonunda pki/ca.crt, pki/issued/server.crt, pki/private/server.key ve ta.key dosyalarınız hazır olacak. Bunları OpenVPN'in yapılandırma dizinine kopyalayalım:
sudo cp pki/ca.crt pki/issued/server.crt pki/private/server.key ta.key /etc/openvpn/server/
Sunucu Yapılandırma Dosyasının Hazırlanması#
OpenVPN sunucusu, /etc/openvpn/server/server.conf dosyasındaki yönergelere göre çalışır. Aşağıda üretime uygun, güvenli varsayılanlarla hazırlanmış örnek bir yapılandırma yer alıyor. Her satırın yanına ne işe yaradığını yorum olarak ekledim:
# /etc/openvpn/server/server.conf
port 1194
proto udp
dev tun
# Sertifika ve anahtarlar
ca ca.crt
cert server.crt
key server.key
# TLS sağlamlaştırması
tls-crypt ta.key
dh none
# Şifreleme ayarları (modern, AEAD)
cipher AES-256-GCM
auth SHA256
tls-version-min 1.2
# İstemcilere dağıtılacak alt ağ
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
# Tüm istemci trafiğini VPN üzerinden yönlendir
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 9.9.9.9"
# Bağlantı canlılığı
keepalive 10 120
# Ayrıcalık düşürme (güvenlik)
user nobody
group nogroup
persist-key
persist-tun
# Loglama
status /var/log/openvpn/status.log
log-append /var/log/openvpn/openvpn.log
verb 3
# İstemci başına ayrı süreç/anahtar
explicit-exit-notify 1
Birkaç kritik ayara dikkat edelim. tls-crypt ta.key yönergesi, eski tls-auth'un yerini alan ve HMAC imzasına ek olarak kontrol kanalını da şifreleyen daha güçlü bir seçenektir. cipher AES-256-GCM modern bir AEAD şifreleme modudur; hem şifreleme hem bütünlük doğrulamasını tek adımda yapar. push "redirect-gateway def1" satırı, istemcinin tüm internet trafiğini VPN üzerinden akıtır — eğer yalnızca belirli bir iç ağa erişim istiyorsanız bu satırı kaldırıp bunun yerine push "route 192.168.10.0 255.255.255.0" gibi hedefe özel bir rota gönderirsiniz.
Yapılandırma hazır olduğunda log dizinini oluşturup servisi başlatalım:
sudo mkdir -p /var/log/openvpn
sudo systemctl enable --now openvpn-server@server
sudo systemctl status openvpn-server@server
Active: active (running) çıktısını görüyorsanız sunucu ayakta demektir. Herhangi bir hata durumunda sudo journalctl -u openvpn-server@server -n 50 komutuyla son log satırlarını inceleyebilirsiniz.
IP Yönlendirme, Güvenlik Duvarı ve NAT Ayarları#
VPN sunucusunun istemci trafiğini internete taşıyabilmesi için Linux çekirdeğinde IP yönlendirmenin açık olması gerekir. Bu kalıcı olarak şöyle etkinleştirilir:
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-openvpn.conf
sudo sysctl --system
Ardından, 10.8.0.0/24 alt ağından gelen paketlerin sunucunun genel IP'si üzerinden dışarı çıkabilmesi için bir NAT (masquerade) kuralı gerekir. UFW kullanıyorsanız, kuralları /etc/ufw/before.rules dosyasının en üstüne ekleyin:
# /etc/ufw/before.rules (en üste, *filter satırından önce)
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMIT
Buradaki eth0 sunucunuzun internete bakan arayüzüdür; ip route get 1.1.1.1 komutuyla doğru arayüz adını teyit edin. Sonra VPN portunu ve yönlendirme politikasını açalım:
sudo ufw allow 1194/udp
sudo ufw route allow in on tun0 out on eth0
# /etc/default/ufw içinde DEFAULT_FORWARD_POLICY="ACCEPT" olmalı
sudo ufw reload
Güvenlik duvarı yönetimini daha önce hiç yapmadıysanız, temel mantığı öğrenmek için UFW ile güvenlik duvarı yapılandırma rehberimizi okumanızı öneririm — kendinizi sunucudan kilitlememek için özellikle SSH kuralının VPN kurallarından önce eklenmiş olduğundan emin olun. Alternatif olarak iptables ile tek satırda da NAT kuralı ekleyebilirsiniz:
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Bu kuralın yeniden başlatmada kalıcı olması için iptables-persistent paketini kurup kuralları kaydetmeyi unutmayın. Ayrıca sunucunuzu yönettiğiniz SSH bağlantısının VPN'den bağımsız çalışmaya devam ettiğinden emin olun; SSH güvenliğini sıkılaştırmak için SSH bağlantısı ve güvenliği rehberindeki adımları uygulamanızı tavsiye ederim.
İstemci .ovpn Profilinin Oluşturulması#
İstemcinin sunucuya bağlanabilmesi için beş dosyaya ihtiyacı vardır: CA sertifikası, kendi sertifikası, kendi özel anahtarı, tls-crypt anahtarı ve bağlantı ayarları. Bunları tek bir taşınabilir .ovpn dosyasında birleştirmek, dağıtımı çok kolaylaştırır. Aşağıdaki gibi bir şablon oluşturun:
# base-client.conf
client
dev tun
proto udp
remote SUNUCU_GENEL_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-GCM
auth SHA256
verb 3
Şimdi tüm sertifikaları bu şablonun içine gömen küçük bir betikle her istemci için hazır profil üretelim:
#!/bin/bash
# make-client.sh — kullanım: ./make-client.sh ahmet-laptop
CLIENT="$1"
BASE=~/openvpn-ca
KEYDIR=$BASE/pki
OUT=~/client-configs/${CLIENT}.ovpn
mkdir -p ~/client-configs
cat base-client.conf > "$OUT"
echo -e "<ca>\n$(cat $KEYDIR/ca.crt)\n</ca>" >> "$OUT"
echo -e "<cert>\n$(cat $KEYDIR/issued/${CLIENT}.crt)\n</cert>" >> "$OUT"
echo -e "<key>\n$(cat $KEYDIR/private/${CLIENT}.key)\n</key>" >> "$OUT"
echo -e "<tls-crypt>\n$(cat $BASE/ta.key)\n</tls-crypt>" >> "$OUT"
echo "Profil oluşturuldu: $OUT"
Betiği çalıştırdıktan sonra elde ettiğiniz tek dosyayı güvenli bir kanaldan (örneğin scp veya şifreli bir mesajlaşma uygulaması) kullanıcıya iletirsiniz. Bu dosya özel anahtar içerdiği için e-posta gibi güvensiz kanallardan gönderilmemelidir. İstemci tarafında bağlantı şu kadar basittir:
# Linux istemci
sudo openvpn --config ahmet-laptop.ovpn
# Windows / macOS'ta OpenVPN Connect uygulamasına .ovpn dosyasını içe aktarın
# Android / iOS'ta OpenVPN Connect uygulaması aynı .ovpn dosyasını okur
Bağlantı kurulduğunda istemci 10.8.0.x aralığından bir IP alır ve ip addr show tun0 çıktısında bunu görebilirsiniz. curl ifconfig.me komutu artık sunucunuzun genel IP'sini döndürüyorsa, tüm trafik başarıyla tünelden geçiyor demektir.
Sertifika İptali ve Kullanıcı Yönetimi#
Bir çalışan işten ayrıldığında ya da bir cihaz kaybolduğunda, o istemcinin erişimini anında kesmeniz gerekir. Parola tabanlı sistemlerde bu zahmetliyken sertifika tabanlı mimaride tek komutla halledilir. İlgili sertifikayı iptal edip güncel bir CRL (Certificate Revocation List) üretin:
cd ~/openvpn-ca
./easyrsa revoke ahmet-laptop
./easyrsa gen-crl
sudo cp pki/crl.pem /etc/openvpn/server/
Sunucu yapılandırmanıza crl-verify crl.pem satırını ekleyip servisi yeniden başlattığınızda, iptal edilen sertifikaya sahip istemci artık bağlanamaz. CRL'nin belirli aralıklarla güncellenmesi ve sunucuya kopyalanması iyi bir alışkanlıktır; bunu bir cron görevine bağlayabilirsiniz. Yeni kullanıcı eklemek ise yalnızca build-client-full komutunu yeni bir isimle çalıştırıp ardından profil betiğini koşturmaktan ibarettir — mimarinin ölçeklenebilirliği tam da buradan gelir.
OpenVPN ile WireGuard Karşılaştırması#
Son yıllarda WireGuard, modern çekirdek entegrasyonu ve sade kod tabanıyla hızla popülerleşti. Peki hangisini seçmelisiniz? Kısa cevap: ihtiyacınıza bağlı. Aşağıdaki tablo iki teknolojinin temel farklarını özetliyor:
| Kriter | OpenVPN | WireGuard |
|---|---|---|
| Protokol temeli | TLS/SSL | Özel (Noise protokolü) |
| Performans | İyi | Çok yüksek (çekirdek içi) |
| Kod tabanı boyutu | ~100.000+ satır | ~4.000 satır |
| Kimlik doğrulama | Sertifika (PKI) | Açık anahtar çiftleri |
| Güvenlik duvarı gizleme | Güçlü (TCP 443) | Zayıf (yalnızca UDP) |
| Platform desteği | Çok geniş, olgun | Geniş, hızla artıyor |
| Kurulum karmaşıklığı | Orta-yüksek | Düşük |
OpenVPN'i tercih edin — kısıtlayıcı güvenlik duvarlarını aşmanız gerekiyorsa (TCP 443 ile HTTPS taklidi), olgun bir PKI ve merkezi kullanıcı yönetimi istiyorsanız ya da çok çeşitli eski istemcileri desteklemeniz gerekiyorsa. WireGuard'ı tercih edin — en yüksek ham performansı ve en düşük gecikmeyi istiyorsanız, basit bir noktadan noktaya bağlantı kuruyorsanız ve trafiği gizleme ihtiyacınız yoksa. Pek çok kurumsal senaryoda OpenVPN'in esnekliği ve güvenlik duvarı dostu yapısı hâlâ onu vazgeçilmez kılıyor; performans kritikse ve altyapınız modern ise WireGuard güçlü bir alternatiftir.
Sıkça Sorulan Sorular#
OpenVPN kurmak için nasıl bir sunucuya ihtiyacım var?#
OpenVPN oldukça hafif bir uygulamadır ve birkaç kullanıcı için 1 vCPU ile 1 GB RAM'e sahip mütevazı bir sanal sunucu bile fazlasıyla yeterlidir. Şifreleme yükü esas olarak eşzamanlı bağlantı sayısıyla ve toplam bant genişliğiyle artar; onlarca kullanıcıya hizmet verecekseniz 2 vCPU ve AES donanım hızlandırması sunan bir işlemci belirgin fark yaratır. Kök (root) erişimine sahip olduğunuz bir VDS ya da sanal sunucu ideal bir başlangıç noktasıdır, çünkü paylaşımlı hosting ortamlarında çekirdek modüllerine ve TUN cihazına erişim genellikle mümkün değildir.
UDP mi yoksa TCP mi kullanmalıyım?#
Varsayılan ve önerilen seçenek UDP'dir, çünkü daha düşük gecikme sağlar ve VPN gibi kendi güvenilirlik mekanizmasına sahip bir protokol için "TCP üzerinde TCP" sorununu önler. TCP'yi yalnızca UDP trafiğinin engellendiği kısıtlı ağlarda kullanmalısınız; özellikle port 443 üzerinden TCP çalıştırmak, VPN trafiğinizi normal HTTPS gibi göstererek katı güvenlik duvarlarını aşmanıza yardımcı olur. İdeal bir kurulum, aynı anda hem 1194/udp hem de 443/tcp dinleyen iki OpenVPN örneğini birlikte çalıştırmaktır.
İstemci bağlanıyor ama internete çıkamıyorsa sorun nedir?#
Bu, OpenVPN kurulumlarında en sık karşılaşılan durumdur ve neredeyse her zaman yönlendirme veya NAT ile ilgilidir. Önce sysctl net.ipv4.ip_forward çıktısının 1 olduğunu doğrulayın; ardından güvenlik duvarında 10.8.0.0/24 alt ağı için MASQUERADE kuralının doğru dış arayüz adıyla eklendiğinden emin olun. Çoğu zaman sorun, kuralda eth0 yazarken sunucunun arayüzünün aslında ens3 veya enp1s0 olmasından kaynaklanır; ip route get 1.1.1.1 komutu doğru arayüz adını size gösterir.
Sertifikaları kaybedersem ne yapmalıyım?#
CA'nın özel anahtarını (pki/private/ca.key) kaybederseniz artık yeni istemci sertifikası üretemez veya mevcutları iptal edemezsiniz; bu durumda tüm PKI'yı sıfırdan kurup her istemciye yeni profil dağıtmanız gerekir. Bu yüzden CA anahtarını sunucu dışında, şifreli ve yedeklenmiş bir ortamda saklamak kritik önemdedir. Tek bir istemcinin anahtarını kaybetmek ise ciddi bir sorun değildir — ilgili sertifikayı iptal edip o kullanıcı için yeni bir sertifika ve profil oluşturmanız yeterlidir.
OpenVPN bağlantımı gerçekten güvenli hale getirir mi?#
OpenVPN, doğru yapılandırıldığında istemci ile sunucu arasındaki trafiği güçlü şifreleme (AES-256-GCM) ve karşılıklı sertifika doğrulaması ile korur; yani bağlantınızı dinleyen biri yalnızca anlamsız veri görür. Ancak VPN yalnızca sunucunuza kadar olan yolu şifreler — sunucunuzdan sonraki internet trafiği yine açık akar, dolayısıyla ziyaret ettiğiniz sitelerin HTTPS kullanması hâlâ önemlidir. Ayrıca sunucunuzun kendisini sertleştirmeyi ihmal etmeyin; güncel bir çekirdek, sıkı bir güvenlik duvarı ve minimum yetki prensibi olmadan VPN tek başına tam güvenlik sağlamaz.
Kapanış#
OpenVPN, kendi altyapınız üzerinde tam kontrol sahibi olduğunuz, sertifika tabanlı güçlü kimlik doğrulama ile korunan ve neredeyse her cihazdan erişilebilen olgun bir VPN çözümüdür. Bu rehberde PKI üretiminden sunucu yapılandırmasına, NAT ve güvenlik duvarı kurallarından taşınabilir .ovpn profillerine kadar üretime hazır bir kurulumun tüm zincirini kurduk. Buradaki en önemli ilke, her adımın arkasındaki mantığı anlamanız — böylece kendi ağ topolojinize, ister uzaktan erişim ister siteler arası tünel olsun, güvenle uyarlayabilirsiniz.
Kök erişimine sahip, kararlı ve yüksek bant genişlikli bir sunucu, sağlam bir VPN altyapısının temelidir. Clou.TR olarak kendi VPN sunucunuzu kurabileceğiniz VDS ve sanal sunucu paketlerimizin yanında, kurulum ve sertleştirmeyi sizin yerinize üstlenen sunucu yönetimi hizmetimizle de yanınızdayız. Sunucunuzu ek katmanlarla güçlendirmek isterseniz DDoS koruma ve yedekleme çözümlerimize göz atabilir, tüm ürün yelpazemizi keşfetmek için sunucu sayfamızı ziyaret edebilirsiniz.