Centos 6 ve Centos 5 üzerine OpenVPN kurulumu ve yapılandırması

Bu yazımızda Centos 6 64 bitlik sürüm üzerine, özellikle anonim internet bağlantısı sağlayan bir VPN sunucu olarak kullanılabilecek, OpenVPN kurulumunu anlatıyor olacağız. Centos 5 versiyonunda kurulum yapacaklar içinde bir iki ufak fark dışında kurulum rutini aynıdır. Bunlarıda yazımızda belirteceğiz.

1 – OpenVPN Nedir ?
2 – Kurulum
3 – EasyRSA ile sertifikaların oluşturulması
4 – Güvenlik Duvarı ve Ağ yapılandırması
5 – Sunucu konfigürasyon dosyaları
6 – İstemci Yapılandırması

1 – OpenVPN Nedir ?

Öncelikle OpenVPN’in ne olduğuna kısaca bir göz atalım.

OpenVPN, SSL sertifikaları vasıtası ile güvenli veri iletişimi sağlayan bir VPN türüdür. Diğer VPN türlerine kıyasla daha basit yapısı sayasinde daha hızlı kurulum yapılıp, bir çok farklı ortamda sıkıntısız bir şekilde kullanılabilir. PPTP ya da IPSec’den farklı olarak bağlantı için tek bir porta ihtiyaç duyması, network yöneticileri ve kullanıcılar için ayarları gayet basit hale getirmektedir. Windows, Linux, MacOS, iOS, Android gibi popüler tüm işletim sistemlerinde OpenVPN istemcileri varolduğundan dolayı her platformda kullanılabilir.

2 – Kurulum

OpenVPN’in açık kaynak kodlu sürümüne ait kaynak dosyalarına aşağıdaki adresten ulaşılabilir.

http://openvpn.net/index.php/open-source/downloads.html

RPMforge depolarından OpenVPN’in derlenmiş hali indirilebilir ama bu yazımızda en güncel sürümünü kullanabilmek amacı ile kaynaktan kurulumu analatacağız. Bu yazının yazıldığı sıradaki en güncel sürümü olan OpenVPN 2.3.2 sürümünün kurulumunu yapacağız.

GEREKLİ PAKETLER

OpenVPN :
http://swupdate.openvpn.org/community/releases/openvpn-2.3.2.tar.gz

pkcs11-helper, pkcs11-helper-devel :
Bu paketler derlenmiş halde RPMForge depolarında bulunuyor. Paketler, RPMForge depolarından kurulacaktır.

lzo, lzo-devel, openssl, openssl-devel, pam, pam-devel, gcc, libtool, rpm-build :
Varsayılan depolardan kurulacak olan paketler. Centos 5 için varsayılan depolarda bulunmayan lzo ve lzo-devel paketleri RPMForge depolarından temin edilir.

unzip :OpenVPN sertifika yapılandırması için kullanılan EasyRSA paketini diske açmak için gerekmektedir.

RPMForge depolarını etkinleştirebilmek için ilk önce Centos 6 64 bit için olan rpmforge-release paketini kurmak gerekmektedir. Aşağıdaki komutla bu kurulum yapılır.

# rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

Fakat bu kurulum, RPMForge deposunu aktif hale getirdiği için Centos depolarından kurulacak paketlerle çakışma yaşanması ya da üzerine yazılması ihtimaline karşı pasif hale getirmek, depoyu sadece gerçekten kullanılması gerektiği zaman aktifleştirmek en mantıklı yoldur.

Pasif hale getirmek için “/etc/yum.repos.d/rpmforge.repo” dosyası içindeki tüm “enabled = 1” yazan satırları “enabled = 0” haline getirmek gerekmektedir. Kullanılması gerektiği zaman RPMForge depolarını aktifleştirmek için yum’un “–enablerepo=rpmforge” anahtarını kullanmak yeterli olacaktır.

“pkcs11-helper, pkcs11-helper-devel” paketlerinin kurulumu aşağıdaki şekilde yapılır.

# yum install pkcs11-helper pkcs11-helper-devel --enablerepo=rpmforge

“lzo, lzo-devel, openssl, openssl-devel, pam, pam-devel, gcc, libtool, rpm-build” paketlerinin kurulumu da aşağıdaki şekilde yapılır.

# yum install lzo lzo-devel openssl openssl-devel pam pam-devel gcc libtool rpm-build unzip

OpenVPN kaynak dosyası “/tmp” klasörüne indirilir.

# cd /tmp
# wget http://swupdate.openvpn.org/community/releases/openvpn-2.3.2.tar.gz

Ve rpmbuild komutu kullanılarak OpenVPN derlenir.

# rpmbuild -tb openvpn-2.3.2.tar.gz

Derlenen paket “/root/rpmbuild/RPMS/x86_64/” klasöründe bulunmaktadır. Centos 5 versiyonunda derlenen paketler için “/usr/src/redhat/RPMS/x86_64/” klasörüne bakmak gerekmektedir. OpenVPN paketinin kurulumu aşağıdaki şekilde yapılır.

# rpm -ivh /root/rpmbuild/RPMS/x86_64/openvpn-2.3.2-1.x86_64.rpm

OpenVPN tarafından kurulmuş olan çeşitli örnek dosyalar da “/etc/openvpn” altına kopyalanır. Zorunlu değildir ama çalışma açısından kolaylık sağlar.

# cp -Rv /usr/share/doc/openvpn-2.3.2/sample /etc/openvpn/

3 – EasyRSA ile sertifikaların oluşturulması

OpenVPN için sertifika oluşturmakta kullanılan EasyRSA paketi OpenVPN 2.3.0 ve sonraki versiyonlarda kaynak kod paketinin içinden çıkarılmıştır. Ayrıca indirmek gerekmektedir. OpenVPN 2.x sürümleri için EasyRSA’nin 2.0 sürümü kullanılmaktadır.

# wget -O easy-rsa.zip https://github.com/OpenVPN/easy-rsa/archive/master.zip
# unzip easy-rsa.zip
# mv -v easy-rsa-master/easy-rsa/2.0 /etc/openvpn/easy-rsa

EasyRSA yapılandırması için öncelikle “/etc/openvpn/easy-rsa” içindeki “vars” dosyası düzenlenir. Önemli satırlar aşağıda gösterilmiştir.

-------------------------------
export EASY_RSA="`pwd`"
export KEY_DIR="$EASY_RSA/keys"
export KEY_SIZE=2048
export CA_EXPIRE=3650
export KEY_EXPIRE=3650
export KEY_COUNTRY="TR"
export KEY_PROVINCE="Istanbul"
export KEY_CITY="Istanbul"
export KEY_ORG="Milidia Blog"
export KEY_EMAIL="openvpn@milidia.com"
export KEY_OU="BilgiIslem"
export KEY_NAME="openvpn"
-------------------------------

Daha sonra “/etc/openvpn/easy-rsa” içindeki “vars” ve “clean-all” dosyaları sırayla çalıştırılır. “clean-all” dosyası sadece ilk kurulum için gereklidir. Sertifika dosyalarının tutulacağı klasörü temizledikten sonra “index” ve “serial” dosyalarının oluşturulması işlemini gerçekleştirir. “clean-all” dosyası, ilk kurulumdan sonraki sertifika oluşturma işlemlerinde kullanılmamalıdır, yoksa tüm oluşturulmuş sertifikaları siler. Fakat “vars” dosyası, her sertifika oluşturma işleminden önce çalıştırılmalıdır.

# cd /etc/openvpn/easy-rsa
# . ./vars
# ./clean-all

Daha sonra “Certificate Authority” sertifikaları oluşturulur.

# ./build-ca

DIFFIE-HELLMAN anahtarı oluşturulur. Bu anahtar sunucu tarafındaki SSL/TLS bağlantısı için gereklidir.

# ./build-dh

Sunucu sertifika çifti oluşturulur.

# ./build-key-server myopenvpnserver

Çok zorunlu olmasa da OpenVPN geliştiricileri tarafından “Man-in-the-middle” ataklarını önlemek için TLS doğrulaması tavsiye edilmektedir. Bunun için sertifikaların oluşturulduğu klasör içerisinde TLS anahtarı oluşturulur. Yukarıdaki örnek “vars” dosyasının içinde anahtar dosyalarının tutulduğu klasör, easy-rsa klasörünün altında bulunan “keys” isimli bir klasör olarak tanımlanmış olduğundan TLS anahtarını bu klasör altında oluşturacağız.

# openvpn --genkey --secret keys/ta.key

Ve kullanıcı sertifikası oluşturma işlemi yapılır.

# ./build-key myfirstopenvpnuser

Yukarıda da belittiğimiz üzere, daha sonra kullanıcı oluşturmak gerekiyorsa önce “vars” dosyası çalıştırılmalıdır.

4 – Güvenlik Duvarı ve Ağ yapılandırması

OpenVPN iki farklı tür sanal ağ arayüzünü kullanabilmektedir. TUN ağ arayüzü Layer 3(IP) olarak çalışırken TAP ağ arayüzü Layer 2(Ethernet) olarak çalışmaktadır. Uygulamadaki farkları ise özet olarak aşağıdaki gibidir.

TUN ağ arayüzü ile güvenlik duvarı ve ağ ayarları daha kolay yapılabilir. Eğer makina bir ağ geçidi olarak kullanılmak isteniyorsa(mesela internette anonim sörf yapmaya olanak sağlayan kişisel VPN servis sağlayıcıları v.b.) TUN arayüzü tercih edilmelidir. Dezavantajı ise broadcast paketlerin TUN arayüzünden geçmemesidir. Yani Netbios, WINS gibi servislerin paketleri TUN ağ arayüzünden geçmez.TAP ağ arayüzü ise, tamamen aynı ağda bulunuyormuş gibi çalışılmasına izin verir. Bir uzak ofis ağına bağlanılmak için daha uygun bir tercihtir. Fakat bu uzak ofis ağının arkasında başka ağlarda bulunuyorsa, onlara erişmek için gerekli yapılandırmayı yapmak pek kolay olmayabilir.

Bu yazımızda her türlü senaryoya adapte edilmesi daha kolay olan TUN ağ arayüzü üzerinden ilerliyor olacağız.

Sunucunun ağ geçidi olarak çalışabilmesi için “/proc/sys/net/ipv4/ip_forward” dosyasındaki “0” değeri “1” yapılmaldır. Aşağıdaki komut ile sunucunun routing yapabilmesi anında aktifleştirilir.

# echo "1">/proc/sys/net/ipv4/ip_forward

Bu değişikliğin kalıcı olması için “/etc/sysctl.conf” dosyasında, “net.ipv4.ip_forward = 1” olacak şekilde değişiklik yapılır.

IPTABLES güvenlik duvarı ayarlarında ise, işlem kolaylığı açısından “in-fwd-chain” isimli ek bir “CHAIN” kullanıp tüm kuralları oraya tanımlayacağız. Daha sonra “INPUT” ve “FORWARD” içinde “in-fwd-chain”ini ilk kural olarak atayacağız.

# iptables -N in-fwd-chain
# iptables -A in-fwd-chain -i lo -j ACCEPT
# iptables -A in-fwd-chain -i tun+ -j ACCEPT
# iptables -A in-fwd-chain -m state --state RELATED,ESTABLISHED -j ACCEPT
... (www, ftp, ssh v.b. hizmetler için gerekli ek kurallar bu araya eklenebilir)
# iptables -A in-fwd-chain -j DROP
# iptables -I INPUT 1 -j in-fwd-chain
# iptables -I FORWARD 1 -j in-fwd-chain

Daha sonra IPTABLES’in nat tablosunda, MASQUERADE hedefini kullanarak paketleri “nat”lamak gerekli ayarları yapacağız. OpenVPN sunucu konfigürasyon dosyasında, sunucunun TUN ağ arayüzleri için kullanacağı IP adres blokları tanımlanır. Varsayılan ağ adres bloğu “10.8.0.0/255.255.255.0” bloğudur. İstenirse bu değer OpenVPN sunucu konfigürasyon dosyasından değiştirilebilir. Tabii ki güvenlik duvarı konfigürasyonu da buna uygun olarak değiştirilmelidir.

# iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE

OpenVZ ya da Virtuozzo gibi bazı sanallaştırma çözümlerinde IPTABLES’in MASQUERADE modülü etkin olmayabilir. IPTABLES’in MASQUERADE modülünün etkin olmadığı sunucularda aşağıdaki alternatif kural kullanılabilir. Fakat aynı anda hem yukarıdaki hem de aşağıdaki kural kullanılmamalıdır.

# iptables -t nat -A POSTROUTING -j SNAT --to-source 5.5.5.5

Yukarıdaki komuttaki “5.5.5.5” IP adresi örnek olarak verilmiştir. Bu IP adresi, OpenVPN kurulumu yapılan sunucunun IP adresi olarak değiştirilmelidir.

Son olarak tüm güvenlik duvarı yapılandırmalarının kalıcı olmasını sağlamak amacı ile kurallar kaydedilir.

# iptables-save > /etc/sysconfig/iptables

5 – Sunucu konfigürasyon dosyaları

Daha önce oluşturup kurmuş olduğumuz openvpn RPM paketi, kurulumu ile beraber, “/etc/rc.d/init.d/” klasörü altında “openvpn” isimli bir servis scripti oluşturmaktadır. Bu “openvpn” servis scriptinin görevi “/etc/openvpn” klasörü altındaki tüm “.conf” uzantılı dosyaların otomatik olarak çalıştırılmasını sağlamaktır. Sunucu konfigürasyon dosyası “/etc/openvpn” klasörü altına koyulup, “openvpn” servisini aktif hale getirildiği zaman, sunucunun başlangıcı sonrasında openvpn otomatik olarak çalışmaya başlıyor olacaktır.

Farklı amaçlar için, “/etc/openvpn” klasörü altına, birden fazla sunucu konfigürasyon dosyası yapılandırılabilir. Ve bu dosyaların hepsi de openvpn servisi tarafından okunup çalıştırılacaktır.

Sunucu konfigürasyon dosyasını oluşturmak üzere daha önce “/etc/openvpn/sample” klasörüne kopyalanan dosyaları temel olarak kullanmak uygun olacaktır. “/etc/openvpn/sample/sample/sample-config-files/” klasörü içindeki “server.conf” dosyası iyi bir başlangıç noktasıdır. Bu dosyayı “/etc/openvpn/” klasörü altına “.conf” uzantısı ile kopyalanır.

# cp -v /etc/openvpn/sample/sample/sample-config-files/server.conf /etc/openvpn/myfirstopenvpnsvc.conf

Çeşitli log doyalarının tutulması için RedHat işletim sisteminin geleneğine bağlı kalarak “/var/log” klasörü içerisinde “openvpn” isimli bir log klasörü oluşturulması faydalı olacaktır. Konfigürasyonda anlaşılırlık sağlayabilmek amacı ile bu log klasörü, “/etc/openvpn” klasörü içine sembolik link ile bağlanacaktır. Bu adım tabii ki zorunlu değildir ama özellikle birden fazla sunucu konfigürasyonu oluşturulması ve bunların loglarının takip edilebilmesi açısından faydalı bir adımdır.

# mkdir -v /var/log/openvpn
# ln -s /var/log/openvpn /etc/openvpn/logs

Temel olarak kullanılan “server.conf” içinde tüm konfigürasyon parametrelerinin açıklaması bulunmaktadır. Ama bu örnekte aşağıdaki parametrele kullanılacağından, açıklamaların üzerinden geçmek faydalı olacaktır.

---------------------------------------------------
port 1194
proto udp
dev tun
ca easy-rsa/keys/ca.crt
cert easy-rsa/keys/myopenvpnserver.crt
key easy-rsa/keys/myopenvpnserver.key
dh easy-rsa/keys/dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist logs/ipp-myopenvpnserver.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
keepalive 10 120
tls-auth easy-rsa/keys/ta.key 0
comp-lzo
persist-key
persist-tun
status logs/openvpn-status-myopenvpnserver.log
log-append logs/openvpn-myopenvpnserver.log
verb 3
---------------------------------------------------

“port 1194” ve “proto udp” satırları, sunucunun UDP 1194 portundan istekleri dinleyeceğini ifade etmektedir. OpenVPN varsayılan olarak bunu kullanmaktadır. Ama ofislerde, halka açık bir çok internet erişim noktasındaki firewallara uyumluluğu arttırmak açısından HTTPS portu olan 443. TCP portu da tercih edilebilir.

“dev tun” satırı, kullanılacak olan sanal ağ arayüzünü belirtmektedir. Alternatifi olan TAP sanal ağ arayüzü, “dev tap” satırı ile tanımlanmaktadır.

“ca easy-rsa/keys/ca.crt” satırı, daha önce oluşturulmuş olan “Certificate Authority” anahtarına işaret etmektedir. “easy-rsa/keys” olarak belirtilen klasörün, “/etc/openvpn” altında bulunan bir klasör olduğuna dikkat edilmelidir.

“cert easy-rsa/keys/myopenvpnserver.crt” ve “key easy-rsa/keys/myopenvpnserver.key” satırları sunucu için oluşturulmu olan sertifika çiftine işaret etmektedir. “myopenvpnserver.key” dosyası, iyi bir şekilde korunmalıdır.

“dh easy-rsa/keys/dh2048.pem” satırı, DIFFIE-HELLMAN anahtarına işaret etmektedir.

“server 10.8.0.0 255.255.255.0” satırı vasıtası ile sunucunun hangi IP adres bloğunu kullanacağı belirtilmektedir. Bu konfigürasyonda sunucu 10.8.0.1 IP adresini kendisi almaktadır. OpenVPN varsayılan olarak “net30” isimli bir network topolojisi kullanmakta ve her istemci için 30 bitlik bir adres bloğu kullanmaktadır. İlk 30 bitlik blok(10.8.0.0 – 10.8.0.3) kendisi tarafından kullanıldığı için ve son 30 bitlik blok(10.8.0.252 – 10.8.0.255) içerisinde, bu IP bloğuna ait broadcast adresi bulunduğundan dolayı, geriye kullanılabilir 62 adet 30 bitlik IP bloğu kalmaktadır. Yani 24bitlik bir IP adres bloğu kullanıldığında, sadece 62 adet istemciyi konuşlandırabilecek şekilde IP adresi kalmaktadır. 23 bitlik bir IP bloğu kullanılması durumunda ise 126 adet istemci için IP adresi rezerve edilmiş olur.

“net30” topolojisi için, kaç tane istemci konuşlandırılabileceği, aşağıdaki gibi bir formülizasyonla da ifade edilebilir. “U” maksimum istemci sayısını ve “n” openvpn konfigürasyonundaki IP adresi bloğunun kaç bitlik olduğunu göstermek üzere :

U = 2(30-n) – 2

“p2p” ya da “subnet” isimli topolojiler de bulunmaktadır ama bunların yapılandırılması bu yazının amacı dışında kaldığından burada bahsedilmeyecektir.

“ifconfig-pool-persist logs/ipp-myopenvpnserver.txt” satırı ise daha önce bağlanmış olan istemcilerin IP adreslerinin herhangi bir yeniden bağlanma durumunda değişmemesi için gerekli olan kayıtları tutar. Buradaki “logs” klasörünün “/var/log/openvpn” klasörüne sembolik link ile bağlı olan “/etc/openvpn/logs” klasörüne işaret ettiğine dikkat edilmelidir. Ayrıca farklı sunucu konfigürasyon dosyalarının kullanılması durumunda karışıklık olmasını engellemek amacı ile sunucu konfigürasyon dosyasını ismi, bu log dosyasında son ek olarak kullanılmıştır.

“push “redirect-gateway def1 bypass-dhcp”” satırı vasıtası ile, istemcinin tüm trafiğinin openvpn sunucusu üzerinden akması sağlanır. Eğer tüm trafiğin değilde sadece belli bir IP ağı aralığına erişimin openvpn sunucusu üzerinden akması isteniyorsa, “push “redirect-gateway def1 bypass-dhcp”” satırı yerine, “push “route 5.5.5.0 255.255.255.0″” şeklindeki ifade kullanılmadıdır. Buradaki “5.5.5.0 255.255.255.0” tanımı tabii ki erişilmesi planlanan ağa ait olan IP aralığı değeri ile değiştirilmelidir.

“push “dhcp-option DNS 208.67.222.222″” ve “push “dhcp-option DNS 208.67.220.220″” satırları vasıtası ile istemci tarafındaki sanal “tun” ağ arayüzünün DNS sunucusu olarak “208.67.222.222” ve “208.67.220.220” IP adresli sunucuları görmesi sağlanmaktadır. Bu örnekte OpenDNS sunucularının IP adresleri olarak tanımlı bu sunucuların, ihtiyaca göre değiştirlmesi gerekebilir. Ama anonim sörf için bir openvpn sunucusu yapılandırılıyorsa, OpenDNS sunucularının IP adreslerinin kalmasında bir sakınca yoktur.

Alternatif olarak openvpn sunucusu üzerinde bir DNS sunucu yapılandırılıp (bind v.b.) istemcilerin burayı görmesi sağlanabilir. Fakat güvenlik duvarı ve NAT yapılandırması nedeni ile sunucunun “tun” sanal ağ arayüzü adresi olan “10.8.0.1” IP adresinin, DNS adresi olarak tanımlanması, çeşitli bağlantı problemlerini önleyecektir.

“keepalive 10 120” satırı vasıtası ile istemcinin sunucuya 10 saniyede bir PING paketleri göndermesi sağlanır ve 120 saniyelik hareketsizlik sonrası bağlantı kapatılır.

“tls-auth easy-rsa/keys/ta.key 0” bu satır vasıtası ile sunucu üzerindeki TLS doğrulama mekanizması etkinleştirilir. Sunucu tarafında “0” olarak girilen parametre, istemci tarafında “1” olarak girilmelidir.

“comp-lzo” satırı vasıtası ile veri akışının lzo sıkıştırmasından geçirilerek iletilmesi sağlanır. Aynı konfigürasyon istemci tarafında da olmalıdır.

“persist-key” ve “persist-tun” satırları vasıtası ile tünelin restart olması gibi durumlarda, kaynakların tekrar aktive edilmesi yerine açık kalması sağlanır. “persist-tun” satırı, “tun” ağ arayüzünün yeninden başlatılması yerine açık durumda kalmasını sağlar. “persist-key” satırı ise sertifika dosyalarının yeninden okunması durumunu ortadan kaldırır. Bu iki satırda çeşitli durumlarda tetiklenen restart ya da reset istekleri sırasında, özellikle farklı kullanıcı hakları ile openvpn servisi çalıştırılıyorsa, işletim sistemi tarafındaki olası okuma ve yazma hatalarının önüne geçer.

“status logs/openvpn-status-myopenvpnserver.log” satırı, aktif bağlı kullanıcılarının durumlarının tutulduğu log dosyasına işaret etmektedir. Farklı sunucu konfigürasyon dosyalarının kullanılması durumunda karışıklık olmasını engellemek amacı ile sunucu konfigürasyon dosyasını ismi, bu log dosyasında son ek olarak kullanılmıştır.

“log-append logs/openvpn-myopenvpnserver.log” ve “verb 3” satırları openvpn sunucusuna ait genel log dosyası ve bu log dosyasının ne kadar ayrıntıl olacağına dair yapılandırmaya aittir. “log-append” yerine “log” direktifi kullanılırsa, openvpn sunucusunun her yeniden başlatılışında tanımlı log doyası baştan oluşturulur. Bu sebeple geçmişe dönük tüm kayıtları tutabilmek açısından “”log-append” direktifi kullanılmadır. “log-append” ya da “log” direktiflerinin kullanılmaması durumunda openvpn durum kayıtları doğrudan syslog dosyasına yazılacaktır. Kayıtların takip edilmesi daha zor olacağından bu şekilde bir yapılandırma önerilmez.

“verb 3” satırı genel kullanım için gayet yeterlidir. Ayrıntı miktarı “0” en düşük ve “6” en yüksek olmak üzere 0 ve 6 arasındaki değerlerle kontrol edilebilir.

6 – İstemci Yapılandırması

İstemci yapılandırmasına temel oluşturması açısından, “/etc/openvpn/sample/” klasörü içindeki örnek konfigürasyon dosyalarını kullanmak yerinde olacaktır. “/etc/openvpn/sample/sample/sample-config-files/client.conf” dosyasını “/etc/openvpn/easy-rsa/keys” klasörü altına koyalayarak çalışmak daha kolay olacaktır. Eğer bu konfigürasyon dosyası windows istemcilerde kullanılacaksa, dosya uzantısını “.ovpn” yapmak gerekmektedir. Çünkü Windows işletim sisteminde openvpn uygulaması, dosya türü olarak “.ovpn” dosya uzantısını kendi adına kayıt ettirmektedir.

Fakat bu yazıda özellike Centos için gerekli olan istemci yapılandırmasından bahsedilecektir. Windows tarafındaki istemci yapılandırmasından başka bir yazımızda bahsedeceğiz.

Burada yapılacak işlemler sonrasında “myfirstopenvpnuser.conf”, “ca.crt”, “myfirstopenvpnuser.crt”, “myfirstopenvpnuser.key” ve “ta.key” dosyaları, istemci makinadaki “/etc/openvpn” klasörüne kopyalanmalıdır.

# cp -v /etc/openvpn/sample/sample/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/myfirstopenvpnuser.conf

---------------------------------------------------
client
dev tun
proto udp
remote 5.5.5.5 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert myfirstopenvpnuser.crt
key myfirstopenvpnuser.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
verb 3
---------------------------------------------------

“client” satırı vasıtası ile bu konfigürasyonun istemci tarafına ait olduğu belirtilir. OpenVPN, sunucu ve sitemci için ayrı binary dosyalar kullanmadığından dolayı bu ayrım konfigürasyon tarafında yapılmaktadır.

“dev tun” satırı, kullanılacak olan sanal ağ arayüzünü belirtmektedir. Alternatifi olan TAP sanal ağ arayüzü, “dev tap” satırı ile tanımlanmaktadır.

“remote 5.5.5.5 1194″ ve “proto udp” satırları, istemcinin, karşıdaki 5.5.5.5 IP adresli sunucunun UDP 1194 portuna bağlanacağını ifade etmektedir.

“resolv-retry infinite” satırı vasıtası ile DNS çözümlemesinin kesintisiz olaqrak yapılmaya çalışılacağı ifade edilmektedir.

“nobind” satırı ile, istemci tarafında belirli bir port reserve edilmeyeceği belirtilmektedir.

“persist-key” ve “persist-tun” satırları vasıtası ile tünelin restart olması gibi durumlarda, kaynakların tekrar aktive edilmesi yerine açık kalması sağlanır. “persist-tun” satırı, “tun” ağ arayüzünün yeninden başlatılması yerine açık durumda kalmasını sağlar. “persist-key” satırı ise sertifika dosyalarının yeninden okunması durumunu ortadan kaldırır. Bu iki satırda çeşitli durumlarda tetiklenen restart ya da reset istekleri sırasında, özellikle farklı kullanıcı hakları ile openvpn servisi çalıştırılıyorsa, işletim sistemi tarafındaki olası okuma ve yazma hatalarının önüne geçer.

“ca ca.crt” satırı ile, daha önce oluşturulmuş olan “Certificate Authority” anahtarı istemci tarafında da tanıtılmaktadır.

“cert myfirstopenvpnuser.crt” ve “key myfirstopenvpnuser.key” satırları ile istemci tarafına özel olarak oluşturulmuş olan sertifika çifti belirtilmektedir.

“ns-cert-type server” satırı, sunucu tarafından istemciye sunulacak olan sertifikanın “Server” özelliği ile imzalandığının kontrolü için vardır. EasyRSA kullanılarak “./build-key-server myopenvpnserver” komutu ile bu satır oluşturulmuşsa, sunucu tarafındaki sertifikaya bu özellik otomatik olarak eklenir. Bu korumanın amacı, aynı CA tarafından imzalanmış olmasa bile “Server” olarak tanımlı bir sertifikiya sahip olmayan bağlantıları engellemektir.

“tls-auth ta.key 1” satırı vasıtası ile, bağlantının TLS doğrulamasından geçmesi sağlanır. İstemci tarafındaki rakamsal parametrenin “1” olduğuna dikkat edilmelidir.

“comp-lzo” satırı vasıtası ile veri akışının lzo sıkıştırmasından geçirilerek iletilmesi sağlanır. Aynı konfigürasyon sunucu tarafında yoksa bu konfigürasyon satırı etkinleştirilmemelidir.

“verb 3″ satırı genel kullanım için gayet yeterlidir. Ayrıntı miktarı “0″ en düşük ve “6″ en yüksek olmak üzere 0 ve 6 arasındaki değerlerle kontrol edilebilir. Fakat istemci tarafındaki konfigürasyonda “log” ya da log-append” satırları olmadığından dolayı, bağlantı ile ilgili logların “/var/log/messages” satırına yazılacağı dikkate alınmalıdır. Gerekli görülüyorsa, “log” ya da log-append” satırları vasıtası ile ayrı bir log dosyası tutulabilir.