เคยอยากทำแบบนี้มั๊ยครับ จำกัดว่าเบอร์ Extension นี้จะ Register ได้เฉพาะ IP Address ในวงนี้ หรือ IP Address นี้เท่านั้น ผมมีวิธีทำครับ ไม่ยาก ทำในไฟล์ /etc/asterisk/sip.conf หรือไฟล์ที่ถูก include เข้าไป
ผมลองกับ Asterisk 1.4.36 เวอร์คดีครับ
ซึ่ง IP Address ที่จะรีจิสเตอร์เข้ามานั้นนะครับ เราอาจจะรู้ IP ที่แน่นอน เช่น 192.168.1.100 หรือไม่รู้ไอพีที่แน่นอน แต่รู้ว่ามันเป็น Subnet นี้เช่น 192.168.1.0/24 เราก็มีวิธีบอก Asterisk ได้แบบครอบคลุมหมดทุกรูปแบบ ดังตัวอย่างครับ
1. ทั้งวงแลน
สมมติว่าผมต้องการให้เบอร์ 100 รีจิสต์ได้เฉพาะ IP ที่อยู่ในวง 192.168.1.0/24 เท่านั้น ผมก็เพิ่มบรรทัด deny และ permit เข้าไป แบบนี้
- โค้ด: เลือกทั้งหมด
[100]
...
host=dynamic
deny=0.0.0.0/0.0.0.0
permit=192.168.1.0/255.255.255.0
...
บรรทัด deny ควรจะอยู่ก่อน permit นะครับ
ซึ่งถ้ามีใครพยายามรีจิสเตอร์เบอร์ 100 จากไอพีวงอื่นที่ไม่ใช่ 192.168.1.0/24 นี้ Asterisk ก็จะฟ้องมาแบบนี้ครับ ในไฟล์ /var/log/asterisk/messages หรือ /var/log/asterisk/full
[2011-05-15 15:12:34] NOTICE[25636] chan_sip.c: Registration from '100<sip:100@110.101.13.13>' failed for '124.122.83.152' - Device does not match ACL
และถ้าเราติดตั้ง Fail2Ban ไว้ ไอพี 124.122.83.152 ก็จะถูก iptables บล๊อกไว้ แบบนี้
- โค้ด: เลือกทั้งหมด
Chain fail2ban-ASTERISK (1 references)
pkts bytes target prot opt in out source destination
1 500 DROP all -- any any ppp-124-122-83-152.revip2.asianet.co.th anywhere
353 38963 RETURN all -- any any anywhere anywhere
2. เปิดรับ IP เดียว
ตัวอย่างข้างบนเป็นการเปิดรับทั้งวง 192.168.1.0/24 แต่ถ้าเราต้องการให้เฉพาะ IP เดียวเท่านั้นที่รีจิสเตอร์ได้ เช่น 192.168.1.100 เราก็ระบุบรรทัด permit แบบนี้ครับ
[100]
...
host=dynamic
deny=0.0.0.0/0.0.0.0
permit=192.168.1.100
...
3. หลายไอพีแต่อยู่คนละวงแลน
ต้องการให้เบอร์ 100 รีจิสเตอร์มาจาก IP ไหนก็ได้ใน 3 IP นี้
[100]
...
host=dynamic
deny=0.0.0.0/0.0.0.0
permit=192.168.1.100
permit=192.168.1.200
permit=120.121.50.89
...
4. ไอพีผสมซับเน็ต
[100]
...
host=dynamic
deny=0.0.0.0/0.0.0.0
permit=192.168.1.100
permit=192.168.1.200
permit=120.121.50.0/255.255.255.224
...
5. ไม่รู้ว่าจะรีจิสเตอร์มาจาก IP ไหน
ตัวอย่างที่เราไม่รู้ว่าจะรีจิสเตอร์มาจากไอพีไหนก็เช่น รีจิสเตอร์ผ่าน Internet มา (แบบไม่ได้ใช้ VPN) ซึ่ง IP ก็จะเปลี่ยนไปเรื่อยๆ ทุกวัน
อันนี้ก็ไม่ต้องใส่บรรทัด deny และ permit เข้าไปนะครับ ใส่แต่บรรทัด host=dynamic ก็พอ และผมว่าไม่ควรใส่ชื่อ dns เข้าไป (หรือใส่ได้แต่เวอร์คป่าวไม่รู้ครับ ไม่ได้ลอง)
เครื่องหมาย ... ผมโชว์ให้เห็นว่าใส่พารามิเตอร์อื่นๆเพิ่มได้อีกนะครับ เวลาคอนฟิกไม่ต้องใส่เข้าไป เดี๋ยวจะเออเร่อร์
สำหรับท่านที่ใช้ Elastix, Trixbox หรือ FreePBX ผมมีบทความแนะนำการทำแบบนี้ด้วยนะครับ เทคนิคการจำกัด IP Address ที่จะ Register กับ Elastix ได้
บทความที่เกี่ยวข้อง
iptables firewall
Asterisk Security
จับตายพวกชอบเดา Username/Password ของ Asterisk ด้วย Fail2Ban
จับตายพวกชอบเดา Username/Password เข้า SSH