Sekedar Menengok Blog

“BLOG mu kok sudah ndak update lagi?”, demikian tanya seorang teman kepada saya. Wah iya ya? Sudah lama ya?

Sejak postingan terakhir, pada bulan Januari yang lalu, banyak hal yang sedang saya jalani, antara lain, akhirnya saya bekerja di sebuah perusahaan telekomunikasi dengan ijin jenis Jaringan Tetap Lokal Berbasis Circuit Switch.

Yap! Akhirnya mimpi saya terwujud untuk bekerja di sebuah perusahaan penyelenggara layanan PSTN, bahkan saya mendapat kesempatan untuk mengembangkan layanan berbasis ITKP juga.

Di tempat yang baru ini, saya jadi “bodoh” lagi, dan harus belajar banyak hal. Saya menjadi murid lagi. Belajar dari kolega-kolega yang sudah puluhan tahun bermain dengan jaringan SS7/C7. Belajar peraturan-peraturan pemerintah yang berhubungan dengan layanan ini sehingga tidak harus kejar-kejaran dengan pihak berwajib seperti yang pernah saya alami beberapa tahun yang lalu, :))))).

Dalam waktu dekat jika tidak ada halangan, saya janji berbagi mengenai bagaimana VoIP berperan besar di sini.

Untuk sementara saya idle sampai beberapa waktu ke depan.

I will surely blog a lot more.

Beralih Dari Elastix

 

Awal tahun 2017 ini agak dikejutkan dengan berita dari pengembang Elastix. Setelah sekian tahun menggunakan distro ini, saya mulai nyaman, hingga akhirnya mereka beralih dari Asterisk ke 3CX. Dari yang sempat saya ketahui, ada berita simpang siur mengenai patent infringement, di mana pihak Elastix mengklaim telah dituduh melakukan pelanggaran hak cipta kepada Sangoma dan Digium, walaupun mereka tidak mengatakan hak paten yang mana yang telah dilanggar. Sedangkan keterangan CEO-nya (bisa dibaca di tautan yang saya sertakan di bawah), sedikit agak berbeda. Jadi mana yang benar saya sendiri tidak yakin.

Elastix sendiri menyatakan bahwa Elastix ver 4.0 dan 2.5.x masih bisa didownload dan digunakan sampai beberapa waktu ke depan, tetapi support pengembangannya akan dihentikan sesegera mungkin karena mereka sedang beralih ke engine 3CX.

Saya sendiri belum mencoba langsung bagaimana Elastix 5 dengan engine 3CX ini. Mungkin jika ada waktu senggang akan saya coba untuk ngoprek. Karena saya yakin pasti ada hal yang menarik, seperti, misal, bahwa 3CX memiliki mobile apps (Android & IOS) yang cukup bagus. Tapi ya ada kurangnya juga sih. Free license untuk 25 user, lebih dari itu harus beli license. Tidak support card analog (per saya baca terakhir), jadi untuk panggilan ke PSTN harus melalui SIP trunk ke VoIP gateway, forced digit number, yang menyebabkan kita tidak bisa memiliki ekstensi dengan panjang yang bervariasi, dan lain sebagainya.

Apa pun alasannya, saya memutuskan untuk tidak menggunakan Elastix lagi ke depan. Bahkan ada rencana saya hendak mengganti semua instalasi Elastix di kantor dengan distro AsteriskNow. Pertimbangan saya gampang saja, AsteriskNow digarap langsung oleh Digium, pembuat Asterisk. Dan kemungkinan mereka menjaga distro ini untuk tetap gratis karena hal inilah yang membuat komunitas pengguna Asterisk menjadi besar seperti sekarang ini.

Untuk mengetahui berita berkatian dengan pindahan engine Elastix dari Asterisk ke 3CX bisa dibaca di link berikut ini:

https://www.elastix.org/blog/latestnews/perspective-on-elastix-3cx-changes/

https://www.elastix.org/blog/latestnews/announcement-elastix-4-mt/

 

[tips] Rotate File Call Recording Di IP PBX

Salah satu fasilitas IP PBX yang sering banget diminta pelanggan adalah Recording. Recording digunakan untuk menyimpan percakapan dalam format audio file (biasanya dalam bentuk .wav). Tapi, jika file-file ini disimpan juga dalam kurun waktu yang panjang, semakin lama penggunaan ruang penyimpanan pun bakal bengkak. Akhirnya harus diputuskan berapa lama sebuah file akan tetap di simpan. Yang paling sering sih sekitar 3 bulan atau 90 hari (pukul rata). Jadi sistem IP PBX harus bisa mendeteksi umur file tersebut jika sudah masuk 90 hari ke atas, akan otomatis dihapus.

Jika menggunakan Asterisk based IP PBX, file audio tersebut berada di dalam direktori /var/spool/asterisk/monitor.

Untuk melakukan kegiatan rutin di atas, kita bisa menjalankan perintah cron (misal setiap jam 01:15, dini hari):

~# crontab -e

...
15 1 * * * find /var/spool/asterisk/monitor/ -type f -mtime +90 -exec rm -f {} \; >/dev/null 2>&1
...

Selamat mencoba.

AsterConferenceAsia 2016

Pada tanggal 30 Agustus 2016 kemarin dapet undangan dari teman di Harvl untuk ikut acara gatheringan komunitas Asterisk di Surabaya, tepatnya di hotel Shangri La, Jl. Mayjend Sungkono No. 120, Jawa Timur 60256. Acara tersebut disponsori oleh Digium (sebagai sponsor utama) dan juga beberapa vendor appliance berbasiskan Asterisk dan ip phone, distributor perangkat telephony, dan juga sebuah perusahaan Manage Service Provider,  antara lain Grandstream, Yeastar, JCMex, Yealink, Dinstar, OGI, Beskom, Dinstar, Hypernet, dan Htek. Event Organizer-nya dari SECtraining, Malaysia, yang juga mendatangkan David Duffet, Worldwide Asterisk Community Director. Acaranya lumayan rame, karena banyak vendor yang dateng, jadi bisa sambil ngumpulin brosur buat referensi belanja project selanjutnya nanti dari kantor.

Hanya sayangnya, dari audience sepertinya belum begitu antusias atau bahkan sebenarnya masih belum begitu ngeh dengan tema yang dibawakan dalam acara tersebut. Sebenarnya seneng-seneng aja ada dari pihak sekolah lanjutan yang mendatangkan muridnya ikut, tapi sepertinya mereka mengharapkan semacam training gratis, bukan materi presentasi umum. Dan kebetulan kok ya ndak ada demo teknis sama sekali waktu itu. Sepertinya sasaran yang tepat untuk acara kemaren lebih ke orang-orang dari SMB, corporate, industrial, dan sejenisnya. Tapi, ya sudah lah, yang penting saya seneng dapat banyak temen baru, dapat relasi baru, bisa ketemu teman-teman komunitas Asterisk Indonesia juga (walaupun cuma mas Anton dan mas Imam, hahahah). Dan lumayan juga bisa ngobrol banyak sama David Duffet yang kebetulan orangnya baik dan ramah juga. Semoga lain waktu ada acara serupa yang lebih rame lagi dan seru dan jangan kapok dengan audience yang malu-malu nanya, karena komunitas yang begini masih jarang di Indonesia.

Dan sayangnya lagi kemaren ndak dapet lucky draw yang hadiahnya juga top banget. Sebenernya ngarepin card E1 dari Digium. Selamat buat yang menang kemarin.

 

Links

[tips] Perintah ‘date’ Untuk Test Time Conditions

Selama libur lebaran ini jadwal kantor yang berubah, dan mengakibatkan perubahan jadwal penerimaan telepon terutama untuk kantor yang menyelenggarakan layanan 24/7. Untuk IP PBX yang memanfaatkan Asterisk+FreePBX, perubahan jadwal penerimaan telepon biasanya dengan mengatur Time Groups dan Time Conditions. Lalu untuk mengetestnya, kita bisa memanfaatkan perintah date untuk mensimulasikan tanggal berjalannya aturan Time Conditions yang sudah kita setup. Perintahnya:

# date -s “7/5/2016 05:54:00”

Perintah di atas akan mengubah tanggal system ke tanggal 5 Juli 2016 pukul 05:54 pagi. Dan untuk mengembalikan tanggal system ke tanggal yang benar tinggal jalankan (untuk wilayan Indonesia) :

# ntpdate 1.id.pool.ntp.org

 

Membuat Acrobat Reader Membuka Halaman Yang Terakhir Dibaca

Saya banyak menghabiskan waktu di depan laptop dengan membaca ebook, terutama format .pdf. Jika di Ubuntu, saya selalu menggunakan Evince. Selain memang sudah default dari Ubuntu untuk membuka .pdf, Evince selalu membuka halaman yang saya baca terakhir kali. Agak berbeda dengan Acrobat Reader, karena secara default akan membuka halaman pertama ketika hendak meneruskan membaca ebook. Dan saya selalu lupa melakukan setting agar Adobe Acrobat membuka halaman yang saya baca terakhir kali. Padahal caranya gampang. Tinggal pilih menu Edit -> Preferences -> Document lalu beri tanda centang pada opsi Restore last view settings when reopenning documents.

adobe acrobat

nah kali ini saya tulis di sini biar saya sendiri tidak lupa caranya. Sepele, printilan tapi kalau lupa nyebelin juga.

IPTables untuk Asterisk Based IP PBX

Sampai saat ini masih ada rekan-rekan sysadmin yang memasang IP PBX (terutama Asterisk based) dengan menggunakan ip public langsung. Dan agak mengkhawatirkan lagi IP PBX tersebut tersambung ke jaringan telepon umum. Beberapa kali muncul kasus kebobolan yang menyebabkan mereka diharuskan membayar penggunaan telepon mencapai puluhan bahkan ratusan juta. Ada banyak alasan kenapa rekan-rekan masih harus memasang ip public langsung ke IP PBX, di antaranya karena topology dan alokasi ip address yang tidak memungkinkan DMZ, permasalahan VoIP jika harus dilewatkan NAT/port forward, dan lain sebagainya. Terlepas dari hal tersebut, sangat disarankan untuk melindungi IP PBX sebaik mungkin termasuk meletakannya di dalam IP PBX. Jika memang terpaksa harus meletakkan nya dengan ip public, maka berikut template IPTables yang bisa digunakan untuk mengurangi resiko kebobolan (tapi mohon diingat, cara ini bukan obat manjur untuk menahan penetrasi):

#!/bin/bash
 # cwd=/etc/sysconfig/
 #

#VARS
 EXTIF="eth0"
 INTIF="eth1"

# flush rule iptables jika masih ada
 iptables -F
 iptables -X

# allow inbound ssh connection melalui external/public interface
 iptables -A INPUT -p tcp --dport 22 --sport 1024:65535 -m state --state NEW,ESTABLISHED -j ACCEPT

# set default policies (memperbolehkan semua outbound, block inbound, membatasi forwarding antar interfaces)
 iptables -P INPUT DROP
 iptables -P FORWARD DROP
 iptables -P OUTPUT ACCEPT

# Memperbolehkan TCP 80 and 443
 iptables -A INPUT -p tcp --dport 80 -j ACCEPT
 iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Memperbolehkan RTP traffic
 iptables -A INPUT -p udp --dport 10000:20000 -j ACCEPT

# Memperbolehkan SIP traffic
 iptables -A INPUT -p tcp --dport 5060 -j ACCEPT
 iptables -A INPUT -p udp --dport 5060 -j ACCEPT

# Memperbolehkan trafik dari interface loopback dan internal interface (jika ada)
 #iptables -A INPUT -i $INTIF -j ACCEPT
 iptables -A INPUT -i lo -j ACCEPT

# Memperbolehkan akses dari ip address yang sudah dikenali (kantor, rumah, dst), jika ada.
 iptables -A INPUT -i $INTIF -s XXX.XXX.XXX.XXX/XX -j ACCEPT
 iptables -A INPUT -i $INTIF -s XXX.XXX.XXX.XXX/XX -j ACCEPT

# Melewatkan koneksi dengan status established di interface external/public
 iptables -A INPUT -i $EXTIF -m state --state ESTABLISHED,RELATED -j ACCEPT

# memblokir trafik dari blok ip address private yang masuk via interface public
 iptables -A INPUT -i $EXTIF -s 10.0.0.0/8 -j DROP
 iptables -A INPUT -i $EXTIF -s 172.16.0.0/12 -j DROP
 iptables -A INPUT -i $EXTIF -s 192.168.0.0/16 -j DROP
 iptables -A INPUT -i $EXTIF -s 224.0.0.0/4 -j DROP
 iptables -A INPUT -i $EXTIF -s 240.0.0.0/5 -j DROP
 iptables -A INPUT -i $EXTIF -s 0.0.0.0/8 -j DROP
 iptables -A INPUT -i $EXTIF -s 169.254.0.0/16 -j DROP
 iptables -A INPUT -i $EXTIF -s 127.0.0.0/8 -j DROP

# ICMP
 iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/sec -j ACCEPT

# SYN flood limiter
 iptables -A INPUT -p tcp --syn -m limit --limit 5/s -j ACCEPT

# ditutup dengan rule catch-all
 # LOG dan DENY semua packet yang belum masuk di rule.
 iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level debug
 iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited

# menyimpan  setting
 iptables-save > /etc/sysconfig/iptables

#
 # Menampilkan rule di atas
 #
 iptables -L -v

 

Edit file tersebut sesuai dengan kondisi server masing-masing. Di sini saya mengasumsikan menggunakan dua interface. Berikut ini beberapa hal yang bisa ditambahkan untuk mengurangi resiko kebobolan

  • Gunakan dua interface LAN. Satu interface terpasang ip public dan interface lain terpasang ip address private untuk ke LAN. Biasanya saya hanya memperbolehkan Web GUI, dan SSH hanya bisa diakses dari LAN. Jika saya sedang tidak berada satu lokasi dengan server tersebut, saya mengaksesnya melalui VPN yang tersambung ke jaringan LAN.
  • set PermitRootLogin=no untuk ssh, dan buat akun shell tambahan yang dimasukkan list sudo supaya bisa melakukan aktifitas administrasi server.
  • Ubah port ssh dan web UI ke port lain yang hanya kita ketahui (misal 8241, 9231, dst), dan tetap difilter dengan IPTables.
  • Menambahkan setting httpd.conf misal:

    ...
    Deny from all
    Allow from 1.2.3.4
    Allow from 6.7.8.0/24
    Allow from 192.168.1.0/24
    Allow from 10.0.0.0/24
    Allow from 172.16.0.0/24
    ...

 

  • Bila perlu, block MySQL dari semua interface kecuali interface loopback/localhost.
  • Menambahkan fail2ban lebih bagus lagi.

Intinya, jadilan super paranoid jika berurusan dengan IP PBX terlebih yang tersambung ke jaringan telepon umum.

Tambahan

Jika terjadi sesuatu dan harus melakukan flush iptables, bisa dengan membuat script baru dengan isi:

#!/bin/sh

echo "Flushing Tables ..."

# Reset Default Policies
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT

# Flush all rules
iptables -F
iptables -t nat -F
iptables -t mangle -F

# Erase all non-default chains
iptables -X
iptables -t nat -X
iptables -t mangle -X

4 Januari 2016, 23:17

“We leave something of ourselves behind, only leave a place, we stay there even though we go away. And there are things in us that we can find again only by going back there. We travel to ourselves when we go to a place though we have covered a stretch of our life, no matter how brief it may have been. But by traveling to ourselves we must confront our own loneliness. And isn’t it so everything we do is done out of fear of loneliness? Isn’t that why we renounce all the things we will regret at the end of our lives?”

(Amadeu Del Almeida Prado, Night Train To Lisbon, 2013)