Fax via Elastix

Mesin fax tidak akan hilang dalam waktu dekat. Walaupun sekarang penggunaan email dan document sharing sudah umum dan banyak di mana-mana, tapi fax masih memegang peranan penting di ceruk tertentu. Dunia hukum masih memandang bukti fax jauh lebih kuat dibandingkan email. Jadi, sudah wajar kalau kita yang berkecimpung di dunia VoIP/IP PBX untuk meluangkan waktu belajar setup fax. Berikut ini adalah contoh setup fax yang pernah saya lakukan.

 

SKENARIO

Sebuah perusahaan memiliki 6 line PSTN, 5 diantaranya hunting, dan satu line untuk fax. IP PBX yang mereka gunakan adalah distro Elastix (Asterisk based), dengan perangkat analog card OpenVOX 8 FXO port. Untuk setup Elastix dan deteksi card tidak akan saya bahas di sini karena saya dulu sudah pernah membahas. Asumsinya mesin IP PBX Elastix sudah terinstall dan card analog sudah disetup dengan baik. Outbound dan inbound call juga sudah disetup untuk line hunting. Sedangkan untuk line fax akan saya bahas di bawah.

Penggunaan fax di Elastix di sini dalah untuk mengurangi penggunaan kertas dalam penerimaan dan pengiriman fax. Untuk penerimaan, fax akan diterima sebagai attachment .pdf atau .tiff yang kemudian diforward ke email. Sedangkan untuk pengiriman, fax akan diupload dari webGUI Elastix sebagai attachment .pdf atau .tiff.

Karena pada dasarnya memiliki 6 jalur PSTN, jalur ini bisa dimanfaatkan untuk mengirim fax sekaligus jika sedang tidak digunakan. Header fax bisa disetting untuk tetap seperti terkirim dari nomer fax asli. Sedangkan untuk menerima fax hanya bisa dilakukan dari nomer fax resmi perusahaan yang dicantumkan di web atau di kartu nama.

 

SETUP

Fax Inbound

Seperti yang sudah dibahas sebelumnya, fax diterima dalam bentuk email dan disebarkan ke pihak yang memiliki wewenang menerima fax. Karena email yang menerima fax hanya bisa satu, maka perlu dibuatkan email alias yang didalamnya tidak ada inbox, hanya forward ke beberapa email yang berkepentingan. Misal dalam fax@perusahaan.com yang diforward ke hrd@perusahaan.org, manajemen@perusahaan.org, dst. Lalu selanjutnya:

  • Edit file /etc/asterisk/dahdi-channels.conf. Ubah semua context menjadi from-dahdi. Hal ini supaya kita bisa menambahkan inbound route dengan filter nomer DID. Restart service dengan perintah linux console: amportal stop; service dahdi stop; sleep 10 ; service dahdi start; sleep 5 ; amportal start
  • Untuk line fax, port yang digunakan dalah skenario di atas adalah port FXO nomer 6 dengan nomer (misal) 027411223344. Masuk ke menu webGUI Elastix, pilih PBX -> PBX Configurations -> DAHDI Channel DIDs -> Add Channel. Isikan:

Channel: 6

Description: Fax Line

DID: 027411223344

  • Klik Submit Changes.
  • Pilih menu PBX -> PBX Configurations -> Extensions. Di bagian menu pulldown Device pilih Generic IAX2 Device. Klik Submit.
  • Isikan konfiguratsi eksensi sebagai berikut:

User Extension: 1319

Display Name: Fax Line

secret: r4h4514

Klik Submit.

  • Buat Virtual Fax dengan memilih tab Fax -> New Virtual Fax dan isikan sebagai berikut:

Virtual Fax Name: Fax Line

Associated email: fax@perusahaan.com

 Caller ID Name: PT Perusahaan

Caller ID Number: +6227411223344

Fax Extension (IAX): 1319

Secret (IAX): r4h4514

C0untry Code: 62

Area Code: 274

  • Klik Save.
  • Masuk ke menu Unembedded FreePBX (untuk mengaktifkannya tidak akan saya bahas di sini karena sudah pernah saya posting sebelumnya). Masuk ke menu Application -> Extensions. Pilih extension 1319 lalu pada halam konfigurasi ekstensi tersebut, di opsi Fax beri tanda centang di opsi Enabled.
  • Di opsi Fax Email masukkan alamat email yang sudah disetup untuk menerima fax. Dalam contoh ini fax@perusahaan.com.
  • Di opsi Attachment Format pilih both.
  • Klik Submit lalu klik Apply Config. Tutup halaman Unembbeded FreePBX.
  • Pilih menu PBX -> PBX Configurations -> Inbound Routes -> Add Incoming Route. Isikan sebagai berikut:

Description: Fax

DID Number: 027411223344

Set Destination: Extensions -> Fax Line <1319>

  • Klik Submit lalu klik Apply Config.

Fax Outbound

  • Pilih menu PBX -> PBX Configuration -> Outbound  Routes -> Add Route. Isikan sebagai berikut:

Route Name: FAX Outbound

Dial pattern that will use this Routes: Fax outbound

Trunk Sequence for Matched Routes :

trunk fax

  • Klik Submit Changes lalu klik Apply Config.

Pada contoh di atas, semua trunk dimanfaatkan untuk mengirim fax. Untuk output hasil fax semuanya akan nampak seperti dari nomer fax utama perusahaan karena pada saat setup Virtual Fax, semua Caller ID Number disetup menjadi nomer telepon fax kantor.

TEST KIRIM FAX

  • Masuk ke menu Fax -> Virtual Fax -> Send Fax.
  • Di menu pulldown Fax Device pilih Virtual Fax dengan ekstensi 1319 seperti yang sudah kita buat sebelumnya.
  • Di isian Destination fax numbers isikan nomer fax tujuan. Nomer fax tujuan bisa lebih dari satu dengan dipisahkan tanda koma. Tapi harap diperhatikan jumlah line telpon yang akan digunakan. Tidak seperti email yang bisa mengirim ke beberapa tujuan sekaligus tanpa masalah, line fax harus mendial satu per satu nomer telepon tujuan dan prosesnya cukup panjang. Jadi ada baiknya destinasi tetap satu nomer saja.
  • Untuk muatan fax, kita bisa memilih text saja atau dengan mengupload file dokumen dengan ekstensi .pdf atau .tiff. Jika hanya ingin mengirimkan text, pilih button radio Text Information, lalu isikan pesan pada kotak yang sudah disediakan dan terakhir klik Send. Untuk
  • Untuk upload file dokumen, pilih button radio File Upload. Di bagian Select the files to FAX, klik Choose File untuk browse lokasi file yang hendak diupload. Jika sudah, klik Send.

Selamat mencoba!

Interkoneksi IP PBX Dengan IAX2 Trunk

Sebenarnya ini tema lama, tapi baru kesampaian posting kali ini, karena masih banyak yang menanyakan. Setup ini untuk menghubungkan dua atau lebih site yang menggunakan IP PBX Asterisk (khusus postingan ini saya menggunakan Elastix versi 4.0), sehingga dial antar ekstensi di kedua site bisa dilakukan dengan mudah, yaitu dengan hanya menekan nomer ekstensi langsung. Untuk dua sampai dengan 7 site, cara ini memang masih bisa digunakan. Jumlah trunk yang harus disetup untuk menghasilkan full mesh trunk network bisa didapatkan dengan rumus:

n x (n – 1)

Jadi, jika kita hendak menyambungkan 7 IP PBX sekaligus, maka akan dibutuhkan sebanyak 7 x (7 – 1) = 42 trunk!

Untuk interkoneksi IP PBX dengan jumlah lebih itu, setup menjadi rumit dan disarankan menggunakan DUNDi (Distributed Universal Numbering Discovery). Lain kali kalau ada waktu dan server buat bermain akan saya bahas di sini.

Yang perlu disiapkan adalah sebagai berikut:

  1. Jika kedua site berada di dua network/tempat/kota yang berbeda, sangar disarankan koneksi antar site menggunakan VPN (PPTP, L2TP, OpenVPN, VPLS, MPLS, EoIPdll). Dan apabila sangat terpaksa menggunakan ip address public, letakkan server IP PBX di bawah router/firewall dan lakukan port forward saja (jangan 1:1 Nat!!!). Trunk menggunakan IAX2, port forward menjadi mudah karena hanya dibutuhkan satu port untuk signalling dan media stream, yaitu port TCP/UDP 4569.
  2. Perencanaan penomoran ekstensi. Ini sangat penting karena untuk mempermudah routing panggilan. Jika memiliki dua buah IP PBX yang hendak diinterkoneksi, gunakan kepala ekstensi yang berbeda, misal kantor A menggunakan 4 digit dengan kepala 1 (1001, 1002, 1003, dst), lalu kantor B menggunakan 4 ekstensi dengan kepala 2 (2001, 2002, 2003, dst). Sebagai saran tambahan, jika site mencapai lebih dari 7 dan tetap akan menggunakan interkoneksi cara ini, tambahkan digit ekstensi, misal menjadi 5 atau 6 digit. Kelak akan sangat membantu jika kita hendak menggunakan prefix tambahan (misal untuk trunk ke PSTN/ITSP), atau jumlah site mencapai lebih dari 10 site.
  3. Trunk yang akan digunakan adalah IAX2 jika masing-masing IP PBX adalah Asterisk based. Jika tidak, bisa menggunakan SIP. Alasan menggunakan IAX2 karena hanya menggunakan satu port untuk signalling dan media stream (SIP menggunakan port signalling yang berbeda dengan media stream), sehingga pengaturan di firewall cukup mudah. Selain itu IAX2 memang didesain untuk mengatasi permasalahan NAT.

ASUMSI

  1. Dalam contoh setup ini akan digunakan dua buah IP PBX Elastix untuk dua buah kantor (Kantor A dan Kantor B).
  2. Masing-masing kantor memiliki ekstensi dengan panjang 4 digit dengan awalan berbeda. Kantor A berawalan 1 (1001, 1002, 1003), dan kantor B berawalan 2 (2001, 2002, 2003).
  3. Semua ekstensi dibuat dengan opsi nat=yes atau nat=force_rport,comedia untuk mengantisipasi one way audio.
  4. IP address Elastix kantor A adalah 10.0.1.10, dan untuk Kantor B 10.0.2.20.
  5. Saya menganggap tidak perlu lagi melakukan screenshot untuk lokasi menu WebGUI karena menu-menu di WebGUI Elastix sudah cukup jelas dan mudah diikuti hanya dengan petunjuk tulisan.

SKENARIO

  1. IP PBX kantor A akan merigstrasikan diri ke IP PBX kantor B, sehingga semua ekstensi di Kantor A bisa melakukan panggilan ke ekstensi di Kantor B hanya cukup dengan menekan nomer ekstensi yang dituju (tanpa prefix). Pada gambar skema di bawah, trunk Kantor A menuju Kantor B digambarkan dengan garis penuh warna merah. Sedangkan panggilan dari ekstensi Kantor A ke ekstensi Kantor B digambarkan dengan garis putus-putus warna merah.
  2. IP PBX kantor B akan meregistrasikan diri ke IP PBX kantor A, sehingga semua ekstensi di Kantor B bisa melakukan panggilan ke ekstensi di Kantor A hanya cukup dengan menekan nomer ekstensi yang dituju (tanpa prefix). Pada gambar skema d bawah, trunk kantor B menuju Kantor A digambarkan dengan garis penuh warna biru. Sedangkan panggilan dari ekstensi Kantor B ke ekstensi Kantor A digambarkan dengan garis dengan garis putus-putus warna biru.

IAX2 trunk

SETUP

SETUP KANTOR A

1. Masuk ke menu PBX -> PBX Configuration -> Trunks -> Add IAX2 Trunk. Isikan sebagai berikut:

Trunk Name: RouteToKantorB

PEER Details:

type=peer
host=10.0.2.20
context=from-internal
qualify=yes

Setelah itu klik Submit Changes.

2. Pilih menu PBX -> Tools -> Asterisk File Editor -> Show Filter. Isikan pada filter: iax_custom lalu klik nama file iax_custom.conf. Isikan seperti berikut:

[RouteToKantorB]
deny=0.0.0.0/0.0.0.0
context=from-internal
host=dynamic
type=friend
port=4569
qualify=yes
permit=10.0.2.20/255.255.255.255
requirecalltoken=no
calltokenoptional=0.0.0.0/0.0.0.0

Klik Save dan Reload Asterisk.

3. Pilih menu PBX -> PBX Configuration -> Outbound Routes -> Add Route. Lalu isikan sebagai berikut:

Route Name: ToKantorB

Di bawah opsi Dial Patterns that will use this Route isikan pada kotak match pattern: 2XXX

Lalu di menu drop down Trunk Sequence for Matched Routes pilih  RouteToKantorB, kemudian klik Submit Changes.

4. Terakhir klik Apply Config.

 

SETUP KANTOR B

1. Masuk ke menu PBX -> PBX Configuration -> Trunks -> Add IAX2 Trunk. Isikan sebagai berikut:

Trunk Name: RouteToKantorA

PEER Details:

type=peer
host=10.0.1.10
context=from-internal
qualify=yes

Setelah itu klik Submit Changes.

2. Pilih menu PBX -> Tools -> Asterisk File Editor -> Show Filter. Isikan pada filter: iax_custom lalu klik nama file iax_custom.conf. Isikan seperti berikut:

[RouteToKantorA]
deny=0.0.0.0/0.0.0.0
context=from-internal
host=dynamic
type=friend
port=4569
qualify=yes
permit=10.0.1.10/255.255.255.255
requirecalltoken=no
calltokenoptional=0.0.0.0/0.0.0.0

Klik Save dan Reload Asterisk.

3. Pilih menu PBX -> PBX Configuration -> Outbound Routes -> Add Route. Lalu isikan sebagai berikut:

Route Name: ToKantorA

Di bawah opsi Dial Patterns that will use this Route isikan pada kotak match pattern: 1XXX

Lalu di menu drop down Trunk Sequence for Matched Routes pilih  RouteToKantorA, kemudian klik Submit Changes.

4. Terakhir klik Apply Config.

TEST

  1. Register ekstensi-ekstensi yang diperlukan untuk test seperti pada gambar di atas (1001 dan 1002 untuk IP PBX Kantor A. 2001 dan 2003 untuk IP PBX Kantor B).
  2. Lakukan panggilan dari ekstensi 1002 (x1002) ke ekstensi 2001 (x2001) untuk test trunk dari IP PBX Kantor A ke IP PBX Kantor B.
  3. Lakukan panggilan dari ekstensi 2003 (x2003) ke ekstensi 1001 (x1001) untuk test trunk dari IP PBX Kantor B ke IP PBX Kantor A.
  4. Jika tidak ada kendala, masing-masing ekstensi dari IP PBX yang berbeda seharusnya sudah bisa tersambung dan saling bicara. Jika masih belum bisa, ikuti baik-baik langkah di atas, mungkin ada yang terlewat.

Selamat mencoba!

[Elastix MT] Call Antar Extension Tidak Bersuara Sama Sekali

Harusnya saya membahas panjang lebar terlebih dahulu apa sebenarnya Elastix MT (Multi Tenant), konsep dan cara kerjanya. Berhubung saat saya menulis sudah larut malam dan harus bangun 4 jam lagi, maka saya tuliskan hasil troubleshoot kali ini sebelum saya lupa lagi.

Latar belakangnya adalah, saya menginstall Elastix MT di VM yang dibuat ip addressnya diassign oleh HyperVisornya (yang kebetulan berupa ip address private). Kemudian saya menggantinya dengan ip address public. Karena pada saat instalasi menggunakan ip address lama, maka setting Kamailio multihomed menggunakan ip address tersebut, yang menyebabkan SIP phone bisa melakukan registrasi, tetapi tidak bisa melakukan panggilan sesama ekstensi (panggilan tersambung tetapi tidak ada yang lewat sama sekali). Untuk mengatasi hal ini saya hanya harus mengedit file /etc/kamailio/kamailio-mhomed-elastix.cfg, pada baris:

[stextbox id=”grey”]

if (is_in_subnet($var(target_remote_ip), “192.168.1.0/24”)) {

$var(rtpproxy_set) = 1;
$var(rtpproxy_if) = “192.168.1.89”;
return 1;
}

menjadi

if (is_in_subnet($var(target_remote_ip), “1.2.3.0/25”)) {

$var(rtpproxy_set) = 1;
$var(rtpproxy_if) = “1.2.3.4”;
return 1;
}

Lalu juga di baris:

$var(rtpproxy_set) = 1;
$var(rtpproxy_if) = “192.168.1.89”;

menjadi:

$var(rtpproxy_set) = 1;
$var(rtpproxy_if) = “1.2.3.4”;

[/stextbox]

Atau cara paling mudah adalah dengan menjalankan script bawaan dari Elastix MT sendiri :

[stextbox id=”grey” shadow=”false”]root# /usr/sbin/elastix-setup-kamailio-rtpproxy[/stextbox]

Sampai di sini seharusnya call sudah bisa ditangani tanpa ada kendala suara tidak terdengar.

Mendaftarkan Domain ke Manage Domain TELEPONRAKYAT.ID

Bagi yang ingin memiliki nomer VoIP Rakyat sendiri (prefix +62520 dan +62521), tanpa harus menstup SIP gateway, bisa mendaftarkan domain di TELEPONRAKYAT.ID. Di dalam website tersebut terdapat petunjuk bagaimana dengan cukup mendaftarkan domain, kita bisa mendapatkan akses hosted PBX dengan alokasi nomer. Nomer ini bisa dihubungi dari nomer VoIP Rakyat mana pun. Bagi yang sudah pernah mendaftar di voiprakyat.or.id, bisa melakukan test ke blok nomer TELEPONRAKYAT.ID. Sedangkan yang sudah memiliki/memaintain server SIP sendiri, bisa mendaftar sebagai Manage Gateway yang caranya bisa dilihat di sini.

Kelebihan dengan mendatarkan domain ke TELEPONRAKYAT.ID adalah:

  • Tidak perlu lagi memaintain SIP gateway sendiri, karena dengan mengarahkan domain ke SIP server yang telah disediakan TELEPONRAKYAT.ID, maka semua panggilan VoIP akan dilewatkan ke network TELEPONRAKYAT.ID.
  • Disediakan web control panel gratis bagi pemilik domain untuk mengatur user. Bahkan telah disediakan pula portal untuk mendaftar gratis ke domain SIP kita jika kita memperbolehkan orang lain mendaftar sebagai user secara bebas.
  • Setiap user akan memiliki nomer ekstensi dan juga nomer alokasi prefix +62520/+62521 yang bisa ditelpon dari nomer VoIP Rakyat mana pun. Formatnya adalah +62520***-XXXXXX. Tiga tanda bintang adalah 3 digit id dari prefix +62520  khusus untuk realm SIP kita, sedangan 6 digit terakhir adalah nomer ekstensi. Pengguna realm yang sama bisa saling menelpon dengan cukup menekan 6 digit ekstensi tersebut.

Sedangkan kekurangannya adalah:

  • Panggilan masih terbatas ke sesama ekstensi di realm yang sama, dan juga ke sesama nomer VoIP rakyat (prefix +62520 dan +62521).
  • Belum bisa interkoneksi ke jaringan PSTN/PLMN, atau mekanisme untuk menghubungkan hosted PBX ke gateway PSTN/PLMN kita sendiri jika kita memilikinya. Kemungkinan ini sehubungan dengan regulasi juga, atau memang fitur tersebut belum sempat disertakan.

Yang Perlu Disiapkan

  • Siapkan satu domain/subdomain untuk dijadikan alamat SIP server (DSS – Domain name for SIP Server) yang diarahkan ke ip address (per tanggal penulisan ini) : 202.153.128.61. Misal, untuk DSS yang saya daftarkan adalah public.proxy.voip.or.id, maka saya harus mengarahkan subdomain ini ke ip address di atas. Domain name ini nantinya akan menjadi alamat proxy/registrar ketika kita setting SIP client/phone.
  • Untuk manajemen user (DCP – Domain name for Control Panel), siapkan sebuah Domain/Subdomain yang diarahkan ke ip address (per tanggal penulisan ini): 202.153.128.63. Misal, saya memperbolehkan setiap orang bisa mendaftar sebagai user SIP di Domain yang saya daftarkan denngan mengakses halaman http://portal.voip.or.id , maka saya mengarahkan DNS untuk domain tersebut ke ip address di atas. TELEPONRAKYAT.ID akan menyediakan halaman web untuk manajemen user untuk kita.

Setelah setting DNS selesai, berikut cara mendaftar di TELEPONRAKYAT.ID:

  • Login ke account TELEPONRAKYAT.ID. Jika belum memiliki, silahkan mendaftar dengan mengikuti petunjuk di sini.
  • Pilih menu Setting -> Manage Domain -> Add. Di dalam halaman ini akan dimunculkan form untuk diisi yang antara lain:

Domain title: (misal) Talk Is Cheap.

Domain name for Control Panel: (isikan sesuai setting DCP di atas) portal.voip.or.id

Domain name for SIP Server: (isikan sesuai setting DSS di atas) public.proxy.voip.or.id

Allow user registration: (pilih Yes jika kita memperbolehkan setiap orang untuk mendaftar bebas) Yes

Description: (keterangan tambahan mengenai layanan ini) misal, Free VoIP Rakyat Account for Everyone.

Theme: (menu pulldown untuk memilih theme halaman DCP. Silahkan pilih theme yang disukai).

Homepage: (saya belum bereksperimen banyak di form ini, jadi sekedar saya isikan kalimat bebas) misal, Akun VoIP gratis untuk tersambung ke jaringan VoIP Rakyat.

  • Klik Submit.
  • Lakukan test dengan mendaftar di DCP. Buka halaman DCP (dalam contoh ini: http://portal.voip.or.id). Pilih menu Register dan isikan informasi pada form yang muncul (Nama, username, passwd, dll).
  • Setelah selesai, login ke account yang sudah dibuat lalu pilih menu SETTINGS -> PHONE NUMBER. Ini adalah halaman informasi mengenai alokasi nomer VoIP untuk panggilan OnNet, beserta username untuk account SIP yang akan dimasukkan ke SIP client/phone. Contoh halamannya seperti berikut:

001

Pada contoh di atas, nomer panggilan OnNet saya adalah +62520589569010. Username saya: 569010. Untuk user dengan realm yang sama (dalam hal ini public.proxy.voip.or.id), bisa melakukan panggilan cukup dengan mendial username/Local Phone Number. Jadi untuk mengontak saya, cukup mendial 569010. Tapi untuk panggilan dari realm lain (misal dari voiprakyat.or.id), harus mendial nomer format E164: +62520589569010.

  • Sampai di sini, kita harus menambkah password untuk username SIP client. Klik icon bergambar pinsil di halaman Manage Phone Number di atas. Lalu isikan password yang kita inginkan di form SIP Password. Halaman Edit Phone Number tersebut menampilkan informasi akun yang perlu disetup di SIP client/phone (username, nama domain, alamat sip server, password, dll).
  • Registrasikan SIP client/phone dengan informasi di atas. Lalu test call.

Selamat mencoba!

Setup Elastix dengan OpenVox VS-GW1600

$_35

 

Baru-baru ini didaulat untuk mengiintegraskian IP PBX Elastix sebuah kantor dengan OpenVox VS-GW1600-8G VoxStack 8 Port GSM Gateway. VoxStack ini merupakan GSM gateway berbasis Asterisk juga dengan kemudahan pengaturan menu inbound/outbound call, LCR, trunking, peering dst. Ukuran box sebesar 1U rack mount dengan 6 slot module yang bisa diisi dengan module yang berbeda (GSM, ethernet, FXO/FXS), bahkan mixed. Berikut adalah cara penyambungan VoxStack sebagai PLMN gateway untuk Elastix:

 Asumsi

  • ip address untuk VoxStack adalah 192.168.33.3
  • ip address untuk Elastix IP PBX adalah 192.168.33.2
  • Gateway VoxStack melakukan registrasi ke Elastix.

Setup Sisi Elastix IP PBX

  • Edit file /etc/asterisk/sip_custom.conf dengan menambahkan baris berikut:

[voxstack]
deny=0.0.0.0/0.0.0.0
context=from-internal
username=voxstack
secret=voxstack
type=friend
port=5060
host=dynamic
permit=0.0.0.0/0.0.0.0
qualify=yes
canreinvite=no
insecure=port,invite

  • Tambahkan konfigurasti Trunk dengan nama (misal) VoxStack. Lalu tambahkan Peer Details seperti berikut:

001

  • Ketika klik Submit, Elastix akan menyarankan menambahkan Outbound Route untuk panggilan melalui trunk ini. Tambahkan Outbound Routes dengan nama (misal) VoxStack, yang isi Dial Patterns dan Trunk Sequence seperti berikut:

002

Dial Pattern diatas dibuat dengan asumsi trunk ini hanya akan dipakai untuk melakukan panggilan ke network selular saja, yang kebetulan di Indonesia hampir semua berawalan 08 atau +628.

Setup VoxStack

  • Login ke VoxStack lalu klik System -> Status untuk mengetahui daftar nomer port dan operator seperti berikut:

003

Di sini tampak VoxStack memiliki dua module GSM port dengan masing-masing module berisi 4 slot GSM. Masing-masing slot GSM akan menampilkan nama carrier seperti di atas, sehingga kita bisa mengarahkan panggilan ke sesama operator yang (diharapkan) akan jauh lebih murah dibandingkan panggilan lintas operator. Setelah mencatat lokasi port dan nama carrier masing-masing slot GSM, maka lanjutkan dengan mebuat SIP endpoint.

  • Pilih menu SIP -> SIP Endpoints -> Add New SIP Endpoint. Isikan credential sesuai dengan yang kita tambahkan pada sip_custom.conf di Elastix IP PBX sebelumnya.

004

Pada menu pull down Registration pilih “This gateway registers with the endpoint”. Isikan User Name dan Password seperti yang telah ditambahkan di sip_custom.conf. Sedangkan Hostname or IP Address adalah ip address Elastix IP PBX (sesuai dengan persiapan sebelumnya, ip address Elastix adalah 192.168.33.2). Klik Save dan Apply.

  • Selanjut nya masuk ke menu Routing -> Groups -> New Group. Dalam contoh di sini kita akan membuat 5 buah group dengan setting seperti berikut:

005

Masing-masing group terdiri dari dua slot GSM dengan operator yang sama. Tujuannya adalah untuk mempermudah pengaturan routing call keluar. Setelah selesai klik Save dan Apply.

  • Pilih menu Call Routing Rules -> New Call Routing. Di sini kita akan mengatur panggilan ke masing-masing nomer operator dan juga panggilan masuk dari semua operator. Pada contoh pertama kita akan membuat Call Routing bernama OutBoundXL yang akan mengatur semua panggilan ke nomer-nomer XL.

Routing Name: OutBoundXL

Call comes in From: (menu drop down, pilih elastix). Nama ini kita peroleh ketika melakukan setting SIP endpoint.

Send Call Through: (menu drop down, pilih XL). Nama ini kita peroleh ketika kita membuat Group port GSM.

Lalu untuk dial pattern yang sesuai dengan nomer XL bisa dilihat dalam contoh berikut:

006

Untuk dial pattern menggunakan aturan Asterisk tidak akan saya bahas di sini karena bisa di baca di http://www.voip-info.org/wiki/view/Asterisk+Dialplan+Patterns.

Untuk keseluruhan Call Routing Rules ketika semua operator ditambahkan akan seperti ini:

007

Untuk rule nomer 5, semua panggilan masuk dari semua operator (group ALLGSM) akan diarahkan ke SIP Endpoint Elastix.

Test Setup

  • Untuk mengetahui apakan gateway VoxStack sudah teregistrasi ke Elastix bisa dengan memasuki console Asterisk (asterisk -vr) lalu jalankan perintah: sip show peer voxstack atau cukup dengan sip show peers. Jika berhasil akan muncul :
voxstack/voxstack         192.168.33.3                             D  Yes        Yes         A  5060     OK (2 ms)
  • Register ke salah satu ekstensi Elastix PBX dan lakukan panggilan ke nomer GSM.

Memblokir Panggilan Keluar Dari Ekstensi Tertentu

Gara-gara ada thread https://asterisk.id/t/membatasi-call-out-berdasarkan-ext/195/12, saya jadi ingat script untuk membatasi panggilan keluar dari ekstensi tertentu sebelum ada module Custom Context di FreePBX. Setelah dicari-cari akhirnya ketemu juga dan perlu saya tulis di sini supaya tidak lupa cara ini. Mungkin lain waktu ada IP PBX yang butuh workaround karena tidak dimungkinkan memasang Custom Context. Dan jujur sih, sebenarnya saya juga belum mencoba module satu itu. Jadi untuk sementara pakai cara berikut sepertinya lebih cepat.

  • Edit file /etc/asterisk/extensions_custom.conf melalui menu PBX -> PBX Confguration -> Tools -> Asterisk File Editor. Lalu tambahkan baris:
[from-internal-restricted]
#exec /var/lib/asterisk/bin/restricted.sh
  • Setelah itu edit file /etc/asterisk/asterisk.conf dan tambahkan baris:
execincludes = yes
  • Buat file shell script /var/lib/asterisk/bin/restricted.sh yang isinya:
#!/bin/bash
numbers=/etc/asterisk/whitelist
awk '/^;/{f=0} f{print} /^\[from-internal-additional\]/{f=1}' /etc/asterisk/extensions_additional.conf |grep -v "include => outbound-allroutes"
while read number comments; do
echo "exten => $number,1,Dial(Local/$number@from-internal)"
done < "$numbers"

File /etc/asterisk/whitelist berisi daftar nomer telpon dengan format nomertelpon keterangan. Misal: 14045 McDonald. Variabel numbers akan menyimpan daftar nomer telepon dengan keterangannya, yang kemudian akan dibaca oleh:

while read number comments; do ... done < "$numbers"

Sedangkan baris perintah awk akan mengeluarkan semua context yang digunakan untuk ekstensi internal, dengan pengecualian context outbound-allroutes. Setelah diedit, simpan file tersebut lalu ubah menjadi executable :

chmod + x /var/lib/asterisk/bin/restricted.sh
  • Buat file /etc/asterisk/whitelist dengan isi (misal) seperti berikut:
147 CSTelkom
14045 McDonald
113 Damkar
110 Polisi
108 Informasi
  • Masuk ke menu Web GUI dan cari ekstensi yang akan kita blacklist untuk tidak bisa menggunakan outbound PSTN call. Klik ekstensi tersebut, lalu pada bagian Device Options, pada parameter context, isikan "from-internal-restricted" seperti di bawah ini:

restricted

  • Test panggilan dari ekstensi yang diberlakukan context from-internal-restricted ke nomer luar, lalu bandingkan dengan panggilan yang sudah dimasukkan ke whitelist.

 

[ENUM] Membagi Alokasi Prefix +62520 teleponrakyat.id Ke Trunk

Masih berhubungan dengan panggilan ENUM dari direktori E164.ID di postingan yang lalu, kali ini saya share bagaimana membagikan alokasi nomer prefix +62520 yang sudah saya dapatkan dari teleponrakyat.id, ke trunk interkoneksi antar PBX di jaringan saya. Saat ini saya memaintain 3 Elastix IP PBX yang saling tersambung, full-meshed, dengan menggunakan IAX2 trunk. Tujuan dari trunk ini adalah supaya antar ekstensi masing-masing kantor cabang bisa melakukan panggilan langsung dengan mendial nomer ekstensi yang dituju dengan mudah. Masing-masing cabang sengaja dibedakan nomer kepala ekstensinya untuk mempermudah routing panggilan (hal ini juga akan membantu routing panggilan dari prefix +62520).

Idealnya, untuk setup jaringan dengan tujuan di atas adalah seperti berikut:

TrunkEnum 004

Dengan topology di atas, maka kita tidak perlu meng-enable anonymous call di salah satu gateway Elastix. Sehingga kita tidak perlu memikirkan keamanan server Elastix lagi. Karena semua panggilan masuk dari anonymous SIP call langsung dihandle oleh gateway tersebut, selain juga bisa berfungsi sebagai lapisan keamanan jaringan VoIP kita.

Tapi bisa juga dengan cara mengatifkan salah satu Elastix IP PBX sebagai gateway untuk semua panggilan masuk dari ENUM directory. Dengan demikian server Elastix tersebut yang akan bertugas mengarahkan panggilan ke ekstensinya sendiri, atau panggilan yang ditujukan ke IP PBX lainnya. Dengan menyatukan fungsi gateway maka topologinya menjadi seperti ini:

TrunkEnum 005

Untuk setup gateway sudah pernah saya posting sebelumnya (baca tautan link). Sekarang yang kita perlu dipikirkan adalah mengarahkan panggilan DID prefix +62520 yang ditujukan ke ekstensi yang berada di IP PBX lain.

Saya mengasumsikan sebagai berikut:

  1. Server Elastix di Office A, B, dan C sudah terhubung ke IAX2 trunk. (Bisa juga terhubung dengan SIP trunk, tetapi saya lebih suka IAX2 trunk).
  2. Masing-masing ekstensi terdiri dari 4 digit dengan dibedakan kepala digitnya. Kepala 1 (1XXX) untuk Office A. Kepala 2 (2XXX) untuk Office B, dan kepala 3 (3XXX) untuk Office C). Masing2 IP PBX memiliki dialplan untuk mengarahkan panggilan ke ekstensi di IP PBX lain. Misal di Office B, memiliki dialplan 1XXX yang diarahkan ke trunk Office A, dan 3XXX untuk diarahkan ke trunk Office C.
  3. Dalam contoh ini Office B akan menjadi gateway bagi panggilan masuk dari hasil lookup query ENUM. IP PBX Office B akan bertugas mengatur panggilan masuk untuk diarahkan ke ekstensi-ekstensi di IP PBX Office A, B, dan C. Setup untuk menjadi gateway panggilan masuk dari ENUM directory bisa dibaca di sini.
  4. Dalam contoh ini, format penomorannya sebagai berikut: alokasi prefix yang didapat dari teleponrakyat.id adalah +62520364. Format pembagian prefix ke 3 kantor cabang: prefix +625203641 untuk Office A, +625203642 untuk Office B, dan +625203643 untuk Office C. Untuk panggilan, misal, ke ekstensi 3004 di Office C, maka nomer ENUM yang dialokasikan adalah +6252036433004. Misal untuk ekstensi 1027 di Office A, maka alokasinya +6252036411027, dst.
  5. Selanjutnya, tambahkan setting SIP Alias dan Outbound CID di masing-masing ekstensi yang mendapatkan alokasi nomer ENUM teleponrakyat.id. Misal di ekstensi 3027 Office C, set SIP Alias: 6252036433016. Lalui Outbound CID: +6252036433016, dst.

Setelah semua asumsi di atas terpenuhi, sekarang saatnya mengatur inbound route di IP PBX Office B (karena dalam contoh ini Office B menjadi gateway incoming call dari ENUM).

  • Masuk ke menu PBX -> PBX Configuration -> Inbound Routes -> Add Incoming Routes. Isi parameter kira-kira seperti berikut ini:
Description:  (misal) Route2OfficeC
DID Number: _625203643XXXX
Set Destination: (pilih trunk yang mengarah ke OfficeC)

Setelah itu klik Submit.

  • Lakukan hal serupa untuk yang mengarah ke Office A.
  • Test call.

Jika step-step dilakukan seperti di atas, seharusnya sudah bisa dicall dari ekstensi mana pun dengan mendial nomer, misal,  +6252036433016.

Selamat mencoba!

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

Mencoba ENUM dari E164.ID Di Elastix

Bagi yang belum paham betul apa itu ENUM (E164 Number Mapping), bisa mencari informasinya di link berikut ini:

Intinya E164.ID ini menjadi direktori nomer telepon dan bisa menjadi penghubung  semua pengelola VoIP server yang ingin bergabung membentuk komunitas VoIP. Untuk mendapatkan blok nomer telepon ini, bisa didapatkan dengan mendaftar di TELEPONRAKYAT.ID. Di web tersebut kita bisa mendaftar sebagai Gateway (jika kita memiliki VoIP server sendiri), atau cukup mendaftarkan domain/realm saja (jika kita tidak memiliki/mengelola VoIP server sendiri). Sedangkan untuk diskusi lebih lanjut mengenai E164.ID ini bisa bergabung di forum ASTERISK.ID .

Oh ya, sebelum kita berpikir bahwa blok nomer yang kita dapatkan dengan mendaftar di TELEPONRAKYAT.ID bisa berkomunikasi dengan nomer telepon regular, perlu disampaikan bahwa E164.ID belum melakukan interkoneksi ke jaringan telepon PSTN maupun PLMN. Untuk pengguna VoIPRakyat sudah bisa menikmati panggilan dengan menggunakan nomer E164.ID. Bagi yang mau coba, bisa kontak nomer demo +62520291901 (time announcement), +62520291902 (monkey), atau di +62520291903 (echo test).

Mendaftar di TELEPONRAKYAT.ID

Sebelum melanjutkan setup, kita terlebih dahulu harus mendaftar ke TELEPONRAKYAT.ID untuk mendapatkan nomer telpon/prefix dari E164.ID. Untuk cara mendaftar silahkan baca dengan mendownload file .pdf di sini. Dengan asumsi bahwa kita sudah memiliki server Elastix, maka daftar di bagian Manage Gateway. Di sini kita akan mendapatkan alokasi prefix nomer, contoh, prefix nomer yang saya dapatkan adalah +62520-364. Setelah mendaftar, tunggu sekitar 15 menit untuk bisa melakukan lookup di E164.ID. Caranya adalah dengan menjalankan perintah berikut di shell  prompt linux:

$ dig +short *.4.6.3.0.2.5.2.6.e164.id NAPTR

jika semua berjalan lancar maka outputnya seperti :

10 1 "u" "E2U+sip" "!^\\+?(.*)$!sip:\\1@sip.domain.tld!" .

Argument untuk dig di atas diambil dari digit prefix yang kita dapat, lalu hilangkan tanda ‘+’, setelah itu urutan dibalik dari depan ke belakang, dengan masing-masing digit dipisah tanda titik. Pada ujung sebelah kiri adalah wildcard (asterisk), artinya berapapun nomer berikutnya, asalkan prefixnya adalah alokasi prefix tersebut. Untuk keterangan hasil dig, digit pertama (10) adalah priority, lalu digit berikutnya adalah weight (1), baris berikutnya adalah protokol yang digunakan yaitu UDP (untuk U), dan SIP. Sedangkan yang terkakhir adalah format URI yang didapatkan dengan regular expression.

Elastix Setup

Berhubung saya setiap hari menggunakan Elastix maka contoh setup  berikut ini menggunakan distro tersebut. Karena distro tersebut pada dasarnya menggunakan FreePBX, maka setupnya tidak banyak  berbeda bila menggunakan distro FreePBX, AsteriskNow, trixbox, Briker, dkk. Stepnya adalah sebagai berikut:

  • Dari baris Tab di menu utama, pilih tanda panah paling kanan untuk memunculkan menu dropdown, lalu pilih Security -> Advanced Settings lalu aktifkan slide button untuk Enable anonymous SIP calls. 001002
  • Selanjut pilih menu PBX -> PBX Configuration -> Trunks -> Add ENUM Trunk. Beri nama Trunk di bagian Trunk Name, misal E164.ID,  lalu klik Submit Change.003
  • Pilih menu PBX -> PBX Configuration -> Outbound Routes -> Add Route. Di bagian Route Name, isikan nama untuk route ini, misal Outbound_ENUM, lalu isikan dial patterns seperti berikut:004
  • jangan lupa di bagian Trunk Sequence for Matched Routes pilih E164.ID (sesuai nama trunk yang sudah kita buat sebelumnya), dan klik Submit Changes.
  • Sebelum melanjutkan menambahkan Inbound Routes, ada baiknya kita melakukan edit file /etc/enum.conf. Saya lebih suka menghapus semua isi file tersebut dan cukup diisi dengan  :
search => e164.id
  • Lalu edit file /var/lib/asterisk/agi-bin/enumlookup.agi :
$ sudo chmod a+w /var/lib/asterisk/agi-bin/enumlookup.agi
$ sudo vi /var/lib/asterisk/agi-bin/enumlookup.agi

di bagian baris:

$enums = Array('e164.org','e164.arpa','e164.info');

menjadi:

$enums = Array('e164.id');

setelah menyimpan perubahan, jangan lupa mengembalikan mode file supaya tidak ditimpa ulang oleh system:

$ sudo chmod a-w /var/lib/asterisk/agi-bin/enumlookup.agi
  • Selanjutnya kita perlu menambahkan realm ke Elastix. Realm adalah nama domain gateway yang kita daftarkan ke TELEPONRAKYAT.ID. Sebagai awalan, ada baiknya jika nama realm sesuai dengan FQDN (contoh sip.domain.tld) server Elastix. Karena jika realm tidak sama dengan FQDN server, misal domain.tld, maka kita perlu menambahkan entry SRV ke DNS. Secara default, realm Elastix adalah “asterisk”. Untuk menggantinya, masuk ke menu PBX -> Tools -> Asterisk File Editor, lalu edit file sip_general_custom.conf dan tambahkan baris:
realm=sip.domain.tld

Klik Save lalu klik Reload Asterisk.

  • Buat satu extensi (misal 1001). Lalu registrasi melalui SIP phone (cara menambahkan extensi tidak akan dibahas di sini). Di bagian SIP Alias (masih di halaman pembuatan extensi), tambahkan alokasi nomer dari teleponrakyat.id, misal 6252036411001.  Setelah itu klik Submit.       SIP alias
  • Optional, tambahkan juga pada Outbound CID dengan nomer alokasi di atas lengkap dengan tanda +, menjadi: +6252036411001. Tujuannya supaya ketika kita melakukan panggilan ke gateway lain, nomer telpon yang muncul adalah nomert telpon Outbound CID tersebut, bukan nomer ekstensi.
  • Edit file /etc/asterisk/extensions.conf melalui web (karena jika tidak akan dioverride ketika system reload), dan edit bagian context from-sip-external. Default dari context tersebut seperti berikut:
[from-sip-external]
exten => _.,1,NoOp(Received incoming SIP connection from unknown peer to ${EXTEN})
exten => _.,n,Set(DID=${IF($["${EXTEN:1:2}"=""]?s:${EXTEN})})
exten => _.,n,Goto(s,1)
...
...

edit menjadi:

[from-sip-external]
exten => _.520364XXXXX,1,NoOp(Received incoming SIP connection from unknown peer to ${EXTEN})
exten => _.520364XXXXX,n,Set(DID=${IF($["${EXTEN}"=""]?s:${EXTEN})})
exten => _.520364XXXXX,n,Goto(s,1)
...
...

Pola _.520364XXXXX menyesuaikan prefix yang dialokasikan ke getway kita. Tujuan dari editing ini adalah untuk mengurangi panggilan dari source-source yang tidak dikenal karena kita memperbolehkan anonymous SIP call. Jika tidak kita ubah demkian, maka ekstensi kita akan mendapatkan banyak sekali telepon masuk dari nomer-nomer acak. Karena file extensions.conf ini tidak begitu banyak berubah/diedit oleh system (seperti extensions_additional.conf misalnya), maka lebih baik jika kita non aktifkan akses write ke file tersebut dengan perintah:

root# chmod a-w /etc/asterisk/extensions.conf

Dengan demikian file tersebut tidak akan bisa ditimpa secara tidak sengaja dan menyebabkan panggilan masuk dari URI tak dikenal (selain yang terdaftar di E164.ID) bisa lewat lagi.

  • Test call (di contoh ini saya coba test call dari nomer VoIP Rakyat) misal tidak ada kendala akan seperti ini:005Screenshot_2016-01-23-03-40-04
  • Setup firewall supaya server VoIP/IP PBX tetap aman. Contoh setup firewall bias dibaca di sini .
  • Aktifkan fail2ban (biasanya secara default sudah ada di instalasi Elastix), tinggal mengedit logpath diarahkan ke /var/log/asterisk/full (defaultnya ke /var/log/asterisk/messages) di dalam file jail.conf, lalu ubah alamat penerima dan pengirim email notifikasi. Hal ini untuk menambahkan layer keamanan di Asterisk.

Tambahan

Jika melihat CDR dari menu Reports, kita masih akan melihat banyak sekali log percobaan panggilan yang dilewatkan ke Elastix dari source-source tidak dikenal seperti ini:

007

walaupun sebenarnya tidak ada panggilan yang berhasil dilakukan, tapi log seperti ini akan tetap memenuhi CDR kita. Untuk menghindari hal ini bisa ditambahkan custom context di extensions_custom.conf seperti berikut:

[from-pstn-custom]
include => ext-did-catchall-custom
exten => s,1,Noop(No DID or CID Match)
exten => s,n,Hangup

[ext-did-catchall-custom]
exten => s,1,Noop(No DID or CID Match)
exten => s,n,Hangup

Klik Save dan Reload Asterisk.

Selamat mencoba!

[Kazoo] Problem Pergantian RabbitMQ Server

Karena sesuatu hal, saya harus mengubah topologi Kazoo, terutama server RabbitMQ yang menggunakan ip public menjadi ip private. Dan ternyata penggantian tersebut tidak mudah. Setelah dijalankan, WhistleApps masih mencari server AMQP lama, dan karena server tersebut sudah tidak ada, maka muncul error econnrefused seperti di bawah ini:

Jan 4 17:35:05 portal 2600hz[1211]: |00000000000|wh_amqp_connection:320 (<0.2180.0>) failed to connect to ‘amqp://guest:guest@1.2.3.4:5672’ will retry: econnrefused
Jan 4 17:35:06 portal 2600hz[1211]: |00000000000|wh_amqp_connection:320 (<0.2180.0>) failed to connect to ‘amqp://guest:guest@1.2.3.4:5672’ will retry: econnrefused
Jan 4 17:35:07 portal 2600hz[1211]: |00000000000|wh_amqp_connection:320 (<0.2180.0>) failed to connect to ‘amqp://guest:guest@1.2.3.4:5672’ will retry: econnrefused
Jan 4 17:35:08 portal 2600hz[1211]: |00000000000|wh_amqp_connection:320 (<0.2180.0>) failed to connect to ‘amqp://guest:guest@1.2.3.4:5672’ will retry: econnrefused
Jan 4 17:35:09 portal 2600hz[1211]: |00000000000|wh_amqp_connection:320 (<0.2180.0>) failed to connect to ‘amqp://guest:guest@1.2.3.4:5672’ will retry: econnrefused
Jan 4 17:35:10 portal 2600hz[1211]: |00000000000|wh_amqp_connection:320 (<0.2180.0>) failed to connect to ‘amqp://guest:guest@1.2.3.4:5672’ will retry: econnrefused

Untuk mengatasi hal ini, maka broker harus dihilangkan secara manual dengan perintah:

root# sup whistle_amqp_maintenance remove_broker “amqp://guest:guest@1.2.3.4:5672”

Lalu tambahkan broker baru, misal:

root# sup whistle_amqp_maintenance add_connection “amqp://guest:guest@6.7.8.9:5672”

Dengan langkah tersebut, seharusnya broker sudah terarah ke server yang baru.