Yazılım konusunda kendime açıkçası güveniyorum. Bir dili kısa sürede kavrayabilirim ve projeler yazabilirim ancak network için aynı güvene sahip ne yazıkki değilim. OSCP sınavına hazırlandığım bu süreç içerisinde bir yanda da Network konusuna eğilim gösteriyorum ve kendimi geliştiriyorum. Uzaktan çalışmanın yaygınlaştığı bu günlerde VPN çok öne kazandı ve bende kendime bir VPN server kurayim dedim. Daha öncesinde Linux üzerinde OpenVPN araılığı ile kurulumlar yapmıştm. Ancak kamunun windows ısrarı ve bu konudaki bilgi azlığını gördüm. Bunun üzerine lamer seviyesinde nasıl bir VPN server kurabiliriz anlatmaya karar verdim. Bu makaleyi bilgilerim tazelendikçe güncelleyeceğim çünkü dediğim gibi network konusunda yazılımda olduğu gibi kendime güvenmiyorum. Çok az sayıda network cihazı kurulumu gerçekleştirdim ve bunlar genelde bir tutorial'a bakıp copy-paste şeklinde oldu. İşim daha çok web ve mobil güvenliği olduğundan dolayı bakmadığınız süre boyunca da ne yazıkki network bilgilerinizi kaybediyorsunuz. Neyse kendimi iyice yerdiğime göre artık windows server üzerinde openvpn kurmayla ilgili bi kopya kağıdana başlayabiliriz.
Sunucu Tarafı
- İlk olarak bir sunucunuzun olması gerekecek. Sunucunuza OpenVPN'i kurma ile başlayalım. https://openvpn.net/community-downloads/ linkinden OpenVPN'i indirebilirsiniz.
- Kurulum aşamasında default seçeneklerle ilerleyebilirsiniz. Sadece dikkatli olmanız gereken alan Compenent kurulumu ekranında EasyRSA 2 Certificate Management cripts kısmını seçmeniz, default kurulumda burası seçili gelmeyebilir çünkü client tarafında buna ihtiyaç olmayacaktır. Kurulum aşamasında TAP-Windows Adapter isminde bir Virtual Adapter oluşturulacaktır. Bu adaptör üstünde işlemlerimizi gerçekleştireceğiz. Bu arayüzün ismini isterseniz değiştirebilirsiniz. Ben bu örnek devamında ServerVPN olarak değiştireceğim.
- CMD'yi açın ve OpenVPN'in kurulduğu dizine gidin.
PS C:\> cd "C:\Program Files\OpenVPN\easy-rsa" PS C:\Program Files\OpenVPN\easy-rsa> - Daha sonrasında bir editör aracılığı ile
vars.batdosyasını açın. Burada bazı düzenlemeler yapmak isteyebilirsiniz. Burada yapacağımız düzenlemelerin aslında kuruluma bir etkisi olmayacaktır. Bunlar sadece bilgilendirme içindir. Değişilik yapacağımız alan aşağıda belirtilmiştir.set KEY_COUNTRY=TR set KEY_PROVINCE=SIZEKALMIS set KEY_CITY=SIZEKALMIS set KEY_ORG=SIZEKALMIS set KEY_EMAIL=SIZEKALMIS@SIZEKALMIS set KEY_CN=SIZEKALMIS set KEY_NAME=SIZEKALMIS set KEY_OU=SIZEKALMIS set PKCS11_MODULE_PATH=SIZEKALMIS set PKCS11_PIN=1234 - Artık kurulama başlayabiliriz. Aşağıdaki adımları uygulayalım.
PS C:\Program Files\OpenVPN\easy-rsa> .\init-config.bat
C:\Program Files\OpenVPN\easy-rsa>copy vars.bat.sample vars.bat
1 file(s) copied.
PS C:\Program Files\OpenVPN\easy-rsa> .\vars.bat
PS C:\Program Files\OpenVPN\easy-rsa> .\clean-all.bat
C:\Program Files\OpenVPN\easy-rsa
The syntax of the command is incorrect.
The syntax of the command is incorrect.
1 file(s) copied.
1 file(s) copied.
PS C:\Program Files\OpenVPN\easy-rsa> .\build-dh.bat
C:\Program Files\OpenVPN\easy-rsa
'openssl' is not recognized as an internal or external command,
operable program or batch file.
Eğer benim gibi bir hata aldıysanız **C:\Program Files\OpenVPN\bin** yolunu çevresel değişkenlere eklemeniz gerekecektir. Basit bir konu olduğu için atlıyorum. Bu işlemi yaptınız ancak hala hata almaya devam ediyorsanız. Powershell kullandığınızdan dolayı olabilir. Lütfen CMD üzerinden devam ediniz.
```batch
PS C:\Program Files\OpenVPN\easy-rsa> cmd
Microsoft Windows [Version 10.0.17763.1911]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Program Files\OpenVPN\easy-rsa>init-config.bat
C:\Program Files\OpenVPN\easy-rsa>copy vars.bat.sample vars.bat
1 file(s) copied.
C:\Program Files\OpenVPN\easy-rsa>.\vars.bat
C:\Program Files\OpenVPN\easy-rsa>.\clean-all.bat
1 file(s) copied.
1 file(s) copied.
C:\Program Files\OpenVPN\easy-rsa>.\build-dh.bat
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
...........................................................................................................................................................................................................+...............................................+.....................................................................................................................................................................................................................................................................................................................+................................................................................................+.......+.................................................................................................................................................................................................................................................................................................................................................+.......................+.................................+....................................+.................+...............................................................................................+............+....................................................................................................+............+.......++*++*++*++*
C:\Program Files\OpenVPN\easy-rsa>
C:\Program Files\OpenVPN\easy-rsa>build-ca.bat
Generating a RSA private key
..........++++
................................................++++
writing new private key to 'keys\ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [US]:TR
State or Province Name (full name) [CA]:SIZEKALMIS
Locality Name (eg, city) [SanFrancisco]:SIZEKALMIS
Organization Name (eg, company) [OpenVPN]:SIZEKALMIS
Organizational Unit Name (eg, section) [changeme]:SIZEKALMIS
Common Name (eg, your name or your server's hostname) [changeme]:SIZEKALMIS
Name [changeme]:SIZEKALMIS
Email Address [[email protected]]:SIZEKALMIS
C:\Program Files\OpenVPN\easy-rsa>
C:\Program Files\OpenVPN\easy-rsa>
C:\Program Files\OpenVPN\easy-rsa>build-key-server.bat ServerVPN
Generating a RSA private key
....................++++
.........................++++
writing new private key to 'keys\ServerVPN.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [US]:TR
State or Province Name (full name) [CA]:SIZEKALMIS
Locality Name (eg, city) [SanFrancisco]:SIZEKALMIS
Organization Name (eg, company) [OpenVPN]:SIZEKALMIS
Organizational Unit Name (eg, section) [changeme]:SIZEKALMIS
Common Name (eg, your name or your server's hostname) [changeme]:SIZEKALMIS
Name [changeme]:SIZEKALMIS
Email Address [[email protected]]:SIZEKALMIS
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from openssl-1.0.0.cnf
Can't open keys/index.txt.attr for reading, No such file or directory
5364:error:02001002:system library:fopen:No such file or directory:crypto/bio/bss_file.c:74:fopen('keys/index.txt.attr','r')
5364:error:2006D080:BIO routines:BIO_new_file:no such file:crypto/bio/bss_file.c:81:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'TR'
stateOrProvinceName :PRINTABLE:'SIZEKALMIS'
localityName :PRINTABLE:'SIZEKALMIS'
organizationName :PRINTABLE:'SIZEKALMIS'
organizationalUnitName:PRINTABLE:'SIZEKALMIS'
commonName :PRINTABLE:'SIZEKALMIS'
name :PRINTABLE:'SIZEKALMIS'
emailAddress :IA5STRING:'SIZEKALMIS'
Certificate is to be certified until Jun 11 02:28:43 2031 GMT (3650 days)
Sign the certificate? [y/n]:Y
1 out of 1 certificate requests certified, commit? [y/n]Y
Write out database with 1 new entries
Data Base Updated
- Bu esnada C:\Program Files\OpenVPN\easy-rsa\keys klasörü altında dosyalarımızın oluştuğunu görebilirsiniz. Devam edelim. Şimdi Client için crt ve key'imizi oluşturalım. Yukarıda yaptığımız aynı işlemleri gerçekleştiriyoruz.
C:\Program Files\OpenVPN\easy-rsa>build-key.bat ClientVPN
Generating a RSA private key
.......................................................................................................................................++++
..........................................................++++
writing new private key to 'keys\ClientVPN.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [US]:TR
State or Province Name (full name) [CA]:SIZEKALMIS
Locality Name (eg, city) [SanFrancisco]:SIZEKALMIS
Organization Name (eg, company) [OpenVPN]:SIZEKALMIS
Organizational Unit Name (eg, section) [changeme]:SIZEKALMIS
Common Name (eg, your name or your server's hostname) [changeme]:ClientVPN
Name [changeme]:SIZEKALMIS
Email Address [[email protected]]:SIZEKALMIS
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'TR'
stateOrProvinceName :PRINTABLE:'SIZEKALMIS'
localityName :PRINTABLE:'SIZEKALMIS'
organizationName :PRINTABLE:'SIZEKALMIS'
organizationalUnitName:PRINTABLE:'SIZEKALMIS'
commonName :PRINTABLE:'ClientVPN'
name :PRINTABLE:'SIZEKALMIS'
emailAddress :IA5STRING:'SIZEKALMIS'
Certificate is to be certified until Jun 11 03:12:28 2031 GMT (3650 days)
Sign the certificate? [y/n]:Y
1 out of 1 certificate requests certified, commit? [y/n]Y
Write out database with 1 new entries
Data Base Updated
- Şimdi authentication için ta.key dosyamızı oluşturalım.
C:\Program Files\OpenVPN\easy-rsa>openvpn --genkey --secret keys/ta.key
- Şimdi Server için config dosyamızı oluşturmamız gerekmektedir. Bu dosyamızı C:\Program Files\OpenVPN\config altında oluşturacağız. Aşağıda örnek bir config dosyası bulunmaktadır.
dev-node "ServerVPN" #Network adapter ismimiz
mode server #Modumuz
port 12345 #Port numaranızı isterseniz değiştirebilirsiniz.
proto tcp4-server #tcp
dev tun #tunnel mode
tls-server #Şifreleme protokolümüz
tls-auth "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\ta.key" 0 #authentication için dosyamız ve 0 değeri. 0 değeri sunucu, 1 değeri client için geçerlidir.
#Paket boyutları ile ilgili configler
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
#Kurulum aşamasında oluşturduğumuz dosyalar. Eğer bunları path aracılığı ile çağırmak istemezseniz tagler araclığı ile çağırabilirsiniz. Örneğin
#<ca>asdkljasdkjasjdas</ca> gibi
ca "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\ServerVPN.crt"
key "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\ServerVPN.key"
dh "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\dh2048.pem"
server 18.22.1.0 255.255.255.0 #Clientlerin alacağı ipler ve aralığı
client-to-client
keepalive 10 120 #oturumun kalıcılığı ile ilgili
cipher AES-128-CBC #Şifreleme
comp-lzo #tünelde veri sıkıştırma ayarını yap
#Bağlantıda sorun varsa herhangibi bir veri okuması tekrarlanmaycak
persist-key
persist-tun
client-config-dir "C:\\Program Files\\OpenVPN\\config"
verb 3 #debug level
#Route ayarlamaları
route-delay 5
route-method exe
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 60
- Harika! Artık bu config'lerle VPN'i başlatabiliriz. Eğer bir hata alırsanız bunu C:\Users\Administrator\OpenVPN\log path'inden kontrol edebilirsiniz.
- Sunucu tarafında işlerimiz neredeyse bitti. Şimdi NAT'lama işlemimizi yapmamız gereiyor. Bu haliyle bırakırsa bir VPN bağlantısı ede edebiliriz ancak 18.22.1.0 ağındaki client'ler internete çıkamazlar. Bunun için Remote Access rolünü sunucumuza kurmamız gerekecektir. Kurulum aşamasında Role Services alanında Routing kısmının seçili olduğundan emin olun. Daha sonrasında Server Manager alanından Routing and Remote Access alanına gelin. Routing and Remote Access Server Setup Wizard kısmından NAT seçeneği ile devam edin ve internete çıkan arayüzünüzü natlayın. Bununla ilgili bir video örneğini kaynaklar kısmında paylaşıyor olacağım.
- Windows Defender Firewall'dan ilgli porta gerekli ayarlamaları yapın.
- Son olarak kayıt defterinden Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters kısmındaki IPEnableRouter alanını 1 yapın.
Client Tarafı
- Aşğaıda örneği verilen config dosyasını oluşturun. Aşağıda
gibi tagler arasına ise sunucu tarafında oluştuduğumuz dosyaların içeriğini direkt olarak kopyalayın.
remote <SUNUCUNUZUN IP ADRESİ>
client
port 12345
resolv-retry infinite
proto tcp4-client
dev tun
tls-client
remote-cert-tls server
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
cipher AES-128-CBC
comp-lzo
persist-key
persist-tun
verb 3
mute 20
redirect-gateway def1
<ca>
</ca>
<cert>
</cert>
<key>
</key>
key-direction 1
<tls-auth>
</tls-auth>
Bu işlem sonucunda oluşturduğunuz config dosyasını android, windows, ios farketmez herhangi bir client üzerinde çalıştırabilirsiniz.
Kaynaklar
https://www.youtube.com/watch?v=hKfHwQgAsUo&list=PLQOfaLjbioaMVTIwU53OFggMc1uz6g-DG&index=5
https://www.youtube.com/watch?v=bgpEOc6WHFo
https://ulakbim.tubitak.gov.tr/sites/images/Ulakbim/openvpn-sunum.pdf
https://www.youtube.com/watch?v=C2MI_3yOF30&list=PLQOfaLjbioaMVTIwU53OFggMc1uz6g-DG&index=6
Selamlar Kuday Hocam,
Linux üzerine kolay şekilde kurulabilen OpenVPN konusunda ne yazık ki piyasa da windows üzerine kurulumla alakalı kısıtlı kaynak vardı. Sayenizde windows üzerine openvpn kurulumu ile ilgili güzel bir kaynak oluşmuş oldu.
Kurulumun göstermiş olduğunuz OpenVPN servisinin OpenVPN-Server adında olan ayrı bir hizmetinide linux tarafında daha önce kullanmıştım. Sizin kurulumunu gösterdiğiniz openvpn hizmetinden farklı olarak direkt olarak bir web arayüzü üzerinden kullanıcı oluşturma, silme, bağlantı kayıtlarını görüntüleme ve anlık olarak seçilen bağlantıyı kesme gibi özellikleri de mevcuttu. VPN Konusuyla alakalı bir sonraki yazınızda bunuda ele almanızı isterim.
Teşekkürler.