วันพุธที่ 21 ตุลาคม พ.ศ. 2552

The TCP FIN scan and The TCP NULL scan

ในการทดลองเพื่อให้เห็นภาพลักษณะการทำงานของ TCP FIN scan และ TCP NULL scan ได้ทำการจำลอง network ไว้บนโปรแกรม Vmware โดยที่กำหนดให้เครื่อง Web Server มี IP 192.168.10.24 ทำตัวเป็น server และ PC มี IP 192.168.10.25 เป็นเครื่อง client ที่ทำหน้าที่ในการ scan port ต่างๆ ของ Web server ทั้งแบบ FIN scan และแบบ NULL scan โดยทำการติดตั้ง โปรแกรม Wireshark ไว้คอยตรวจจับ packet ต่างๆที่ได้จากการ scan ไว้บนเครื่อง PC เพื่อมาทำการวิเคราะห์ packet ที่ได้

รูปที่ 1 network ที่ใช้ในการตรวจจับ packet

The TCP FIN scan ลักษณะการทำงานของเทคนิคนี้จะทำการส่ง TCP packets ที่เซตค่า flag FIN เป็น 1 (TCP FIN) ไปยังระบบของเหยื่อเป้าหมายซึ่งมันสามารถที่จะทะลุผ่านไฟล์วอลล์ที่เป็นแบบ packet filters และโปรแกรมตรวจจับการสแกนไปได้โดยไม่ถูกตรวจพบ เพราะเมื่อผ่านไฟล์วอล์ไปได้ถึง server เป้าหมายที่ทำการโจมตีได้แล้ว server จะตอบสนองกลับไปด้วย RST flag สำหรับพอร์ตต่าง ๆ ที่ปิดอยู่ และในของส่วนพอร์ตที่เปิดอยู่ก็จะไม่สนใจ packets เหล่านั้นเลย ดังนั้นเครื่องที่ทำการโจมตีก็จะได้ข้อมูลว่ามันได้รับ RST จากพอร์ตไหนบ้างและไม่ได้ RST จากพอร์ตไหนบ้าง (ทำให้ทราบหมายเลขพอร์ตที่ไม่ได้เปิดให้บริการ) โดยปกติแล้ว เทคนิคนี้มักใช้ได้กับเครื่องปลายทางที่รันบนยูนิกช์

รูปที่ 2 ผลจากการ scan โดยใช้คำสั่ง nmap -sF 192.168.10.24

รูปที่ 3 ผลจากการ FIN scan โดยใช้โปรแกรม Wireshark

รูปที่ 4 ผลจากการได้รับ RST ตอบกลับ โดยใช้โปรแกรม Wireshark
รูปที่ 5 Flow Graph ที่ได้จากการตรวจ packet โดยโปรแกรม Wireshark

จากรูปที่ 2 เป็นผลจากการ scan port ต่างๆบนเครื่อง Web Server โดยใช้โปรแกรม Zenmap-GUI ซึ่งเป็น nmap for windowsXP โดยใช้คำสั่ง nmap -sF 192.168.10.24 ซึ่งผลที่ได้มี port ที่เปิดไว้คือ port 22, 80,111,139,443,445,3128 โดย TCP packet ที่ส่งไปจากเครื่อง IP 192.168.10.25 มีการเซ็ต flag FIN = 1 ดังรูปที่ 2 เป็นการใช้โปรแกรม wireshark จับ packet มาดูก็จะเห็นว่ามีการเซ็ต flag FIN=1 แล้วส่งไปยังตัวเครื่อง Web server IP 192.168.10.24 ถ้าหากว่า port นั้นไม่เปิด Web server ปลายทางก็จะตอบกลับโดยการส่ง packet ที่มีการเซ็ต flag RST=1 กลับมายังเครื่อง PC ดังรูปที่ 4

แต่ถ้าหากว่ามี port ใดๆของ Web server เปิดอยู่ เมื่อเครื่อง PC สแกนมาถึง port นั้น Web server ก็จะไม่ตอบอะไรกลับมาเลย ดังรูปที่ 5 Flow Graph จะไม่มีการตอบกลับเมื่อ เครื่อง PC สแกนมาถึง port 80 ที่เปิดให้บริการอยู่

ดังนั้นตามการทำงานลักษณะแบบนี้ทำให้ทราบได้ว่าบนเครื่อง Web server มีการเปิด port อะไรไว้บ้าง The TCP NULL scan ลักษณะการทำงานของเทคนิคนี้จะไม่ใช้ flag ในการสแกนเลย โดยจะส่ง TCP packet ที่มี sequence number แต่ไม่มี flag ออกไปยังเครื่องเป้าหมาย ถ้าพอร์ตปิดอยู่จะส่ง flag RST packet กลับมา แต่ถ้าพอร์ตเปิดอยู่ ก็จะไม่สนใจ packet นั้นเลย

โดยทั่วไปแล้ว TCP packet ประเภทนี้จะไม่มีอยู่ในข้อกำหนดของ potocol จึงไม่มีผู้สนใจ นอกจากนี้ยังทำให้ potocol ใน layer ชั้นสูงขึ้นไปไม่ทราบว่ามีการส่ง packet เข้ามาด้วย นอกจากการใช้ packet เหล่านี้เพื่อการสแกนพอร์ตแล้วยังสามารถนำ packet เหล่านี้ไปใช้ในการตรวจสอบระบบปฏิบัติการของเหยื่อเป้าหมายได้อีกด้วย เนื่องจากระบบปฎิบัติการแต่ละแบบจะมีการตอบสนองที่ไม่เหมือนกัน


รูปที่ 6 ผลการ scan ด้วย Zenmap โดยคำสั่ง nmap -sN 192.168.10.24

การทำการทดลองก็จะใช้ network จำลองบน Vmware ดังรูปที่ 1 ด้วยเช่นกัน

จากรูปที่ 6 เป็นผลการสแกน port โดยใช้โปรแกรม Zenmap ซึ่งเป็น nmap for windowsXP โดยใช้คำสั่ง nmap -sN 192.168.10.24 ซึ่งผลที่ได้มี port ที่เปิดไว้คือ port 22, 80,111,139,443,445,3128 โดย TCP packet ที่ส่งไปจากเครื่อง IP 192.168.10.25 ไม่มีการเซ็ตค่าใดของ flag เลย

ดังรูปที่ 7 เป็นการใช้โปรแกรม wireshark จับ packet มาดูก็จะเห็นว่าไม่มีการเซ็ต flag TCP แล้วส่งไปยังตัวเครื่อง Web server IP 192.168.10.24

- ถ้าหากว่า port นั้นไม่เปิด Web server ปลายทางก็จะตอบกลับโดยการส่ง packet ที่มีการเซ็ต flag RST=1 กลับมายังเครื่อง PC ดังรูปที่ 8

- แต่ถ้าหากว่ามี port ใดๆของ Web server เปิดอยู่ เมื่อเครื่อง PC สแกนมาถึง port นั้น Web server ก็จะไม่ตอบอะไรกลับมาเลย ดังรูปที่ 9 Flow Graph จะไม่มีการตอบกลับเมื่อ เครื่อง PC สแกนมาถึง port 80 ที่เปิดให้บริการอยู่

ดังนั้นตามการทำงานลักษณะแบบนี้ทำให้ทราบได้ว่าบนเครื่อง Web server มีการเปิด port อะไรไว้บ้างนอกเหนือไปจากนั้นเรายังสามารถนำไปวิเคราะห์ เพื่อตรวจสอบว่าเป้าหมายของเราเป็นะบบปฏิบัติการอะไรได้อีกด้วย เนื่องจากแต่ละระบบปฏิบัติการมีการตอบสนองที่ไม่เหมือนกัน ซึ่งในการทดลองนี้ตัว Web server ได้ใช้ระบบปฏิบัติการ Linux Fedora Core 8 และเครื่อง PC ใช้ระบบปฏิบัติการ WindowsXP SP2

รูปที่ 7 ผลจากการ NULL scan โดยใช้โปรแกรม Wireshark

รูปที่ 8 ผลจากการได้รับ RST ตอบกลับ โดยใช้โปรแกรม Wireshark
รูปที่ 9 Flow Graph ที่ได้จากการตรวจ packet โดยโปรแกรม Wireshark

-------------------------------
ขอขอบคุณเพื่อน ๆ กลุ่ม Webgateway ที่ร่วมกันทำการทดลองนี้ขึ้น
(วิศวเครือข่าย มาหาวิทยาลัยเทคโนโลยีมหานคร-MSNE#2)
1.นาย ธีรพงษ์ ขจรวุฒิตระกูล
2.นาย จิตกร กั้วมาลา
3.นาย สัมฤทธิ์ เทวะภูมิ
4.นาย ธีระศักดิ์ ถึงเสียบญวน
5.นาย วิเชียร นวกฤษ
6.นาย สุรเชษฐ์ ณ นคร
7.นาย สุรเชฐ ราชูการ

Portsentry Program

สิ่งที่เหล่าบรรดา hacker นิยมทำก็คือ การทำการสแกน port ของเครื่อง server เป้าหมายเพื่อให้ทราบว่ามี port ใดเปิดอยู่บ้าง แล้วจึงค่อยทำการเจาะไปยัง service ที่เปิด port นั้นๆ ดังนั้นบรรดา Admin จึงจำเป็นจะต้องมีการป้องกันการสแกน port เอาไว้ สำหรับระบบปฏิบัติการ Linux นั้นก็มีโปรแกรมการป้องกันเอาไว้ให้ด้วยเช่นกัน นั้นคือ โปรแกรม portsentry ซึ่งจะช่วยตรวจจับผู้ที่ทำการ scan port แล้วนำค่า IP Address ของผู้บุกรุกที่กำลัง scan ไปเปรียบเทียบกับค่าที่ตั้งเอาไว้ว่าถูก block หรือไม่อนุญาตให้เข้ามาสู่ server ในคราวต่อไป โดยโปรแกรม portsentry เป็นโปรแกรมตรวจจับการ scan port แบบ real time และที่สำคัญ portsentry เป็นโปรแกรม Open Source ที่สามารถ ที่จะ download ได้ที่ http://sourceforge.net/projects/sentrytools โดยมีทั้งที่เป็นโปรแกรมที่จะต้องนำมา compile เอง และสำหรับ Linux ตระกูล RedHat หรือ Fedora ก็จะมีโปรแกรมพวก .rpm ด้วยเช่นกัน

การติดตั้งและการใช้งาน
1. ในการทดลองนี้ใช้ Fedora core 8 โดย download file portsentry-1.2-1.te.i386.rpm ได้ที่
http://rpm.pbone.net มาทำการติดตั้ง

[root@localhost ~]# rpm -ivh portsentry-1.2-1.te.i386.rpm
warning: portsentry-1.2-1.te.i386.rpm: Header V3 DSA signature: NOKEY, key ID df3d5207
Preparing... ########################################### [100%]
1:portsentry ########################################### [100%]
[root@localhost ~]#

โดยเมื่อติดตั้งเสร็จแล้ว ก็จะมีไฟล์ต่างๆเก็บไว้ที่ /etc/portsentry ซึ่งมีไฟล์หลักๆที่จะต้องทำการ configure อยู่ 2 ไฟล์ คือ

/etc/portsentry/portsentry.conf เป็นไฟล์ configuration หลักที่เก็บกฎในการตรวจสอบทั้งหมดไว้

/etc/portsentry/portsentry.ignore เป็นส่วนที่สำคัญมาก เพราะเป็นที่เก็บค่า IP
Address ของ Server เพื่อไม่ให้เกิดความผิดพลาดเนื่องจากการเรียกใช้งาน port ที่อยู่ใน List จะทำให้ Server โดน Back List ไม่สามารถใช้งานตามปกติได้

2. ทำการ configure ไฟล์ /etc/portsentry/portsentry.conf

#######################
# Port Configurations #
#######################
# กำหนดหมายเลข port ที่ป้องกันการ scan
TCP_PORTS="1,11,15,79,111,119,143,540,635,1080,1524,2000,5742,6667,12345,12346,20034,27665,31337,32771,32772,32773,32774,40421,49724,54320"
UDP_PORTS="1,7,9,69,161,162,513,635,640,641,700,37444,34555,31335,32770,32771,32772,32773,32774,31337,54321"
#
###########################################
# Advanced Stealth Scan Detection Options #
###########################################
# กำหนดหมายเลข port ว่างที่มักถูกผู้บุกรุก scan และใช้โจมตี
ADVANCED_PORTS_TCP="1024"
ADVANCED_PORTS_UDP="1024"
#
# กำหนด port ต้องห้ามไม่ให้เข้าในระบบเพราะเป็น port ที่ทำงานขณะทีเครื่อง Boot คือ บริการ ident(113), # NetBIOS(137-138), RIP(520), bootp broadcasts(67)
# Default TCP ident and NetBIOS service
ADVANCED_EXCLUDE_TCP="21,22,25,53,80,110,113,135,137,138,139,443"
# Default UDP route (RIP), NetBIOS, bootp broadcasts.
ADVANCED_EXCLUDE_UDP="520,517,518,513,138,137,123,68,67,53"

######################
# Configuration Files#
######################
# กำหนดตำแหน่งที่อยูของไฟล์ต่างๆ
# Hosts to ignore
IGNORE_FILE="/etc/portsentry/portsentry.ignore"
HISTORY_FILE="/etc/portsentry/portsentry.history"
BLOCKED_FILE="/etc/portsentry/portsentry.blocked"

##############################
# Misc. Configuration Options#
##############################
RESOLVE_HOST = "1"

##################
# Ignore Options #
##################
# กำหนดค่าที่จะป้องกัน
# 0 = Do not block UDP/TCP scans. ไม่ block การ scan TCP/UDP
# 1 = Block UDP/TCP scans. block ทั้ง TCP/UDP
# 2 = Run external command only (KILL_RUN_CMD)

BLOCK_UDP="1"
BLOCK_TCP="1"

###################
# Dropping Routes:#
###################
# เป็นการใส่ rule ที่ iptables ไม่ให้ผู้ที่บุกรุกเข้ามาที่ server ได้อีกครั้งหลังจากตรวจพบแล้ว
KILL_ROUTE="/sbin/iptables -I INPUT -s $TARGET$ -j DROP"

###############
# TCP Wrappers#
###############
# กำหนดให้มีการป้องกันด้วยการเพิ่ม IP Address ที่ตรวจพบใส่ในไฟล์ host.deny
KILL_HOSTS_DENY="ALL: $TARGET$"

#####################
# Scan trigger value#
#####################
# กำหนดจำนวน port ที่ยอมให้ connect เข้ามาในระบบ ได้มีตั้งแต่ 1-2 ถ้ากำหนดเป็น 0 จะเป็นการสั่งให้มี
# การบันทึกค่าใน Log file ทันนทีเมื่อพบว่าถูก scan port เพื่อให้ผู้ดูแลระบบทราบค่า default = 2 เป็นการ
# ลดจำนวนครั้งที่เตือน โดยทั่วไปใช้ค่า "0"
SCAN_TRIGGER="0"

# EOF

3. ตรวจสอบไฟล์ /etc/portsentry/portsentry.ignore ว่ามี IP Address ที่เราไม่สนใจที่จะตรวจสอบหรือไม่ ในที่นี้เราติดตั้งเป็น .rpm โปรแกรมจะเพิ่ม IP Address ในระบบให้เอง

[root@localhost portsentry]# more portsentry.ignore
# Put hosts in here you never want blocked. This includes the IP addresses
# of all local interfaces on the protected host (i.e virtual host, mult-home)
# Keep 127.0.0.1 and 0.0.0.0 to keep people from playing games.
#
# PortSentry can support full netmasks for networks as well. Format is:
#
# /
#
# Example:
#
# 192.168.2.0/24
# 192.168.0.0/16
# 192.168.2.1/32
# Etc.
#
# If you don't supply a netmask it is assumed to be 32 bits.
#
#

127.0.0.1/32
0.0.0.0
#########################################
# Do NOT edit below this line, if you #
# do, your changes will be lost when #
# portsentry is restarted via the #
# initscript. Make all changes above #
# this box. #
#########################################

# Exclude all local interfaces
# เป็น IP Address ของ Server
192.168.10.24
127.0.0.1

# Exclude the default gateway(s)

# Exclude the nameservers

# And last but not least...
0.0.0.0

สั่ง start การทำงานโดยใช้คำสั่ง
[root@localhost portsentry]# portsentry -audp
[root@localhost portsentry]# portsentry -atcp

ตรวจสอบว่ามี process portsentry ทำงานหรือไม่ ให้ใช้คำสั่ง

[root@localhost portsentry]# ps -ef grep portsentry
root 2885 1 0 06:03 ? 00:00:00 /usr/sbin/portsentry -atcp
root 2887 1 0 06:03 ? 00:00:00 /usr/sbin/portsentry -audp
root 2934 1 0 06:19 ? 00:00:00 portsentry -audp
root 2937 1 0 06:19 ? 00:00:00 portsentry -atcp
root 2939 2695 0 06:19 pts/1 00:00:00 grep portsentry
[root@localhost portsentry]#

ถ้าต้องการยกเลิกการทำงาน โดยการ kill process ของ portsentry

[root@localhost portsentry]# killall portsentry
[root@localhost portsentry]# ps -ef grep portsentry
root 3013 2695 0 06:25 pts/1 00:00:00 grep portsentry
[root@localhost portsentry]#

สั่งมีการ start โปรแกรมทุกครั้งเมื่อเปิดเครื่อง
[root@localhost portsentry]# chkconfig --level 345 portsentry on
[root@localhost portsentry]# chkconfig --list portsentry
portsentry 0:off 1:off 2:off 3:on 4:on 5:on 6:off
[root@localhost portsentry]#

ผลการ scan

รูปที่1.Network Diagram

ทำการทดลองดังรูปที่ 1 โดยมี IP Address Web server เป็น 192.168.10.24 เหมือนเดิม แต่เปลี่ยน IP Address ของ PC เป็น 192.168.10.26 และทำการ scan port โดยใช้ Zenmap และทำการตรวจจับ packet โดยใช้โปรแกรม Wireshark ที่เครื่อง PC

รูปที่ 2 แสดงผลการ FIN scan หลังติดตั้ง โปรแกรม portsentry ที่ Web server


รูปที่ 3 แสดงผลการ NULL scan หลังติดตั้ง โปรแกรม portsentry ที่ Web server

รูปที่ 4 Flow Graph ของ Wireshark จากการตรวจจับการ FIN scan และ NULL scan

หลังจากที่เราได้ติดตั้ง โปรแกรม portsentry ที่เครื่อง Web server แล้วทำการเซ็ตค่า configure ต่างๆ พร้อมทั้ง start โปรแกรม จากนั้นก็ทำการ FIN scan และ NULL scan ใหม่อีกครั้ง ผลที่ได้จะไม่ปรากฏ port ที่เปิดของ Web server แต่ตัวเครื่อง Web server ยังเปิดให้บริการปกติ ส่วน IP Address 192.168.10.26 จะถูกเครื่อง Web server block เอาไว้ ซึ่งสามารถดูได้จาก

[root@localhost portsentry]# more portsentry.blocked.atcp
1245988981 - 06/26/2009 11:03:01 Host: 192.168.10.26/192.168.10.26 Port: 261 TCP Blocked
[root@localhost portsentry]#

จากนั้นระบบก็จะทำการนำ IP Address ไปใส่ไว้เป็น rule ของ iptables
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 192.168.10.26 anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@localhost ~]#
---------------------------
ขอขอบคุณเพื่อน ๆ กลุ่ม Webgateway ที่ร่วมกันทำการทดลองนี้ขึ้น
(วิศวเครือข่าย มาหาวิทยาลัยเทคโนโลยีมหานคร-MSNE#2)
1.นาย ธีรพงษ์ ขจรวุฒิตระกูล
2.นาย จิตกร กั้วมาลา
3.นาย สัมฤทธิ์ เทวะภูมิ
4.นาย ธีระศักดิ์ ถึงเสียบญวน
5.นาย วิเชียร นวกฤษ
6.นาย สุรเชษฐ์ ณ นคร
7.นาย สุรเชฐ ราชูการ

VoIP capacity analysis for 802.11b at G.711 voice bit rate

สรุปการคำนวนความจุของ VoIP ตาม Codec G.711 โดย นายจิตตุพล กิจเจริญ (MSNE#2 :มหาวิทยาลัยเทคโนโลยีมหานคร) เห็นเพื่อนสรุปมาอย่างดี เดี๋ยวจบไปแล้วก็จะหายไปเลย ขออนุญาตเอามาแปะไว้ก็แล้วกันน่ะครับเผื่อมีน้อง ๆ เขาต้องการคำนวนเล่น ๆ
-------------------------------------------------

OHhdr = HRTP + HUDP + HIP + HMAC
= 12 + 8 +20 + (24+4)
= 68 μs.


OHsender = DIFS + averageCW + PHY
= 50 + (31 - 1)(20)/2 + 192
= 552 μs.


OHreceiver = SIFS +ACK
= 10 + 248
= 258 μs.


Tdown = Tup = (Payload +OHhdr ) * 8 / dataRate + OHsender + OHreceiver
= {(160 + 68) * 8/11} + 552 + 258
= 975.818 μs.


Tavg = ( Tdown + Tup ) / 2
= (975.818 + 975.818) / 2
= 975.818 μs.


1 / T avg = 2n * Np
n = (1 / T avg) / 2 Np n = (1 / T avg) (10-6) / (2)(50)
= 10.23732159 sessions

ดังนั้นการใช้ G.711 กับ VoIP นั้นสามารถมี sessions ได้สูงสุดจำนวน 10.23 session

วันอังคารที่ 20 ตุลาคม พ.ศ. 2552

การติดตั้ง Asterisk 1.2

การติดตั้ง Asterisk 1.2 นี้เป็นส่วนหนึ่งของโครงงานทำส่ง ภาควิชาสารสนเทศ มหาวิยาลัยเทคโนโลยีมหานคร (MSNE#2) เมื่อส่งเสร็จเห็นว่าน่าจะเป็นประโยชน์จึงได้นำมาเผยแพร่สำหรับผู้สนใจ
---------------------------------------------------------------
2. การติดตั้ง Asterisk Server / configuration
การติดตั้งโปรแกรม Asterisk ลงบนระบบปฏิบัติการ FreeBSD ให้ทำการจัดเตรียมไฟล์ที่จำเป็นต่อการติดตั้งให้พร้อมและ Copy ไฟล์ลงในเครื่อง Server เพื่อง่ายต่อการติดตั้ง
2.1 ขั้นแรกเริ่มจากการนำแผ่นซีดีรอม ที่มีไฟล์ที่จำเป็นต่อการติดตั้งโปรแกรม Asterisk เข้าไป แล้วดำเนินการดังต่อไปนี้
2.1.1 ทำให้เครื่องมองเห็นซีดีรอม โดยใช้คำสั่ง
Asterisk# Mount /cdrom
2.1.2 เข้าไปที่ห้องที่เก็บไฟล์โปรแกรม ใช้คำสั่ง
Asterisk# cd source ;เพื่อเข้าไปในโฟลเดอร์เก็บไฟล์
Asterisk# ls ;เพื่อตรวจสอบว่ามีไฟล์ Asterisk หรือไม่
Asterisk# cp Asterisk62.tar.gz /usr/ports/distfiles/
Copy ไฟล์สำหรับติดตั้ง Asterisk62.tar.gz มาไว้ที่ห้อง /usr/ports/distfiles
รูปที่ 2.1 การ Copy ไฟล์ Asterisk เตรียมสำหรับติดตั้ง

2.2 ทำการแตกไฟล์ Asterisk62.tar.gz ด้วยคำสั่ง gzip มีวิธีการดังนี้
Asterisk# cd /usr/ports/distfiles ; เข้าไปในห้องที่เก็บไฟล์นั้นก่อน
Asterisk# gzip –cd Asterisk62.tar.gz : tar xvf -
แตกไฟล์ Asterisk62.tar.gz

รูปที่ 2.2 แตกไฟล์ Asterisk62.tar.gz

2.3 เมื่อแตกไฟล์เรียบร้อยแล้ว ให้เข้าไปที่ไดเร็กทอรี /usr/ports/net/asterisk แล้วตรวจสอบดูว่ามีไฟล์อะไรบ้าง ด้วยคำสั่ง
Asterisk# cd /usr/ports/net/asterisk ; เข้าไปในห้องที่เก็บไฟล์นั้นก่อน
Asterisk# ls –l ; ตรวจสอบว่ามีไฟล์อะไรบ้าง

รูปที่ 2.3 แสดงไฟล์อยู่ในไดเร็คทอรี /usr/ports/net/asterisk

2.4 ทำการติดตั้ง Asterisk ด้วยคำสั่ง make install ซึ่งเป็นการติดตั้งจาก Port Tree

รูปที่ 2.4 การติดตั้ง Asterisk

การติดตั้ง Asterisk จาก Port Tree [1]
เป็นวิธีการติดตั้งโปรแกรมลักษณะหนึ่งบนระบบปฏิบัติการ FreeBSD ซึ่งเครื่องเซิร์ฟเวอร์จะมีการตรวจสอบว่าในไดเร็กเทอรี /usr/ports/distfiles มีไฟล์โปรแกรมที่ต้องการติดตั้งอยู่หรือไม่ หากมีก็จะสามารถติดตั้งได้ โดยการเข้าไปยังโครงสร้างไดเร็กทอรี ในที่นี้ระบบปฏิบัติการ FreeBSD เรียกว่า Port Tree (ซึ่งจะเป็น ซับไดเร็กทอรีภายใต้ /usr/ports) แล้วใช้คำสั่ง make install เพื่อติดตั้งได้ทันที หากแต่ระบบมีการตรวจสอบไฟล์ว่าในไดเร็กทอรี /usr/ports/distfiles ถ้าไม่มีโปรแกรมที่ต้องการติดตั้ง ระบบจะทำการเชื่อมต่ออินเตอร์เน็ตแล้วไปดาวน์โหลดโปรแกรมนั้นๆ จากแหล่งข้อมูลที่มีให้ดาวน์โหลดก่อน แล้วจึงเริ่มติดตั้งโปรแกรม

2.5 ปล่อยให้โปรแกรมทำการติดตั้งไปเรื่อยๆ จนถึงหน้า Options ให้เลือกสำหรับ gettext ให้กดปุ่ม TAB มาที่ OK แล้วกดปุ่ม Enter เพื่อทำงานต่อไป

รูปที่ 2.5 แสดง Option สำหรับ gettext

2.6 โปรแกรมทำการตรวจสอบไฟล์ที่ต้องใช้ แล้วทำการติดตั้งโปรแกรม


รูปที่ 2.6 ตรวจเช็คไฟล์ที่ใช้ในการติดตั้งโปรแกรม Asterisk

2.7 โปรแกรมให้เราลง Options เพิ่มสำหรับ Curl ให้กดปุ่ม TAB มาที่ OK แล้วกดปุ่ม Enter เพื่อทำงานต่อไป

รูปที่ 2.7 เลือก Option เพิ่มเติมสำหรับ Curl

2.8 ปล่อยให้เครื่องทำการติดตั้งโปรแกรมไปเรื่อยๆ จนจบ ซึ่งใช้เวลานานเหมือนกันถ้าไม่ได้ดาวน์โหลดไฟล์ที่จำเป็นต่อการติดตั้งมาไว้ที่ /usr/ports/distfiles ยิ่งทำให้รอนาน และเสี่ยงต่อการติดตั้งไม่สำเร็จ


รูปที่ 2.8 ติดตั้งโปรแกรม Asterisk สำเร็จ

2.9 ทดสอบการติดตั้งโปรแกรม Asterisk ว่าสามารถใช้งานได้หรือไม่ ก่อนทำการเซตค่าอื่นๆ ด้วยคำสั่ง
Asterisk# asterisk –r
จะแสดงการทำงานของโปรแกรม Asterisk ถ้าติดตั้งอย่างสมบูรณ์ต้องไม่มี Error ดังรูปที่ 2.9 ถ้าต้องการออกจากการรันโปรแกรม Asterisk ให้พิมพ์คำสั่ง Exit แล้วกดปุ่ม Enter
Asterisk*CLI> exit

รูปที่ 2.9 ทดสอบการทำงานโปรแกรม Asterisk

2.10 เมื่อโปรแกรม Asterisk ใช้งานได้ตามปกติ ให้เข้าไปแก้ไขไฟล์ rc.conf เพื่อให้โปรแกรม Asterisk ทำงานทุกครั้งเมื่อเปิดเครื่อง ด้วยคำสั่งดังนี้
Asterisk# pico /etc/rc.conf
เปิดไฟล์เพื่อแก้ไขด้วยโปรแกรม pico และให้เพิ่มคำสั่ง asterisk_enable=”YES” เข้าไปแล้วทำการบันทึก

รูปที่ 2.10 สั่งให้ Asterisk ทำงานทุกครั้งเมื่อเปิดเครื่อง

2.11 การสร้าง SIP Account ไว้บน Asterisk Server โดยให้เข้าไปแก้ไขไฟล์ sip.conf และสร้าง SIP Account ดังต่อไปนี้
Asterisk# pico /usr/local/etc/asterisk/sip.conf
เพื่อสร้าง SIP Account ซึ่งได้สร้างหมายเลข 1000 ดังรูปที่ 2.11

รูปที่ 2.11 สร้าง SIP Account

2.12 การเขียน Dial Plan คือการเขียนแผนการโทรศัพท์ เพื่อกำหนดว่าเมื่อมีสายเข้ามาที่ IP-PBX (Asterisk) แล้วนั้นจะทำอะไรบ้าง เช่น หมุนโทรศัพท์ไปยังปลายทางหมายเลขใด หรือจะทำการบันทึกเสียง หรือฟังสัญญาณรอสาย ทั้งหมดนี้จะถูกกำหนดโดยการเขียน Dial Plan ถ้าไม่มีการเขียน Dial Plan ในระบบโทรศัพท์ Asterisk เพื่อกำหนดการทำงาน ระบบโทรศัพท์นั้นก็ไม่สามารถทำงานได้ การเข้าไปเขียน Dial Plan เพื่อกำหนดการทำงานของระบบโทรศัพท์ Asterisk ทำได้โดยใช้คำสั่งดังนี้
Asterisk# pico /usr/local/etc/asterisk/extensions.conf
เข้าไปเพิ่มคำสั่งเข้าไปในไฟล์ extensions.conf แล้วทำการบันทึก
exten=> 1000,1,Dial(SIP/1000)
exten=> 1001,1,Dial(SIP/1001)
exten=> 1002,1,Dial(SIP/1001)

รูปที่ 2.12 การเขียน Dial Plan ของระบบ Asterisk

2.13 เมื่อสร้าง SIP Account และกำหนด Dial Plan เรียบร้อยแล้ว ให้ทำการรันคำสั่งของระบบโทรศัพท์ Asterisk ด้วยคำสั่งดังนี้
Asterisk# asterisk –rx “restart now”
สั่งให้ระบบโทรศัพท์ Asterisk รีสตาร์ทตัวเอง โดยไม่ต้องรีสตาร์ทเครื่อง
Asterisk# asterisk –rx “sip reload”
สั่งให้ระบบโทรศัพท์ Asterisk ทำการรีโหลดค่าต่างๆ ของโปรโตคอล SIP อีกครั้ง
Asterisk# asterisk –rx “extensions reload”
สั่งให้ระบบโทรศัพท์ Asterisk ทำการรีโหลดค่าต่างๆ ของ Dial Plan ใน Extension อีกครั้ง

รูปที่ 2.13 รีโหลดค่า SIP และ Extension

2.14 ทำการทดสอบระบบโทรศัพท์ผ่านไอพีร่วมกับโปรแกรม Soft Phone โดยเปิดระบบโปรแกรม Asterisk เพื่อรอการร้องขอการใช้งานจากโปรแกรม Soft Phone
ด้วยคำสั่ง Asterisk# asterisk –r

รูปที่ 2.14 รันโปรแกรม Asterisk

2.15 ผลการรันโปรแกร Asterisk ต้องรันทิ้งไว้เพื่อรอให้เครื่อง Client เข้ามาร้องขอตรวจสอบ SIP Account จากเครื่อง Asterisk server

รูปที่ 2.15 ผลการรันโปรแกรม Asterisk

อ้างอิง

[1] กิตติพงษ์ สุวรรณราช , “ออกแบบและติดตั้งระบบโทรศัพท์ IP-PBX ด้วย Asterisk”,บริษัท ออฟเซท เพรส จำกัด , กุมภาพันธ์ 2551

อะไรคือ Syslog

ความจริงแล้ว syslog เป็นโปรแกรม ๆ หนึ่งใช้จัดเก็บข้อมูลจราจร หรือ log file เหตุการต่าง ๆ ที่เกิดขึ้นในระบบ) หรือจะให้เข้าใจง่าย ๆ คือโปรแกรมในการเก็บประวัติการเข้าใช้งาน เช่นการใช้งานเว็บ ก็จะเก็บหมายเลขไอพี วันเวลาที่เข้าไปใช้งาน เพื่อให้ติดตามและสามารถระบุตัวตนของผู้ใช้งานได้ โดยจุดเด่นของโปรแกรมนี้คือเป็นระบบจัดเก็บ log file มาตรฐานกลางที่ใช้กันทั่วโลกและที่สำคัญเป็น Open source software สามารถดาวน์โหลดมาใช้ฟรีไม่ต้องเสียเงินหลายแสนบาทเพื่อซื้อLog file server มาใช้งาน แต่จะใช้โปรแกรมนี้ต้องมีความรู้หลายอย่างเลยทีเดียว สิ่งที่ควรรู้อย่างแรกเลยคือ เราจะเก็บอะไร ?? ซึ่งมีหลายหน่วยงานเกิดปัญหาสงสัยว่า สิ่งที่เราเก็บอยู่นี้เพียงพอหรือเปล่า ในงานสัมมนา " เรื่อง Solution Syslog ที่ถูกต้องตาม พรบ.ว่าด้วยการกระทำผิดเกี่ยวกับคอมพิวเตอร์ พ.ศ.2550 " โดย กระทรวงเทคโนโลยีสารสนเทศและการสื่อสาร ในวันที่ 8 กันยายน 2552 ได้แจ้งจากทาง nectec ว่าตอนนี้กำลังได้ออกแบบมาตรฐานกลางในการเก็บ Log file ว่าควรเก็บอะไรบ้าง และได้มีบริษัทที่ผ่านการตรวจสอบแล้วว่ามีคุณสมบัติตรงตามที่ nectec กำหนด (รายละเอียดดูที่เว็บไซต์ nectec) แต่ถ้าจะทำเองก็ต้องรู้โครงข่ายภายในหน่วยงานก่อน เช่นรูป ระบบอินเตอร์เน็ตของเราต้องวิ่งผ่าน Switching ผ่าน Firewall เป็นตัวกั้นกลางแล้ววิ่งผ่านเร้าเตอร์เพื่อออกอินเตอร์เน็ต ส่วนตัว Syslog นี้ก็จะนำมาติดตั้งที่ Firewall server นี้เอง (PFsence + Squid+Syslog) เราสามารถทำ Firewall และมี Web Gateway เพื่อเป็นตัวกรองการเข้าออจากเครือข่ายของเรา และมี ดักจับ Log file เพื่อส่งไปให้ Syslog จัดเก็บอีกที่หนึ่ง ที่สำคัญต้องมีเจ้าหน้าที่ที่มีความรู้ไว้คอยดูแล และมีเครื่อง Server ด้วย

ทำไมต้องเก็บ log file ??
เมื่อวันที่ 18 มิถุนายน พ.ศ.2550 ได้ประกาศใช้ พรบ. ว่าด้วยการกระทำผิดเกี่ยวกับคอมพิวเตอร์ พ.ศ. 2550 ทำให้ทุกหน่วยงานต้องทำการหาเจ้าอุปกรณ์ในการเก็บ log file นี้ขึ้นมา ถามว่า “ถ้าไม่เก็บแล้วจะเป็นอะไรไหม ? ” เนื้อหา พรบ. โดยสรุปได้กำหนดบทลงโทษดังนี้ “ ผู้ให้บริการต้องเก็บรักษาข้อมูลจราจรทางคอมพิวเตอร์ของผู้ใช้บริการเท่าที่จำเป็นเพื่อให้สามารถระบุตัวผู้ใช้บริการ นับตั้งแต่เริ่มใช้บริการและต้องเก็บรักษาไว้เป็นเวลาไม่น้อยกว่าเก้าสิบวันนับตั้งแต่การใช้บริการสิ้นสุดลง ผู้ให้บริการผู้ใดไม่ปฏิบัติตามมาตรานี้ ต้องระวางโทษปรับไม่เกินห้าแสนบาท" คัดลอกมาจาก พรบ.ว่าด้วยการกระทำผิดเกี่ยวกับคอมพิวเตอร์ (http://ssnet.doae.go.th/ssnet2/HTML/prompt/2551/080703/20070618_CC_Final.pdf) เมื่อรู้ถึงบทลงโทษที่หนักถึงเวลาแล้วที่ต้องทบทวนมาตรการต่าง ๆ ในองค์กร เพราะไม่สามารถปฏิเสธได้ว่าไม่รู้ เพราะนี้คือกฎหมาย โดยเฉพาะผู้มีหน้าที่รับผิดชอบโดยตรง และผู้บริหารหน่วยงานนั้น ๆ

ขั้นตอนการตรวจสอบ Log file ??
การตรวจสอบ Log file ก็ใช่ว่าจะทำกันง่าย ๆ ต้องมีเจ้าหน้าที่ที่แต่งตั้งโดยกระทรวง ICT เข้ามาที่หน่วยงานเราพร้อมกับ
1) หมายศาลในการขอเรียกดูข้อมูลการจราจรทางคอมพิวเตอร์ของหน่วยงานเรา
2) หลักฐานที่บ่งชี้ว่าการกระทำความผิดมาจาก ip address ของเรา
3) เจ้าหน้าที่ตำรวจในพื้นที่
4) อุปกรณ์ที่ใช้ในการ copy ข้อมูล log file ออกจาก hard disk ของเครื่อง centralized log server ซึ่งเป็นหน้าที่ของหน่วยงานเราพาเจ้าหน้าที่ที่ขอตรวจสอบไปยังเครื่อง Centralized log server เพื่อทำการ copy ข้อมูล log file ไปวิเคราะห์หาผู้กระทำคามผิดหน่วยงานไหนบ้าง

ในหน่วยงานไหนบ้างที่ต้องเก็บ log file ?? จากที่กล่าวว่ามาสรุป คือหน่วยงานไหนที่มีอินเตอร์เน็ตใช้ต้องมีระบบป้องกัน หรือยืนยันตัวตนของผู้ใช้งาน ณ ช่วงเวลาใดเวลาหนึ่ง ดังนั้น หน่วยงานราชการ ห้างร้าน บริษัท มหาลัย หรือร้านอินเตอร์เน็ตคาเฟ่ ต่าง ๆ ต้องมีการเก็บข้อมูลการยืนยันตัวตนได้ อาจยังไม่ต้องถึงกับเก็บ Log file ก็ได้ให้ใช้วิธีง่าย ๆ ดังนี้
1) คอมพิวเตอร์ที่ใช้งานต้องตั้ง username , password เพื่อใช้ Log in และ Log out ออกทุกครั้งเมื่อไม่ได้ใช้งาน โดยไม่สามารถปฏิเสธความรับผิดชอบได้ในกรณีเราให้ username , password กับคนอื่นมาใช้เครื่อง
2) ถ้าในกรณีเครื่องคอมพิวเตอร์ต้องใช้ร่วมกันนั้น สามารถสร้าง username, password แยกกันได้และสามารถใช้ข้อมูลร่วมกันได้
ถึงเวลาแล้วหรือยังที่ท่านต้องหาวิธีป้องกันตัวเอง และองค์กร เพื่อไม่ให้มีความผิดตาม พรบ. นี้ อย่าคิดว่าไม่ใช่เรื่องสำคัญเพราะนี้คือกฏหมาย
จะบอกว่าไม่รู้ไม่ผิด ไม่ได้ครับ...