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
scrip ini ditaruh difile mana? firewalld ?
maklum belum pernah megang asterisk.
pernahnya linuxnya doang
buat di mana aja. Setelah itu diset chmod +x lalu jalankan. Dan terakhir ketik iptables-save. Rekomendasi sih kalo yang terbaru njalanin firewalld dengan perintah firewall-cmd.