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.
OpenVPN
mendukung otentikasi dua arah berbasis sertifikat, yang berarti bahwa
klien harus mengotentikasi sertifikat server dan server harus
mengotentikasi sertifikat klien sebelum koneksi saling percaya
didirikan/dibangun.
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 tingkat tinggi (Advanced Configuration)
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
Manual page dalam bentuk PDF-nya bisa di download di bawah ini :