Seringkali kita harus mengakses jaringan baik di kantor, cloud provider, atau pelanggan kita melalui jaringan internet menggunakan VPN. Ada banyak implementasi VPN, yang paling sering digunakan adalah PPTP karena gampang untuk mengkonfigurasinya, percayalah PPTP itu tidak aman š
Salah satu yang cukup baik adalah OpenVPN. Instalasi OpenVPN di openSUSE tidak semudah di Ubuntu misalnya yang sudah menyediakan banyak script bantu yang membuat implementasinya menjadi mudah. Tapi, memasang OpenVPN di openSUSE akan membuat anda mengerti apa sebetulnya yang terjadi š
Memasang Paket OpenVPN
Langkah pertama yang harus dilakukan adalah memasang paket openvpn dari repositori.
1 | sudo zypper in openvpn |
Memasang Easyrsa
Masuklah ke directory /etc/openvpn dan download easyrsa. Kita akan menggunakan easyrsa untuk membuat sertifikat dan kunci bagi server dan klien
1 2 | cd /etc/openvpn git clone git://github.com/OpenVPN/easy-rsa |
Edit file /etc/openvpn/easy-rsa/easyrsa3/vars.example dan simpanlah menjadi vars. Pastikan baris di bawah dilengkapi, ubahlah seperlunya
1 2 3 4 5 6 7 | set_var EASYRSA_REQ_COUNTRY "ID" set_var EASYRSA_REQ_PROVINCE "DKI Jakarta" set_var EASYRSA_REQ_CITY "Jakarta Selatan" set_var EASYRSA_REQ_ORG "openSUSE Indonesia" set_var EASYRSA_REQ_EMAIL "geeko@opensuse.id" set_var EASYRSA_REQ_OU "admin" set_var EASYRSA_KEY_SIZE 4096 |
Selanjutnya kita membutuhkkan 2 buah direktori terpisah untuk membuat kunciĀ rsa, dan menandatangani sertifikat untuk klien dan server. Salin isi direktori /etc/openvpn/easy-rsa/easyrsa3/ ke dalam direktori yang baru dibuat tersebut
1 2 3 4 | mkdir /etc/openvpn/client mkdir /etc/openvpn/server cp -R /etc/openvpn/easy-rsa/easyrsa3/* /etc/openvpn/client/ cp -R /etc/openvpn/easy-rsa/easyrsa3/* /etc/openvpn/server/ |
Kunci Klien dan Request Sertifikat Klien
Pada tahapan ini semua infrastruktur yang dibutuhkan untuk menjalankan OpenVPN sudah siap, saatnya kita membuat kunci dan sertifikat. Kunci untuk klien dan request sertifikatĀ akan dibuat di dalam direktori client, sedangkan kunci dan sertifikat server dibuat di dalam direktori server. Request sertifikat klien akan kita accept dan sign di dalam direktori server.Ā Di bawah ini adalah cara membuat kunci klien dan request sertifikat untuk sertifikat bernama “geeko”. Pastikan anda mengisi password saat membuat geeko.key agar proteksi kunci lebih aman, dan catatlah password yang anda masukkan.
1 2 3 | cd /etc/openvpn/client ./easyrsa init-pki ./easyrsa gen-req geeko |
Periksalah pada direktori /etc/openvpn/client/pki/private akan terdapat file kunci bernama geeko.key serta pada direktori /etc/openvpn/client/pki/reqs akan terdapat file geeko.req. Easyrsa akan membuat key dan request tersebut berdasarkan konfigurasi pada file vars. Pastikan bahwa panjang kuncinya sudah sesuai dengan ukuran yang kita set pada file vars. Dalam contoh ini kita menggunakan panjang kunci 4096 bit.
1 2 3 4 | ssh-keygen -y -e -f /etc/openvpn/client/pki/private/geeko.key Enter passphrase: ---- BEGIN SSH2 PUBLIC KEY ---- Comment: "4096-bit RSA, converted by geeko@machine from OpenSSH" |
Sampai tahap ini kita telah memiliki file kunci klien dan sebuah file request sertifikat klien. File sertifikatnya akan dibuat dan di-sign pada direktori server. Anda dapat membuat kunci klien dan request sertifikat sebanyak yang anda butuhkan, sedangkan berapa koneksi vpn yang diperbolehkan pada satu waktu yang bersamaan akan kita atur pada file konfigurasi openvpn server di /etc/openvpn/server.conf
Certification Authority, Kunci Server dan Sertifikat Server
Selanjutnya kita harus membuat sebuah certification authority, CA, yang dibutuhkan untuk men-sign sertifikat (baik sertifikat server maupun klien) serta sebuah sertifikat server. Hal ini dilakukan pada direktori /etc/openvpn/server jangan lupa memasukkan passphrase saat anda membuat CA dan pastikan bahwa file /etc/openvpn/server/pki/private/ca.key memiliki panjang kunci 4096 bit
1 2 3 4 5 6 7 | cd /etc/openvpn/server ./easyrsa init-pki ./easyrsa build-ca ssh-keygen -y -e -f ~/server/pki/private/ca.key Enter passphrase: ---- BEGIN SSH2 PUBLIC KEY ---- Comment: "4096-bit RSA, converted by geeko@machine from OpenSSH |
Kemudian kita perlu untuk membuat sebuah sertifikat untuk server (dalam contoh ini menggunakan nama serverku). Caranya adalah dengan membuat request sertifikat dan men-sign nya dengan CA yang sudah kita buat sebelumnya. Pada saat membuat request sertifikat maka akan dibuat juga sebuah kunci untuk server. Kita tidak perlu memberikan passphrase untuk kunci server ini karena kunci tersebut tidak akan kita berikan kemana-mana hanya saja pastikan bahwa permissionnya diset ke 600. Saat men-sign sertifikat untuk server pastikan anda menjawab “yes” dan mengisikan passphrase CA yang anda buat di atas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | cd /etc/openvpn/server ./easyrsa gen-req serverku.domain.id nopass ./easyrsa sign-req server serverku.domain.id Using SSL: openssl OpenSSL 1.1.0i-fips 14 Aug 2018 You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a server certificate for 1080 days: subject= commonName = serverku Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes Using configuration from /etc/openvpn/server/pki/safessl-easyrsa.cnf Enter pass phrase for /etc/openvpn/server/pki/private/ca.key: |
Transport Layer Security serta Koneksi dari Klien ke Server (dan sebaliknya) pada OpenVPN
Secara default OpenVPN menggunakan port UDP 1194. Anda dapat saja mengubahnya sesuai kebutuhan. Koneksi ini menggunakan TLS dan untuk itu kita membutuhkan kunci statik TLS dan DH parameter (apa itu Diffie-Helman key exchange dapat anda baca pada tautan ini, dan beberapa catatan implementasinya dapat anda baca di sini) yang digunakan untuk saling bertukar kunci. Di bawah ini adalah cara membuat DH parameter dan kunci statik TLS. Harap diperhatikan bahwa file dh.pem akan terbentuk pada direktori /etc/openvpn/server/pki yang panjang kuncinya 4096 bit (sesuai dengan setting pada file vars). File dh.pem ini sebenarnya tidak security sensitive karena hanya digunakan di server, permission 644 adalah cukup. Sedangkan fileĀ ta.key memiliki panjang kunci standar OpenVPN 2048 bit. File ini harus diset permissionnya 600
1 2 3 | cd /etc/openvpn/server ./easyrsa gen-dh /usr/sbin/openvpn --genkey --secret ta.key |
Men-sign sertifikat klien
Langkah berikutnya adalah mengimpor request sertifikat client dan men-sign nya sebagai client di direktori server. Sekali lagi men-sign sebagai client di direktori server š Hasilnya adalah file geeko.crt pada direktoriĀ /etc/openvpn/server/pki/issued/
1 2 3 4 | cd /etc/openvpn/server ./easyrsa import-req ../client/pki/reqs/geeko.req geeko ./easyrsa show-req geeko ./easyrsa sign-req client geeko |
Konfigurasi Server OpenVPN
Setelah semua sertifikat dan kunci yang dibutuhkan sudah tersedia sekarang saatnya melakukan konfigurasi server. Seperti sudah disebutkan di atas secara default OpenVPN menggunakan port UDP 1194 (anda dapat menggantinya sesuai kebutuhan), pastikan bahwa port UDP tersebut tidak diblok oleh firewall. Jika anda menggunakan server di dalam dmz pastikan bahwa router anda melakukan NAT/port forwarding ke port tersebut. Pada konfigurasi ini saya menggunakan TAP device, anda juga bisa menggunakan TUN device, tergantung kebutuhan anda.
1 2 3 | firewall-cmd --zone=public --add-port=1194/udp firewall-cmd --zone=public --query-port=1194/udp yes |
Pastikan pula bahwa server dapat memforward trafik. Pastikan bahwa baris di bawah terdapat di dalam file /etc/sysctl.conf
1 | net.ipv4.ip_forward = 1 |
Sebelum melakukan konfigurasi server, biasanya kita perlu membatasi jumlah koneksi klien dan mendaftarkan alamat IP yang akan diberikan kepada klien. Hal ini walaupun tidak fleksibel, membuat kita memiliki kontrol penuh terhadap klien yang terkoneksi. Buatlah sebuah direktori /etc/openvpn/static-clients dan isikan dengan file konfigurasi per klien
1 2 3 | sudo mkdir /etc/openvpn/static-clients cd /etc/openvpn/static-clients vim geeko |
Isilah file geeko dengan baris seperti di bawah (ubah sesuai kebutuhan)
1 2 3 4 5 | ifconfig-push 10.20.40.2 255.255.255.0 push "route 10.20.30.0 255.255.255.0 10.20.40.1" push "route other_internal_network subnet_address 10.20.40.1" push "dhcp-option DNS ip_of_dns1" push "dhcp-option DNS ip_of_dns2" |
Selanjutnya adalah melakukan konfigurasi file /etc/openvpn/server.conf. Dalam contoh di bawah ini, ip lokal eth dari server adalah 10.20.30.10 sedangkan ip device tap0 yang akan terbentuk kalau OpenVPN server dijalankan adalah 10.20.40.1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | local 10.20.30.10 port 1194 #ganti dengan port yang digunakan proto udp dev tap0 # bisa dengan "dev tun" #certificate configuration ca /etc/openvpn/server/pki/ca.crt #ca certificate cert /etc/openvpn/server/pki/issued/serverku.domain.id.crt #server certificate key /etc/openvpn/server/pki/private/serverku.domain.id.key #server key and keep this is secret dh /etc/openvpn/server/pki/dh.pem #crl-verify /etc/openvpn/server/pki/crl.pem #certificate revocation list tls-auth /etc/openvpn/server/ta.key 0 #tls-auth, 0 for server remote-cert-tls client #important for client #internal IP yang akan didapat setelah tersambung topology subnet server 10.20.40.0 255.255.255.0 client-config-dir /etc/openvpn/static-clients client-to-client keepalive 20 60 cipher AES-256-CBC comp-lzo max-clients 20 persist-key persist-tun daemon status /var/log/openvpn/openvpn-status.log #openvpn status log log-append /var/log/openvpn/openvpn.log #enable log verb 3 #Log Level |
Selanjutnya kita membuat 2 buah files untuk log dan status dan menjalankan service openvpn@server
1 2 3 4 | sudo touch /var/log/openvpn/openvpn-status.log sudo touch /var/log/openvpn/openvpn.log sudo systemctl enable openvpn@server sudo systemctl start openvpn@server |
Me-revoke sertifikat klien dan membuat sertifikat klien baru
Jika diperhatikan konfigurasi di atas, baris crl (certificate revocation list) diberi tanda # di depannya. Hal ini karena belum ada sertifikat klien yang di-revoke. Ketika sebuah sertifikat dibatalkan maka baris tersebut harus diaktifkan dengan menghapus tanda # dan merestart OpenVPN. Cara me-revoke sebuah sertifikat adalah:
1 2 3 | cd /etc/openvpn/server ./easyrsa revoke geeko ./easyrsa gen-crl /etc/openvpn/server/pki/crl.pem |
Sedangkan untuk menambah atau membuat sertifikat baru dapat kita ulang langkah-langkah yang telah dijelaskan di atas
1 2 3 4 5 6 | cd /etc/openvpn/client ./easyrsa gen-req client_baru cd/etc/openvpn/server ./easyrsa import-req ../client/pki/reqs/client_baru.req client_baru ./easyrsa show-req client_baru ./easyrsa sign-req client client_baru |
Konfigurasi Klien
Seluruh langkah-langkah yang dilakukan di atas dikerjakan di server. Sekarang saatnya melakukan konfigurasi pada klien. Tentu saja yang pertama dilakukan memasang paket openvpn dari repositori. Selanjutnya mengcopy file sertifikat dan kunci yang dibutuhkan dari server, bisa dengan mengcopy melalui flashdisk, email ataupun melalui scp ke server. Pastikan file kunci tetap terjaga kerahasiannya. Selanjutnya adalah membuat file konfigurasi klien openvpn. Perhatikan langkah-langkah di bawah:
1 2 3 4 5 6 7 | sudo zypper in openvpn mkdir /home/geeko/ovpn cd /home/geeko/ovpn scp root@serverku.domain.id:/etc/openvpn/server/pki/ca.crt ca.srt scp root@serverku.domain.id:/etc/openvpn/server/pki/issued/geeko.crt geeko.crt scp root@serverku.domain.id:/etc/openvpn/client/pki/private/geeko.key geeko.key scp root@serverku.domain.id:/etc/openvpn/server/ta.key ta.key |
Pada saat membuat kunci klien geeko.key di server (lihat di atas) kita memasukkan password. Misalkan password kita adalah “tumbleweed” maka password ini dapat kita tulis pada sebuah file misalnya pada /home/geeko/ovpn/auth.txt agar password dapat diarahakan ke file tersebut dan kita tidak perlu mengetiknya lagi saat melakukan koneksi. Ingat untuk membuat permission nya menjadi 600 agar tidak bisa terbaca oleh user lain.Ā
Selanjutnya tinggal membuat file log dan konfigurasi klien, seperti di bawah ini contohnya
1 2 3 | sudo touch /var/log/openvpn/openvpn-status.log sudo touch /var/log/openvpn/openvpn.log vim /home/geeko/ovpn/geeko.ovpn |
Isi file /home/geeko/ovpn/geeko.ovpn seperti di bawah.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | tls-client pull client dev tap proto udp #Server IP and Port remote ip_public_server 1194 #isi ip_public_server dengan IP server anda resolv-retry infinite nobind persist-key persist-tun mute-replay-warnings askpass /home/geeko/ovpn/auth.txt ca /home/geeko/ovpn/ca.crt cert /home/geeko/ovpn/geeko.crt key /home/geeko/ovpn/geeko.key tls-auth /home/geeko/ovpn/ta.key 1 auth-nocache remote-cert-tls server comp-lzo float cipher AES-256-CBC tls-version-min 1.2 tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256 status /var/log/openvpn/openvpn-status.log log-append /var/log/openvpn/openvpn.log verb 3 |
Untuk membuat koneksi VPN ke server dengan openvpn maka anda dapat melakukannya melalui terminal atau menggunakan networkmanager. Dengan terminal langkah-langkah yang harus dilakukan adalah
1 2 | cd /home/geeko/ovpn sudo openvpn --config geeko.ovpn & |
periksa ip address anda, jika VPN terhubung maka akan terbentuk device TAP. Jalankan perintah “ip a” melalui terminal dan hasilnya harus terdapat device tap, misalnya
Koneksi dapat juga dilakukan dengan menggunakan networkmanager. Anda harus membuat koneksi baru dengan mengimpor file /home/geeko/ovpn/geeko.ovpn yang anda buat di atas.
Perhatikan bahwa password geeko.key harus anda isikan pada bagian Private Key Password
Kemudian pilih “Advanced” dan masuk ke tab “General,”aktifkan dan pilih TAP pada “Set virtual device type”, dan pastikan anda mengaktifkan “Accept authenticated packets from any address (Float)”
Selanjutnya pilih tab “TLS Settings” dan aturlah seperti contoh di bawah
Untuk melakukan koneksi anda tinggal memilih koneksi VPN pada networkmanager applet dan mengaktifkannya
PENUTUP
Semoga setelah membaca dan mempelajari tulisan ini Anda semua sudah bisa membuat koneksi VPN. Mungkin masih ada yang terlewat ditunggu koreksinya. Have fun!
No Comments