Giriş
Güvenilir olmayan bir ağa (örneğin bir otel veya kafedeki Wi-Fi) bağlandığınızda akıllı telefonunuzdan veya dizüstü bilgisayarınızdan internete güvenli bir şekilde erişmek ister misiniz? Neyse ki, isteklerinizi gerçekleştirmenin bir yolu var. Şunu kullanarak güvenilmeyen bir ağa sanki özel bir ağdaymış gibi güvenle bağlanabilirsiniz: Sanal Özel Ağ (VPN).
VPN Nedir?
VPN, Sanal Özel Ağ (Virtual Private Network) anlamına gelir. Güvenilir bir sunucuya güvenli bir tünel açma imkanı sunar. Tüm istekler daha sonra bu sunucu üzerinden gönderilir ve alınır. Avantajı, bir oteldeki ücretsiz Wi-Fi gibi halka açık ağları kullanırken erişiminizi ve işlemlerinizi güvence altına almasıdır.
VPN aracılığıyla tüm veriler şifrelenir ve sunucu üzerinden işlenir. Üçüncü taraf yönlendiriciler ve benzerleri gibi arada bulunan cihazların, trafiği istenmeyen hedeflere yönlendirme imkanı yoktur. Ayrıca, bağlantı başarıyla kurulduktan sonra sunucu’nun ağının bir parçası olursunuz. Normalde yalnızca sunucu’nun yerel ağında erişilebilir olan diğer sunuculara, bilgisayarlara veya yazıcılar gibi cihazlara artık VPN tüneli üzerinden de erişilebilir. Ancak, tüm verilerin şifreli bir tünel üzerinden gönderilmesi gerekmediğinden, VPN istemcisini yalnızca isteklerin tanımlanmış bir kısmı VPN tüneli üzerinden gönderilecek şekilde yapılandırmak mümkündür. Trafiğin geri kalanı internet üzerinden normal şekilde işlenir.
Bu eğitimde, Ubuntu 18.04 üzerinde bir OpenVPN sunucusu kurma adımlarında size yol göstereceğiz.
Gereksinimler
Şu hizmetinizi barındırmak için bir Ubuntu 18.04 sunucusuna erişiminiz olmalıdır: OpenVPN hizmeti (bu eğitimi tamamlamak için). Bu kılavuza başlamadan önce, sudo izinlerine sahip root olmayan bir kullanıcı da yapılandırmanız gerekir. Sunucunuzu, şu eğitimimizi takip ederek kolayca kurabilirsiniz: Ubuntu sunucusu kurulumu eğitimi.
Ayrıca, şu görevde kullanılmak üzere ayrı bir bilgisayara ihtiyacınız olacak: sertifika yetkilisi (CA). Teknik olarak, OpenVPN sunucunuzu veya yerel bilgisayarınızı bir sertifika yetkilisi olarak kullanabilirsiniz. Ancak, bu durum VPN’inizi güvenlik açıklarına maruz bırakacağı için bunu önermiyoruz. Resmi OpenVPN belgelerine göre, sertifika yetkilisini sertifika isteklerini içe aktarmaya ve imzalamaya adanmış ayrı bir bilgisayara yerleştirmelisiniz. Bu nedenle, sertifika yetkilinizin, sudo izinlerine sahip root olmayan bir kullanıcıya ve temel bir güvenlik duvarına sahip ayrı bir Ubuntu 18.04 sunucusunda olduğunu varsayıyoruz. Bu kılavuz boyunca, tüm kurulum ve yapılandırma adımları her bir kurulum için olabildiğince basit olacaktır. Ayrıca şu eğitimimize de göz atabilirsiniz: Docker altında Open VPN sunucusunun nasıl kurulacağı.
Adım 1 – OpenVPN ve EasyRSA Kurulumu
İlk olarak, VPN sunucu’nuzun paket dizinini güncelleyin ve OpenVPN’i kurun. OpenVPN varsayılan Ubuntu depolarında mevcut olduğundan, apt kullanarak kurabilirsiniz:
|
1 2 |
sudo apt update sudo apt install openvpn |
Adım 2: Bir sertifika yetkilisi oluşturun
OpenVPN sunucusu için güvenilir sertifikalar düzenlemek üzere basit bir sertifika yetkilisi (CA) oluşturun. Bunu yapmak için, wget kullanarak hem CA makinenize hem de OpenVPN sununuza EasyRSA'nın en son sürümünü indirin. En son sürümü edinmek için resmi EasyRSA GitHub projesinin Sürümler (Releases) sayfasına gidin, .tgz ile biten dosyanın indirme bağlantısını kopyalayın ve aşağıdaki komuta yapıştırın:
|
1 |
wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz <span class="s1">--no-check-certificate</span> |
Ardından, tar arşivini çıkarın:
|
1 2 |
cd ~ tar xvf EasyRSA-3.0.4.tgz |

Bu noktada, gerekli tüm yazılımlar CA bilgisayarınıza ve sunucunuza başarıyla kurulmuştur.
Adım 3 – EasyRSA değişkenlerini yapılandırın ve CA'yı oluşturun
EasyRSA, bu komutu kullanarak CA'nız için bir dizi değişken tanımlamak üzere düzenleyebileceğiniz bir yapılandırma dosyasıyla birlikte gelir:
|
1 |
cd ~/EasyRSA-3.0.4/ |
Dizinde vars.example adında bir dosya bulunmaktadır. Bu dosyanın bir kopyasını oluşturun ve kopyayı dosya uzantısı olmadan vars olarak adlandırın:
|
1 |
cp vars.example vars |
Bu yeni dosyayı açmak için tercih ettiğiniz metin düzenleyiciyi kullanın:
|
1 |
nano vars |
Ardından, yeni sertifikalar için alan varsayılanlarını ayarlayan ayarları bulun. Şuna benzer olacaktır:
|
1 2 3 4 5 6 |
#set_var EASYRSA_REQ_COUNTRY "US" #set_var EASYRSA_REQ_PROVINCE "California" #set_var EASYRSA_REQ_CITY "San Francisco" #set_var EASYRSA_REQ_ORG "Copyleft Certificate Co" #set_var EASYRSA_REQ_EMAIL "me@example.net" #set_var EASYRSA_REQ_OU "My Organizational Unit" |
Bu değişkenleri aşağıda gösterildiği gibi istediğiniz şekilde güncelleyin:
|
1 2 3 4 5 6 |
set_var EASYRSA_REQ_COUNTRY "SL" set_var EASYRSA_REQ_PROVINCE "Zurich" set_var EASYRSA_REQ_CITY "Zurich City" set_var EASYRSA_REQ_ORG "CloudSigma" set_var EASYRSA_REQ_EMAIL "admin@example.com" set_var EASYRSA_REQ_OU "Community" |
Hazır olduğunuzda dosyayı kaydedip kapatın. Bir sonraki adım, CA sunucusunda açık anahtar altyapısını başlatmak için easyrsa betiğini çağırmak ve init-pki seçeneğiyle çalıştırmaktır:
|
1 |
./easyrsa init-pki |

Ardından, CA'nızla her etkileşime girdiğinizde sizden şifre istenmemesi için build-ca komutunu nopass seçeneğiyle çalıştırın:
|
1 |
./easyrsa build-ca nopass |
Çıktıda, CA'nız için ortak adı doğrulamanız istenecektir:

Bununla birlikte, CA'nız hazır hale gelir ve sertifika isteklerini imzalamaya başlamaya hazırdır.
Adım 4 – Sunucu sertifikası, anahtarı ve şifreleme dosyalarını oluşturma
CA hazır olduktan sonra, sunucudan özel anahtarı ve sertifika isteğini oluşturabilir ve ardından gerekli sertifikayı oluşturarak imza için CA'ya gönderebilirsiniz. İlk olarak, OpenVPN sunucusundaki EasyRSA dizinine gidin:
|
1 |
cd EasyRSA-3.0.4 |
Buradan, easyrsa betiğini init-pki seçeneğiyle çalıştırın. Bu komutu CA bilgisayarında zaten çalıştırmış olsanız da, burada da çalıştırılması gerekir. Bunun nedeni, sunucunun ve CA'nın PKI dizinlerinin farklı olmasıdır:
|
1 |
./easyrsa init-pki |
Ardından easyrsa betiğini bu kez gen-req seçeneği ve ardından bilgisayarın’ genel adı ile tekrar çağırın:
|
1 |
./easyrsa gen-req server nopass |
Bu, sunucu için özel bir anahtar ve server.req adında bir sertifika istek dosyası oluşturacaktır. Sunucu anahtarını /etc/openvpn/ dizinine kopyalayın:
|
1 |
sudo cp ~/EasyRSA-3.0.4/pki/private/server.key /etc/openvpn/ |
server.req dosyasını güvenli bir yöntem kullanarak (aşağıdaki örnekte SCP gibi) CA bilgisayarınıza aktarın:
|
1 |
scp ~/EasyRSA-3.0.4/pki/reqs/server.req cloudsigma@your_CA_ip:/tmp |
Ardından, CA bilgisayarınızdaki EasyRSA dizinine gidin:
|
1 |
cd EasyRSA-3.0.4/ |
server.req dosyasını içe aktarmak ve dosya yolundan sonra ortak adını eklemek için easyrsa betiğini tekrar kullanın:
|
1 |
./easyrsa import-req /tmp/server.req server |
Ardından, easyrsa betiğini sign-req seçeneği ve ardından istek türü ile ortak adı belirterek çalıştırıp isteği imzalayın. OpenVPN sunucusunun sertifika isteği için, sunucu istek türünü kullandığınızdan emin olun:
|
1 |
./easyrsa sign-req server server |
Çıktı, isteğin güvenilir bir kaynaktan geldiğini doğrulamanızı ister. Onaylamak için yes yazın ve Enter tuşuna basın. Doğruluğundan emin olmak için lütfen aşağıda gösterilen ayrıntıları kontrol edin. Lütfen bu isteğin henüz şifreyle doğrulanmadığını unutmayın.
Konuyu talep edin ve bunu 3650 gün boyunca bir sunucu sertifikası olarak imzalayın:

CA anahtarını şifrelediyseniz, bu noktada sizden şifre istenecektir. Ardından, imzalı sertifikayı VPN sunucunuza geri aktarmak için güvenli bir yöntem kullanın:
|
1 |
scp pki/issued/server.crt siigma@your_server_ip:/tmp |
CA bilgisayarından çıkış yapmadan önce ca.rt dosyasını sunucuya aktarın:
|
1 |
scp pki/ca.crt siigma@our_server_ip:/tmp |
Ardından, OpenVPN sunucunuza tekrar giriş yapın ve server.crt ile ca.crt dosyalarını /etc/openvpn/ dizininize kopyalayın:
|
1 |
sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/ |
Ardından, EasyRSA dizininize gidin:
|
1 |
cd ~/EasyRSA-3.0.4/ |
Anahtar değişimi sırasında kullanabileceğiniz güçlü bir Diffie-Hellman anahtarı oluşturmak için aşağıdaki kodu girin:
|
1 |
./easyrsa gen-dh |
İşlem tamamlandığında, sunucunun TLS sağlık kontrolü işlevselliğini iyileştirmek için bir HMAC imzası oluşturun:
|
1 |
openvpn --genkey --secret ta.key |
Komut tamamlandığında, iki yeni dosyayı / etc / openvpn / dizinine kopyalayın:
|
1 2 |
sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/ sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/ |
Bu şekilde, sunucu için gerekli tüm sertifikalar ve anahtar dosyaları oluşturulmuş olur. Şimdi, istemci bilgisayarın OpenVPN sunucusuna erişmek için kullanacağı uygun sertifikayı ve anahtarı oluşturabilirsiniz.
Adım 4 – İstemci sertifikası ve anahtar çifti oluşturma
Ardından, bir istemci anahtarı ve birkaç sertifika oluşturacağız. Birden fazla istemciniz varsa, bu işlemi her istemci için tekrarlayabilirsiniz. Ancak, her istemci için betiğe benzersiz bir ad değeri iletmeniz gerektiğini unutmayın. Bu kılavuzda, ilk sertifika/anahtar çiftini client1 olarak adlandıracağız. İlk olarak, istemci sertifikalarını ve anahtar dosyalarını depolamak için ev dizininizde bir dizin yapısı oluşturun:
|
1 |
mkdir -p ~/client-configs/keys |
Güvenlik nedenleriyle sertifika/anahtar çiftini ve istemcinin yapılandırma dosyasını bu dizine kaydettiğiniz için, şimdi izinleri kısıtlamalısınız:
|
1 |
chmod -R 700 ~/client-configs |
Ardından tekrar EasyRSA dizinine gidin ve easyrsa betiğini gen-req ve nopass seçeneklerinin yanı sıra istemcinin genel adıyla çalıştırın:
|
1 2 |
cd ~/EasyRSA-3.0.4/ ./easyrsa gen-req client1 nopass |
Ortak adı onaylamak için Enter tuşuna basın. Bundan sonra, client1.key dosyasını önceden oluşturulmuş olan / client-configs / keys / dizinine kopyalayın:
|
1 |
cp pki/private/client1.key ~/client-configs/keys/ |
Ardından, client1.req dosyasını CA bilgisayarınıza aktarmak için güvenli bir yöntem kullanın:
|
1 |
scp pki/reqs/client1.req sigma@your_CA_ip:/tmp |
CA bilgisayarınıza giriş yapın, EasyRSA dizinine gidin ve sertifika isteğini içe aktarın:
|
1 2 3 |
ssh siigma@your_CA_ip cd EasyRSA-3.0.4/ ./easyrsa import-req /tmp/client1.req client1 |

Ardından, önceki adımda olduğu gibi, sunucudaki isteği imzalayın. Ancak bu sefer istemci istek türünü belirtmeniz gerekir:
|
1 |
./easyrsa sign-req client client1 |
İstendiğinde, sertifika isteğini imzalamak istediğinizi ve sertifika isteğinin güvenilir bir kaynaktan geldiğini onaylamak için yes yazın. Devam etmek için lütfen “yes” kelimesini girin veya iptal etmek için başka bir şey girin:
|
1 |
Confirm Request Details: Yes |

CA anahtarını şifrelediyseniz, burada da şifreyi girmeniz istenecektir. Bu, client1.crt adında bir istemci sertifikası dosyası oluşturacaktır. Bu dosyayı sunucuye geri aktarın:
|
1 |
scp pki/issued/client1.crt siigma@your_server_ip:/tmp |
OpenVPN sunucunuza tekrar SSH ile bağlanın ve istemci sertifikasını / client-configs / keys / dizinine kopyalayın:
|
1 |
cp /tmp/client1.crt ~/client-configs/keys/ |
Ardından, ca.crt ve ta.key dosyalarını / client-configs / keys / dizinine kopyalayın:
|
1 2 |
cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/ sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/ |
Böylece sunucunun ve istemcinin tüm sertifikaları ve anahtarları oluşturulmuş ve sunucudaki ilgili dizinlere kaydedilmiş oldu. Şimdi sunucuda OpenVPN kurulumuna devam edebilirsiniz.
Adım 5 – OpenVPN servisinin yapılandırılması
İstemci ve sunucu sertifikalarını oluşturduktan sonra, OpenVPN servisini bu kimlik bilgilerini kullanacak şekilde yapılandırabilirsiniz. İlk olarak, OpenVPN örnek yapılandırma dosyasını yapılandırma dizininize kopyalayın ve ardından kurulum temeli olarak kullanmak üzere çıkartın:
|
1 2 |
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gzip -d /etc/openvpn/server.conf.gz |
Sunucu yapılandırma dosyasını tercih ettiğiniz metin düzenleyicide açın:
|
1 |
sudo nano /etc/openvpn/server.conf |
Ardından, tls-auth komutunu arayarak HMAC bölümünü bulun:
|
1 |
tls-auth ta.key 0 # Bu dosya gizlidir |
Yorum satırı yapılmış şifre satırını arayarak şifre bölümünü bulun. AES-256-CBC şifrelemesi iyi bir şifreleme düzeyi sunar ve yaygın olarak desteklenir. Satırın yorum satırı olmaması gerekir, ancak öyleyse başındaki “;” işaretini silin:
|
1 |
cipher AES-256-CBC |
Bunun altına, HMAC mesaj özet algoritmasını seçmek için bir Auth komutu ekleyin. Bunun için SHA256 iyi bir seçimdir:
|
1 |
auth SHA256 |
Ardından, Diffie-Hellman parametrelerini tanımlayan dh ifadesinin bulunduğu satırı bulun. EasyRSA'daki bazı son değişiklikler nedeniyle, Diffie-Hellman anahtar dosya adı, örnek sunucu yapılandırma dosyasında listelenen dosya adından farklı olabilir. Gerekirse, önceki adımın anahtarıyla uyumlu hale getirmek için buradaki dosya adından 2048'i silerek değiştirin:
|
1 |
dh dh.pem |
Son olarak, user ve group ayarlarını bulun ve her satırın başındaki “;” işaretini silin:
|
1 2 |
user nobody group nogroup |
Şu ana kadar örnek server.conf dosyasında yaptığınız değişiklikler OpenVPN'in çalışmasını sağlamalıdır.
Adım 6 – Sunucu ağ yapılandırması
Trafiği VPN üzerinden düzgün bir şekilde yönlendirmek için IP yönlendirmeyi yapılandırın. Bu, sunucunuzun sağladığı VPN işlevselliği için gereklidir:
|
1 |
sudo nano /etc/sysctl.conf |
net.ipv4.ip_forward ayarını yapan yorum satırını arayın. Bu ayarı etkinleştirmek için satırın başındaki “#” karakterini kaldırın:
|
1 |
net.ipv4.ip_forward=1 |
İşiniz bittiğinde dosyayı kaydedip kapatın. Dosyayı okumak ve mevcut oturum için değerleri ayarlamak için şunu yazın:
|
1 |
sudo sysctl -p |

Ardından, makinenizin genel ağ arayüzünü ekleyin:
|
1 |
ip route | grep default |
Genel arayüzünüz, bu komutun çıktısında “dev” kelimesinden sonra gelen dizedir. Örneğin, bu sonuç ens3 adlı arayüzü gösterir.

İlgili yapılandırmayı eklemek için /etc/ufw/before.rules dosyasını açın:
|
1 |
$ sudo nano /etc/ufw/before.rules |
Dosyanın üst kısmına doğru, nat tablosundaki POSTROUTING zinciri için varsayılan politikayı ayarlamak ve VPN'den gelen tüm trafiği maskelemek (masquerade) için aşağıdaki vurgulanmış satırları ekleyin. Aşağıdaki -A POSTROUTING satırındaki ens3 ifadesini yukarıdaki komutta bulduğunuz arayüzle değiştirin:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# rules.before # ufw komut satırı tarafından eklenen kurallardan önce çalıştırılması gereken kurallar. Özel # kurallar şu zincirlerden birine eklenmelidir: # ufw-before-input # ufw-before-output # ufw-before-forward # OPENVPN KURALLARI BAŞLANGICI # NAT tablosu kuralları *nat :POSTROUTING ACCEPT [0:0] # OpenVPN istemcisinden wlp11s0 arayüzüne gelen trafiğe izin ver (keşfettiğiniz arayüzle değiştirin!) -A POSTROUTING -s 10.8.0.0/8 -o ens3 -j MASQUERADE COMMIT # OPENVPN KURALLARI BİTİŞİ # Bu gerekli satırları silmeyin, aksi takdirde hatalar oluşacaktır . . . |
İşiniz bittiğinde dosyayı kaydedip kapatın. Ardından, UFW'ye varsayılan olarak yönlendirilen paketlere de izin vermesini söylemeniz gerekir. Bunu yapmak için /etc/default/ufw dosyasını açın:
|
1 |
sudo nano /etc/default/ufw |
İçeride, DEFAULT_FORWARD_POLICY yönergesini bulun ve değeri DROP yerine ACCEPT olarak değiştirin:
|
1 |
DEFAULT_FORWARD_POLICY="ACCEPT" |
İşiniz bittiğinde dosyayı kaydedip kapatın. Ardından, OpenVPN'e giden trafiği etkinleştirmek için güvenlik duvarını ayarlayın. Eğer /etc/openvpn/server.conf dosyasındaki portu ve protokolü değiştirmediyseniz, 1194 portuna UDP trafiğini açmanız gerekecektir. Portu ve/veya protokolü değiştirdiyseniz, burada seçtiğiniz değerleri kullanın. Önkoşul kılavuzunu takip ederken SSH portunu eklemeyi unuttuysanız, onu da buraya ekleyin:
|
1 2 |
sudo ufw allow 1194/udp sudo ufw allow OpenSSH |
Bu kuralları ekledikten sonra, UFW'yi yeniden başlatmak ve değiştirdiğiniz tüm dosyalardaki değişiklikleri yüklemek için devre dışı bırakıp tekrar etkinleştirin:
|
1 2 |
sudo ufw disable sudo ufw enable |

Tebrikler, sunucunuz artık OpenVPN trafiğini doğru şekilde işleyecek şekilde yapılandırıldı!
Sonuç
Bu kılavuzu sonuna kadar takip ettiyseniz, artık internette güvenle gezinebilirsiniz. Kimliğinizi, konumunuzu ve trafiğinizi meraklı gözlerden uzak tutabileceksiniz.
Keyifli kullanımlar!
Yorumlar
Henüz yorum yapılmamış. İlk siz olun.