Tuesday, February 28, 2017

Membangun Konsep Sistem Single Sign On (SSO) dengan Keycloak (SAML) dan OpenLDAP

  3 comments
Single Sign On - Source Image
Assalamu'alaikum Wr. Wb.
Di artikel ini saya akan menuliskan tentang bagaimana saya membangun Sistem Autentikasi Single Sign On (SSO) dan Single Logout (SLO) untuk sistem autentikasi Aplikasi berbasis Web dengan Keycloak sebagai Access Management dan OpenLDAP sebagai Database Informasi Pengguna.

a. Pengertian
Single Sign On (SSO) merupakan suatu sistem autentikasi yang memudahkan pengguna dalam mengakses banyak layanan namun hanya dengan Satu Kali Login. Kebalikannya, Single Logout (SLO) merupakan suatu sistem yang digunakan untuk me-logout akun kita hanya dengan Satu Kali Logout pada Salah Satu Aplikasi. Selengkapnya...

Keycloak sendiri merupakan sebuah aplikasi Identity and Access Management yang dapat digunakan untuk membangun Sistem Autentikasi terpusat pada Aplikasi berbasis Standalone atau Web. Selengkapnya...

Dan SAML merupakan suatu format autentikasi dan autorisasi yang berbasis XML untuk Web Browser, SAML bekerja dengan cara saling bertukar data dalam format XML antara Identity Provider (Server) dengan Service Provider (Client). SAML terkenal sebagai format standar untuk Autentikasi Single Sign On selain OpenID. Selengkapnya...

b. Latar Belakang
Dengan semakin banyaknya 'tuntutan' untuk memiliki banyak akun di banyak aplikasi, tentu saja ada kalanya kita tidak dapat mengingat detail dari setiap akun pada layanan tersebut. Oleh karena itu, sistem Autentikasi SSO datang menjawab masalah tersebut. Atas dasar itulah saya ingin mencoba membangun sistem autentikasi ini berdasarkan konsep SSO itu sendiri.

c. Maksud dan Tujuan
Dapat mengerti alur proses autentikasi dari Sistem SSO dan dapat membangun Sistem SSO tersebut untuk tujuan mengautentikasi user yang menggunakan layanan atau aplikasi berbasis Web.

d. Waktu Pelaksanaan
Untuk mempelajari dasar dari SSO dan Struktur Data LDAP serta membangun sistem Single Sign On ini dari awal, saya menghabiskan waktu kurang lebih 2 Minggu (1 Minggu untuk Mempelajari, 1 Minggu untuk Mempraktikkannya).

e. Alat dan Bahan
- PC + Kabel UTP RJ45.
- Aplikasi VirtualBox.
- ISO Ubuntu Server 16.04 (64-bit).
- 2x VM Ubuntu Server (Untuk Keycloak dan OpenLDAP).
- 1x Perangkat MikroTik (Untuk Bridging Network) / Alternatif: Gunakan Host-only Network.
- Aplikasi Keycloak.
- OpenJDK & OpenJRE.
- OpenLDAP & phpLDAPadmin.
- CMS Wordpress + Plugin SAML 2.0 Single Sign On
- Nextcloud + Plugin SAML Single Sign On

f. Langkah Kerja
Tips: Lakukan Instalasi Ubuntu Server Satu Kali, Lakukan Konfigurasi Pertama, kemudian Clone 2x. Satu untuk VM yang lain, Satu dijadikan cadangan untuk hal-hal darurat.
Saya mengasumsikan alat dan bahan diatas telah disiapkan dan siap untuk dipakai.
1. Lakukan Instalasi OpenLDAP & phpLDAPadmin.
Hal pertama yang akan kita lakukan adalah melakukan Instalasi OpenLDAP & phpLDAPadmin, teman-teman dapat mengikuti Artikel saya sebelumnya mengenai Instalasi awalnya disini.

2. Konfigurasi OpenLDAP & phpLDAPadmin.
Setelah teman-teman melakukan instalasi aplikasi-aplikasi ini, saatnya kita melakukan konfigurasi awal pada OpenLDAP yaitu membangun Struktur Dasarnya. Secara Default, ketika kita melakukan instalasi OpenLDAP aplikasi ini belum membuat Struktur Data nya. Maka dari itu kita akan membuatnya disini.
~# dpkg-reconfigure slapd
Omit OpenLDAP server configuration?
-- Pilih No karena kita hanya ingin membuat Database saja.
DNS domain name:
-- Masukkan Nama Domain yang akan digunakan sebagai Struktur Akar dari Database OpenLDAP
Organization name:
-- Dapat diisi sama dengan Domain Name
Administrator password:
-- Masukkan Password untuk akun Admin nantinya.
Database backend to use:
-- Pilih MDB
Do you want the database to be removed when slapd is purged?
-- Pilih No
Move old database?
-- Pilih No
Allow LDAPv2 Protocol?
-- Ini hanya preferensi, namun bila teman-teman mempunyai aplikasi yang masih memakai Protokol LDAP Versi 2, silahkan pilih Yes. Apabila tidak pilih No saja.

3. Konfigurasikan phpLDAPadmin untuk DB dan Account Binding.
Kita akan sesuaikan konfigurasi dari phpLDAPadmin agar Login Binding nya menuju ke Database dan Akun Admin yang sudah kita buat. Edit file:
~# nano /etc/phpldapadmin/config.php
Silahkan cari value ini:
/* Array of base DNs of your LDAP server. Leave this blank to have phpLDAPadmin
   auto-detect it for you. */
$servers->setValue('server','base',array('dc=example,dc=com'));
/* The DN of the user for phpLDAPadmin to bind with. For anonymous binds or
   'cookie','session' or 'sasl' auth_types, LEAVE THE LOGIN_DN AND LOGIN_PASS
   BLANK. If you specify a login_attr in conjunction with a cookie or session
   auth_type, then you can also specify the bind_id/bind_pass here for searching
   the directory for users (ie, if your LDAP server does not allow anonymous
   binds. */
$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');


4. Login ke phpLDAPadmin
Setelah Login Binding kita konfigurasi, silahkan teman-teman buka browser masing-masing dan buka phpLDAPadmin melalui:
http://IP_atau_Domain/phpldapadmin
Kemudian Klik Login pada bagian kiri, lalu masukkan password.
5. Buat Struktur Database LDAP
Pada LDAP kita akan mengenal yang namanya Entry. Entry ini memiliki tiga komponen didalamnya yaitu, Distinguished Name (DN) / Relative Distinguished Name (RDN), Kumpulan Attribute, dan Kumpulan Object Class.
Contoh Pencarian Data LDAP yang dilakukan dengan Perintah 
ldapsearch -x -b cn=Fajar\ Ru,cn=siswa,ou=akun,dc=smkn1pedan,dc=com
# Fajar Ru, siswa, akun, smkn1pedan.com
dn: cn=Fajar Ru,cn=siswa,ou=akun,dc=smkn1pedan,dc=com
cn: Fajar Ru
givenName: Fajar
gidNumber: 502
homeDirectory: /home/users/fajar
sn: Ru
loginShell: /bin/sh
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
uidNumber: 1002
uid: fajar
mail: fajaru@smkn1pedan.com
Kita bisa lihat bahwa kita mempunyai:
- Distinguished Name (DN): cn=siswa,ou=akun,dc=smkn1pedan,dc=com
- Relative Distinguished Name (RDN): cn=Fajar Ru
- Gabungan DN dan RDN : dn: cn=Fajar Ru,cn=siswa,ou=akun,dc=smkn1pedan,dc=com
- Kumpulan Attribute : cn, givenName, sn, uid, mail
- Object Class (inetOrgPerson, posixAccount) yang menunjukkan bahwa Entry ini merupakan sebuah akun untuk pengguna. Dan Object Class ini juga yang menentukan Attribute-Attribute apa saja yang dimiliki oleh Entry tersebut.

Setelah teman-teman sedikit mengetahui tentang strukturnya, sekarang kiita akan mulai membuatnya. Kita akan mulai dari yang paling dekat dengan Struktur Akar, Domain Component (DC), dan Organization (O). Yaitu Organization Unit (OU).

Buat Organization Unit (OU):
- Dari menu utama setelah kita login, kita Klik Create new entry here dibawah Entry cn=admin.
- Kemudian pada pemilihan Template, kita pilih Generic: Organization Unit.
- Setelah itu kita isikan nama Organization Unit. Disini saya akan isi dengan akun.
- Setelah itu kita Create Object lalu Commit.

Buat Posix Group (Child atau Sub dari Organization Unit):
- Klik pada Organization Unit (ou=akun) atau yang sudah teman-teman buat.
- Kemudian klik Create a child entry.
- Pada pemilihan Template, kita pilih Generic: Posix Group.
- Masukkan nama groupnya. Kemudian klik Create Object lalu Commit.
- Bila teman-teman ingin membuat Grup lebih dari satu, silahkan ulangi lagi.

Hal yang kita lakukan selanjutnya adalah membuat Entry untuk akun pengguna. Disini saya akan membuat satu akun per masing-masing grup.
- Pertama, silahkan klik nama grup teman-teman yang ingin dimasukkan akun didalamnya.
- Kemudian klik Create a child entry.
- Pada pemilihan Template, pilih Generic: User Account.
- Silahkan teman-teman isikan form-form yang tersedia. Hal yang perlu diperhatikan disini adalah Common Name (CN) dan User ID (UID). Untuk akun pengguna, Common Name biasa terisi dengan Nama Lengkap. Sedangkan User ID diisi dengan Username yang akan digunakan.
- Apabila sudah silahkan klik Create Object lalu Commit.
- Untuk menambahkan Email, silahkan teman-teman klik Add New Attribute kemudian pilih Email.
- Ulangi apabila teman-teman ingin membuat akun lagi.

6. Instalasi OpenJDK & OpenJRE
Keycloak merupakan aplikasi berbasis Java, maka dari itu kita perlu menginstall Java Development Kit, dan Java Runtime Environment. Disini saya akan memakai OpenJDK dan OpenJRE

~# apt install default-jdk default-jre

7. Menambahkan User Admin untuk Manajemen Keycloak
Setelah teman-teman mendownload dan meng-extractnya. Silahkan teman-teman menuju folder Keycloak -> Bin.
keycloak/bin# ./add-user-keycloak.sh -r master -u admin -p tekaje
8. Jalankan Keycloak dalam Mode Standalone.
Setelah akun dibuat, kita akan jalankan Keycloak dalam mode Standalone. File yang digunakan untuk menjalankan aplikasi ini ada di folder bin.
keycloak/bin# ./standalone.sh -b 0.0.0.0
Parameter "-b 0.0.0.0" disini digunakan agar Keycloak tidak mem-binding akses nya ke Localhost saja.
9. Akses Admin Panel Keycloak dan membuat Realm baru.
Akses Admin Panel Keycloak dari Web Browser dengan membuka:
http://IP_atau_Domain_Keycloak/auth/admin
Setelah kita masuk, kita klik Master pada Menu Utama, kemudian klik Add realm. Silahkan teman-teman masukkan Nama Realm nya kemudian klik Create. Secara otomatis setelah kita membuatnya, kita akan langsung masuk ke Realm yang baru.
10. Integrasikan Keycloak dengan OpenLDAP
Pada Menu Utama, silahkan klik User Federation. Kemudian pada Add Provider pilih LDAP.
Isikan dan sesuaikan seperti gambar dibawah. Hal yang perlu diperhatikan adalah:
- Connection URL : ldap://<Masukkan IP OpenLDAP disini>
- Users DN : Masukkan DN dari Organization Unit atau Grup yang berisi user-user.
- Bind DN : Masukkan DN dari User Admin LDAP.
- Bind Credential : Masukkan Password dari User Admin LDAP.

Apabila sudah silahkan klik Save lalu klik Synchronize all users. Jika tidak ada permasalahan, maka akan muncul notifikasi Success!. Untuk mengecek apakah Data user dari LDAP sudah diimport, silahkan klik Users pada menu utama lalu klik View all users.

11. Instalasi Wordpress dan Pemasangan Plugin SAML 2.0 Single Sign On.
Saya asumsikan teman-teman bisa dan sudah melakukan Instalasi dari Wordpress. Selanjutnya kita lakukan Instalasi dari Plugin SAML 2.0.
- Dari menu utama, kita Hover pada Menu Plugins kemudian kita Klik Add New.
- Pada menu Upload, silahkan Upload file plugin yang sudah teman-teman download.
- Apabila sudah, klik Activate Plugin untuk mengaktifkan Plugin.

12. Konfigurasi Plugin Wordpress SAML 2.0 Single Sign On.
Setelah instalasi selesai, silahkan hover ke Menu Settings kemudian klik menu Single Sign On.
- Hal pertama yang akan kita lakukan adalah mengisi data dari Service Provider (SP).
- Isikan seperti gambar dibawah dengan penyesuaian dengan milik teman-teman.
13. Download & Import Metadata dari Plugin Wordpress Untuk Dijadikan Template Client Keycloak.
Masih di Plugin Wordpress SAML. Silahkan buka Tab General kemudian Download Metadata nya.
Setelah itu silahkan ke halaman admin Keycloak lalu klik Menu Client, Kemudian Import file Metadata yang telah teman-teman download tadi lalu klik Save.

14. Sesuaikan konfigurasi Client Keycloak.
Pada settingan Plugin Wordpress, kita memilih format NameID Email. Maka di Keycloak kita juga samakan dengan mengganti dari Username ke Email.
15. Import Konfigurasi IDP (Keycloak) ke SP (Wordpress)
Masih pada halaman Client Keycloak, silahkan buka Tab Installation. Pilih SAML Metadata IDPSSODescriptor pada Format Option, kemudian download metadata tersebut. Upload Metadata yang telah didownload tadi ke Webroot manapun asal dapat teman-teman akses dari Browser.
Setelah itu kita kembali ke Konfigurasi Plugin Wordpress, kali ini kita konfigurasikan Tab Identity Provider. Arahkan URL dari Metadata yang sudah teman-teman upload ke URL to IDP Metadata lalu klik Fetch Metadata untuk memudahkan kita mengisi form-form dibawahnya.
Untuk Certificate Fingerprint, Pertama-tama silahkan teman-teman Export Signing Key yang ada di Profile Client Wordpress teman-teman di Keycloak pada Tab SAML Keys. Kemudian teman-teman buka Terminal dan pastikan teman-teman telah menginstall OpenSSL. Untuk mendapatkan Certificate Fingerprint nya, silahkan ketikkan perintah berikut di Terminal.
~# openssl pkcs12 -in <lokasi atau nama file .p12> -nodes -passin pass:<key yang dimasukkan saat export, kosongkan apabila tidak diisi> | openssl x509 -noout -fingerprint

16. Aktifkan Single Sign On Wordpress
Setelah Checklist yang ada di Plugin Wordpress sudah terpenuhi semuanya, silahkan berikan Checklist pada Tab General > Enable SAML Authentication.
17. Setting User Mapping pada Keycloak
Agar data dari LDAP dapat dibaca oleh Wordpress, kita perlu menyesuaikan (mapping) dari LDAP ke Wordpress melalui Keycloak. Untuk melakukannya silahkan teman-teman kembali ke halaman Client Wordpress di Keycloak, kemudian teman-teman buka Tab Mappers. Tambahkan Mapping dengan klik Create. Hal yang harus dibuat adalah sebagai berikut:
Username
- Name: username
- Mapper Type: User Property
- Property: username
- Friendly Name: username
- SAML Attribute Name: username
- SAML Attribute NameFormat: Basic
Firstname
- Name: firstname
- Mapper Type: User Property
- Property: firstName
- Friendly Name: firstname
- SAML Attribute Name: firstname
- SAML Attribute NameFormat: Basic
Lastname
- Name: lastname
- Mapper Type: User Property
- Property: lastName
- Friendly Name: lastname
- SAML Attribute Name: lastname
- SAML Attribute NameFormat: Basic
Email
- Name: email
- Mapper Type: User Property
- Property: mail
- Friendly Name: email
- SAML Attribute Name: email
- SAML Attribute NameFormat: URI Reference
18. Test SSO Wordpress
Silahkan teman-teman buka Wordpress kemudian buka WP-Admin. Apabila tidak ada masalah, seharusnya akan menampilkan Login Page dari Keycloak dan setelah Login akan kembali diarahkan ke WP-Admin.
19. Integrasi Keycloak ke Nextcloud dengan Plugin SSO & SAML authentication yang secara default ada di Nextcloud namun belum di Enable.
Saya asumsikan teman-teman sudah menginstall Nextcloud dan Plugin SSO & SAML authentication sudah di Enable di Main Menu -> Add Apps -> Not Enabled .
- Silahkan teman-teman buka Admin Page melalui User Menu di Pojok kanan atas lalu pilih Admin.
- Klik pada Menu SAML & SSO authentication
- Isikan seperti gambar dibawah ini, dengan Certificate dan Private Key dapat teman-teman generate melalui Terminal (membutuhkan OpenSSL) dengan perintah:
~# openssl req -newkey rsa:2048 -nodes -keyout user_saml.key -x509 -days 1024 -out user_saml.crt
Setelah selesai digenerate, silahkan teman-teman buka menggunakan Teks Editor dan masukkan satu persatu data dari Certificate serta Private Key tersebut ke Form Service Provider.
- Untuk Certificate dari Identity Provider, silahkan teman-teman ambil melalui Keycloak. Ada pada menu Realm Settings -> Keys -> All -> Certificate.
20. Import Metadata Nextcloud ke Keycloak
Setelah data Service Provider dan Identity Provider di Nextcloud diisi dan sudah keluar notifikasi Metadata Valid, silahkan teman-teman Download Metadata tersebut dan Import menjadi Client di Keycloak. Pada hal ini tidak ada hal yang diubah pada Konfigurasi Client nya.
21. Test SSO Nextcloud dan Wordpress
Silahkan teman-teman Logout semua Session yang ada dari Keycloak -> Sessions -> Logout All.
Kemudian silahkan teman-teman untuk login di salah satu aplikasi, Wordpress atau Nextcloud. Apabila sudah cobalah untuk berpindah ke aplikasi lain dan mencoba login. Apabila pada aplikasi kedua teman-teman langsung di redirect kembali dan tidak diminta untuk Login maka kita sudah mendapatkan Konsep dari SSO.

g. Referensi
- Wikipedia - Single Sign On
- Wikipedia - Security Assertion Markup Language
- SOA Security - How SAML2 Single Logout Works
- LDAP - Basic LDAP Concept
- LDAP - DIT and the LDAP Root DSE
- DigitalOcean - Understanding the LDAP Protocol, Data Hierarchy, and Entry Components
- DigitalOcean - How To Install and Configure a Basic LDAP Server on an Ubuntu 12.04 VPS
- Keycloak Documentation
- Nextcloud 11 Documentation - Configuring Single Sign On
- CloudForm - Nextcloud and Keycloak (SAML)
- Kurusetra Computer - Linux Single Sign On (SSO)
- Stackoverflow - How to get SHA1 fingerprints from p12 certificate?
- Random Stackoverflow Search
- dan Masih Banyak Referensi yang tidak bisa saya sebutkan satu persatu

h. Kesimpulan
Meski saya sudah berhasil mendapatkan konsep dari Single Sign On dan berhasil mempraktekkannya, namun percobaan ini belumlah sempurna. Saya masih perlu mempelajari lebih dalam mengenai User Provisioning dalam LDAP dan Penyesuaian Mapping nya agar semua aplikasi dapat digunakan sebagaimana mestinya. Karena seperti yang teman-teman lihat, Pada percobaan ini saya masih belum dapat melakukan Login sebagai Admin pada Wordpress dengan Sistem SSO ini, dan Error pada Nextcloud yang disebabkan karena belum adanya Mapping yang benar dan sesuai dengan aplikasinya.


Sekian yang dapat saya tulis, semoga bermanfaat bagi teman-teman semuanya!
Apabila terdapat kekurangan dan kesalahpahaman ataupun salah penulisan saya mohon maaf sebesar-besarnya dan meminta Kritik dan Sarannya.
Dan seperti biasa, Terima Kasih!
Wassalamu'alaikum Wr. Wb.

Monday, February 27, 2017

Instalasi Dasar OpenLDAP dan Manajemen GUI phpLDAPadmin Ubuntu 16.04

  No comments

Assalamu'alaikum Wr. Wb.
Pada artikel ini saya ingin menulis mengenai Instalasi Dasar LDAP dan Manajemen GUI nya dengan Aplikasi LDAP Open Source OpenLDAP dan phpLDAPadmin.

a. Pengertian
LDAP atau Lightweight Directory Access Protocol merupakan sebuah protokol perangkat lunak yang memungkinkan seseorang untuk mencari Resource atau Sumber daya yang ada pada sebuah jaringan, seperti File, Perangkat, dsb. LDAP biasa diimplementasikan untuk Autentikasi aplikasi seperti Mail, FTP, Aplikasi, Samba, dsb.

b. Latar Belakang
Dengan semakin banyaknya data yang juga semakin kompleks strukturnya, kita tentu membutuhkan sebuah 'Database' yang dapat menghandle banyaknya data ini. Oleh karena itu kita akan memakai LDAP, yang mana LDAP adalah seperti sebuah Database yang memfokuskan pada aktivitas Membaca. Selain itu LDAP sendiri dapat digunakan sebagai Sumber Autentikasi, yang mana kita akan singgung di pembahasan selanjutnya.

c. Maksud dan Tujuan
Mengetahui bagaimana cara melakukan instalasi dasar OpenLDAP dan Aplikasi Manajemennya phpLDAPadmin serta mengetahui hal apa saja yang harus dipersiapkan untuk dapat melakukannya.

d. Alat dan Bahan
- ISO Ubuntu Server 16.04 (64-bit prefered)
- 1 buah Server dengan RAM Min. 512MB, bisa berupa fisik atau VM.
- Koneksi Internet

e. Waktu Pengerjaan
Waktu yang dibutuhkan untuk melakukan instalasi dasar ini kurang lebih 5-10 Menit.

f. Langkah Instalasi
1. Saya menganggap instalasi Ubuntu Ubuntu16.04 sudah selesai dan tidak ada masalah. Serta lakukan Konfigurasi Pertama Pasca Instalasi, teman-teman dapat melakukan hal yang saya tulis untuk Debian 8 disini. Karena Ubuntu adalah turunan dari Debian maka hal yang berlaku bagi Debian juga berlaku bagi Ubuntu (Terkecuali untuk Repository), namun tidak berlaku sebaliknya.

2. Setelah konfigurasi pertama selesai dilakukan, lakukan Update Cache Aptitude lagi dengan:
~# apt update
3. Lakukan Instalasi Apache2 dan PHP7.0 untuk menjalankan phpLDAPadmin nantinya.
~# apt install apache2 libapache2-mod-php7.0 php7.0 php7.0-common php7.0-mbsting
4. Selanjutnya adalah menginstall OpenLDAP dan phpLDAPadmin.
~# apt install slapd ldap-utils migrationtools phpldapadmin
5. Instalasi selesai! Namun belum dapat digunakan karena kita belum mengkonfigurasinya dan belum membuat struktur databasenya. Artikel ini hanyalah membahas instalasi awal atau dasar dari OpenLDAP dan phpLDAPadmin yang mana Artikel selanjutnya yang berhubungan dengan OpenLDAP dan phpLDAPadmin akan terus mengacu pada Artikel ini untuk langkah awalnya.

g. Referensi
- Wikipedia - Lightweight Directory Access Protocol

h. Kesimpulan
Dengan melakukan instalasi dasar atau awal dari OpenLDAP dan phpLDAPadmin selanjutnya kita akan dapat melakukan konfigurasi yang lebih bervariasi hingga kompleks.

Cukup sekian yang dapat saya sampaikan. Semoga bermanfaat bagi teman-teman semua!.
Dan seperti biasa Terima Kasih!.
Wassalamu'alaikum Wr. Wb.

Friday, February 24, 2017

Alternatif Membuat Bootable USB dengan Aplikasi DD

  No comments
Assalamu'alaikum Wr. Wb.
Pada artikel ini saya ingin menulis mengenai bagaimana membuat Bootable USB melalui Terminal dengan bantuan Aplikasi DD (Data Duplicator) dan GParted.

a. Pengertian
DD atau Data Duplicator merupakan aplikasi yang dapat digunakan untuk melakukan Cloning, Backup, dan Restore pada sistem operasi Linux.

b. Latar Belakang
Untuk mencari alternatif lain aplikasi yang dapat digunakan untuk membuat Bootable dengan Mudah selain dengan menggunakan GUI.

c. Maksud dan Tujuan
Dapat mengerti proses dibalik aplikasi-aplikasi GUI USB Writer dengan mempraktekkan versi CLI nya.

d. Waktu Pengerjaan
Waktu yang diperlukan untuk melakukan percobaan ini kurang lebih 5-10Menit.

e. Alat dan Bahan
- PC
- 1 (Satu) Flashdisk
- ISO OS

f. Langkah Pengerjaan
1. Hubungkan Flashdisk teman-teman ke PC, kemudian format Flashdisk tersebut.
Sebelum kita memulai membuat Bootablenya, pastinya kita akan bersihkan terlebih dahulu isi dari Flashdisk tersebut. Untuk memudahkan prosesnya, teman-teman dapat menggunakan Tool Fdisk (Teks), atau GParted (GUI).

2. Siapkan ISO
Selanjutnya siapkan ISO yang ingin dibuat Bootablenya di Flashdisk teman-teman.

3. Mulai buat Bootable
Setelah Flashdisk teman-teman bersih dan ISOnya siap, waktunya membuatnya menjadi Bootable. Silahkan teman-teman buka Terminal lalu arahkan Current Directory ke Lokasi ISO teman-teman agar tidak terlalu panjang menulisnya nanti. Kemudian jalankan perintah:
$ sudo dd if=nama.iso of=/dev/sdb
Perintah if= menunjuk ke Nama dan Lokasi ISO. Dan of= menunjuk ke Device file dari USB Flashdisk teman-teman.
Proses akan berjalan, karena perintah diatas tidak menggunakan parameter khusus maka tidak akan ada Progress yang ditampilkan, sehingga akan terlihat diam. Ini normal, silahkan teman-teman tunggu sampai proses selesai. Lama proses

4. Selesai!
Proses pembuatan Bootable USB selesai! teman-teman dapat mencoba menggunakannya :)

g. Referensi

h. Kesimpulan
Dengan menggunakan Aplikasi DD kita bisa membuat Bootable USB seperti kita menggunakan Aplikasi USB Writer lain. Kekurangannya menggunakan Aplikasi DD ini adalah selama Flashdisk kita diisi dengan ISO, kita tidak dapat menuliskan data apapun didalamnya. Solusinya adalah dengan mem-format ulang Flashdisk tersebut.

Thursday, February 23, 2017

Mengenal Beberapa Teknologi Virtualisasi (Hypervisor) Populer Serta Perbandingannya

  1 comment
Hypervisor | Source Image: Slides.com
Assalamu'alaikum Wr. Wb.
Di Artikel ini saya ingin membagikan mengenai Beberapa Teknologi Virtualisasi atau Hypervisor Populer yang sering dipakai dalam Dunia Virtualisasi khususnya untuk VPS Selling.

a. Pengertian Hypervisor
Hypervisor atau Hardware Virtualization merupakan perangkat lunak yang dapat meng-emulasikan atau memvirtualisasikan Resource Hardware yang dimiliki kedalam bentuk Software (Abstraksi Resource) yang nantinya akan digunakan bersama untuk menjalankan Komputer-komputer Virtual didalamnya (Virtual Machine), dan Komputer Virtual inipun secara umum tidak berbeda dengan Komputer Fisik (Baremetal).

b. Macam-macam Teknologi Virtualisasi (Hypervisor)
1. VMware
Berbayar, Closed Source - Spesifikasi VM Tidak dapat melebihi Spek Host (Non-Oversell)

VMware adalah salah satu Hypervisor berbayar dan juga sering disebut sebagai Hypervisor paling matang yang ada di pasaran saat ini, VMware dikatakan sebagai produk komersial yang paling berhasil dalam membawakan performa VM yang hampir sama dengan Baremetal.

2. KVM (Kernel-based Virtual Machine)
Gratis, Open Source - Spesifikasi VM Tidak dapat melebihi Spek Host (Non-Oversell)

KVM merupakan sebuah Hypervisor Virtualisasi Open Source yang pertamakali ada di Kernel Linux pada Februari 2007. Sekarang KVM merupakan Hypervisor yang matang dan paling banyak dipakai untuk urusan Virtualisasi. Untuk menjalankannya, umumnya KVM dipakai dengan menggunakan OS Linux sebagai Host Machine nya. Karena KVM merupakan teknologi Virtualisasi penuh maka agar KVM dapat berjalan diperlukan dukungan teknologi Ekstensi Virtualisasi Intel-VT atau AMD-V di Prosesor.

3. Xen
Gratis, Open Source - Spesifikasi VM Tidak dapat melebihi Spek Host (Non-Oversell)

Xen juga merupakan sebuah Hypervisor Virtualisasi Open Source, Xen pada awalnya merupakan Proyek Riset di Universitas Cambridge pada tahun 2003 yang dipimpin oleh Ian Pratt. Seperti VMware dan KVM, dalam hal Spesifikasi Xen tidak dapat melebihi Spesifikasi dari Host itu sendiri. Xen sendiri dapat menjalankan 2 macam Virtualisasi dalam satu Host, yaitu Xen Paravirtualization (PV) yang bekerja layaknya Container dan hanya mendukung OS berbasis Linux (Oleh karena itu Xen PV tidak membutuhkan Ekstensi Virtualisasi Prosesor untuk dapat berjalan) dan Xen Full Virtualization (HVM) yang dapat menjalankan OS berbasis Linux dan Windows (Xen Full Virtualization memerlukan ekstensi Virtualisasi prosesor untuk dapat berjalan)

4. OpenVZ
Gratis, Open Source, Bukan Sepenuhnya Hypervisor - Spesifikasi dapat di Oversell

OpenVZ merupakan Platform Virtualisasi berbasis Linux, kelebihan yang ada di OpenVZ dibanding virtualisasi lain adalah OpenVZ sangat Efisien Resource. Namun kekurangannya, OpenVZ hanya dapat menjalankan Sistem Operasi yang berbasis Linux karena VM OpenVZ berjalan diatas Kernel Khusus yang sudah dipatch dan dikustomisasi untuk menjalankan OpenVZ, dan juga OpenVZ tidak dapat melakukan pengubahan pada Kernel Guestnya yang berarti Kernel yang dipakai oleh Host juga akan dipakai oleh Guest (VM). Oleh karena itu OpenVZ sering disebut dengan Container karena tidak menawarkan Virtualisasi Penuh.

c. Referensi
- VMware vSphere
- KVM Official Site
- OpenVZ Virtuozzo Containers Wiki
- Petri - Hypervisor vs Paravirtualization
- Bsierad - Different KVM vs VMware vs OpenVZ vs XEN
- Wikipedia - Xen
- Wikipedia - OpenVZ
- Wikipedia - VMware ESXi
- PhotonVPS - What is the difference between Xen vs OpenVZ Virtual technology?
- Web Hosting Talk - What's better: VMWare, OpenVZ, Virtual Box or Xen?

d. Kesimpulan
Dengan tersedianya berbagai macam Hypervisor dengan segala kelebihan dan kekurangannya, kita mempunyai banyak pilihan untuk menggunakannya sesuai dengan kondisi dan kebutuhan kita. Macam Hypervisor yang saya sebutkan disini hanyalah sebagian dari Hypervisor-hypervisor lain yang tersedia, saya memilih beberapa yang menurut saya merupakan yang populer dan sering digunakan.

Cukup sekian yang dapat saya bagikan, semoga bermanfaat bagi teman-teman semuanya!
Mohon maaf sebesar-besarnya apabila terdapat kesalahan serta mohon untuk dikoreksi. Dan seperti biasa, Terima Kasih!
Wassalamu'alaikum Wr. Wb.

Wednesday, February 22, 2017

Tips Menggunakan Konfigurasi Multiple Default Gateway Secara Bersamaan di Linux

  1 comment
Router Symbol | Source Image: Slides.com
Assalamu'alaikum Wr. Wb.
Di artikel ini saya ingin menuliskan mengenai bagaimana solusi penggunaan Multiple Default Gateway pada PC atau Server teman-teman.

a. Pengertian
Gateway merupakan sebuah perangkat jaringan yang dapat berupa Perangkat Lunak maupun Perangkat Keras yang berfungsi sebagai penghubung antar jaringan yang berbeda protokol.
Namun Gateway yang akan dibahas disini adalah Konfigurasi Default Gateway, bukan perangkatnya. Default Gateway merupakan salah satu pengaturan routing pada sebuah Host yang akan memberitahukan Host tersebut kemana Paket Data akan dikirim, umumnya akan diarahkan ke Router.

b. Latar Belakang
Saya mempunyai sebuah server, dalam skenario ini server saya mempunyai 2 Ethernet yang keduanya terhubung ke Jaringan yang berbeda. Apabila kedua jaringan ini masing-masing masih berkomunikasi dalam satu segment, maka dua interface ini tidak akan mengalami error. Namun berbeda apabila keduanya berkomunikasi dengan jaringan yang sudah berbeda segment (contoh Internet). Nah atas dasar kasus ini saya ingin mencoba mencari cara agar kedua Interface ini semuanya dapat terhubung ke Internet secara bersamaan.

c. Maksud dan Tujuan
Tujuan dari dipraktekkannya ini adalah agar menciptakan suatu Konfigurasi Jaringan yang cukup clean dan terbebas dari error yang diakibatkan oleh konflik dari konfigurasi kedua interface.

d. Waktu Pengerjaan
Waktu yang digunakan untuk melakukan konfigurasi ini kurang lebih 5-10 Menit.

e. Alat dan Bahan
- PC atau Server yang ingin dikonfigurasi

f. Langkah Pengerjaan
Karena konfigurasi ini menyangkut ke Konektivitas Jaringan pada Host tersebut, maka saya akan mengkonfigurasi Host ini dengan kontak langsung dengan Host yang bersangkutan, tidak melewati Protokol Komunikasi Jaringan (cth: SSH).

1. Analisa Kasus
Pada kasus saya, saya mempunyai Dua NIC yang keduanya terhubung ke Internet. Dan saya menginginkan kedua NIC tersebut dapat aktif secara bersamaan, menggunakan NIC kedua sebagai konektivitas utama dan tidak terjadi konflik pada konfigurasi.

Pertama berdasarkan peraturan konfigurasi Interface Jaringan di Linux, Tidak Diperbolehkan konfigurasi tersebut memiliki Dua atau Lebih Default Gateway dengan Value Metric yang sama. Maka dari itu, solusi atas masalah ini adalah dengan menambahkan konfigurasi metric yang berbeda secara manual pada kedua Interface tersebut.

2. Login ke Host Target
Pertama silahkan teman-teman Login ke Host tersebut, tidak mewajibkan untuk login dengan akun Root namun untuk kenyamanan silahkan gunakan akun Root.

3. Buka konfigurasi Network Interfaces
File konfigurasi jaringan terletak di /etc/network/interfaces untuk Distro Debian-based atau turunan dari Debian.

4. Mulai Konfigurasi
Nah sekarang, apa yang akan terjadi ketika kita memasukkan Dua Default Gateway Tanpa ada konfigurasi manual Metric pada kedua Interface?
Seperti yang teman-teman lihat, hasilnya salah satu Interface tidak dapat aktif (berstatus Down) karena mempunyai Default Gateway yang memiliki Nilai Metric yang sama dengan Interface yang sudah aktif lebih dulu. Sekarang hal yang akan kita lakukan adalah memberikan tambahan konfigurasi sederhana namun sangat powerfull untuk mengatasi masalah ini. Yap, menambahkan secara manual konfigurasi dari Metric!

Metric sendiri adalah seperti konfigurasi Routing Decision atau Prefered Default Route, yang berarti semakin kecil nilai Metric pada sebuah Interface maka Sistem akan secara otomatis memilih Interface tersebut. Dan apabila Interface dengan Metric terkecil tidak dapat digunakan karena sebuah alasan maka Sistem akan secara otomatis berpindah jalur menggunakan Interface yang mempunyai Nilai Metric terkecil setelahnya.

Untuk menambahkan Konfigurasi Nilai Metric sendiri cukup simpel dan mudah, kita hanya perlu menambahkan satu baris konfigurasi:
metric <value>
pada konfigurasi Network Interfaces yang diisikan ditiap Interface yang kita gunakan dan konfigurasi. Ingat, semakin kecil nilai pada Metric tersebut maka Interface dengan Metric terkecil itulah yang akan digunakan sebagai jalur utama.
Untuk mendapatkan hasil terbaik, silahkan teman-teman Reboot PC/Server setelah menyimpan konfigurasi diatas. Setelah itu, cobalah untuk melakukan Restart Service Networking dan lihat hasilnya :)
Yap! Tidak ada error yang diakibatkan oleh konflik konfigurasi kedua Interface, dan apabila kita cek pada Tabel Routing Kernel dengan perintah ip route maupun route -n maka kita akan melihat dua Default Gateway aktif secara bersamaan yang berasal dari masing-masing Interface dengan Nilai Metric berbeda!

g. Referensi
- Wikipedia - Default Gateway
- nixCraft - Linux Set Up Routing with Ip Commands
- Askubuntu - How To Use Network "Metric" to Manage Two NICs in one PC?

h. Kesimpulan
Dengan menerapkan Network Metric, maka kita dapat menggunakan lebih dari satu Interface Jaringan yang dapat aktif bersamaan. Ini sangat berguna bagi teman-teman yang memiliki Server dengan banyak Interface ataupun PC/Laptop teman-teman yang ingin menggunakan koneksi Internet dari Wifi namun tetap ingin terkoneksi dengan Jaringan Lain melalui Kabel.

Cukup sekian yang dapat saya tulis, semoga bermanfaat bagi teman-teman semuanya!
Dan seperti biasa, Terima Kasih!
Wassalamu'alaikum Wr. Wb.

Tuesday, February 21, 2017

Integrasi Fitur PPPoE Server + Hotspot MikroTik Dengan FreeRADIUS & MariaDB

  1 comment
FreeRADIUS Logo. | FreeRADIUS Website
Assalamu'alaikum Wr. Wb.
Pada artikel ini saya akan menuliskan tentang bagaimana mengintegrasikan Fitur Hotspot dan PPPoE Server di MikroTik dengan RADIUS Server Eksternal yaitu FreeRADIUS dilengkapi dengan MariaDB sebagai Database Backendnya di Ubuntu Server 16.04.2.

a. Pengertian
RADIUS (Remote Authentication Dial-In User Service), merupakan sebuah protokol keamanan yang digunakan sebagai AAA (Autentikasi, Autorisasi, Akuntansi) secara terpusat kepada pengguna sebelum akhirnya pengguna tersebut dapat mengakses jaringan.

b. Latar Belakang
Dengan semakin berkembang dan bertambah banyaknya layanan-layanan yang berbanding lurus dengan bertambahnya Pengguna, maka dibutuhkan sebuah Manajemen yang lebih baik dan terpusat. Oleh karena itu digunakanlah RADIUS.

c. Maksud dan Tujuan
Penggunaan RADIUS memudahkan pengelolaan data pengguna karena dilakukan secara terpusat, serta dengan digunakannya RADIUS Server secara eksternal maka meminimalisir kehilangan data akibat kerusakan.

d. Waktu Pengerjaan
Waktu yang dibutuhkan untuk melakukan konfigurasi ini kurang lebih 30-45 Menit.

e. Alat dan Bahan
- PC + Kabel UTP RJ45.
- VirtualBox.
- Koneksi Internet
- 1x VM Ubuntu Server 16.04.2 (Untuk FreeRADIUS + MariaDB).
- 1x VM MikroTik Cloud Hosted Router (Untuk uji coba PPPoE Dial).
- 1x Perangkat MikroTik (Digunakan untuk Bridging Network), alternatif gunakan Host-Only Network.

f. Langkah Kerja
Saya asumsikan semua alat dan bahan telah disiapkan.

1. Initial Config Ubuntu Server 16.04.2
Sebelum beranjak ke langkah selanjutnya, saya hanya menghimbau untuk selalu melakukan Initial Config ini agar langkah-langkah selanjutnya tidak ada masalah. Teman-teman dapat melakukan Initial Config seperti yang saya lakukan di Debian Jessie di artikel sebelumnya.

2. Instalasi FreeRADIUS + MariaDB Server
Untuk melakukan instalasi FreeRADIUS dan MariaDB Server, lakukan perintah berikut ini:
~# apt install freeradius freeradius-common freeradius-mysql mariadb-server
Setelah instalasi MariaDB Server selesai, silahkan teman-teman melakukan Konfigurasi MariaDB Server dengan cara:
~# mysql_secure_installation
Yang perlu teman-teman lakukan adalah menambahkan Password baru untuk akun Root dari MariaDB apabila sebelumnya tidak diminta Password, atau mengganti Password dengan password baru. Selain Password, teman-teman dapat menyetujui pertanyaannya dengan menekan Enter.

3. Konfigurasi FreeRADIUS
Pertama kita akan edit file /etc/freeradius/sql.conf untuk menyesuaikan login detail dari database kita. Ubah baris berikut:
login = "smkradius"
password = "passwordku"
Kemudian hilangkan tanda pagar (uncomment) pada baris:
# readclients = yes
Selanjutnya kita akan edit file /etc/freeradius/radiusd.conf. Pada file ini kita akan meng-uncomment sebuah baris yang menyangkut mengenai SQL.
Carilah baris # $INCLUDE sql.conf kemudian hilangkan tanda pagarnya (uncomment).
# Include another file that has the SQL-related configuration.
# This is another file only because it tends to be big.
#
# $INCLUDE sql.conf
Lalu kita edit juga file /etc/freeradius/sites-enabled/default. Disini hal yang kita juga hanya akan meng-uncomment baris yang terkait dengan SQL. Disini ada 4 hal yang akan kita uncomment:
# Look in an SQL database. The schema of the database
# is meant to mirror the "users" file.
#
# See "Authorization Queries" in sql.conf
# sql
# Log traffic to an SQL database.
#
# See "Accounting queries" in sql.conf
# sql
# See "Simultaneous Use Checking Queries" in sql.conf
# sql
Post-Auth-Type REJECT {
# log failed authentications in SQL, too.
# sql....
Dan yang terakhir kita tambahkan Client kita yaitu Perangkat MikroTik kita yang sebagai Hotspot dan PPPoE Server. Konfigurasi Client ada di file /etc/freeradius/clients.conf.
Tambahkan baris berikut di paling bawah konfigurasi, kemudian sesuaikan dengan konfigurasi teman-teman.
client <IP MikroTik> {
secret = smkpedan
shortname = MikroTik
}
4. Import Database Dasar FreeRADIUS ke MariaDB
Silahkan teman-teman login ke MariaDB Server melalui CLI kemudian buat database baru bernama radius dengan cara:
;; Masuk ke MariaDB Server
~# mysql -u root -p
;; Buat Database radius
MariaDB [(none)]> create database radius;
;; Buat akun baru (smkradius) khusus untuk radius

MariaDB [(none)]> grant all on radius.* to 'smkradius'@'localhost' identified by 'passwordsini';
Setelah itu kita import Database Dasar yang disediakan oleh FreeRADIUS ke MariaDB dengan cara:
~# mysql -u smkradius -ppasswordku radius < /etc/freeradius/sql/mysql/schema.sql
~# mysql -u smkradius -ppasswordku radius < /etc/freeradius/sql/mysql/nas.sql
5. Buat User baru di Database
Setelah database dasar sudah kita import, selanjutnya kita buat akun untuk client yang ingin terhubung ke Hotspot dan PPPoE kita. Untuk menambahkan data sendiri teman-teman bisa menggunakan Mode CLI ataupun menggunakan salah-satu GUI Database Management seperti HiediSQL di Windows ataupun DBeaver di Linux. Nah kebetulan disini saya akan membuatnya melalui CLI.
~# mysql -u smkpedan -ppasswordku
MariaDB [(none)]> use radius;
MariaDB [radius]> INSERT INTO radcheck ( id , UserName , Attribute , op , Value ) VALUES ( NULL , 'fajar', 'user-password', '==', 'passwordku');
6. Testing FreeRADIUS
Sebelum memulai testing, silahkan teman-teman Restart Service dari FreeRADIUS dengan:
~# service freeradius restart
Apabila terdapat error ketika merestartnya, teman-teman bisa menstop service FreeRADIUS kemudian teman-teman jalankan FreeRADIUS dalam mode Debug dengan cara:
~# service freeradius stop
~# freeradius -X
Untuk mengetest autentikasi FreeRADIUS dapat kita lakukan dengan:
-- radtest -- username db -- pass akun -- localhost -- port -- password default untuk testing
~# radtest fajar passwordku localhost 1812 testing123
Apabila teman-teman mendapatkan balasan Access-Accept berarti FreeRADIUS tidak ada masalah dan siap untuk diintegrasikan dengan MikroTik. Namun apabila terdapat Access-Reject yang berarti akses ditolak, ada kemungkinan bahwa teman-teman memiliki masalah pada Database Backend nya.

7. Integrasi Hotspot & PPPoE Server
Silahkan teman-teman buat PPPoE Server dan Hotspot serta aktifkan opsi RADIUS Server pada kedua Fitur seperti di artikel saya sebelumnya. Kemudian silahkan teman-teman buka menu Radius yang ada di Menu utama Winbox. 
- Klik [+] untuk menambahkan RADIUS Server baru.
- Berikan checklist pada PPP dan Hotspot
- Masukkan IP Server FreeRADIUS ke Address
- Masukkan Secret yang sudah kita konfigurasi sebelumnya
- Kemudian klik OK.

8. Final Test
Jika koneksi MikroTik dengan FreeRADIUS lancar, seharusnya teman-teman sudah dapat menggunakan fitur-fitur tersebut!
g. Referensi

h. Kesimpulan
Dengan diterapkannya sistem pengelolaan akun terpusat seperti diatas, maka manajemen akun pun akan lebih mudah dan lebih aman dalam hal kehilangan data akibat kerusakan. Karena database akun terpisah dengan Router utama. Dan hal diatas pun dapat kita implementasikan secara nyata untuk berbagai keperluan seperti Automatic Billing untuk Hotspot Wifi, Manajemen Bandwidth dan Tagihan Bulanan untuk RT-RW Net, dan masih banyak lagi.

Sekian yang dapat saya tulis, semoga bermanfaat bagi teman-teman semuanya!
Dan seperti biasa, Terima Kasih!
Wassalamu'alaikum Wr. Wb.