Ubuntu 22.04 Üzerine OpenVPN Sunucusu Kurulumu ve Yapılandırması
Giriş
Günümüzün dijital dünyasında, internet bağlantılarının güvenliği her zamankinden daha kritik hale gelmiştir. Sanal Özel Ağlar (VPN’ler), kullanıcıların internet trafiğini şifreleyerek ve IP adreslerini maskeleyerek çevrimiçi gizliliklerini ve güvenliklerini sağlamanın etkili bir yoludur. Birçok VPN çözümü arasında, OpenVPN, açık kaynak kodlu yapısı, esnekliği ve güçlü güvenlik özellikleriyle öne çıkmaktadır. Bu makale, Ubuntu 22.04 LTS işletim sistemi üzerinde kendi OpenVPN sunucunuzu adım adım nasıl kuracağınızı ve yapılandıracağınızı detaylı bir şekilde açıklayacaktır. Kendi VPN sunucunuzu kurmak, verileriniz üzerinde tam kontrol sahibi olmanızı sağlar ve üçüncü taraf VPN sağlayıcılarına duyulan güven ihtiyacını ortadan kaldırır.
Ubuntu 22.04, kararlılığı ve geniş topluluk desteği sayesinde sunucu ortamları için popüler bir seçimdir. Bu rehberde, OpenVPN sunucusunu kurmak için gerekli tüm bileşenleri (sertifika yetkilisi, sunucu ve istemci sertifikaları, anahtarlar) oluşturacak, sunucu yapılandırmasını yapacak ve güvenlik duvarı ayarlarını düzenleyerek güvenli bir bağlantı kuracağız.
Ön Gereksinimler
Kuruluma başlamadan önce aşağıdaki ön gereksinimlerin karşılandığından emin olun:
* Ubuntu 22.04 LTS Sunucusu: Temiz bir Ubuntu 22.04 kurulumuna sahip, internete bağlı bir sunucuya (fiziksel veya sanal özel sunucu – VPS) ihtiyacınız var.
* Kök veya Sudo Ayrıcalıkları: Kurulum ve yapılandırma işlemleri için kök (root) kullanıcı veya sudo ayrıcalıklarına sahip bir kullanıcı hesabınız olmalıdır.
* Temel Linux Bilgisi: Komut satırı (terminal) kullanımı hakkında temel bilgiye sahip olmanız gerekmektedir.
* Genel IP Adresi: Sunucunuzun internet üzerinden erişilebilir bir genel IP adresine sahip olması şarttır.
* Alan Adı (Opsiyonel ama Önerilir): Sunucu IP adresi yerine bir alan adı kullanmak, IP adresi değiştiğinde istemci yapılandırmalarını güncelleme ihtiyacını ortadan kaldırır.
1. Sunucuyu Güncelleme
Herhangi bir yazılım kurulumuna başlamadan önce, sisteminizin güncel olduğundan emin olmak iyi bir uygulamadır. Bu, potansiyel güvenlik açıklarını kapatır ve en son paketlere erişmenizi sağlar.
sudo apt update
sudo apt upgrade -y
Bu komutlar, paket listesini günceller ve mevcut tüm paketleri en son sürümlerine yükseltir.
2. OpenVPN ve Easy-RSA Kurulumu
OpenVPN sunucusunu ve sertifika yetkilisi (CA) oluşturmak için gerekli olan Easy-RSA aracını kurmamız gerekiyor. Easy-RSA, OpenVPN için PKI (Public Key Infrastructure) yönetimi için bir dizi betik sağlar.
sudo apt install openvpn easy-rsa -y
Bu komut, OpenVPN sunucu yazılımını ve Easy-RSA paketini sisteminize kuracaktır.
3. Sertifika Yetkilisi (CA) Oluşturma
OpenVPN, bağlantıları şifrelemek ve kimlik doğrulaması yapmak için SSL/TLS sertifikaları kullanır. Bu sertifikaları imzalamak için kendi Sertifika Yetkilimizi (CA) oluşturmamız gerekir.
Easy-RSA Dizinini Kopyalama
Easy-RSA betikleri genellikle /usr/share/easy-rsa/ dizininde bulunur. Bu dizini kendi çalışma dizinimize kopyalamak, orijinal betiklere zarar vermeden işlem yapmamızı sağlar. Güvenlik ve düzen açısından, bu dizini /etc/openvpn/easy-rsa altına kopyalamak iyi bir yaklaşımdır.
sudo cp -r /usr/share/easy-rsa/ /etc/openvpn/
sudo chown -R $USER:$USER /etc/openvpn/easy-rsa
sudo chmod -R 700 /etc/openvpn/easy-rsa
Şimdi Easy-RSA çalışma dizinine geçiş yapalım:
cd /etc/openvpn/easy-rsa
PKI Ortamını Başlatma
Yeni bir PKI (Public Key Infrastructure) ortamı oluşturmak için init-pki komutunu kullanırız:
./easyrsa init-pki
Bu komut, sertifikaları, anahtarları ve diğer PKI bileşenlerini depolamak için gerekli dizin yapısını oluşturacaktır.
Sertifika Yetkilisi (CA) Oluşturma
Şimdi kendi CA’mızı oluşturabiliriz. Bu CA, hem sunucu hem de istemci sertifikalarını imzalayacaktır.
./easyrsa build-ca nopass
nopass seçeneği, CA anahtarı için bir parola belirlemenizi istemez. Üretim ortamlarında daha fazla güvenlik için bir parola kullanmanız önerilir, ancak bu, her yeniden başlatmada parolayı girmenizi gerektirecektir. Komut sizden CA için bir Ortak Ad (Common Name) girmenizi isteyecektir (örneğin, “OpenVPN CA”). Varsayılan değeri bırakabilir veya kendi adınızı girebilirsiniz.
4. Sunucu Sertifikası ve Anahtarı Oluşturma
OpenVPN sunucusunun istemciler tarafından kimliğinin doğrulanabilmesi için bir sunucu sertifikasına ve özel anahtarına ihtiyacı vardır.
Sunucu Anahtarı İsteği Oluşturma
Sunucu için bir anahtar isteği ve özel anahtar oluşturulur:
./easyrsa gen-req server nopass
Burada da nopass kullanılmıştır. Komut sizden sunucu için bir Ortak Ad (Common Name) girmenizi isteyecektir (örneğin, “server”).
Sunucu Anahtarını İmzalama
Oluşturulan anahtar isteğini, az önce oluşturduğumuz CA ile imzalamamız gerekir. Bu, CA’nın bu sunucunun güvenilir olduğunu onayladığı anlamına gelir.
./easyrsa sign-req server server
Komut, imzalamak istediğinizden emin olup olmadığınızı soracaktır; yes yazıp onaylayın.
5. Diffie-Hellman Anahtarı Oluşturma
Diffie-Hellman (DH) anahtarı, OpenVPN’in istemcilerle güvenli anahtar değişimi yapmasını sağlar. Bu işlem biraz zaman alabilir (CPU gücüne bağlı olarak birkaç dakika ile yarım saat arasında).
./easyrsa gen-dh
Bu komut, pki/dh.pem dosyasını oluşturacaktır.
6. CRL (Sertifika İptal Listesi) Oluşturma
Sertifika İptal Listesi (CRL), güvenliği ihlal edilmiş veya artık kullanılmaması gereken istemci sertifikalarını iptal etmek için kullanılır.
./easyrsa gen-crl
Bu komut, pki/crl.pem dosyasını oluşturacaktır. Bu dosyayı düzenli olarak güncelleyip sunucuya kopyalamanız gerekecektir.
7. TLS Kimlik Doğrulama Anahtarı Oluşturma
OpenVPN, TLS kimlik doğrulama anahtarı (ta.key) kullanarak bağlantıların güvenliğini daha da artırabilir. Bu anahtar, man-in-the-middle saldırılarına karşı koruma sağlar ve TLS el sıkışmasını güçlendirir.
openvpn --genkey --secret ta.key
Bu komut, ta.key dosyasını Easy-RSA çalışma dizininde oluşturacaktır.
8. Gerekli Dosyaları OpenVPN Dizinine Taşıma
Şimdi oluşturduğumuz tüm sertifika ve anahtar dosyalarını OpenVPN sunucusunun okuyabileceği /etc/openvpn/ dizinine taşımamız gerekiyor.
sudo cp pki/ca.crt /etc/openvpn/
sudo cp pki/issued/server.crt /etc/openvpn/
sudo cp pki/private/server.key /etc/openvpn/
sudo cp pki/dh.pem /etc/openvpn/
sudo cp pki/crl.pem /etc/openvpn/
sudo cp ta.key /etc/openvpn/
Bu komutlar, CA sertifikasını, sunucu sertifikasını, sunucu özel anahtarını, Diffie-Hellman anahtarını, CRL dosyasını ve TLS kimlik doğrulama anahtarını /etc/openvpn/ dizinine kopyalar.
9. OpenVPN Sunucu Yapılandırma Dosyası Oluşturma
OpenVPN sunucusunu yapılandırmak için /etc/openvpn/server.conf dosyasını oluşturmamız ve düzenlememiz gerekiyor.
sudo nano /etc/openvpn/server.conf
Aşağıdaki yapılandırma örneğini kopyalayıp yapıştırın ve açıklamalara göre düzenlemeler yapın:
# Sunucu portu ve protokolü
port 1194
proto udp
Cihaz tipi (tun layer 3 IP tüneli için, tap layer 2 Ethernet tüneli için)
dev tun
CA sertifikası, sunucu sertifikası ve anahtarı
ca ca.crt
cert server.crt
key server.key
Diffie-Hellman parametreleri
dh dh.pem
VPN istemcilerine atanacak IP adresi aralığı
server 10.8.0.0 255.255.255.0
İstemci IP adresi atamalarını kalıcı hale getirir
ifconfig-pool-persist ipp.txt
İstemcilerin tüm trafiğini VPN üzerinden yönlendirir (varsayılan ağ geçidi olarak VPN'i kullanır)
push "redirect-gateway def1 bypass-dhcp"
İstemcilere DNS sunucuları atar (örnek: Google DNS)
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
Bağlantı canlı tutma (ping aralığı 10 saniye, timeout 120 saniye)
keepalive 10 120
TLS kimlik doğrulama anahtarı ve yönü (sunucu için 0)
tls-auth ta.key 0
Sertifika iptal listesi
crl-verify crl.pem
Şifreleme algoritması (AES-256-CBC veya AES-256-GCM önerilir)
cipher AES-256-CBC
Kimlik doğrulama algoritması
auth SHA256
Sunucu ve istemci arasında sıkıştırmayı etkinleştirir (uyumlu olması için client.ovpn'de de olmalı)
Bu satır, OpenVPN 2.4 ve sonrası için önerilir. Eğer istemcilerde sorun olursa kaldırılabilir.
compress lz4-v2
push "compress lz4-v2"
Kullanıcı ve grup ayrıcalıklarını düşürür (güvenlik için)
user nobody
group nogroup
Anahtar ve tünel persistansı, yeniden bağlantıda anahtarları/tüneli yeniden açmayı engeller
persist-key
persist-tun
Durum ve günlük dosyaları
status openvpn-status.log
log openvpn.log
verb 3 # Günlük ayrıntı seviyesi (0-9)
Açıkça istemcilere çıkış bildirimi gönderir
explicit-exit-notify 1
Bu yapılandırma, UDP protokolünü kullanarak 1194 portundan dinleyen, 10.8.0.0/24 IP aralığına sahip bir VPN ağı oluşturur. redirect-gateway ile tüm istemci trafiği VPN üzerinden yönlendirilir ve Google DNS sunucuları kullanılır. Güvenlik için tls-auth ve crl-verify etkinleştirilmiştir.
Kaydedip çıkmak için Ctrl+O, Enter ve Ctrl+X tuşlarına basın.
10. IP Yönlendirmeyi Etkinleştirme
OpenVPN sunucusunun istemcilerden gelen trafiği internete yönlendirebilmesi için IP yönlendirmeyi (IP forwarding) etkinleştirmemiz gerekir.
sudo nano /etc/sysctl.conf
Dosya içinde #net.ipv4.ip_forward=1 satırını bulun ve başındaki # işaretini kaldırarak veya yoksa dosyanın sonuna ekleyerek etkinleştirin:
net.ipv4.ip_forward=1
Değişiklikleri kaydettikten sonra, yeni ayarları uygulamak için aşağıdaki komutu çalıştırın:
sudo sysctl -p
11. Güvenlik Duvarını Yapılandırma (UFW)
Ubuntu’da varsayılan güvenlik duvarı olan UFW’yi (Uncomplicated Firewall) yapılandırmamız gerekiyor. Bu, OpenVPN trafiğine izin vermeli ve istemcilerin internete erişebilmesi için NAT (Network Address Translation) kurallarını ayarlamalıdır.
UFW Kurallarını Oluşturma
Öncelikle, SSH bağlantı noktasını (genellikle 22) ve OpenVPN portunu (1194/udp) açın:
sudo ufw allow ssh
sudo ufw allow 1194/udp
Eğer OpenVPN için TCP protokolünü seçtiyseniz, 1194/tcp olarak değiştirmeniz gerekir.
Varsayılan Yönlendirme Politikasını Ayarlama
NAT kurallarının çalışabilmesi için UFW’nin varsayılan yönlendirme politikasını ACCEPT olarak ayarlamamız gerekir.
sudo nano /etc/default/ufw
Dosya içinde DEFAULT_FORWARD_POLICY="DROP" satırını bulun ve DEFAULT_FORWARD_POLICY="ACCEPT" olarak değiştirin.
NAT Kurallarını Ekleme
Şimdi UFW’nin before.rules dosyasına NAT kurallarını eklememiz gerekiyor. Bu kurallar, VPN istemcilerinden gelen trafiğin sunucunun genel IP adresi üzerinden internete çıkmasını sağlar.
sudo nano /etc/ufw/before.rules
Bu dosyanın en başına, # START OPENVPN RULES ve # END OPENVPN RULES yorum satırları arasına aşağıdaki kuralları ekleyin. eth0 yerine sunucunuzun dışa dönük ağ arayüzünün adını kullanmanız gerekebilir. ip a komutu ile doğru arayüz adını bulabilirsiniz (genellikle eth0 veya enpXsY).
# START OPENVPN RULES
NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMIT
END OPENVPN RULES
Don't delete these required lines, or there may be errors in the log
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-user-input - [0:0]
:ufw-user-output - [0:0]
:ufw-user-forward - [0:0]
:ufw-reject-input - [0:0]
:ufw-reject-output - [0:0]
:ufw-reject-forward - [0:0]
:ufw-track-input - [0:0]
:ufw-track-output - [0:0]
:ufw-track-forward - [0:0]
Yukarıdaki örnekte 10.8.0.0/24, server.conf dosyasında tanımladığımız VPN ağıdır. eth0 ise sunucunuzun internete bağlı ana ağ arayüzüdür.
UFW’yi Yeniden Başlatma
Tüm UFW ayarlarını uygulamak için güvenlik duvarını devre dışı bırakıp tekrar etkinleştirin:
sudo ufw disable
sudo ufw enable
y yazarak onaylayın. Güvenlik duvarının durumunu kontrol etmek için:
sudo ufw status verbose
12. OpenVPN Sunucusunu Başlatma ve Etkinleştirme
Tüm yapılandırmalar tamamlandıktan sonra, OpenVPN sunucusunu başlatabilir ve sistem başlangıcında otomatik olarak başlaması için etkinleştirebiliriz.
sudo systemctl start openvpn@server
sudo systemctl enable openvpn@server
Sunucunun durumunu kontrol etmek için:
sudo systemctl status openvpn@server
Durum active (running) olarak görünmelidir. Herhangi bir hata durumunda, günlükleri kontrol edebilirsiniz:
sudo journalctl -u openvpn@server -f
13. İstemci Yapılandırması
OpenVPN sunucusu çalışır durumda olduğuna göre, istemcilerin bağlanabilmesi için istemci sertifikaları ve yapılandırma dosyaları oluşturmalıyız. Her istemci için ayrı bir sertifika oluşturmak, güvenlik ve yönetim açısından en iyi yaklaşımdır.
İstemci Sertifikası ve Anahtarı Oluşturma
Easy-RSA dizinine geri dönün:
cd /etc/openvpn/easy-rsa
Yeni bir istemci anahtar isteği ve özel anahtar oluşturun. client1 yerine istemcinizin adını kullanabilirsiniz.
./easyrsa gen-req client1 nopass
İstemci anahtar isteğini CA ile imzalayın:
./easyrsa sign-req client client1
yes yazarak onaylayın.
İstemci Yapılandırma Dosyası Oluşturma
Şimdi istemci için bir .ovpn yapılandırma dosyası oluşturmamız gerekiyor. Bu dosya, tüm gerekli sertifikaları ve anahtarları içerecektir.
mkdir -p ~/client-configs/files
chmod 700 ~/client-configs
Şimdi bir temel istemci yapılandırma dosyası oluşturalım:
nano ~/client-configs/base.conf
Aşağıdaki içeriği yapıştırın:
client
dev tun
proto udp
remote YOUR_SERVER_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA256
cipher AES-256-CBC
key-direction 1
verb 3
YOUR_SERVER_IP yerine sunucunuzun genel IP adresini veya alan adını yazın. Eğer server.conf dosyasında proto tcp kullandıysanız, burada da proto tcp olarak değiştirmelisiniz.
Şimdi bu temel yapılandırma dosyasını, istemciye özel sertifika ve anahtarları içerecek şekilde tamamlayalım.
./easyrsa show-cert client1 > ~/client-configs/files/client1.crt
./easyrsa show-req client1 > ~/client-configs/files/client1.csr # Bu aslında gerekli değil ama iyi bir pratik.
cp pki/private/client1.key ~/client-configs/files/client1.key
cp pki/ca.crt ~/client-configs/files/ca.crt
cp ta.key ~/client-configs/files/ta.key
Şimdi tüm bu dosyaları tek bir .ovpn dosyasına birleştirecek bir betik oluşturalım:
nano ~/client-configs/make_config.sh
Aşağıdaki içeriği yapıştırın:
#!/bin/bash
Client name (e.g., client1)
CLIENT_NAME=$1
if [ -z "$CLIENT_NAME" ]; then
echo "Usage: $0 "
exit 1
fi
KEY_DIR=~/client-configs/files
OUTPUT_DIR=~/client-configs/ovpn_files
BASE_CONFIG=~/client-configs/base.conf
mkdir -p "$OUTPUT_DIR"
cat "${BASE_CONFIG}" \
<(echo -e '') \
"${KEY_DIR}/ca.crt" \
<(echo -e ' \n') \
"${KEY_DIR}/${CLIENT_NAME}.crt" \
<(echo -e ' \n') \
"${KEY_DIR}/${CLIENT_NAME}.key" \
<(echo -e ' \n') \
"${KEY_DIR}/ta.key" \
<(echo -e ' ') \
> "${OUTPUT_DIR}/${CLIENT_NAME}.ovpn"
echo "Client config created: ${OUTPUT_DIR}/${CLIENT_NAME}.ovpn"
Betik dosyasını çalıştırılabilir hale getirin:
chmod 700 ~/client-configs/make_config.sh
Şimdi client1 için .ovpn dosyasını oluşturun:
~/client-configs/make_config.sh client1
Bu komut, ~/client-configs/ovpn_files/client1.ovpn dosyasını oluşturacaktır. Bu dosyayı istemci cihazınıza (bilgisayar, telefon vb.) aktarmanız gerekmektedir. Dosyayı güvenli bir şekilde (örneğin, SFTP kullanarak) istemcinize aktarın.
Dosyaları İstemciye Aktarma
Oluşturulan .ovpn dosyasını (örneğin client1.ovpn), OpenVPN istemci yazılımını çalıştıracağınız cihaza kopyalamanız gerekir. Windows, macOS, Linux, Android ve iOS için OpenVPN istemcileri mevcuttur.
* Windows: OpenVPN GUI istemcisini indirip kurun. .ovpn dosyasını C:\Program Files\OpenVPN\config dizinine kopyalayın.
* macOS: Tunnelblick veya OpenVPN Connect istemcisini kullanın. .ovpn dosyasını sürükleyip bırakarak veya “Add Configuration” seçeneğiyle içe aktarın.
* Linux: OpenVPN paketini kurun (sudo apt install openvpn) ve sudo openvpn --config client1.ovpn komutuyla veya NetworkManager üzerinden yapılandırmayı içe aktararak bağlanın.
* Mobil Cihazlar: OpenVPN Connect uygulamasını indirip kurun. .ovpn dosyasını e-posta, bulut depolama veya USB aracılığıyla cihaza aktarın ve uygulama üzerinden içe aktarın.
Bağlandıktan sonra, IP adresinizi kontrol ederek VPN üzerinden bağlandığınızdan emin olabilirsiniz (örneğin, Google’da “what is my ip” araması yaparak).
14. İstemci Sertifikalarını İptal Etme (Opsiyonel)
Bir istemcinin VPN erişimini iptal etmek isterseniz (örneğin, cihazını kaybetti veya bir çalışan ayrıldı), sertifikasını iptal etmeniz gerekir.
Easy-RSA dizinine gidin:
cd /etc/openvpn/easy-rsa
İstemcinin sertifikasını iptal edin (örneğin, client1 için):
./easyrsa revoke client1
Onaylamak için yes yazın. Ardından, CRL’yi (Sertifika İptal Listesi) yeniden oluşturmanız gerekir:
./easyrsa gen-crl
Yeni crl.pem dosyasını OpenVPN sunucu dizinine kopyalayın:
sudo cp pki/crl.pem /etc/openvpn/
Son olarak, OpenVPN sunucusunu yeniden başlatarak yeni CRL’nin uygulanmasını sağlayın:
sudo systemctl restart openvpn@server
Bu işlemden sonra, client1 artık VPN sunucusuna bağlanamayacaktır.
Sonuç
Bu detaylı rehberde, Ubuntu 22.04 LTS üzerinde kendi OpenVPN sunucunuzu adım adım nasıl kuracağınızı ve yapılandıracağınızı öğrendiniz. Kendi VPN sunucunuzu çalıştırmak, çevrimiçi gizliliğinizi ve güvenliğinizi artırmanın, hassas verilerinizi korumanın ve coğrafi kısıtlamaları aşmanın güçlü bir yoludur.
Kurulum sürecinde sunucu güncellemesinden başlayarak, sertifika yetkilisi oluşturmaya, sunucu ve istemci sertifikalarını yapılandırmaya, Diffie-Hellman anahtarı ve TLS kimlik doğrulama anahtarı oluşturmaya, IP yönlendirmeyi etkinleştirmeye ve UFW güvenlik duvarını yapılandırmaya kadar tüm adımları tamamladık. Son olarak, istemcilerinize dağıtabileceğiniz .ovpn yapılandırma dosyalarını nasıl oluşturacağınızı ve istemci sertifikalarını nasıl iptal edeceğinizi de gördük.
Kendi OpenVPN sunucunuzu yönetmek, güvenlik güncellemelerini takip etmeyi ve gerektiğinde sertifikaları yenilemeyi gerektirir. Ancak bu çaba, dijital yaşamınız üzerinde size daha fazla kontrol ve güvenlik sağlar. Güvenli internet deneyimlerinizde başarılar dileriz!