Skip to main content

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)

AlanAçıklama
Ana Teknik KonuUbuntu sunucularda OpenVPN tabanlı sanal özel ağ (VPN) kurulumu ve yapılandırması.
Çözülen ProblemGüvenilmeyen ağlarda (otel, kafe Wi-Fi) şifreli tünel oluşturarak güvenli internet erişimi sağlamak.
Kullanılan TeknolojilerOpenVPN, 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:

  1. OpenVPN Sunucusu (örnek: tr-vpn-01)

    • Ubuntu 22.04, 24.04 veya 25.04
    • sudo yetkisine sahip, root olmayan kullanıcı
    • Etkin güvenlik duvarı (örnek: ufw)
  2. CA (Sertifika Yetkilisi) Sunucusu (örnek: tr-ca-01)

    • Ayrı bir Ubuntu Sunucu
    • Aynı şekilde sudo yetkili 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.

  1. OpenVPN İstemcisi
    • Yerel bilgisayarınız veya mobil cihazınız
    • Bu cihaz, oluşturacağınız .ovpn profili 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! 🚀