Ubuntu 14.04 Üzerinde Docker Konteynerinde OpenVPN Çalıştırma Rehberi
Giriş: OpenVPN, Docker ve Ubuntu 14.04
Günümüzün dijital dünyasında, güvenli iletişim ve ağ erişimi her zamankinden daha kritik hale gelmiştir. Sanal Özel Ağlar (VPN’ler), internet üzerinden güvenli ve şifreli bağlantılar kurarak bu ihtiyacı karşılar. OpenVPN, açık kaynaklı, esnek ve oldukça güvenli bir VPN çözümüdür. Diğer yandan, Docker, uygulamaları konteynerler içinde izole bir şekilde çalıştırmayı sağlayan bir platformdur. Bu, uygulamaların farklı ortamlarda tutarlı bir şekilde çalışmasını garanti eder ve dağıtım ile yönetimi kolaylaştırır.
Bu makalede, Ubuntu 14.04 işletim sistemi üzerinde Docker kullanarak bir OpenVPN sunucusunu nasıl kuracağınızı ve yöneteceğinizi adım adım açıklayacağız. Ubuntu 14.04 eski bir sürüm olsa da, belirli senaryolarda (örneğin, eski bir sunucuyu yeniden kullanma veya belirli bir uyumluluk gereksinimini karşılama) bu sürüm üzerinde OpenVPN’i çalıştırma ihtiyacı doğabilir. Docker’ın esnekliği sayesinde, eski bir işletim sistemi üzerinde bile modern ve güncel bir OpenVPN kurulumu gerçekleştirebiliriz.
Bu rehber, OpenVPN’in kurulumunu basitleştirmek, bağımlılık sorunlarını minimize etmek ve sunucunun taşınabilirliğini artırmak için Docker’ın avantajlarından faydalanacaktır. Konteynerleştirilmiş bir OpenVPN sunucusu, ana sistemden izole çalışır, bu da güvenlik ve yönetim açısından önemli faydalar sağlar.
Ön Koşullar
Bu rehbere başlamadan önce aşağıdaki ön koşulların yerine getirildiğinden emin olun:
* Ubuntu 14.04 Sunucusu: Kurulumu yapılmış ve çalışan bir Ubuntu 14.04 (Trusty Tahr) sunucusu.
* Sudo Yetkileri: Sunucuda sudo komutunu kullanabilecek bir kullanıcı hesabına sahip olmak.
* İnternet Bağlantısı: Sunucunun internete erişimi olması gerekmektedir.
* Temel Linux Bilgisi: Komut satırı kullanımı ve temel Linux komutlarına aşinalık.
* Ağ Bilgisi: Temel ağ kavramları (IP adresleri, portlar, güvenlik duvarları) hakkında bilgi sahibi olmak faydalıdır.
Adım 1: Ubuntu 14.04 Sistemini Güncelleme ve Gerekli Paketleri Kurma
İlk olarak, sisteminizin güncel olduğundan ve Docker kurulumu için gerekli temel paketlere sahip olduğundan emin olalım. Ubuntu 14.04 eski bir sürüm olduğundan, bazı depoların artık aktif olmayabileceğini unutmayın.
sudo apt-get update
sudo apt-get upgrade -y
Bu komutlar, paket listelerinizi günceller ve mevcut paketlerinizi en son sürümlerine yükseltir. Ardından, Docker’ın bağımlılıkları için gerekli olabilecek paketleri kuralım:
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
* apt-transport-https: APT’nin HTTPS üzerinden depoları kullanmasını sağlar.
* ca-certificates: SSL/TLS sertifikalarını doğrulamak için gereklidir.
* curl: Web sayfalarını ve dosyaları indirmek için kullanılır.
* software-properties-common: Depo eklemek için add-apt-repository komutunu sağlar.
Adım 2: Ubuntu 14.04 Üzerine Docker Kurulumu
Ubuntu 14.04 için Docker’ın en güncel sürümünü yüklemek yerine, o döneme uygun olan ve hala çalışabilen bir sürümü kurmamız gerekecek. Docker’ın resmi deposunu ekleyerek bu işlemi gerçekleştirebiliriz.
1. Docker GPG Anahtarını Ekleme:
Docker’ın resmi deposundan paketleri indirmek için GPG anahtarını sisteminize eklemeniz gerekir.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Bu komut, Docker’ın resmi GPG anahtarını indirir ve sisteminize ekler. OK çıktısını görmelisiniz.
2. Docker Deposunu Ekleme:
Şimdi, Docker’ın Ubuntu 14.04 (trusty) için deposunu sisteminize ekleyelim.
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu trusty stable"
Bu komut, Docker’ın stable (kararlı) sürümünü içeren depoyu /etc/apt/sources.list.d/ altına ekler.
3. Paket Listesini Güncelleme ve Docker Kurulumu:
Yeni depoyu ekledikten sonra paket listesini tekrar güncellemeli ve Docker CE’yi (Community Edition) kurmalıyız.
sudo apt-get update
sudo apt-get install -y docker-ce
Bu komut docker-ce paketini kuracaktır. Kurulum sırasında bağımlılıklar da otomatik olarak yüklenecektir.
4. Docker Kurulumunu Doğrulama:
Docker’ın doğru bir şekilde kurulup kurulmadığını kontrol etmek için aşağıdaki komutu çalıştırın:
sudo systemctl status docker # veya sudo service docker status
sudo docker run hello-world
hello-world konteynerinin başarıyla çalışıp bir mesaj göstermesi, Docker’ın düzgün çalıştığını gösterir.
Eğer systemctl komutu bulunamazsa, Ubuntu 14.04 upstart kullanıyor olabilir. Bu durumda sudo service docker status komutunu kullanın.
5. Kullanıcıyı docker Grubuna Ekleme (Opsiyonel ama Önerilir):
sudo kullanmadan Docker komutlarını çalıştırmak için kullanıcınızı docker grubuna ekleyebilirsiniz.
sudo usermod -aG docker $USER
Bu değişikliklerin etkili olması için oturumu kapatıp tekrar açmanız veya sistemi yeniden başlatmanız gerekebilir: newgrp docker.
Adım 3: OpenVPN Konteyneri İçin Uygun Bir Docker İmajı Seçimi
OpenVPN sunucusu kurmak için birçok Docker imajı bulunmaktadır. Bu rehberde, popüler ve iyi bakımı yapılan kylemanna/openvpn imajını kullanacağız. Bu imaj, OpenVPN sunucusunu hızlı ve kolay bir şekilde kurmak için gerekli tüm araçları (Easy-RSA gibi) içerir.
Adım 4: OpenVPN Sunucusunu Yapılandırma ve Başlatma
OpenVPN sunucusunu Docker üzerinde çalıştırmak, kalıcı veri depolaması için bir Docker volume (hacim) oluşturmayı ve ardından sunucuyu başlatmak için gerekli komutları çalıştırmayı içerir.
4.1. Veri Hacmi Oluşturma
OpenVPN sunucu yapılandırması, sertifikalar ve anahtarlar gibi önemli veriler konteyner silindiğinde kaybolmamalıdır. Bu nedenle, kalıcı bir veri hacmi (volume) oluşturacağız.
docker volume create ovpn-data
Bu komut ovpn-data adında bir Docker hacmi oluşturur. Bu hacim, OpenVPN konteynerinin içindeki /etc/openvpn dizinine bağlanacaktır.
4.2. OpenVPN Sunucu Yapılandırmasını Oluşturma
kylemanna/openvpn imajı, sunucu yapılandırmasını ve PKI’yı (Public Key Infrastructure) başlatmak için kullanışlı komutlar sunar. İlk olarak, sunucu yapılandırma dosyasını (server.conf) oluşturacağız. Bu işlem sırasında sunucunuzun harici IP adresini veya alan adını belirtmeniz gerekecektir.
docker run -v ovpn-data:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -u udp://
* -v ovpn-data:/etc/openvpn: ovpn-data hacmini konteyner içindeki /etc/openvpn dizinine bağlar.
* --log-driver=none: Bu komutun günlüklerini kaydetmez (geçici bir işlem olduğu için).
* --rm: Komut tamamlandığında konteyneri otomatik olarak siler.
* kylemanna/openvpn: Kullanılacak Docker imajı.
* ovpn_genconfig -u udp://: OpenVPN yapılandırma dosyasını oluşturur. yerine sunucunuzun herkese açık IP adresini veya bir alan adını yazın (örneğin, vpn.example.com). udp protokolünü kullanıyoruz, bu varsayılan ve genellikle daha hızlıdır.
Eğer VPN istemcilerinin internete erişmesini istiyorsanız, VPN ağına bir DNS sunucusu atamanız gerekir. Bunu ovpn_genconfig komutuna ekleyebilirsiniz:
docker run -v ovpn-data:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -u udp:// -e "push \"dhcp-option DNS 8.8.8.8\"" -e "push \"dhcp-option DNS 8.8.4.4\""
Bu komut, Google’ın DNS sunucularını (8.8.8.8 ve 8.8.4.4) VPN istemcilerine iletecektir.
4.3. PKI’yı Başlatma
OpenVPN, güvenliği sağlamak için PKI kullanır. Bu adımda, bir Sertifika Yetkilisi (CA), sunucu anahtarı ve Diffie-Hellman parametreleri oluşturacağız. Bu işlem biraz zaman alabilir.
docker run -v ovpn-data:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn ovpn_initpki
Bu komutu çalıştırdığınızda, CA için bir parola belirlemeniz istenecektir. Güçlü bir parola seçin ve unutmayın. Ayrıca, “Common Name” (Ortak Ad) sorulduğunda, varsayılan değeri (genellikle ) onaylamak için Enter tuşuna basabilirsiniz.
4.4. OpenVPN Sunucusunu Başlatma
Artık yapılandırma ve PKI hazır olduğuna göre, OpenVPN sunucusunu bir Docker konteyneri olarak başlatabiliriz.
docker run -d \
--name openvpn-server \
--restart=always \
--cap-add=NET_ADMIN \
-p 1194:1194/udp \
-v ovpn-data:/etc/openvpn \
kylemanna/openvpn
Bu komutun açıklaması:
* -d: Konteyneri arka planda (detached mode) çalıştırır.
* --name openvpn-server: Konteynere openvpn-server adını verir. Bu adı daha sonra konteyneri yönetmek için kullanabilirsiniz.
* --restart=always: Konteynerin her zaman otomatik olarak yeniden başlatılmasını sağlar (sistem yeniden başlatıldığında veya konteyner çöktüğünde).
* --cap-add=NET_ADMIN: Konteynerin ağ arayüzlerini değiştirmesine ve yönlendirme tablolarını ayarlamasına izin veren NET_ADMIN yeteneğini ekler. OpenVPN için bu gereklidir.
* -p 1194:1194/udp: Ana sistemin 1194/UDP portunu konteynerin 1194/UDP portuna yönlendirir. OpenVPN varsayılan olarak bu portu kullanır.
* -v ovpn-data:/etc/openvpn: ovpn-data hacmini konteynerin /etc/openvpn dizinine bağlar.
* kylemanna/openvpn: Kullanılacak Docker imajı.
Konteynerin çalıştığını doğrulamak için:
docker ps
openvpn-server adlı bir konteynerin çalıştığını görmelisiniz.
Adım 5: Ağ Yönlendirmeyi Etkinleştirme ve Güvenlik Duvarı Kuralları
OpenVPN istemcilerinin sunucu üzerinden internete erişebilmesi için, sunucunuzda IP yönlendirmeyi etkinleştirmeniz ve uygun güvenlik duvarı (NAT) kurallarını ayarlamanız gerekir.
5.1. IP Yönlendirmeyi Etkinleştirme
Sunucunun IP paketlerini bir ağ arayüzünden diğerine yönlendirmesi için IP yönlendirmeyi etkinleştirmemiz gerekir.
sudo sysctl -w net.ipv4.ip_forward=1
Bu komut, IP yönlendirmeyi hemen etkinleştirir. Ancak, sistem yeniden başlatıldığında bu ayar kaybolacaktır. Kalıcı hale getirmek için /etc/sysctl.conf dosyasını düzenlemelisiniz:
sudo nano /etc/sysctl.conf
Dosyanın içinde aşağıdaki satırı bulun veya ekleyin:
net.ipv4.ip_forward = 1
Değişiklikleri kaydedin ve dosyayı kapatın (Ctrl+O, Enter, Ctrl+X). Değişikliklerin etkili olması için:
sudo sysctl -p
5.2. Güvenlik Duvarı (NAT) Kurallarını Ayarlama
OpenVPN istemcileri sunucuya bağlandığında, sunucu bu istemcilerin internete erişimi için bir NAT (Network Address Translation) görevi görmelidir. Bu, iptables kuralları ile yapılır.
Öncelikle, sunucunuzun ana ağ arayüzünün adını bulmanız gerekir (örneğin, eth0, enp0s3).
ip route show default
Çıktıda dev kısmını arayın. Örneğin, default via 192.168.1.1 dev eth0 ise arayüz adınız eth0‘dır.
Şimdi, NAT kuralını ekleyelim. yerine kendi arayüz adınızı yazın.
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o -j MASQUERADE
sudo iptables -A FORWARD -i tun0 -o -j ACCEPT
sudo iptables -A FORWARD -i -o tun0 -j ACCEPT
* 10.8.0.0/24: Bu, OpenVPN sunucusunun istemcilere atadığı varsayılan IP aralığıdır. Eğer ovpn_genconfig sırasında farklı bir aralık belirttiyseniz, onu kullanın.
* tun0: OpenVPN’in oluşturduğu sanal ağ arayüzüdür.
Güvenlik Duvarı Kurallarını Kalıcı Hale Getirme:
iptables kuralları, sistem yeniden başlatıldığında kaybolur. Bunları kalıcı hale getirmek için iptables-persistent paketini kullanabiliriz.
sudo apt-get install -y iptables-persistent
Kurulum sırasında mevcut iptables kurallarını kaydetmek isteyip istemediğiniz sorulacaktır. Evet’i seçin. Eğer daha sonra kuralları manuel olarak kaydetmeniz gerekirse:
sudo netfilter-persistent save
Adım 6: İstemci Yapılandırma Dosyalarını Oluşturma
VPN istemcilerinin sunucuya bağlanabilmesi için .ovpn uzantılı bir yapılandırma dosyasına ihtiyaçları vardır. Bu dosyalar, istemcinin kimlik doğrulama için kullanacağı sertifikaları ve anahtarları içerir.
6.1. İstemci Sertifikası ve Anahtarı Oluşturma
Her istemci için benzersiz bir sertifika ve anahtar çifti oluşturmalısınız. <İSTEMCİ_ADI> yerine istemciniz için açıklayıcı bir ad kullanın (örneğin, laptop_user, mobile_phone).
docker run -v ovpn-data:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn easyrsa build-client-full <İSTEMCİ_ADI> nopass
* nopass: İstemci anahtarı için parola istemez. Eğer parola korumalı bir anahtar istiyorsanız, nopass kısmını çıkarın.
Bu komutu çalıştırdığınızda, daha önce belirlediğiniz CA parolasını girmeniz istenecektir.
6.2. İstemci Yapılandırma Dosyasını Dışarı Aktarma
Oluşturulan istemci sertifikaları ve anahtarları, ovpn-data hacminin içindedir. Bu verileri içeren .ovpn dosyasını sunucunuzun dosya sistemine aktarmamız gerekiyor.
docker run -v ovpn-data:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_getclient <İSTEMCİ_ADI> > <İSTEMCİ_ADI>.ovpn
Bu komut, ovpn-data içindeki gerekli tüm bilgileri toplar ve <İSTEMCİ_ADI>.ovpn adında tek bir yapılandırma dosyası oluşturur. Bu dosya, komutu çalıştırdığınız dizine kaydedilecektir.
6.3. İstemci Dosyasını Dağıtma
Oluşturduğunuz .ovpn dosyasını, VPN’e bağlanmak isteyen istemci cihazına güvenli bir şekilde aktarın (örneğin, SCP, SFTP veya USB bellek aracılığıyla). Bu dosyayı e-posta ile göndermek güvenli değildir.
İstemci tarafında, OpenVPN yazılımını kurmanız (Windows, macOS, Linux için) veya mobil uygulamayı (Android, iOS için) kullanmanız gerekecektir. .ovpn dosyasını OpenVPN istemcisine aktarın ve bağlantıyı kurun.
Adım 7: Gelişmiş Yapılandırmalar ve Yönetim
7.1. Sertifika İptali
Bir istemcinin erişimini iptal etmeniz gerektiğinde (örneğin, cihaz çalındıysa veya kullanıcı artık erişime ihtiyaç duymuyorsa), istemcinin sertifikasını iptal edebilirsiniz.
docker run -v ovpn-data:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn easyrsa revoke <İSTEMCİ_ADI>
CA parolasını girmeniz istenecektir. Ardından, iptal listesini (CRL) güncellemeli ve OpenVPN sunucusunu yeniden başlatmalısınız:
docker run -v ovpn-data:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -E
docker restart openvpn-server
7.2. Özel OpenVPN Direktifleri Ekleme
OpenVPN sunucu yapılandırmasına ek direktifler eklemek isterseniz, ovpn_genconfig komutunu kullanarak bunu yapabilirsiniz. Örneğin, TCP protokolünü kullanmak veya farklı bir port belirtmek için:
docker run -v ovpn-data:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -u tcp://:443 -e "push \"dhcp-option DNS 8.8.8.8\""
Bu durumda, sunucu başlatma komutundaki port yönlendirmesini de değiştirmeniz gerekir: -p 443:443/tcp.
7.3. Sunucu Günlüklerini Kontrol Etme
OpenVPN sunucusunun düzgün çalışıp çalışmadığını veya bağlantı sorunlarını gidermek için konteynerin günlüklerini kontrol edebilirsiniz:
docker logs openvpn-server
Daha fazla ayrıntı için -f (follow) veya --tail seçeneklerini kullanabilirsiniz.
Adım 8: Sorun Giderme
OpenVPN kurulumu sırasında karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri:
* Bağlantı Kurulamıyor:
* Güvenlik Duvarı: Sunucunuzdaki güvenlik duvarının (UFW veya iptables) 1194/UDP (veya belirlediğiniz başka bir port/protokol) portuna gelen bağlantılara izin verdiğinden emin olun.
* IP Yönlendirme: net.ipv4.ip_forward ayarının 1 olduğundan emin olun (sudo sysctl net.ipv4.ip_forward).
* NAT Kuralları: iptables NAT kurallarının doğru olduğundan ve ana ağ arayüzünüzü içerdiğinden emin olun.
* Sunucu IP’si/Alan Adı: İstemci .ovpn dosyasındaki sunucu IP adresinin veya alan adının doğru ve erişilebilir olduğundan emin olun.
* Konteyner Çalışıyor mu? docker ps komutu ile openvpn-server konteynerinin çalıştığını doğrulayın.
* Konteyner Günlükleri: docker logs openvpn-server komutu ile herhangi bir hata olup olmadığını kontrol edin.
* İstemciler İnternete Erişemiyor:
* NAT Kuralları: iptables NAT kurallarının doğru bir şekilde ayarlandığından ve kaydedildiğinden emin olun. Özellikle MASQUERADE kuralı kritiktir.
* IP Yönlendirme: Sunucuda IP yönlendirme etkin mi?
* DNS Ayarları: ovpn_genconfig komutunda DNS sunucularını doğru bir şekilde push ettiğinizden emin olun.
* Sertifika Hataları:
* Tarih ve Saat: Sunucu ve istemci cihazlarının tarih ve saatlerinin doğru olduğundan emin olun. Sertifika geçerliliği için bu önemlidir.
* CA Parolası: PKI oluştururken kullanılan CA parolasını doğru girdiğinizden emin olun.
* “Permission denied” Hataları:
* docker komutlarını çalıştırırken sudo kullandığınızdan veya kullanıcınızın docker grubuna ekli olduğundan emin olun.
Adım 9: Güvenlik Hususları
OpenVPN sunucunuzu çalıştırırken aşağıdaki güvenlik hususlarını göz önünde bulundurun:
* Güçlü CA Parolası: PKI’yı başlatırken belirlediğiniz CA parolasının güçlü ve benzersiz olduğundan emin olun. Bu parola, yeni sertifikalar oluşturmak veya mevcut sertifikaları iptal etmek için gereklidir.
* İstemci Sertifikalarının Güvenliği: Oluşturduğunuz .ovpn dosyalarını güvenli bir şekilde saklayın ve dağıtın. Bu dosyalar, VPN’e erişim için anahtarlardır.
* Gereksiz Portları Kapatma: Sunucunuzda OpenVPN için gerekli olan portlar dışındaki tüm gereksiz portları güvenlik duvarı ile kapatın.
* Yazılım Güncellemeleri: Ubuntu 14.04 eski bir sürüm olsa da, sisteminizdeki ve Docker’daki paketleri düzenli olarak güncel tutmaya çalışın (mümkün olduğunca). Docker imajlarını da düzenli olarak güncelleyerek bilinen güvenlik açıklarından korunabilirsiniz. kylemanna/openvpn imajının güncel tutulduğundan emin olun.
* Erişim Kontrolü: Sadece yetkili kullanıcıların VPN sunucusuna erişebilmesi için sertifika bazlı kimlik doğrulamayı kullanın.
* Günlükleri İzleme: Sunucunuzun ve OpenVPN konteynerinin günlüklerini düzenli olarak kontrol ederek anormal etkinlikleri veya güvenlik ihlallerini tespit edin.
* Ubuntu 14.04’ün Eskiliği: Ubuntu 14.04’ün resmi desteğinin sona erdiğini unutmayın. Bu, güvenlik güncellemelerinin artık sağlanmadığı anlamına gelir. Mümkünse, daha yeni ve desteklenen bir Ubuntu sürümüne yükseltmeyi düşünün. Bu rehber, belirli bir senaryo için 14.04 üzerinde kurulumu göstermekle birlikte, genel güvenlik için modern bir işletim sistemi tercih edilmelidir.
Sonuç
Bu kapsamlı rehberde, Ubuntu 14.04 işletim sistemi üzerinde Docker kullanarak güvenli bir OpenVPN sunucusunu nasıl kuracağınızı, yapılandıracağınızı ve yöneteceğinizi adım adım öğrendiniz. Docker’ın sağladığı izolasyon ve kolay yönetim sayesinde, eski bir işletim sistemi üzerinde bile modern ve işlevsel bir VPN çözümü elde ettik.
OpenVPN’i Docker konteynerinde çalıştırmanın temel faydaları arasında kolay dağıtım, bağımlılık sorunlarının azalması, tutarlı çalışma ortamı ve taşınabilirlik yer alır. Bu kurulum, ev ağınızı korumak, coğrafi kısıtlamaları aşmak veya uzak sunucularınıza güvenli bir şekilde erişmek için güçlü bir temel sağlar.
Unutulmamalıdır ki, Ubuntu 14.04’ün destek ömrünün sona ermesi nedeniyle, bu tür bir kurulumu üretim ortamlarında kullanırken güvenlik risklerini dikkatle değerlendirmek ve mümkün olan en kısa sürede daha güncel bir işletim sistemine geçmeyi planlamak önemlidir. Ancak, bu rehber, belirli ihtiyaçlar doğrultusunda eski sistemler üzerinde bile modern teknolojileri nasıl uygulayabileceğinize dair değerli bir bakış açısı sunmaktadır. Güvenli ve özel internet deneyimleriniz için artık sağlam bir OpenVPN altyapınız var.