Yerel alan ağınızda bir VPN sunucusu çalıştırmak, dış istemcilerin sunucunuza bağlanmasına ve ağa doğrudan bağlıymış gibi erişmesine olanak tanır. Bu, birçok şirket için çalışanlarının yerel iş ağına uzaktan bağlanmalarına olanak tanıyan ve böylece yalnızca yerel ağda kullanılabilen dahili kaynaklara erişim sağlayan ortak bir kurulumdur. Linux yöneticileri ve uzman kullanıcılar, hareket halindeyken ev ağlarına bağlanmak için dizüstü bilgisayarlarını veya diğer taşınabilir cihazlarını kullanabilecekleri için evde bir VPN sunucusu kurmakla da ilgilenebilirler.
VPN sisteminin en iyi uygulamalarından biri OpenVPN’dir. Tamamen açık kaynaktır ve özelleştirme için birçok özelliği destekler. Bu eğitimde, OpenVPN’i bir Linux sistemine kurma ve kurma talimatlarını adım adım inceleyeceğiz. Bu, CA ve istemci sertifikaları için Easy-RSA’nın kurulumunu içerecektir. Ardından, VPN sunucusuna bağlanmak ve sunucunun yerel ağına erişmeye başlamak için istemci sisteminin nasıl kullanılacağını göstereceğiz. Başlamak için aşağıda bizimle birlikte takip edin.
Bu eğitimde en az üç cihazınız olduğu varsayılacaktır. Biri OpenVPN sunucusu için, diğeri sertifika yetkilisi için ve son olarak VPN sunucusuna bağlanmak için kullanmayı planladığınız en az bir istemci cihazı için.
Setting Up a Certificate Authority
First, we will set up the system that we plan on using for the certificate authority (CA). Follow the step by step instructions below to finish the CA server:
- First, install the Easy-RSA package. This will be the tool that we use in order to generate a private key which will then sign requests from incoming client connections that need the CA to verify the identity of the OpenVPN server. On Debian and Ubuntu based systems:
$ sudo apt install easy-rsa
On Fedora based systems:
$ sudo dnf install easy-rsa
- Next, let’s get started with configuring Easy-RSA. We will do this by creating a directory for our Public Key Infrastrucure (PKI). This can be named whatever you want, but we will keep it straightforward for the sake of example:
$ mkdir ~/easy-rsa
- Daha sonra, tüm Easy-RSA dosyalarını yeni PKI dizinimize kopyalayabilir veya bunlara sembolik bir bağlantı oluşturabiliriz. Sembolik bağlantı oluşturmanın avantajı, gelecekte Easy-RSA paketine yönelik güncellemeler olması durumunda PKI dizinimizi değiştirmemize gerek kalmamasıdır. Bağlantıyı oluşturmak için aşağıdaki komutu yürütün:
$ ln -s /usr/share/easy-rsa/* ~/easy-rsa/ $ cd ~/easy-rsa
- ~/easy-rsa dizinine girdikten sonra, onu bir PKI dizini olarak başlatan betiği çalıştırıyoruz.
$ ./easyrsa init-pki
- Daha sonra konfigürasyonumuzda bazı değişkenleri ayarlamamız gerekiyor. Bu, PKI dizini ~/easy-rsa içinde vars adlı bir dosya oluşturularak yapılabilir.
$ nano vars
İçine aşağıdaki içerik yapıştırılabilir; kendi bilgilerinizi yansıtacak şekilde uyarlamanız yeterlidir:
set_var EASYRSA_REQ_COUNTRY "US" set_var EASYRSA_REQ_PROVINCE "LA" set_var EASYRSA_REQ_CITY "Los Angeles" set_var EASYRSA_REQ_ORG "LinuxConfig.org" set_var EASYRSA_REQ_EMAIL "[email protected]" set_var EASYRSA_REQ_OU "Linux Tutorials" set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512"
Dosyayı istediğiniz gibi düzenledikten sonra değişiklikleri kaydedin ve çıkın.
- Daha sonra build-ca betiğini çalıştıracağız. Bu, genel ve özel anahtar çifti oluşturan Sertifika Yetkilisini oluşturacaktır.
$ ./easyrsa build-ca
Anahtar çiftini koruyan bir parola girmeniz istenecektir. Ardından, ana bilgisayar adı veya kullanıcı adı gibi CA sunucunuzu temsil eden bir ad girin. Aşağıdaki ekran görüntüsünde linuxconfig-CA kullanıyoruz:
- Sunucunuz artık Sertifika Yetkilisi olarak görev yapmaya hazır. CA’nızla etkileşim kurması gereken tüm istemcilerin, bizimle birlikte takip ediyorsanız, ~/easy-rsa/pki dizininde saklanması gereken ca.crt dosyasının bir kopyasına ihtiyacı olacaktır.
$ cat ~/easy-rsa/pki/ca.crt
Dosyayı nasıl dağıtmayı seçeceğiniz size bağlıdır, ancak tüm VPN istemcilerinin dosyanın bir kopyasına ihtiyacı olacaktır.
Ca.key dosyanızı güvende tuttuğunuzdan emin olun. Bu dosya ~/easy-rsa/pki/private/ca.key konumunda saklanır ve sistemden asla ayrılmamalıdır. Bu dosyanın güvenliği ihlal edilirse CA’nın amacı kullanılamaz hale gelecektir.
OpenVPN ve Kolay-RSA Kurulumu
Şimdi VPN sunucusuna geçiyoruz. Burası VPN sunucu yazılımını kuracağımız yerdir; önceki bölümde yapılandırdığımız CA sunucusu ise sertifika verme veya iptal etme işlemlerinden sorumlu olacaktır.
İlk adım OpenVPN yazılımını ve Easy-RSA’yı kurmaktır. Bunlar, tüm büyük Linux dağıtımlarındaki resmi depolar aracılığıyla kolayca kurulabilir. OpenVPN ve Easy-RSA’yı sisteminizin paket yöneticisi ile kurmak için aşağıdaki uygun komutu kullanabilirsiniz.
OpenVPN ve Easy-RSA’yı Ubuntu, Debian ve Linux Mint’e kurmak için:
$ sudo apt install openvpn easy-rsa
OpenVPN ve Easy-RSA’yı Fedora, CentOS, AlmaLinux ve Red Hat’e yüklemek için:
$ sudo dnf install openvpn easy-rsa
OpenVPN ve Easy-RSA’yı Arch Linux ve Manjaro’ya kurmak için:
$ sudo pacman -S openvpn easy-rsa
OpenVPN Sunucusunu ve Easy-RSA’yı Kurma
Şimdi VPN sunucusunu kurmaya başlayacağız. CA sunucusunda yaptığımız bazı şeyleri tekrarlamamız gerektiğinden ilk birkaç adım tanıdık gelecektir. Başlayalım.
- Öncelikle, daha önce yaptığımız gibi easy-rsa dizinini oluşturun ve yüklü dosyalara sembolik bir bağlantı oluşturun.
$ mkdir ~/easy-rsa $ ln -s /usr/share/easy-rsa/* ~/easy-rsa/ $ cd ~/easy-rsa
- Bir vars dosyası oluşturun, ancak bu sefer CA’da yaptığımız tüm bilgileri doldurmamıza gerek yok.
$ nano vars
- Aşağıdaki satırları dosyaya yapıştırın ve kaydedin:
set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512"
Bunlar hem maksimum hız hem de güvenlik için önerilen güvenlik ayarlarıdır. Elbette bunları uygun gördüğünüz şekilde değiştirebilirsiniz.
- Inside of the
~/easy-rsa
directory, we run the script that initializes it as a PKI directory.$ ./easyrsa init-pki
- Daha sonra, VPN sunucusu için özel bir anahtarın yanı sıra bir Sertifika İmzalama İsteği (CSR) oluşturacağız. Daha sonraki adımlarda bu isteğin daha önce yapılandırdığımız CA tarafından imzalanması gerekecektir. Aşağıdaki komut sözdizimine bir göz atın:
$ ./easyrsa gen-req linuxconfig-server nopass
Burada gen-req seçeneğini easyrsa betiğine aktarıyoruz. Daha sonra VPN sunucumuz için linuxconfig-server olacak bir isim veriyoruz. Son olarak, nopass seçeneği istek dosyasındaki şifre korumasından kurtulacak ve bu da tüm süreci basitleştirecektir.
- Şimdi VPN sunucusunun özel anahtarını OpenVPN dizinine kopyalamamız gerekiyor. Önceki komutun çıktısı size özel anahtarınızın tam yolunu söylemelidir. Bizim durumumuzda aşağıdaki komut kullanılıyor:
$ sudo cp ~/easy-rsa/pki/private/linuxconfig-server.key /etc/openvpn/server/
linuxconfig-server.key’i kendi özel anahtarınızın adıyla değiştirmeniz gerekir.
- Bir sonraki adım, CSR’nin imzalanması için CA sunucusuna aktarılmasıdır. Dosyayı istediğiniz şekilde, örneğin scp komutuyla aktarabilirsiniz.
$ scp ~/easy-rsa/pki/reqs/linuxconfig-server.req linuxconfig@ca_server:/tmp
- Şimdi CA sunucusuna geçiyoruz. Artık .req dosyası CA sunucusuna aktarıldığına göre, onu içe aktaracağız ve ardından isteği imzalayacağız:
$ cd ~/easy-rsa $ ./easyrsa import-req /tmp/linuxconfig-server.req linuxconfig-server $ ./easyrsa sign-req server linuxconfig-server
Gerektiğinde kendi ortak adlarınızı kullandığınızdan emin olun. Bizimki sadece linuxconfig-server’dır. Ayrıca CA sunucusunda daha önce yapılandırdığımız parola da istenecektir.
- Şimdi ca.key ve linuxconfig-server.crt dosyalarını CA sunucusundan tekrar VPN sunucusuna aktarmamız gerekiyor. Bunu yapmak için scp’yi veya tercih ettiğiniz yöntemi kullanın:
$ scp ~/easy-rsa/pki/issued/linuxconfig-server.crt linuxconfig@vpn_server:/tmp $ scp ~/easy-rsa/pki/ca.crt linuxconfig@vpn_server:/tmp
- Şimdi VPN Sunucusuna geri dönüyorum. VPN sunucusunda, az önce aktardığımız /tmp dizinindeki dosyaları çıkarın ve /etc/openvpn/server dizinine yerleştirin. Bunları taşımak için kök izinlerine ihtiyacınız olacak:
$ sudo mv /tmp/{linuxconfig-server.crt,ca.crt} /etc/openvpn/server
- Son bir güvenlik önlemi olarak, bir tls-crypt ön paylaşımlı anahtarı oluşturabiliriz. Bu, OpenVPN sunucusunun güvenliğini artırır ve gelen trafiğin işlenmesini kolaylaştırır.
$ cd ~/easy-rsa $ openvpn --genkey secret ta.key
- Oluşturulan ta.key dosyasını /etc/openvpn/server/ dizinine kopyalayın:
$ sudo cp ta.key /etc/openvpn/server
Artık VPN’e bağlanacak her istemci için sertifika ve anahtar oluşturmaya devam etmeye hazırız.
Müşteriler için Sertifikalar ve Anahtarlar Oluşturun
Bu adımlar, sonunda açıkça belirtilecek olan CA sunucusuna geçiş yapana kadar VPN sunucusunda gerçekleştirilecektir. Her VPN istemcisi için bu adımları tekrarlamanız gerekecektir. Gelecekte sürecin otomatikleştirilmesine yardımcı olmak istemeniz durumunda, bazı Bash komut dosyalarının kullanışlı olabileceği yer burasıdır.
- Öncelikle istemcilerin anahtarlarını saklayacağımız bir dizin oluşturalım.
$ mkdir ~/client-keys
- Easy-RSA dizinine gidin ve ardından easyrsa betiğini kullanarak bir istemci için istek oluşturun. Bu örnekte istemcimizin adı linuxconfig-client olacaktır. Gerektiğinde sizinkini değiştirin:
$ cd ~/easy-rsa $ ./easyrsa gen-req linuxconfig-client nopass
- Yeni oluşturulan linuxconfig-client.key dosyasını daha önce oluşturduğumuz ~/client-keys dizinine kopyalayın:
$ cp ~/easy-rsa/pki/private/linuxconfig-client.key ~/client-keys
- Ayrıca linuxconfig-client.req dosyasını imzalanacak CA sunucusuna aktarmamız gerekecek. Bunu yapmak için scp veya başka bir yöntem kullanın:
$ scp ~/easy-rsa/pki/reqs/linuxconfig-client.req linuxconfig@ca_server:/tmp
- Şimdi CA sunucusuna geçiyoruz. CA sunucusundaki VPN istemcisine yönelik sertifika isteğini içe aktarın ve imzalayın:
$ cd ~/easy-rsa $ ./easyrsa import-req /tmp/linuxconfig-client.req linuxconfig-client $ ./easyrsa sign-req client linuxconfig-client
Önceki adımlarda yapılandırılmış olan CA parolası istenecektir. Süreç, VPN sunucusu için CSR’yi imzaladığımız zamanki süreçle hemen hemen aynı olduğundan, bunların hepsi tanıdık gelecektir.
- Linuxconfig-client.crt dosyasını VPN sunucusuna aktaralım:
$ scp ~/easy-rsa/pki/issued/linuxconfig-client.crt linuxconfig@vpn_server:/tmp
- Şimdi VPN Sunucusuna geri dönüyorum. VPN sunucusunda linuxconfig-client.crt dosyasını daha önce oluşturduğumuz ~/client-keys dizinine kopyalayın:
$ cp /tmp/linuxconfig-client.crt ~/client-keys
Ayrıca ta.key ve ca.crt dosyalarını da bu dizine kopyalamamız gerekecek:
$ cp ~/easy-rsa/ta.key ~/client-keys $ sudo cp /etc/openvpn/server/ca.crt ~/client-keys
OpenVPN Yapılandırması
OpenVPN’de, kendi VPN sunucusu yapılandırmalarınıza hızlı bir başlangıç yapmak için kullanılabilecek çeşitli örnek dosyalar bulunur. Bu dosyalardan birini kullanacağız ve onu ihtiyaçlarımıza göre özelleştirmeye başlayacağız. Yol boyunca kendi özelleştirmelerinizi de uygulayabilirsiniz, ancak daha önce kurduğumuz konfigürasyonla çalışabilmek için aşağıda görülen önerilerden bazılarının uygulanması gerekli olacaktır.
Aşağıdaki adımların VPN sunucusunda gerçekleştirileceğini unutmayın.
- OpenVPN belgelerinden server.conf örnek dosyasını alıp /etc/openvpn/server dizinine kopyalayarak başlayacağız.
$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server/
- Düzenlemeye başlamak için yeni kopyalanan dosyayı açın:
$ sudo nano /etc/openvpn/server/server.conf
- Bu dosyayı daha önce oluşturduğumuz TLS sertifikasını kullanacak şekilde yapılandırmamız gerekecek. Aşağıdaki satırı bulun ve bir ; ekleyerek yorum yapın. önündeki karakter:
tls-auth ta.key 0 # This file is secret
Bunun altına aşağıdaki satırı ekleyin:
tls-crypt ta.key
Nihai sonuç şöyle görünmelidir:
;tls-auth ta.key 0 # This file is secret tls-crypt ta.key
- Daha sonra aşağıdaki şifre satırını bulun ve yorumlayın:
cipher AES-256-CBC
Hemen altına aşağıdaki iki satırı ekleyin:
cipher AES-256-GCM auth SHA256
Nihai sonuç şöyle görünmelidir:
;cipher AES-256-CBC cipher AES-256-GCM auth SHA256
Bu, VPN bağlantımızı varsayılan yapılandırmadan daha iyi şifreleme kullanmaya zorlayacaktır.
- VPN sunucumuzu DH (Diffie-Hellman) yerine ECC (Eliptik Eğri Şifreleme) kullanacak şekilde yapılandırdığımız için aşağıdaki dh satırını bulmamız ve yorumlamamız gerekecek:
dh dh2048.pem
Hemen altına aşağıdaki satırı ekleyin:
dh none
Nihai sonuç şöyle görünmelidir:
;dh dh2048.pem dh none
- OpenVPN arka plan programının başlatıldığında ayrıcalıklarını azaltmak ve dolayısıyla potansiyel saldırı yüzeyini azaltmak için aşağıdaki satırları bulun ve yorumlarını kaldırın:
;user nobody ;group nobody
“;” işaretini kaldırdığınızda şöyle görünecek
user nobody group nobody
- Tüm istemci trafiğini VPN üzerinden yeniden yönlendirmek istiyorsanız aşağıdaki satırı bulabilir ve yorumunu kaldırabilirsiniz:
;push "redirect-gateway def1 bypass-dhcp"
Bu kesinlikle gerekli değildir ancak çoğu VPN’nin kullandığı davranıştır, dolayısıyla müşterilerin beklediği de budur.
- VPN istemcilerine ad çözümlemesi için kullanılacak bazı DNS sunucularını veren aşağıdaki satırların açıklamasını kaldırın. Bunlar OpenDNS sunucularının IP’leridir, ancak istediğiniz herhangi bir DNS sunucusu IP’sini koyabilirsiniz:
;push "dhcp-option DNS 208.67.222.222" ;push "dhcp-option DNS 208.67.220.220"
Yorumu iptal etmek için “;” işaretini kaldırdığınızdan emin olun.
- Son olarak aşağıdaki satırları bulun:
cert server.crt key server.key
Daha önce oluşturduğumuz dosyaları işaret edecek şekilde bunları düzenlememiz gerekecek. Örneğimizde ortak ad olarak linuxconfig-server’ı kullandık, dolayısıyla bunları şu şekilde değiştireceğiz:
cert linuxconfig-server.crt key linuxconfig-server.key
Her şey hazır, bu nedenle değişikliklerinizi bu dosyaya kaydedin ve çıkın.
IP İletmeyi Yapılandırma
OpenVPN sunucusunda, VPN istemcilerinin istekleri OpenVPN sunucusuna iletebildiğinden ve daha sonra bunları nihai bir hedefe iletebildiğinden emin olmak için IP yönlendirme çekirdek parametresini değiştirmemiz gerekecek.
- Aşağıdaki dosyayı kök izinleriyle düzenleyin:
$ sudo nano /etc/sysctl.conf
- Dosyanın en altına aşağıdaki satırı ekleyin:
net.ipv4.ip_forward = 1
Değişikliklerinizi kaydedin ve dosyadan çıkın.
- Ardından değişikliklerin etkili olması için şunu yürütün:
$ sudo sysctl -p
OpenVPN Hizmetini başlatın
Artık OpenVPN yapılandırıldığına göre hizmeti başlatabiliriz.
Aşağıdaki komut OpenVPN hizmetini başlatacaktır:
$ sudo systemctl start [email protected]
OpenVPN’in sunucu her açıldığında otomatik olarak başlatılmasını istiyorsanız systemctl etkinleştirmeyi aşağıdaki gibi kullanabiliriz:
$ sudo systemctl -f enable [email protected]
Hizmetin durumunu istediğiniz zaman kontrol etmek için aşağıdaki komutu kullanın:
$ systemctl status openvpn.service
İstemci Yapılandırma Dosyası Oluştur
Son adım, VPN istemciniz için bir yapılandırma dosyası oluşturmaktır. Bu dosya, .crt dosyaları ve .key dosyalarıyla birlikte, VPN sunucusuyla bağlantı başlatmak için VPN istemcilerine gönderilebilir.
- Öncelikle client.conf örnek dosyasını daha önce oluşturduğumuz ~/client-keys dizinine kopyalayın:
$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-keysclient.conf
- Bu yalnızca bir şablon dosyasıdır ve üzerinde birkaç değişiklik yapmamız gerekecek. Düzenlemeye başlamak için dosyayı açın:
$ nano ~/client-keys/client.conf
- Aşağıdaki satırı bulun:
remote my-server-1 1194
VPN sunucumuzun IP’sini belirtmemiz gereken yer burasıdır. 1194 yalnızca OpenVPN’in çalıştığı bağlantı noktasıdır, bu nedenle bu kısmı yalnızca gerekiyorsa değiştirin. My-server-1’i OpenVPN sunucunuzun IP adresiyle değiştirin
- Sunucu yapılandırma dosyasında yaptığımız gibi aşağıdaki iki satırın yorum işaretini kaldırın:
;user nobody ;group nobody
- Aşağıdaki satırları bulun ve yorum işareti ekleyin:
ca ca.crt cert client.crt key client.key
Hat içi konfigürasyon kullanacağımız için bunlar bizim için önemsiz olacaktır.
- Aşağıdaki satırı bulun ve yorum işareti ekleyin:
tls-auth ta.key 1
Bu alakasız bir hat ve yine de hat içi konfigürasyon kullanacağız.
- Aşağıdaki satırı bulun ve yorum işareti ekleyin:
cipher AES-256-CBC
Aşağıdaki iki satırla değiştirin:
cipher AES-256-GCM auth SHA256
Nihai sonuç şöyle olur:
;cipher AES-256-CBC cipher AES-256-GCM auth SHA256
- Bu dosyanın altına aşağıdaki satırı ekleyin:
key-direction 1
İşiniz bittiğinde dosyayı kaydedin ve kapatın.
- Artık tüm bu sertifikaları, yapılandırmaları ve anahtar dosyalarını, kolay bağlantı için istemciye gönderilebilecek tek bir .ovpn dosyasında birleştireceğiz.
$ cd ~/client-keys $ cat client.conf > linuxconfig-client.ovpn $ echo '<CA>' >> linuxconfig-client.ovpn $ cat ca.crt >> linuxconfig-client.ovpn $ echo '</CA>' >> linuxconfig-client.ovpn $ echo '<cert>' >> linuxconfig-client.ovpn $ cat linuxconfig-client.crt >> linuxconfig-client.ovpn $ echo '</cert>' >> linuxconfig-client.ovpn $ echo '<key>' >> linuxconfig-client.ovpn $ cat linuxconfig-client.key >> linuxconfig-client.ovpn $ echo '</key>' >> linuxconfig-client.ovpn $ echo '<tls-crypt>' >> linuxconfig-client.ovpn $ cat ta.key >> linuxconfig-client.ovpn $ echo '</tls-crypt>'
Bunu yapmak özellikle geniş ölçekte biraz zahmetlidir; bu nedenle, eğer bunu sık sık yapmayı planlıyorsanız bazı Bash komut dosyaları yazmanız önerilir. Her halükarda nihai sonuç, OpenVPN istemcisine gönderilebilecek eksiksiz bir linuxconfig-client.ovpn dosyasıdır.
OpenVPN Sunucusuna Bağlanma
VPN sunucusuna bağlanmak en kolay kısımdır. OpenVPN sunucusunda oluşturulan tüm dosyaları aldıktan sonra bağlanmak için aşağıdaki komut sözdizimini kullanın:
$ sudo openvpn --config linuxconfig-client.ovpn
Talimatlar elbette MacOS ve Windows gibi farklı işletim sistemlerine göre değişiklik gösterecektir, ancak esasen süreç neredeyse aynıdır; yalnızca .ovpn dosyasını OpenVPN istemci programına sağlamanız yeterlidir.
Yazının orijinalini buradan okuyabilirsiniz.

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.