Setup OpenVPN di Centos Server part #1

Setup OpenVPN di Centos Server part #1

Setelah pada penjelasan tentang apa itu VPN pada artikel sebelumnya yang terbagi ke beberapa bagian, kali ini saya akan memberikan tutorial instalasi OpenVPN sederhana untuk keperluan pribadi yang mana menurut saya sudah cukup aman untuk mengamankan data yang ditransfer.

Pada tutorial ini saya akan menggunakan SSD Cloud Vultr sebagai VPN Server. kenapa? karena di Vultr ini terdapat VPS dengan harga yang cukup murah untuk sekedar VPN Server pribadi. Tapi karena kebetulan VPS yang harga minimal sedang sold out maka saya gunakan VPS atasnya. Selain itu saya mengajak temen-temen untuk menjadi referal saya di Vultr dan mencoba feature-feature yang ada di Vultr. Yang menarik adalah Vultr menerima beberapa tipe pembayaran. Bisa merujuk pada postingan saya sebelumnya tentang Vultr.

Sekarang masuk pada tahap pembuatan VPN pribadi menggunakan OpenVPN.

1. Persiapkan Certificate

Download easy-rsa dari Github

$ wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
$ unzip master.zip

Ok so what's easy-rsa? Berdasarkan README di Github. Easy RSA adalah tool bantuan untuk membuat Certificate Authorization. Saya tidak akan menjelaskan CA pada postingan kali ini. Saya fokuskan dulu bagaimana membangun VPN untuk saat ini. Tujuan dari easy-rsa ini, kita akan mudah dalam mengenerate untuk keperluan config di sisi server dan sisi client.

Setelah download dan extract file easy-rsa-master.zip, selanjutnya masuk ke dalam folder easyrsa3 di dalam folder hasil extract. Lalu lakukan persiapan untuk mengenerate key dan cert untuk server.

$ cd easy-rsa-master/easyrsa3
$ export EASYRSA_KEY_SIZE=2048
$ ./easyrsa init-pki
$ ./easyrsa build-ca
$ ./easyrsa gen-dh
$ openvpn --genkey --secret pki/private/ta.key

Pada contoh di atas, terdapat beberapa langkah yang dilakukan yaitu:

  1. export EASYRSA_KEY_SIZE yang mana ini akan mendefinisikan panjangan KEY yang akan digunakan. Saya menggunakan 2048, tapi untuk keamanan jika mendukung, sebaiknya semakin besar nilai size key semakin baik.
  2. ./easyrsa init-pki command ini digunakan untuk mempersiapkan folder PKI. Folder ini akan menjadi destinasi output semua hasil generate nantinya.
  3. ./easyrsa build-ca command ini akan mengenerate ceriticate dan key untuk CA.
  4. ./easyrsa gen-dh ini alias command untuk dh paramater. DH (Diffie–Hellman) adalah method untuk key exchange yang pada TLS. Untuk penjelasan tentang DH Parameter ini bisa di lihat di Wiki Diffie-Hellman.
  5. openvpn --genkey --secret pki/private/ta.key command ini akan mengenerate ta.key yang digunakan untuk tambahan keamanan saat melakukan authentication dari client ke server.

2. Buat Config Untuk Server

$ ./easyrsa build-server-full server nopass
$ mkdir -p server/{issued,private,ccd}
$ cp pki/private/server.key server/private/
$ cp pki/private/ta.key server/private/
$ cp pki/issued/server.cert server/issued/
$ cp pki/ca.crt server/
$ cp pki/dh.pm server/

Penjelasan command diatas adalah:

  1. ./easyrsa build-server-full server nopass command ini mengenerate file key dan certificate untuk server. Jika kita lihat pada argument yang masuk pada command tersebut bernama server. Ini hanyalah sebuah nama untuk hasil generatenya dan akan menjadi nama identitas dari key dan certificate yang digenerate.
  2. mkdir -p server/{issued,private,ccd} command ini akan menghasilkan folder bernanma ./server di direktori yang aktif saat ini dan akan membuat sekaligus beberapa folder di dalam folder ./server yaitu ./issued, ./private dan ./ccd yang mana nantinya fodler ini akan di copy ke folder /etc/openvpn yang ada di Server yang akan kita bangun.
  3. Diikuti dengan meng-copy semua file-file hasil generate ke dalam folder ./server.

Langkah selanjutnya adalah membuat file server.conf di dalam folder ./server. Berikut adalah contoh config.

file: server.conf

proto udp
port 1194
dev tun

ca /etc/openvpn/ca.crt
cert /etc/openvpn/issued/server.crt
key /etc/openvpn/private/server.key
dh /etc/openvpn/dh.pem
tls-auth /etc/openvpn/private/ta.key 0

key-direction 0

cipher AES-256-CBC
auth SHA256
comp-lzo
persist-key
persist-tun

status /etc/openvpn/status.log
log /etc/openvpn/openpvn.log
log-append /etc/openvpn/openvpn.log
verb 3
keepalive 5 120

server 10.8.0.0 255.255.255.0
push "dhcp-option DNS 10.8.0.1"
push "redirect-gateway def1 bypass-dhcp bypass-dns"
tls-version-min 1.2

ifconfig-pool-persist ipp.txt
client-to-client
client-config-dir /etc/openvpn/ccd
max-clients 5

Dari bebebrapa parameter pada config server tersebut, yang biasanya dirubah adalah proto, port, dev, server dan max-clients. Selain dari itu adalah configuration untuk keamanan. Yang perlu diperhatikan adalah value dari tls-auth dan key-direction. Untuk konfigurasi server, value kedua parameter tersebut dengan 0 dan untuk konfigurasi menggunakan 0. Kegunaannya adalah untuk mengamankan saat client dan server melakukan pertukaran key guna proses authentication.

3. Buat Config Untuk Client

$ ./easyrsa build-client-full tiduronline nopass

Untuk client cukup seperti itu saja. Dari command yang dieksekusi tersebut akan menggenerate key bernama tiduronline.key di dalam folder pki/private/ dan certificate bernama tiduronline.cert di dalam folder pki/issued.

Selanjutnya membuat client.ovpn dan isikan config seperti berikut:

File client.ovpn

client
proto tcp
dev tun

ca pki/ca.crt
cert pki/issued/server.crt
key pki/private/server.key
tls-auth pki/private/ta.key 1

remote <server_vpn> <port>
resolv-retry infinite
nobind
persist-key
persist-tun

mute-replay-warnings
remote-cert-tls server

key-direction 1

cipher AES-256-CBC
auth SHA256
tls-version-min 1.2
comp-lzo
verb 3
mute 20

Perhatikan pada parameter ca, cert, key dan tls-auth. Disana saya mengunakan relative path. Sebaiknya menggunakan absolute path. Misal dengan membuat direktori openvpn di dalam folder etc. Lalu meindahkan semua file yang dibutuhkan ke dalam folder /etc/openvpn tersebut. Sehingga dimana pun file client.ovpn ini berada, tetap akan dapat menemukan file-file konfigurasi berada.

Ada cara lain-nya juga yaitu dengan memasukan semua konten dari file-file seperti key, cert kedalam file client.ovpn agar lebih fleksibel. Contohnya seperti berikut:

client
proto tcp
dev tun

ca pki/ca.crt
cert pki/issued/server.crt
key pki/private/server.key
tls-auth pki/private/ta.key 1

remote <server_vpn> 1194
resolv-retry infinite
nobind
persist-key
persist-tun

mute-replay-warnings
remote-cert-tls server

key-direction 1

cipher AES-256-CBC
auth SHA256
tls-version-min 1.2
comp-lzo
verb 3
mute 20

<ca>
 // isi file ca.cert
</ca>

<cert>
 // isi file tiduronline.cert
</cert>

<key>
 // isi file tiduronline.key
</key>

<tls-auth>
// isi file ta.key
</tls-auth>

Dengan begitu hanya ada satu file client.conf saja yang diperlukan untuk menjalankan VPN Client.

Perhatikan pada bagian parameter remote. Saat ini saya biarkan tanpa IP server, karena saat ini kita belum mengkonfigurasi Server yang akan digunakan.

Sampai sini semua konfigurasi yang diperlukan sudah siap dinaikan ke server. Selanjutnya kita mensetup server yang akan digunakan sebagai VPN Server. Akan dibahas pada post selanjutnya.

Next article: Setup Server VPN