OpenVPN Kurulumu ve Yapılandırması: Ubuntu Sunucular İçin Güvenli VPN Rehberi
📝 Bu rehberde ne öğreneceksiniz?
Bu rehberde, Ubuntu tabanlı bir Sanal Örnek (VPS/Droplet) üzerinde:
- OpenVPN sunucusunu baştan sona kurmayı,
- Ayrı bir CA (Sertifika Yetkilisi) sunucusu ile sertifikaları yönetmeyi,
- ECC, AES-256-GCM ve tls-crypt gibi modern şifreleme ayarlarını etkinleştirmeyi,
- Windows, macOS, Linux, iOS ve Android istemciler için tek dosyalık .ovpn profilleri oluşturmayı öğreneceksiniz.
Odak anahtar kelime: OpenVPN kurulumu
🧠 Teknik Özet (Aşama 1)
| Alan | Açıklama |
|---|---|
| Ana Teknik Konu | Ubuntu sunucularda OpenVPN tabanlı sanal özel ağ (VPN) kurulumu ve yapılandırması. |
| Çözülen Problem | Güvenilmeyen ağlarda (otel, kafe Wi-Fi) şifreli tünel oluşturarak güvenli internet erişimi sağlamak. |
| Kullanılan Teknolojiler | OpenVPN, Easy-RSA 3, PKI, ECC, TLS-Crypt, AES-256-GCM, UFW ile NAT/masquerading. |
| Kullanıcı Adımları | OpenVPN ve Easy-RSA kurulumu, PKI oluşturma, sunucu ve istemci sertifikaları, tls-crypt, server.conf, IP forwarding, UFW, servis başlatma, istemci profilleri. |
🔐 OpenVPN ve VPN mimarisini anlamak
Bir VPN (Sanal Özel Ağ), güvensiz ağlar üzerinden verinizi şifreleyerek taşır.
Böylece otel, kafe veya misafir Wi-Fi ağında bile güvenle gezinebilirsiniz.
OpenVPN, TLS tabanlı, açık kaynak ve esnek bir VPN çözümüdür.
Ubuntu ekosistemiyle uyumludur ve güçlü güvenlik seçenekleri sunar.
Bu mimaride üç bileşenimiz var:
- OpenVPN Sunucusu – Ubuntu üzerinde çalışan VPN sunucunuz.
- CA Sunucusu – Sertifika üretip imzalayan ayrı Ubuntu sunucusu.
- OpenVPN İstemcisi – Yerel bilgisayarınız veya mobil cihazınız.
Örnek isimler:
- OpenVPN Sunucusu:
tr-vpn-01.rabisu.cloud - CA Sunucusu:
tr-ca-01.rabisu.cloud
📋 Ön Gereksinimler
Bu rehber için aşağıdaki altyapıya ihtiyacınız var:
-
OpenVPN Sunucusu (örnek: tr-vpn-01)
- Ubuntu 22.04, 24.04 veya 25.04
sudoyetkisine sahip, root olmayan kullanıcı- Etkin güvenlik duvarı (örnek:
ufw)
-
CA (Sertifika Yetkilisi) Sunucusu (örnek: tr-ca-01)
- Ayrı bir Ubuntu Sunucu
- Aynı şekilde
sudoyetkili kullanıcı - Easy-RSA ile CA kurulumu yapılmış olmalı
Güvenlik Notu: CA ve VPN sunucusunu aynı makinede tutmak önerilmez.
CA anahtarı ele geçirilirse tüm VPN altyapınız tehlikeye girer.
- OpenVPN İstemcisi
- Yerel bilgisayarınız veya mobil cihazınız
- Bu cihaz, oluşturacağınız
.ovpnprofili ile VPN’e bağlanacak.
🚀 Adım 1 – OpenVPN ve Easy-RSA Kurulumu
sudo apt update
sudo apt install openvpn easy-rsa
mkdir ~/easy-rsa
ln -s /usr/share/easy-rsa/* ~/easy-rsa/
sudo chown $USER ~/easy-rsa
chmod 700 ~/easy-rsa
🧩 Adım 2 – PKI Oluşturma
cd ~/easy-rsa
nano vars
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"
./easyrsa init-pki
🔑 Adım 3 – Sunucu CSR ve Private Key
cd ~/easy-rsa
./easyrsa gen-req server nopass
sudo cp pki/private/server.key /etc/openvpn/server/
🏛️ Adım 4 – CA Sunucusunda Sertifika İmzalama
VPN Sunucusundan:
scp pki/reqs/server.req $USER@CA_IP:/tmp
CA Sunucusunda:
cd ~/easy-rsa
./easyrsa import-req /tmp/server.req server
./easyrsa sign-req server server
Sertifikaları geri gönderin:
scp pki/issued/server.crt $USER@VPN_IP:/tmp
scp pki/ca.crt $USER@VPN_IP:/tmp
VPN Sunucusunda:
sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/server
🛡️ Adım 5 – TLS-Crypt Anahtarı
cd ~/easy-rsa
openvpn --genkey --secret ta.key
sudo cp ta.key /etc/openvpn/server
👥 Adım 6 – İstemci Sertifikası ve Anahtarı
mkdir -p ~/client-configs/keys
chmod -R 700 ~/client-configs
cd ~/easy-rsa
./easyrsa gen-req client1 nopass
cp pki/private/client1.key ~/client-configs/keys/
CSR’yi CA’ya gönderin:
scp pki/reqs/client1.req $USER@CA_IP:/tmp
CA tarafında imzalayın:
./easyrsa import-req /tmp/client1.req client1
./easyrsa sign-req client client1
Geri aktarın:
scp pki/issued/client1.crt $USER@VPN_IP:/tmp
VPN’de toplayın:
cp /tmp/client1.crt ~/client-configs/keys/
cp ~/easy-rsa/ta.key ~/client-configs/keys/
sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/
sudo chown $USER:$USER ~/client-configs/keys/*
⚙️ Adım 7 – server.conf Yapılandırması
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server/
sudo gunzip /etc/openvpn/server/server.conf.gz
sudo nano /etc/openvpn/server/server.conf
Aşağıdaki ayarları yapın:
tls-crypt ta.key
cipher AES-256-GCM
auth SHA256
dh none
user nobody
group nogroup
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
🌐 Adım 8 – IP Forwarding
sudo nano /etc/sysctl.conf
net.ipv4.ip_forward = 1
sudo sysctl -p
🔥 Adım 9 – UFW NAT Yapılandırması Arayüz adını öğrenin:
ip route list default
UFW before.rules açın:
sudo nano /etc/ufw/before.rules
Ekleyin:
# START OPENVPN RULES
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/24 -o arac_adi -j MASQUERADE
COMMIT
# END OPENVPN RULES
Policy değiştirin:
sudo nano /etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
Port açın:
sudo ufw allow 1194/udp
sudo ufw disable
sudo ufw enable
🔁 Adım 10 – OpenVPN Servisini Başlatma
sudo systemctl -f enable [email protected]
sudo systemctl start [email protected]
sudo systemctl status [email protected]
🧱 Adım 11 – İstemci Yapılandırma Altyapısı (base.conf + Script)
İstemci başına farklı .ovpn dosyası gerekir. Her şeyi otomatikleştirmek için bir şablon ve bir script kullanacağız.
İstemci dosyaları için dizin oluşturun:
mkdir -p ~/client-configs/files
Örnek istemci yapılandırmasını kopyalayın:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
Düzenlemek için açın:
nano ~/client-configs/base.conf
Sunucu adresi ve port
remote satırını kendi alan adınız veya IP’nizle değiştirin:
remote tr-vpn-01.rabisu.cloud 1194
Protokol satırı sunucu ile aynı olmalı:
proto udp
Yetki düşürme ve sertifika satırlarını gömme
Şu satırları aktif edin:
user nobody
group nogroup
Sertifika ve anahtar dosyası yollarını yorum satırı yapın:
;ca ca.crt
;cert client.crt
;key client.key
;tls-auth ta.key 1
Şifreleme ve HMAC ayarlarını eşleştirme
Sunucu ile aynı olacak şekilde:
cipher AES-256-GCM
auth SHA256
key-direction 1
DNS scriptleri için satırları hazırlama
Linux istemciler için ileride kullanılacak satırları ekleyip yorum satırı bırakın:
; script-security 2
; up /etc/openvpn/update-resolv-conf
; down /etc/openvpn/update-resolv-conf
ve systemd-resolved kullananlar için:
; script-security 2
; up /etc/openvpn/update-systemd-resolved
; down /etc/openvpn/update-systemd-resolved
; down-pre
; dhcp-option DOMAIN-ROUTE .
Dosyayı kaydedip kapatın.
🧮 Adım 12 – make_config.sh ile .ovpn Dosyası Üretimi
Şimdi istemci sertifika ve anahtarlarını tek .ovpn dosyasına gömecek scripti yazalım.
Script dosyasını oluşturun:
nano ~/client-configs/make_config.sh
İçine şu içeriği ekleyin:
#!/bin/bash
# First argument: Client identifier
KEY_DIR=~/client-configs/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
cat ${BASE_CONFIG} \
<(echo -e '<ca>') \
${KEY_DIR}/ca.crt \
<(echo -e '</ca>\n<cert>') \
${KEY_DIR}/${1}.crt \
<(echo -e '</cert>\n<key>') \
${KEY_DIR}/${1}.key \
<(echo -e '</key>\n<tls-crypt>') \
${KEY_DIR}/ta.key \
<(echo -e '</tls-crypt>') \
> ${OUTPUT_DIR}/${1}.ovpn
Scripti çalıştırılabilir yapın:
chmod 700 ~/client-configs/make_config.sh
client1 için .ovpn üretmek için:
cd ~/client-configs
./make_config.sh client1
Sonuç, ~/client-configs/files/client1.ovpn dosyası olacaktır. İstemciye sadece bu dosyayı iletmeniz yeterlidir.
📦 Adım 13 – İstemciye .ovpn Gönderme
Dosyayı yerel makinenize SFTP ile çekebilirsiniz:
sftp sammy@VPN_IP:client-configs/files/client1.ovpn ~/
🧪 Adım 14 – VPN Bağlantısını Test Etme (İsteğe Bağlı)
Tüm trafiği VPN üzerinden yönlendirdiyseniz bağlantıyı test edebilirsiniz.
-
VPN kapalıyken https://dnsleaktest.com benzeri bir siteye gidin.
-
IP adresinizi ve DNS sunucularınızı not alın.
-
VPN’e bağlanın ve sayfayı yenileyin.
-
IP adresiniz artık VPN Sunucusuna ait olmalıdır.
-
Geniş testte DNS’in de VPN üzerinden geldiğini doğrulayın.
Bu test, OpenVPN kurulumunuzun doğru çalıştığını gösterir.
🧨 Adım 15 – Sertifika İptali
Bir istemcinin erişimini kapatmak için sertifikasını iptal etmeniz gerekir.
CA Sunucusunda:
./easyrsa revoke client1
./easyrsa gen-crl
CRL dosyasını VPN'e gönderin:
scp pki/crl.pem $USER@VPN_IP:/tmp
sudo cp /tmp/crl.pem /etc/openvpn/server/
server.conf'a ekleyin:
crl-verify crl.pem
Restart:
sudo systemctl restart [email protected]
🎉 Sonuç
Ubuntu üzerinde:
Güvenli bir OpenVPN sunucusu kurdunuz,
Ayrı CA ile sertifikaları yönettiniz,
ECC, AES-256-GCM ve tls-crypt kullandınız,
Tüm platformlar için tek dosyalık .ovpn profilleri oluşturdunuz.
Güvenli VPN altyapınızı artık istediğiniz gibi özelleştirebilir ve Rabisu Bulut üzerinde rahatça kullanabilirsiniz! 🚀