Berikut ini saya ingin share dengan setting firewall yang bisa digunakan di box Asterisk/AsteriskNow/Elastix dkk. Mengapa? Karena saya masih menemukan beberapa teman yang dengan gagah berani menginstall box asterisk menggunakan ip public, bahkan tanpa ada setup firewall yang berarti. Walhasil beberapa teman yang menyambungkan box asterisk dengan PSTN pernah beberapa kali kebobolan sampai dengan sekian puluh juta. Sangat ditekankan, bagi para sysadmin untuk membiasakan diri melindungi semua anak-anak kita (baca: server-server), dengan firewall secukupnya. Berikut template untuk firewall dengan dua interface (external/public dan internal/lan). Sekrip bukan murni buatan saya. Saya dapet dari komunitas lain lalu saya edit-edit sesuai dengan kebutuhan sendiri (misal, RTP port asterisk biasanya UDP 10000-20000, menambahkan iptables-save, dst). Selamat mencoba.
#!/bin/bash
# cwd=/etc/sysconfig/
#
#VARS
EXTIF="eth0"
INTIF="eth1"
# flush all existing rules and chains
iptables -F
iptables -X
# allow inbound ssh connection on external/public interface
iptables -A INPUT -p tcp --dport 22 --sport 1024:65535 -m state --state NEW,ESTABLISHED -j ACCEPT
# set default policies (allow any outbound, block inbound, restrict forwarding between interfaces)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Allow TCP 80 and 443
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Allow RTP traffic
iptables -A INPUT -p udp --dport 10000:20000 -j ACCEPT
# Allow SIP traffic
iptables -A INPUT -p tcp --dport 5060 -j ACCEPT
iptables -A INPUT -p udp --dport 5060 -j ACCEPT
# allow all inbound traffic coming in on loopback and the internal/private interfaces
#iptables -A INPUT -i $INTIF -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
# allow your home / office ip
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
# allow inbound traffic for established connections on external/public interface
iptables -A INPUT -i $EXTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
# block packets coming in with invalid source ips
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
# catch-all for end of rules
# LOG and DENY other traffic to help identify additional filters required
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
# Save settings
#
# On CentOS / Fedora this will output the current IPTables to the stdout, which we can pipe to a file that sets these on boot
iptables-save > /etc/sysconfig/iptables
#
# List rules
#
iptables -L -v
Saya rahman, baru gabung di forum ini. mau nanya nih mas @godril, saya saat ini menggunakan elastix 2.5 menggunakan ip local, dgn topologi nya seperti ini router —> switch/hub —> server_elastix, apakah saya perlu menambahkan firewall di server elastix nya mas?? mohon pencerahan nya… makasih
Jika asterisk cuma dipakai lokalan, sepertinya ndak perlu ditambahkan di router. Kecuali kalau servernya beda network dan beda router, dan di bawah nat network lain baru ditambahkan untuk rule port nya.
maaf mas…untuk elastix nya saat ini dipakai buat incoming outgoing pstn juga…, jdi apakah perlu saya tambahkan ip tables di server elastix nya…makasih atas infonya…
seperti keterangan yang saya tulis di atas rule firewall, rule ini bisa digunakan jika server IP PBX nya entah bagaimana harus menggunakan ip address public. Jika server berada di LAN, sebenarnya ndak perlu dipasangi rule demikian, tapi jika dipasang pun lebih baik. Tinggal topologinya yang digunakan saja, apakah terekspos ke public atau ndak.
jika asterisk di bawah router dan akses sip nya dari luar jaringan (public), maka sebaikya di router disetup port forward. Misal asumsi ip public router 1.2.3.4, sementara ip addr LAN asterisk 192.168.1.100. Nanti di router tinggal disetup 1.2.3.4 port udp/tcp 5060 (signalling) ke 192.168.1.100 udp/tcp 5060 (signalling), lalu 1.2.3.4 port udp 10000 - 20000 (media) port forward ke 192.168.1.100 port udp 10000 -20000 (media). CUma itu saja yang diport forward. Jangan sekali2 1 to 1 NAT, karena sama saja mengekspose asterisk ke public.
Sekedar saran saja, untuk signalling sebaiknya port forward pakai port yang berebeda walaupun ke asterisknya sama. Misal: 1.2.3.4 port 9060 tcp/udp port forward ke 192.168.1.100 ke port 5060 tcp/udp. Sementara media tetep sama (10000 -20000). Nanti yang dari public kalau mau register ke asterisk untuk setting sip server tinggal diisi 1.2.3.4:9060.
iya betul demikian. Lha sebenernya nanti SIP clientnya register dari mana to? Kalo sesama LAN, setting di atas ndak perlu lho. Sebisa mungkin Asterisk ndak bisa diakses dari luar walaupun cuma sekedar port forward aja.
Sip client nya satu LAN sama elastixnya dibawah Router, cuma kalau saya nambah fitur biar user mobile bisa dapat extention walau dia diluar kandang bagaimana yang aman dan recommend? pakai NAT atau VPN?