Pendahuluan
Jika kalian ingin lebih dari sekedar berbagi kunci/keys OpenVPN menjadi lebih mudah setup-nya dan menggunakan Public Key Infrastructure (PKI) untuk menggunakan SSL/TLS sertifikat untuk otentikasi dan pertukaran kunci/key antara server VPN dan klien. OpenVPN juga dapat digunakan dalam mode VPN routed atau bridge dan dapat dikonfigurasi untuk menggunakan UDP atau TCP. Port dapat dikonfigurasi juga, tapi port 1194 adalah defaultnya. Dan hanya menggunakan port tunggal untuk semua komunikasi. Implementasi VPN client yang tersedia untuk hampir semua hal termasuk semua distribusi Linux, OS X, Windows dan berbasis OpenWRT WLAN router.
Installasi OpenVPN server
sudo apt-get install openvpn
Seting Public Key Infrastructure (PKI)
Langkah awal dalam membangun konfigurasi OpenVPN adalah bahwa menstabilkan PKI (Public Key Infrastructure). PKI sendiri mencakup seperti berikut :
- Sertifikat terpisah (biasa dikenal sebagai public key) dan kunci pribadi untuk server dan setiap klien, dan.
- Sertifikat utama/master sertifikat Authority (CA) dan kunci/key yang digunakan untuk menandatangani setiap server dan sertifikat klien.
Kedua server dan klien akan mengotentikasi hal lainnya dengan terlebih dahulu memverifikasi bahwa sertifikat yang diberikan dan ditandatangani oleh master sertifikat otoritas (CA), dan kemudian dengan menguji informasi yang sekarang ini – authenticated certificate header, seperti nama sertifikat umum atau sertifikat tipe (klien atau server).
Pengaturan Sertifikat Otoritas (Certificate Authority Setup)
Untuk setup Certificate Authority (CA) itu sendiri dan nantinya menghasilkan sertifikat dan kunci untuk server OpenVPN dan beberapa openvpn klien, pertama copy direktori easy-rsa ke /etc/openvpn. Ini untuk memastikan bahwa setiap perubahan pada script tidak akan hilang ketika paket diperbarui.
Dari terminal/konsol :
mkdir /etc/openvpn/easy-rsa/
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
Selanjutnya, edit /etc/openvpn/easy-rsa/vars dan sesuaikan contoh berikut ini untuk situasi di kalian:
export KEY_COUNTRY=”ID”
export KEY_PROVINCE=”JawaBarat”
export KEY_CITY=”Bogor”
export KEY_ORG=”Citeureup Foundation”
export KEY_EMAIL=”ncuptea@telkom.net.id”
Masukan masing-masing perintah di bawah ini secara ber-urut untuk menghasilkan sertifikat master yaitu Certificate Authority (CA) dan key-nya :
cd /etc/openvpn/easy-rsa/
source vars
./clean-all
./build-ca
Sertifikat untuk server (Certificate Server)
Berikut dibawah ini kita masukan perintah untuk menghasilkan sertifikat dan private key untuk Server VPN kita:
./build-key-server myservername
Seperti pada langkah sebelumnya, kebanyakan parameter/opsi bisa dibiarkan default. Dua pertanyaan lainnya mungkin memerlukan tanggapan, seperti “Sign the certificate [y / n]?” Dan satu persatu permintaan pertanyaan sertifikat bersertifikat, pilih untuk berkomitmen? [Y/n]“.
Parameter Diffie Hellman harus di hasilkan (di generate) untuk server OpenVPN, perintahnya :
./build-dh
Semua sertifikat dan key yang telah di hasilkan (di generate) akan berada di subdirektori keys di /etc/openvpn. Umum dan praktisnya copy sertifikat dan keys di /etc/openvpn/keys ke /etc/openvpn :
cd /etc/openvpn/keys/
cp myservername.crt myservername.key ca.crt dh1024.pem /etc/openvpn/
Membuat sertifikat klien OpenVPN (Client Certificates)
Klien VPN akan sangat memerlukan sertifikat untuk melakukan otentikasi dirinya sendiri ke vpn server. Biasanya kita harus membuat sertifikat yang berbeda untuk setiap klien vpn. Dan untuk membuat sertifikat masukan perintah di bawah ini secara ber-urut dan satu persatu di terminal/konsol mesin vpn servernya.:
cd /etc/openvpn/easy-rsa/
source vars
./build-key client1
Nb. Jika ingin menambahkan sertifikat klien lainnya tinggalkan tambahkan perintah ./build-key client2
Copy file-file di mesin vpn server di bawah ini ke mesin vpn klien, terserah mau pakai cara apa kalian memindahkannya ke mesin klien :
/etc/openvpn/ca.crt
/etc/openvpn/easy-rsa/keys/client1.crt
/etc/openvpn/easy-rsa/keys/client1.key
Sebagaimana diketahui, beberapa file di atas adalah sertifikat dan keys untuk kliennya vpn maka dari itu harap di hapus yang di server jika sudah di copykan ke klien vpn-nya.
Konfigurasi sederhana server vpn
Seiring kalian menginstall OpenVPN otomatis kalian mempunyai contoh-contoh file konfigurasi dan banyak lagi jika kalian memeriksa direktori seperti di bawah ini :
root@server:/# ls -l /usr/share/doc/openvpn/examples/sample-config-files/
total 68
-rw-r–r– 1 root root 3427 2011-07-04 15:09 client.conf
-rw-r–r– 1 root root 4141 2011-07-04 15:09 server.conf.gz
Mulai dengan meng-copy dan meng-extract server.conf.gz ke /etc/openvpn/server.conf dari contoh konfigurasi openvpn yang sedang kita bahas ini :
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
sudo gzip -d /etc/openvpn/server.conf.gz
Edit /etc/openvpn/server.conf untuk memastikan baris di bawah ini menunjuk ke sertifikat dan kunci yang kalian buat di bagian atas.
ca ca.crt
cert myservername.crt
key myservername.key
dh dh1024.pem
Berikut ini ialah output status openvpn server yang sudah berjalan oke dengan konfigurasi yang minimum.
root@server:/etc/openvpn# /etc/init.d/openvpn start
* Starting virtual private network daemon(s)…
* Autostarting VPN ‘server’ [ OK ]
Sekarang kita cek apakah openvpn telah membuat interface tun0 :
root@server:/etc/openvpn# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
[...]
Konfigurasi klien cara mudah
Ada berbagai implementasi OpenVPN klien yang berbeda dengan atau tanpa GUI. Kalian dapat membaca lebih lanjut tentang klien vpn dalam bagian selanjutnya. Namun untuk saat ini kita menggunakan klien OpenVPN untuk Ubuntu yang merupakan eksekusi paket yang sama seperti di server. Jadi, kita harus menginstal paket openvpn lagi pada mesin klien:
sudo apt-get install openvpn
Sekarang waktunya mengcopy client.conf dari contoh/sample konfigurasi openvpn ke /etc/openvpn/ :
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/
Salin key serta sertifikat klien dari CA yang telah kita buat seperti di bagian atas, misalnya di copy ke direktori /etc/openvpn/ dan edit /etc/openvpn/client.conf untuk memastikan baris berikut seperti dibawah yang menunjuk ke file-file tersebut. Jika kalian memiliki file di /etc/openvpn/ kalian dapat menghilangkan path-nya (simbol “#” nya).
ca ca.crt
cert client1.crt
key client1.key
Dan sekarang kita harus setidaknya menentukan nama server OpenVPN atau alamatnya. Pastikan kata kunci klien ada didalam konfigurasi. Dan Itulah yang memungkinkan modus klien.
client
remote vpnserver.example.com 1194
Sekarang start OpenVPN kliennya :
root@client:/etc/openvpn# /etc/init.d/openvpn start
* Starting virtual private network daemon(s)…
* Autostarting VPN ‘client’ [ OK ]
Sekarang kita cek apakah openvpn telah membuat interface tun0 :
root@client:/etc/openvpn# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.6 P-t-P:10.8.0.5 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
Cek apakah klien vpn bisa ping ke server vpn :
root@client:/etc/openvpn# ping 10.8.0.1
PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data.
64 bytes from 10.8.0.1: icmp_req=1 ttl=64 time=0.920 ms
Catatan : Server OpenVPN selalu menggunakan alamat IP paling pertama yang digunakan dalam jaringan klien dan hanya IP yang pingable. Misalnya jika kita mengkonfigurasi /24 untuk network mask klien, alamat no.1-nya akan digunakan. Alamat PTP yang kita lihat dalam output ifconfig di atas biasanya tidak menjawab permintaan ping.
Cek perutean paket yang keluar di mesin klien :
root@client:/etc/openvpn# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.8.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.8.0.1 10.8.0.5 255.255.255.255 UGH 0 0 0 tun0
192.168.42.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.42.1 0.0.0.0 UG 0 0 0 eth0
Langkah awal dalam troubleshooting
Jika bahasan dan langkah-langkah di atas tidak bekerja di kalian, periksa di bawah ini :
- Cek syslog kalian, contoh grep -i vpn /var/log/syslog.
- Dapatkah klien konek ke mesin server? Mungkinkah firewall kalian mem-block akses? Cek kembali syslog di mesin server.
- Klien dan server harus menggunakan protokol dan port yang sama, misal UDP port 1194, lihat opsi konfigurasi protokol dan port.
- Klien dan server harus menggunakan konfigurasi yang sama tentang “kompresi”. Lihat comp-lzo pada opsi di dalam file konfigurasinya.
- Klien dan server harus menggunakan konfigurasi yang sama tentang mode bridge & routed. Lihat opsi konfigurasi server routed vs server-bridge.
Konfigurasi server vpn mode Route
Dibagian atas VPN bekerja secara sangat sederhana. Klien dapat mengakses layanan pada mesin server VPN melalui terowongan (tunnel) yang dienkripsi. Jika kita ingin mencapai ke lebih banyak server atau apapun di jaringan lain, menekankan beberapa rute ke klien. Misalnya jika jaringan perusahaan kita dapat diringkas ke network 192.168.0.0/16. Tapi kita juga harus mengubah routing/rute untuk jalan kembali lagi (way back) – untuk itu server kita perlu tahu rute ke jaringan klien VPN.
Atau kita mungkin ingin menekankan default gateway untuk semua klien untuk mengirim semua lalu lintas internet mereka ke gateway VPN pertamanya dan dari sana juga melalui firewall perusahaan ke internet. Bagian ini menunjukkan beberapa pilihan yang memungkinkan.
Pastikan rute ke klien bisa memungkinkan untuk mencapai subnet lokal lainnya di belakang server. Ingatlah bahwa subnet lokal juga perlu tahu rute pool alamat klien OpenVPN (10.8.0.0/24) kembali ke server OpenVPN.
push “route 10.0.0.0 255.0.0.0″
Jika opsi dibawah ini diaktifkan, direktif ini akan mengkonfigurasi semua klien untuk mengarahkan default gateway jaringan mereka melalui VPN, menyebabkan semua lalu lintas IP seperti web browsing dan pencarian DNS yang pergi melalui VPN (server OpenVPN mesin atau firewall pusat, kita mungkin perlu NAT TUN/TAP interface ke internet untuk bisa bekerja secara benar).
push “redirect-gateway def1 bypass-dhcp”
Konfigurasi mode server dan menyediakan subnet VPN untuk OpenVPN untuk menarik klien dari alamat. Server vpn akan mengambil IP 10.8.0.1 untuk dirinya sendiri, sisanya akan dibuat tersedia bagi semua klien vpn yang valid. Setiap klien akan dapat mencapai server pada 10.8.0.1. Hilangkan simbol “#” pada baris dibawah ini jika ethernet kita dibridging.
server 10.8.0.0 255.255.255.0
Mempertahankan catatan/rekaman klien ke asosiasi virtual alamat IP dalam file ini. Jika OpenVPN dimatikan atau di-restart, reconnecting klien dapat diberikan alamat IP yang sama dari pool virtual yang sebelumnya ditugaskan.
ifconfig-pool-persist ipp.txt
Menekankan DNS server ke klien :
push “dhcp-option DNS 10.0.0.2″
push “dhcp-option DNS 10.1.0.2″
Menginjinkan antara klien dan klien lainnya dapat berkomunikasi :
client-to-client
Mengenablekan kompresi pada link VPN :
comp-lzo
Direktif keepalive menyebabkan pesan ping yang akan dikirim bolak-balik atas link sehingga masing-masing pihak tahu ketika pihak lain berstatus shutdown, reboot, dsb. Ping setiap 1 detik, menganggap bahwa status remote peer adalah down jika ping tidak diterima selama periode waktu 3 detik.
keepalive 1 3
Ini adalah ide yang baik untuk mengurangi hak istimewa daemon OpenVPN setelah inisialisasi.
user nobody
group nogroup
OpenVPN 2.0 meyertakan fitur yang memungkinkan server OpenVPN secara aman mendapatkan username dan password dari klien yang terhubung, dan menggunakan informasi tersebut sebagai dasar untuk otentikasi klien. Untuk menggunakan metode otentikasi, pertama tambahkan direktif auth-user-pass untuk konfigurasi klien. Ini akan mengarahkan klien OpenVPN pada permintaan penggunaan untuk username/password, lalu melewatkan itu ke server melalui saluran TLS yang aman.
# client config!
auth-user-pass
Bagian baris dibawah ini akan memberitahu server openvpn untuk memvalidasi username dan password yang di masukan oleh klien menggunakan modul login PAM. Biasanya jika kita menyentralkan otentifikasi dengan, misal Kerberos.
plugin /usr/lib/openvpn/openvpn-auth-pam.so login
Catatan : Harap baca panduan tentang OpenVPN Hardening Security Guide untuk lebih lanjut
Konfigurasi server vpn mode Bridge
OpenVPN dapat di setup baik dengat mode Routed atau VPN Bridge. Kadang-kadang ini juga disebut sebagai OSI layer-2 dibandingkan layer-3 VPN. Dalam VPN Bridge semua frame layer-2 misalnya semua frame ethernet dikirim ke mitra VPN dan dalam mode Routed VPN maka hanya layer-3 paket dikirim ke mitra VPN. Dalam mode bridge semua lalu lintas termasuk lalu lintas yang secara tradisional seperti LAN lokal seperti siaran (broadcast) jaringan lokal, permintaan DHCP, permintaan ARP dll dikirim ke mitra VPN, sedangkan dalam mode Routed ini akan disaring (di filter).
Persiapan untuk mengkonfigurasi interfaces sebagai bridge di mesin server
Pastikan paket bridge-utils telah terinstall :
sudo apt-get install bridge-utils
Sebelum kita mengkonfigurasi vpn dalam mode bridge kita perlu menyesuaikan beberapa konfigurasi interfaces. Mari kita asumsikan bahwa server telah terkoneksi dengan eth0 ke Internet dan eth1 ke LAN yang kita ingin bridge. File konfigurasi /etc/network/interfaces kita mungkin terlihat seperti berikut :
auto eth0
iface eth0 inet static
address 1.2.3.4
netmask 255.255.255.248
default 1.2.3.1
auto eth1
iface eth1 inet static
address 10.0.0.4
netmask 255.255.255.0
Konfigurasi interface lurus penerusan (straight forward) ini perlu diubah ke dalam mode bridge seperti di mana konfigurasi interfaces eth1 bergerak ke interfaces br0 baru. Plus kita mengkonfigurasi bahwa br0 harus menjembatani (membridge) interfaces eth1. Kita juga harus memastikan bahwa interface eth1 selalu dalam modus promiscuous – ini memberitahu interfaces untuk memforward semua frame ethernet ke IP stack.
auto eth0
iface eth0 inet static
address 1.2.3.4
netmask 255.255.255.248
default 1.2.3.1
auto eth1
iface eth1 inet manual
up ip link set $IFACE up promisc on
auto br0
iface br0 inet static
address 10.0.0.4
netmask 255.255.255.0
bridge_ports eth1
Sampai titik ini kita harus merestart networking. Bersiaplah bahwa ini mungkin akan membuat tidak bekerja seperti yang kita harapkan dan mungkin kita akan kehilangan konektivitas secara remote akses. Pastikan kita dapat memecahkan permasalahan ini dengan memiliki akses lokal.
sudo /etc/init.d/network restart
Mempersiapkan server untuk di konfigurasi bridge
Edit /etc/openvpn/server.conf dan ganti beberapa opsi hingga seperti berikut :
;dev tun
dev tap
up “/etc/openvpn/up.sh br0 eth1″
;server 10.8.0.0 255.255.255.0
server-bridge 10.0.0.4 255.255.255.0 10.0.0.128 10.0.0.254
Berikutnya buat suatu script helper untuk menambahkan ke interfaces tap ke bridge dan untuk memastikan interfaces eth1 dalam modus promiscuous.
Buat /etc/openvpn/up.sh dan isi seperti dibawah ini:
#!/bin/sh
BR=$1
ETHDEV=$2
TAPDEV=$3
/sbin/ip link set “$TAPDEV” up
/sbin/ip link set “$ETHDEV” promisc on
/sbin/brctl addif $BR $TAPDEV
Lalu buat supaya script helper ini bisa di exekusi :
sudo chmod 755 /etc/openvpn/up.sh
Setelah mengkonfigurasi server, saatnya merestart openvpn :
sudo /etc/init.d/openvpn restart
Konfigurasi di klien
Pertama, install openvpn di klien :
sudo apt-get install openvpn
Kemudian bermodal dari server yang sebelumnya sudah dikonfigurasi dan dihasilkan sertifikat serta key klien yang telah disalin ke direktori /etc/openvpn/ pada mesin klien, kini membuat file konfigurasi klien dengan menyalin dari sample konfigurasi. Dalam terminal pada komputer klien masukkan :
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn
Kini edit /etc/openvpn/client.conf dan rubah hingga seperti di bawah ini :
dev tap
;dev tun
Restart openvpn-nya :
sudo /etc/init.d/openvpn restart
Mulai sekarang seharusnya kita sudah bisa terkoneksi ke remote LAN melalui VPN.
Implementasi software klien openvpn
Linux Network Manager GUI untuk openvpn
Banyak distribusi linux dekstop menyertakan ini dan bahkan varian Ubuntu desktop datang dengan Network Manager, cara menakjubkan sebuah GUI untuk mengkonfigurasi network seting kita. Ini juga dapat digunakan untuk mengatur koneksi openvpn. Pastikan bahwa kita sudah mempunyai paket network-manager-openvpn terinstall. Dibawah ini kita dapat melihat installasi yang menginstall paket lainnya yang dibutuhkan juga :
root@client:~# apt-get install network-manager-openvpn
Reading package lists… Done
Building dependency tree
Reading state information… Done
The following extra packages will be installed:
liblzo2-2 libpkcs11-helper1 network-manager-openvpn-gnome openvpn
Suggested packages:
resolvconf
The following NEW packages will be installed:
liblzo2-2 libpkcs11-helper1 network-manager-openvpn
network-manager-openvpn-gnome openvpn
0 upgraded, 5 newly installed, 0 to remove and 631 not upgraded.
Need to get 700 kB of archives.
After this operation, 3,031 kB of additional disk space will be used.
Do you want to continue [Y/n]?
Untuk menginformasikan ke network-manager mengenai paket-paket yang baru diinstal kita harus restart:
root@client:~# restart network-manager
network-manager start/running, process 3078
Buka Network Manager GUI, pilih tab VPN dan kemudian klik tombol ‘Add‘. Pilih OpenVPN sebagai jenis VPN di kotak dialog pembuka dan tekan ‘Create‘. Pada kotak dialog berikutnya menambahkan nama server OpenVPN itu sebagai ‘Gateway‘, set ‘Type‘ ke ‘Sertifikat (TLS)‘, ‘User Sertifikat’ titik ke sertifikat pengguna kita, ‘CA Certificate‘ untuk sertifikat CA dan ‘Private Key‘ ke file kunci pribadi kita. Gunakan tombol advanced untuk mengaktifkan kompresi atau pengaturan khusus lainnya yang kita atur sebelumnya di server. Sekarang cobalah untuk membangun (estabilized) VPN kita.
Software openvpn dengan GUI untuk Windows
Pertama-tama download dan install versi paling baru dari OpenVPN Windows Installer. Openvpn 2.2.1 menjadi versi terakhir saat manual openvpn ini ditulis.
Sesudah terinstall kita perlu menjalankan servis openvpn ini. Buka Start
Menu>Computer>Manage>Services and Applications>Services. Cari OpenVPN servis dan jalankan itu sebagai administrator. Kita juga bisa mengklik kanan untuk melihat pilihannya.
Kita juga harus membuat dan menuliskan beberapa option konfig dalam teks file dan diletakan di C:\Program Files\OpenVPN\config\client.ovpn bersama dengan certificate CA. Kita juga bisa memasukan sertifikat pengguna ke dalam direktori home user seperti dalam contoh di bawah ini :
# C:\Program Files\OpenVPN\config\client.ovpn
client
remote server.example.com
port 1194
proto udp
dev tun
dev-type tun
ns-cert-type server
reneg-sec 86400
auth-user-pass
auth-retry interact
comp-lzo yes
verb 3
ca ca.crt
cert “C:\\Users\\username\\My Documents\\openvpn\\client.crt”
key “C:\\Users\\username\\My Documents\\openvpn\\client.key”
management 127.0.0.1 1194
management-hold
management-query-passwords
auth-retry interact