{"id":208,"date":"2016-01-24T12:17:39","date_gmt":"2016-01-24T05:17:39","guid":{"rendered":"http:\/\/www.otakudang.org\/?p=208"},"modified":"2017-12-18T04:57:06","modified_gmt":"2017-12-17T21:57:06","slug":"iptables-untuk-asterisk-based-ip-pbx","status":"publish","type":"post","link":"https:\/\/www.otakudang.org\/?p=208","title":{"rendered":"IPTables untuk Asterisk Based IP PBX"},"content":{"rendered":"<p>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):<\/p>\n<blockquote>\n<pre>#!\/bin\/bash\r\n # cwd=\/etc\/sysconfig\/\r\n #\r\n\r\n#VARS\r\n EXTIF=\"eth0\"\r\n INTIF=\"eth1\"\r\n\r\n# flush\u00a0rule iptables jika masih ada\r\n iptables -F\r\n iptables -X\r\n\r\n# allow inbound ssh connection melalui external\/public interface\r\n iptables -A INPUT -p tcp --dport 22 --sport 1024:65535 -m state --state NEW,ESTABLISHED -j ACCEPT\r\n\r\n# set default policies (memperbolehkan semua outbound, block inbound, membatasi forwarding antar\u00a0interfaces)\r\n iptables -P INPUT DROP\r\n iptables -P FORWARD DROP\r\n iptables -P OUTPUT ACCEPT\r\n\r\n# Memperbolehkan TCP 80 and 443\r\n iptables -A INPUT -p tcp --dport 80 -j ACCEPT\r\n iptables -A INPUT -p tcp --dport 443 -j ACCEPT\r\n\r\n# Memperbolehkan RTP traffic\r\n iptables -A INPUT -p udp --dport 10000:20000 -j ACCEPT\r\n\r\n# Memperbolehkan SIP traffic\r\n iptables -A INPUT -p tcp --dport 5060 -j ACCEPT\r\n iptables -A INPUT -p udp --dport 5060 -j ACCEPT\r\n\r\n#\u00a0Memperbolehkan trafik dari interface loopback dan internal interface (jika ada)\r\n #iptables -A INPUT -i $INTIF -j ACCEPT\r\n iptables -A INPUT -i lo -j ACCEPT\r\n\r\n#\u00a0Memperbolehkan akses dari ip address yang sudah dikenali (kantor, rumah, dst), jika ada.\r\n iptables -A INPUT -i $INTIF -s XXX.XXX.XXX.XXX\/XX -j ACCEPT\r\n iptables -A INPUT -i $INTIF -s XXX.XXX.XXX.XXX\/XX -j ACCEPT\r\n\r\n# Melewatkan koneksi dengan status\u00a0established di interface external\/public\r\n iptables -A INPUT -i $EXTIF -m state --state ESTABLISHED,RELATED -j ACCEPT\r\n\r\n# memblokir trafik dari blok ip address private yang masuk via interface public\r\n iptables -A INPUT -i $EXTIF -s 10.0.0.0\/8 -j DROP\r\n iptables -A INPUT -i $EXTIF -s 172.16.0.0\/12 -j DROP\r\n iptables -A INPUT -i $EXTIF -s 192.168.0.0\/16 -j DROP\r\n iptables -A INPUT -i $EXTIF -s 224.0.0.0\/4 -j DROP\r\n iptables -A INPUT -i $EXTIF -s 240.0.0.0\/5 -j DROP\r\n iptables -A INPUT -i $EXTIF -s 0.0.0.0\/8 -j DROP\r\n iptables -A INPUT -i $EXTIF -s 169.254.0.0\/16 -j DROP\r\n iptables -A INPUT -i $EXTIF -s 127.0.0.0\/8 -j DROP\r\n\r\n# ICMP\r\n iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1\/sec -j ACCEPT\r\n\r\n# SYN flood limiter\r\n iptables -A INPUT -p tcp --syn -m limit --limit 5\/s -j ACCEPT\r\n\r\n# ditutup dengan rule catch-all\r\n # LOG dan DENY\u00a0semua packet yang belum masuk di rule.\r\n iptables -A INPUT -m limit --limit 5\/min -j LOG --log-prefix \"iptables denied: \" --log-level debug\r\n iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited\r\n\r\n# menyimpan \u00a0setting\r\n iptables-save > \/etc\/sysconfig\/iptables\r\n\r\n#\r\n # Menampilkan rule di atas\r\n #\r\n iptables -L -v<\/pre>\n<\/blockquote>\n<p>&nbsp;<\/p>\n<p><span style=\"line-height: 1.5;\">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<\/span><\/p>\n<ul>\n<li>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.<\/li>\n<li>set PermitRootLogin=no untuk ssh, dan buat akun shell tambahan yang dimasukkan list sudo supaya bisa melakukan aktifitas administrasi server.<\/li>\n<li>Ubah port ssh dan web UI ke port lain yang hanya kita ketahui (misal 8241, 9231, dst), dan tetap di<em>filter<\/em> dengan IPTables.<\/li>\n<li>Menambahkan setting httpd.conf misal:<\/li>\n<\/ul>\n<pre><Directory>\r\n    ...\r\n    Deny from all\r\n    Allow from 1.2.3.4\r\n    Allow from 6.7.8.0\/24\r\n    Allow from 192.168.1.0\/24\r\n    Allow from 10.0.0.0\/24\r\n    Allow from 172.16.0.0\/24\r\n    ...\r\n<\/Directory><\/pre>\n<p>&nbsp;<\/p>\n<ul>\n<li>Bila perlu, block MySQL dari semua interface kecuali interface loopback\/localhost.<\/li>\n<li>Menambahkan <a href=\"http:\/\/www.fail2ban.org\/wiki\/index.php\/Main_Page\">fail2ban <\/a>lebih bagus lagi.<\/li>\n<\/ul>\n<p>Intinya, jadilan super paranoid jika berurusan dengan IP PBX terlebih yang tersambung ke jaringan telepon umum.<\/p>\n<h3>Tambahan<\/h3>\n<p>Jika terjadi sesuatu dan harus melakukan flush iptables, bisa dengan membuat script baru dengan isi:<\/p>\n<pre>#!\/bin\/sh\r\n\r\necho \"Flushing Tables ...\"\r\n\r\n# Reset Default Policies\r\niptables -P INPUT ACCEPT\r\niptables -P FORWARD ACCEPT\r\niptables -P OUTPUT ACCEPT\r\niptables -t nat -P PREROUTING ACCEPT\r\niptables -t nat -P POSTROUTING ACCEPT\r\niptables -t nat -P OUTPUT ACCEPT\r\niptables -t mangle -P PREROUTING ACCEPT\r\niptables -t mangle -P OUTPUT ACCEPT\r\n\r\n# Flush all rules\r\niptables -F\r\niptables -t nat -F\r\niptables -t mangle -F\r\n\r\n# Erase all non-default chains\r\niptables -X\r\niptables -t nat -X\r\niptables -t mangle -X<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>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 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.otakudang.org\/?p=208\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;IPTables untuk Asterisk Based IP PBX&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,5,2],"tags":[],"class_list":["post-208","post","type-post","status-publish","format-standard","hentry","category-etc","category-asterisk","category-telephony","entry"],"_links":{"self":[{"href":"https:\/\/www.otakudang.org\/index.php?rest_route=\/wp\/v2\/posts\/208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.otakudang.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.otakudang.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.otakudang.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.otakudang.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=208"}],"version-history":[{"count":18,"href":"https:\/\/www.otakudang.org\/index.php?rest_route=\/wp\/v2\/posts\/208\/revisions"}],"predecessor-version":[{"id":622,"href":"https:\/\/www.otakudang.org\/index.php?rest_route=\/wp\/v2\/posts\/208\/revisions\/622"}],"wp:attachment":[{"href":"https:\/\/www.otakudang.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.otakudang.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.otakudang.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}