วันจันทร์ที่ 24 กุมภาพันธ์ พ.ศ. 2557

เริ่มติดตั้งซอฟท์แวร์ บน ubuntu

เริ่มติดตั้งซอฟท์แวร์
ในการติดตั้งไม่ควรติดตั้งพร้อมกันทั้งหมด แต่แนะนำให้ติดตั้งเป็นกลุ่ม ๆ หรือติดตั้งซอฟท์แวร์แพ็คเกจทีละอันที่กล่าวมาข้างต้น
ถ้าต้องการข้อมูลเพิ่มเติมสำหรับแต่ละแพ็คเกจให้ใช้คำสั่งในการค้นหา ด้วยการรันคำสั่งการติดตั้งเป็น root
ให้เข้าเป็น root ด้วยการใช้คำสั่ง sudo -i
sudo -i
ค้นหาข้อมูลของแพ็คเกจที่ต้องการ เช่นกรณีของแพ็คเกจ postfix ให้คำสั่ง apt-cache search
apt-cache search postfix
หรือหากต้องการใช้คำสั่ง grep ในการหาแพ็คเกจที่ติดตั้งไปแล้ว ให้ใช้คำสั่ง dpkg --list
dpkg --list | grep postfix
การติดตั้งแพ็คเกจบางอันอาจมีการสอบถามข้อมูลการติดตั้ง เช่น PostFix จะทำการถามประเภทของเซอร์เวอร์ที่จะสร้าง
ซึ่งเป็นการใส่ข้อมูลเบื้องต้นซึ่งเราจะเข้าไปแก้ไขค่าของ config ต่อไปได้อีกในภายหลัง
โปรแกรม clamav อาจถามว่าจะสร้างไดเร็กทอรี่หรือไม่
โปรแกรม Courier จะถามว่าจะติดตั้งเว็บ admin หรือไม่หรือการติดตั้ง TLS เป็นต้น
หลาย ๆ แพ็คเกจจะต้องติดตั้งแพ็คเกจอื่น ๆ เพ่ิมเติมเพื่อโปรแกรมทำงานได้อย่างสมบูรณ์
ติดตั้งแพ็คเกจหลาย ๆ แพ็คเกจพร้อม ๆ กันด้วยคำสั่ง apt-get install และต่อท้ายด้วยแพ็คเกจ หลาย ๆ แพ็คเกจ
apt-get install package-name, another-package-name, etc
ตัวอย่างการติดตั้งแพ็คเกจของ postfix ให้ใช้คำสั่ง apt-get install ดังต่อไปนี้
apt-get install  postfix,  postfix-tls,  postfix-mysql
ให้ทำการติดตั้งซอฟท์แวร์แพ็คเกจที่กล่าวข้างต้นให้ครบก่อนที่จะปฏิบัติในขั้นตอนต่อไป
[แก้ไข]
การปรับแต่งค่า
ในขั้นตอนนี้สมมติว่าได้ทำการติดตั้งซอฟท์แวร์ที่จำเป็นจนครบเรียบร้อยแล้ว
ขั้นตอนต่อไปเป็นการปรับแต่งค่าสำหรับซอฟท์แวร์ต่าง ๆ ที่เกี่ยวข้อง
[แก้ไข]
ระบบปฏิบัติการ OS (Ubuntu)
การปรับแต่งค่าที่สำคัญสำหรับเมล์เซอร์เวอร์คือการติตตั้งไฟร์วอลล์ (ในที่นี้ Shorewall) สำหรับการใช้งาน ค่าการปรับแต่งจะอยู่ที่ไฟล์ /etc/shorewall ซึ่งเราจะทำการปรับแต่งค่าต่าง ๆ เช่น interfaces, hosts zones, policy และ rules
การปรับแต่งค่า basic zones file โดยทั่วไป
#zone display comment loc Local Local network
net Net Tinternet
การปรับแต่งค่า interface file ตามปกติ
net eth0 detect
การปรับแต่งค่าของไฟล์ hosts
loc eth0:192.168.0.0/24
การปรับแต่างค่าของไฟล์ policy
fw loc ACCEPT
fw net ACCEPT
loc all DROP info
net all DROP info
all all REJECT info
การปรับแต่งค่าโดยทั่วไปของไฟล์ rules สำหรับเมล์เซอร์ฟเวอร์
AllowPing loc fw
AllowSSH loc fw
#AllowSMTP loc fw
#ACCEPT loc fw tcp 465,587 -
#AllowIMAP loc fw #AllowPing  net fw
#AllowSSH loc fw
#AllowSMTP net fw
#ACCEPT net fw tcp 465,587 -
#AllowIMAP net fw
เพื่อความปลอดภัยการเข้า SMTP จากทุก ๆ ที่จะถูกตัดทิ้งไปด้วยการใส่ comment (#) ไว้ข้างหน้าคำสั่ง
นอกจากนั้นยังยกเลิก IMAP และ TLS SMTP ไว้ชั่วคราวก่อน และอาจจำเป็นต้องเปิด SSH ภายใน
จากนั้นให้แก้ไขไฟล์ /etc/default/shorewall
startup=1
และเปิดเซอร์วิสให้ไฟร์วอลล์รันขึ้นมา
 /etc/init.d/shorewall restart
[แก้ไข]
โปรแกรมรับ-ส่งเมล์ MTA (Postfix)
โปรแกรม Postfix ใช้พื้นที่ในไดเร็กทอรี่ /etc/postfix
ค่าโดยปริยายของโพสท์ฟิกส์จะมีความปลอดภัยค่อนข้างสูง โดยอาศัย chroot jail
อย่างไรก็ตาม ในการติดตั้งโพสท์ฟิกส์นั้น chroot อาจทำให้เกิดปัญหาขณะติดตั้ง
หากโปรแกรมไม่ทำงานให้ตรวจสอบดูใน master.cf จะมีคำสั่งที่เกี่ยวข้องกับโมดูลและข้อจำกัดของ jail
ในไฟล์ main.cf เป็นการกำหนดว่าโพสท์ฟิกส์จะทำงานอย่างไร ซึ่งแต่ละรุ่นของโพสท์ฟิกส์มีการติดตั้งต่างกันไป
โดยทั่วไปแล้วค่าในการติดตั้งจะคล้าย ๆ กันมาก
[แก้ไข]
การแก้ไขไฟล์ main.cf
ขั้นต้นให้ตั้งค่า "ชื่อเครื่อง" ซึ่งต้องสอดคล้องกับชื่อที่ตั้งใน DNS MX record ให้แก้ไขไฟล์ main.cf
 myhostname = mail.crma.ac.th
่จากนั้นให้ตัดสินใจว่าจะใส่ข้อความในการต้อนรับอย่างไร เพื่อให้มีข้อมูลที่เป็นประโยชน์ต่อผู้ใช้เมล์ (ไม่ใช่แฮ็คเกอร์)
 smtpd_banner = $myhostname ESMTP $mail_name
จากนั้นต้องให้เลือกว่าจะส่งเมล์ออกทั้งหมดไปยังเซอร์ฟเวอร์ SMTP ตัวอื่น หรือจะส่งเอง ซึ่งบางครั้งหากเรามีเซอร์เวอร์ ของไอเอสพีอยู่แล้วก็สามารถส่งต่อไปได้เลย หากเลือกส่งเองก็จะไม่ขึ้นอยู่กับเมล์เซอร์เวอร์อื่น อย่างไรก็ตาม อาจมีความเสี่ยงต่อการเปิดเผยสู่สาธารณะ และอาจถูกบล็อกจาก spam blocker โดยไม่ได้ตั้งใจ หลาย ๆ เมล์เซอร์ฟเวอร์ จะปฏิเสธการใช้ dynamic DNS ให้เลือกการเซ็ทค่าที่เหมาะสม
 # leave blank to do it yourself
 relayhost =
 # or put it an accessible smtp server
 relayhost = smtp.yourisp.com
ต่อไปให้เลือกค่ารายละเอียดของเน็ตเวอร์ค โดยทั่วไปแล้วจะเปิดให้เข้าถึงได้จากทุกเครื่องแต่จะไว้ใจเฉพาะเครื่องนี้เท่านั้น
 inet_interfaces = all
 mynetworks_style = host
จากนั้นสามารถทำการ masquerade แอดเดรสขาออก (outgoing addresses) บางอัน
เช่น ชื่อเครื่องของเราคือ "mail.crma.ac.th" เราคงไม่อยากให้เมล์ที่ออกไปเป็น user@mail.crma.ac.th
ตรงกันข้าม เราต้องการให้ออกไปเป็น user@crma.ac.th
เรายังสามารถเลือกกำหนดว่าจะ masquerade โดเมนใด หรือ ผู้ใช้ที่ไม่ต้องการให้ทำ masquerade
หากใช้ dynamic DNS ก็คือชื่อเครื่องก็คือชื่อ subdomain
 masquerade_domains = sub.domain.com !sub.dyndomain.com
 masquerade_exceptions = root
เนื่องจากเราจะใช้เวอร์ช่วลโดเมน เราจะปล่อยให้ฟีลด์นี้ว่างไว้
 local_recipient_maps =
 mydestination =
[แก้ไข]
การตั้งค่าตัวเลขต่าง ๆ ใน main.cf
# ช่วงเวลาในการเตือนผู้่ส่งหากเมล์ไม่สามารถส่งได้
delay_warning_time = 4h
# เป็น error แบบถาวร หรือแบบชั่วคราว
unknown_local_recipient_reject_code = 450
# เวลาในการเก็บข้อความเมล์ในเมล์คิว ก่อนที่จะตอบกลับไปว่าไม่สำเร็จ
# บางที่อาจใช้ 3 วัน, ผู้เขียนใช้ 16 เนื่องจากทำการสำรองข้อมูลให้ผู้ใช้ด้วย
# ใครที่จะขึ้นไว้ว่า on holiday เมื่อปิดเครื่องเมล์เซอร์ฟเวอร์
maximal_queue_lifetime = 7d
# ค่าต่ำสุดและสูงสุดเป็นวินาทีระหว่างการรอที่จะส่งใหม่ถ้าการส่งไม่สำเร็จ
minimal_backoff_time = 1000s
maximal_backoff_time = 8000s
# เวลาในการรอเมื่อเซอร์ฟเวอร์เชื่อมต่อก่อนที่จะรับข้อมูลทั้งหมด
smtp_helo_timeout = 60s
# จำนวนแอดเดรสที่จะใช้ได้ในหนึ่งข้อความ
# การหนดค่านี้มีผลต่อ mass spammers แต่ก็อาจทำให้จำกัดการใช้เมล์ภายในได้
smtpd_recipient_limit = 16
# จำนวนครั้งของ error ก่อนที่จะหยุดส่งเมล์
smtpd_soft_error_limit = 3
# จำนวนครั้งของ error ก่อนที่จะปิดกั้นการรับเมล์นั้น
smtpd_hard_error_limit = 12
[แก้ไข]
การกำหนดสิทธิและข้อห้ามต่าง ๆ
จากนั้นเราสามารถกำหนดข้อห้ามหรือสิทธิต่าง ๆ ได้
ควรใช้ความระมัดระวังในการแก้ไข ให้ค่าการเซ็ทอยู่ในบรรทัดเดียวเท่านั้น
# Requirements for the HELO statement
smtpd_helo_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_hostname, 
                                  reject_invalid_hostname, permit
# Requirements for the sender details
smtpd_sender_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_sender,
                                     reject_unknown_sender_domain, reject_unauth_pipelining, permit
# Requirements for the connecting server
smtpd_client_restrictions = reject_rbl_client sbl.spamhaus.org, reject_rbl_client relays.ordb.org,
                                   reject_rbl_client blackholes.easynet.nl, reject_rbl_client dnsbl.njabl.org
# Requirement for the recipient address
smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, reject_non_fqdn_recipient,
                                       reject_unknown_recipient_domain, reject_unauth_destination, permit
ในกรณีการติดตั้งนี้ ผู้เขียนใช้เซอร์ฟเวอร์ spam detection ซึ่งเรียกว่า RBL: Real-time blackhome list เซอร์ฟเวอร์เหล่านี้จะตรวจว่าเซอร์ฟเวอร์ที่เชื่อมต่อนี้เป็นเครื่องที่เปิด relay ที่ถูกใช้โดย spammer หรือไม่ โปรแกรม SpamAssassin ใช้การตรวจสอบแบบ RBL ในการให้คะแนน ้การกำหนดข้อห้ามต่าง ๆ เพิ่มเติม
# require proper helo at connections
smtpd_helo_required = yes
# waste spammers time before rejecting them
smtpd_delay_reject = yes
disable_vrfy_command = yes
จากนั้นเราต้องตั้งค่าสำหรับ maps และ lookups สำหรับเวอร์ช่วลโดเมน
# not sure of the difference of the next two
# but they are needed for local aliasing
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
# this specifies where the virtual mailbox folders will be located
virtual_mailbox_base = /var/spool/mail/virtual
# this is for the mailbox location for each user
virtual_mailbox_maps = mysql:/etc/postfix/mysql_mailbox.cf
# and their user id
virtual_uid_maps = mysql:/etc/postfix/mysql_uid.cf
# and group id
virtual_gid_maps = mysql:/etc/postfix/mysql_gid.cf
# and this is for aliases
virtual_alias_maps = mysql:/etc/postfix/mysql_alias.cf
# and this is for domain lookups
virtual_mailbox_domains = mysql:/etc/postfix/mysql_domains.cf
# this is how to connect to the domains (all virtual, but the option is there)
# not used yet
# transport_maps = mysql:/etc/postfix/mysql_transport.cf
จากนั้นเราต้องเตรียมไฟล์ alias ซึ่งสามารถทำได้ด้วยการสำเนามาจาก /etc/aliases
cp /etc/aliases /etc/postfix/aliases
จากนั้นให้ตรวจสอบค่าต่าง ๆ ให้ถูกต้องในไฟล์ main.cf และไฟล์ /etc/postfix/alienn แล้วรันคำสั่ง
postalias /etc/postfix/aliases
[แก้ไข]
Virutal User
ขั้นต่อไปต้องสร้างโฟลเดอร์ที่อยู่สำหรับ Virtual Mail ซึ่งบางครั้ง apt-get จะติดตั้งให้เรียบร้อยเลย
หากยังไม่มีผู้ใช้ชื่อ virtual ให้ทำการสร้าง user ใหม่ให้สำหรับ virtual ด้วยคำสั่งต่อไปนี้
mkdir /var/spool/mail/virtual
groupadd virtual -g 5000
useradd virtual -u 5000 -g 5000
chown -R virtual:virtual   /var/spool/mail/virtual
หากมีอยู่แล้วให้ทำการแก้ไขด้วยคำสั่งต่อไปนี้
groupmod -g 5000 virtual
usermod -g virtual -u 5000 virtual
chown -R virtual:virtual /var/spool/mail/virtual
[แก้ไข]
mysql_mailbox.cf
จากนั้นต้องสร้างไฟล์ต่าง ๆ สำหรับการค้นหาในฐานข้อมูล ซึ่งในขั้นนี้จะเซ็ทบางอย่างที่จำเป็นก่อน ส่วนที่เหลือจะเซ็ททีหลังเมื่อจำเป็น ให้แก้ไขไฟล์ /etc/postfix/mysql_mailbox.cf
vi /etc/postfix/mysql_mailbox.cf
ด้วยการเซ็ทค่า ต่าง ๆ ไว้เรียบร้อยแล้ว
user=mail
password=apassword
dbname=maildb
table=users
select_field=maildir
where_field=id
hosts=127.0.0.1
additional_conditions = and enabled = 1
[แก้ไข]
mysql_uid.cf
จากนั้นแก้ไขไฟล์ /etc/postfix/mysql_uid.cf ให้มีข้อความดังต่อไปนี้
user=mail
password=apassword
dbname=maildb
table=users
select_field=uid
where_field=id
hosts=127.0.0.1
[แก้ไข]
mysql_gid.cf
แก้ไขไฟล์ /etc/postfix/mysql_gid.cf ให้มีข้อความดังต่อไปนี้
user=mail
password=apassword
dbname=maildb
table=users
select_field=gid
where_field=id hosts=127.0.0.1
[แก้ไข]
mysql_alias.cf
แก้ไขไฟล์ /etc/postfix/mysql_alias.cf ให้มีเนื้่อหาดังต่อไปนี้
user=mail
password=apassword
dbname=maildb
table=aliases
select_field=destination
where_field=mail
hosts=127.0.0.1
additional_conditions = and enabled = 1
[แก้ไข]
mysql_domains.cf
แก้ไขไฟล์ /etc/postfix/mysql_domains.cf ให้มีรายละเอียดังต่อไปนี้
user=mail
password=apassword
dbname=maildb
table=domains
select_field=domain
where_field=domain
hosts=127.0.0.1
additional_conditions = and enabled = 1
จะเห็นได้ว่าสามบรรทัดแรกจะเหมือนกันมาก มีบางฟิลด์เท่านั้นที่เปลี่ยน
หากกำหนด IP ในไฟล์ hosts (แทนที่จะใช้ localhost) การเชื่อมต่อจะทำผ่าน TCP และไม่ใช่ mysql SOCKET
[แก้ไข]
Database (MySQL)
ในการใช้งานเมล์ผ่านฐานข้อมูล เราจะต้องติดตั้ง MySQL และสร้าง user สำหรับการค้นหา นอกจากนั้นยังต้องสร้างฐานข้อมูล (database)
ถ้ายังไม่ได้ทำ ให้เซ็ทรหัสผ่านของ root ของ mysql ด้วยคำสั่ง
 mysqladmin -u root password new_password
จากนั้น login เป็น root ด้วยคำสั่ง
 mysql -u root -p
ให้ใส่รหัสผ่านของ root (ของ MySQL ที่เพิ่งเปลี่ยน) เมื่อถาม Enter password:
[แก้ไข]
สร้างฐานข้อมูล maildb และ mail user
หมายเหตุ -- คำสั่งของ mysql จะจบด้วยเซมิคอล่อน ;
สร้างฐานข้อมูล maildb ด้วยคำสั่ง
 mysql> create database maildb;
สร้าง user ใหม่ชื่อว่า mail
 mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON maildb.* TO 'mail'@'localhost'
           IDENTIFIED by 'apassword';
 mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON maildb.* TO 'mail'@'%'
           IDENTIFIED by 'apassword';
 mysql> exit;
[แก้ไข]
สร้างตาราง aliases, domains, และ users
ในฐานข้อมูล maildb นี้เราต้องสร้างตารางเบื้่องต้น (tables) ขึ้นมา 3 ตารางคือ
   * aliases
   * domains
   * users
เราจะสร้างตารางอื่นๆ ด้วยในการขยายขีดความสามารถการทำงานของเมล์
ให้ login เป็น user ใหม่ที่เราสร้างขึ้นชื่อ 'mail'
 mysql -u mail -p maildb
ให้ใส่รหัสผ่านเดียวกับที่ได้ตั้งไว้ในคำสั่ง GRANT (apassword)
จากนั้นสร้างตารางด้วยคำสั่งใน mysql
 mysql> CREATE TABLE `aliases` ( `pkid` smallint(3) NOT NULL auto_increment, `mail` varchar(120)
           NOT NULL default , `destination` varchar(120) NOT NULL default , `enabled` tinyint(1)
           NOT NULL default '1', PRIMARY KEY (`pkid`), UNIQUE KEY `mail` (`mail`) ) ;
 mysql> CREATE TABLE `domains` ( `pkid` smallint(6) NOT NULL auto_increment, `domain` varchar(120)
           NOT NULL default , `transport` varchar(120) NOT NULL default 'virtual:', `enabled` tinyint(1)
           NOT NULL default '1', PRIMARY KEY (`pkid`) ) ;
 mysql> CREATE TABLE `users` ( `id` varchar(128) NOT NULL default , `name` varchar(128)
           NOT NULL default , `uid` smallint(5) unsigned NOT NULL default '5000', `gid` smallint(5) unsigned
           NOT NULL default '5000', `home` varchar(255) NOT NULL default '/var/spool/mail/virtual',
           `maildir` varchar(255) NOT NULL default 'blah/', `enabled` tinyint(3) unsigned NOT NULL
           default '1', `change_password` tinyint(3) unsigned NOT NULL default '1', `clear` varchar(128)
           NOT NULL default 'ChangeMe', `crypt` varchar(128) NOT NULL default 'sdtrusfX0Jj66',
           `quota` varchar(255) NOT NULL default , `procmailrc` varchar(128) NOT NULL default ,
           `spamassassinrc` varchar(128) NOT NULL default , PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`) ) ;
ฟิลด์ท้าย ๆ ตอนนี้ยังไม่มีความจำเป็นต้องใช้แต่จะสร้างเผื่อไว้สำหรับการติดตั้งซอฟท์แวร์อื่นในภายหลัง
[แก้ไข]
แก้ไขไฟล์ my.cnf
ให้แก้ไขไฟล์ my.cnf ซึ่งใน Ubuntu จะสร้างไฟล์นี้่ขึ้นมาโดยอัตโนมัติ ให้แก้ไขไฟล์ /etc/mysql/my.cnf ด้วยคำสั่ง vi หรือ pico
 vi /etc/mysql/my.cnf
## In Hoary you needed to comment out this line
#skip-networking
## however in breezy this has changed to
bind-address = 127.0.0.1
## which is fine
## Make sure this is set
log = /var/log/mysql/mysql.log
## Then in a few weeks comment it out
## when everything is working, as it slows mysql down
การแก้ไขข้างต้นเป็นการเพ่ิมการเข้าถึงผ่านระบบเครือข่ายให้กับ MySQL
แต่เรายังควบคุมว่าใครบ้างที่จะเชื่อมต่อเข้ามา ด้วยไฟร์วอลล์ และ user ที่สร้างขึ้นมา
นอกจากนั้นยังสามารถเชื่อมต่อเข้าตรง ๆ กับ socket ได้เลยซึ่งจะมีความปลอดภัยสูงขึ้นอีก
ให้เริ่มการทำงานของ MySQL ใหม่ตามค่าติดตั้งที่ได้เปลี่ยนไป ด้วยคำสั่ง
 sudo /etc/init.d/mysql restart
[แก้ไข]
การปรับแต่งค่าของ IMAP (Courier)
แก้ไขไฟล์ /etc/courier/authdaemonrc โดยให้เปลี่ยนบรรทัดของโมดูลดังนี้
 authmodulelist="authmysql"
แก้ไขไฟล์ authmysqlrc ให้มีค่าการติดตั้งดังต่อไปนี้ --ให้ระวัง space ที่ท้ายของไฟล์ทำให้การทำงานผิดพลาดได้
MYSQL_SERVER localhost
MYSQL_USERNAME mail
MYSQL_PASSWORD apassword
MYSQL_PORT 0
MYSQL_OPT 0
MYSQL_DATABASE maildb
MYSQL_USER_TABLE users
# comment out this field,
# as I now longer use the encrypted pw options
#MYSQL_CRYPT_PWFIELD crypt
MYSQL_CLEAR_PWFIELD clear
MYSQL_UID_FIELD uid
MYSQL_GID_FIELD gid
MYSQL_LOGIN_FIELD id
MYSQL_HOME_FIELD home
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD concat(home,'/',maildir)
MYSQL_WHERE_CLAUSE enabled=1
จากนั้นให้แก้ไขไฟล์ imapd
# set how many connections to use per person. Easy to underestimate
# if you have 6 mailboxes set up.
MAXPERIP=20
# high debug to start with
DEBUG_LOGIN=2
IMAPDSTART=YES
จากนั้นให้แก้ไขให้เหมือนกันใน pop และ ssl ถ้าต้องการติดตั้งและใช้งาน
หากทำการติดตั้งได้อย่างครบถ้วนและไม่มีข้อผิดพลาดมาจนถึงขึ้น เมล์เซอร์ฟเวอร์ควรจะทำงานได้แล้ว
อาจลัดขั้นตอนไปยังส่วนข้อมูล (data) หรือการทดสอบเมล์ เพื่อดูว่าเมล์ทำงานได้ถูกต้องแล้วหรือยัง
อย่างไรก็ตามเซอร์ฟเวอร์ในขั้นนี้ยังมีช่องโหว่ที่ไม่ปลอดภัย และยังไม่มีการป้องกันสแปม ให้ทำการติดตั้งขั้นตอนต่อไป
[แก้ไข]
การตรวจสอบเนื้อความ - Content Checks (amavisd-new)
ใน Ubuntu dapper การติดตั้ง amavisd จะแยกไฟล์คอนฟิกไว้ที่ /etc/amavis/conf.d หากมีเวอร์ชั่นเก่าให้เปลี่ยนชื่อ /etc/amavis/amavis.conf ให้เป็น amavis.conf.disabled แก้ไขไฟล์ชื่อ 50user ใน /etc/amavis/conf.d เพื่อเพิ่มค่าการเปลี่ยนแปลง (จาก 50-user Tip โดย Donald Goodman)
$mydomain 'yourdomain.com';
$daemon_user= 'virtual';
$daemon_group= 'virtual';
@local_domains_acl = qw(.);
$inet_socket_port = 10024;
$forward_method = 'smtp:127.0.0.1:10025';
# @bypass_virus_checks_acl = qw( . );
# @bypass_spam_checks_acl = qw( . );
และเพิ่ม/เปลี่ยนค่าต่อไปนี้
$TEMPBASE = "$MYHOME/tmp";
# Whilst debugging $log_level = 2;
$warnbannedrecip = 1;
$warn_offsite = 1;
$warnvirusrecip = 1;
$spam_quarantine_to = "spam-quarantine\@$mydomain";
$virus_quarantine_to = "virus-quarantine\@$mydomain";
$sa_local_tests_only = 0;
ในส่วนของ av_scanner ให้ทำการ enable/disable แสกนเนอร์ไวรัสที่จะใช้ ในกรณีนี้เราใช้ ClamAV ดังนั้นให้เอาคอมเมนต์ระหว่างบรรทัด @av_scanners( จนถึงวงเล็บปีกกาของ av_scanners. ทำเช่นเดียวกันกับ @av_scanners_backup. ใน @av_scanner ให้เอาคอมเมนต์ออก สำหรับบรรทัดของ Clam จากนั้นให้ตรวจสอบว่าโฟลเดอร์ $TEMPBASE มีอยู่หรือไม่และมี $daemon_user เป็นเจ้าของ และให้ทำเช่นเดียวกันกับโฟลเดอร์ของไวรัส จากนั้นปฏิบัติตามขั้นตอนต่อไปนี้
cd /var/lib/amavis
mkdir tmp
chown virtual:virtual tmp
chown virtual:virtual virusmails
chown -R virtual:virtual /var/run/amavis
ในสคริปต์เริ่มการทำงานของ amavis ต้องตรวจสอบให้แน่ใจว่าเป็นเจ้าของโดย amvis และมีกลุ่มเป็น amavis เช่นกัน ให้แก้ไขไฟล์ /etc/init.d/amavis ซึ่งเป็นสคริปต์
#edit about line 31
#chown -c -h "$1:$2" "$4"
chown -c -h "virtual:virtual" "$4"
จากนั้นให้กำหนดการเชื่อมต่อกับอินเทอร์เน็ตสำหรับ plugin สำหรับการตรวจสอบ ให้แก้ไขไฟล์ master.cf ใน /etc/postfix โดยแก้ไขจากค่าดีฟอลท์ของ master.cf เพิ่มเซอร์วิสที่ต้องการ. (หมายเหตุ - บรรทัดที่ขึ้นต้นด้วย -o ต้องมีแท็บนำหน้า หรือเสปซสองครั้งเนื่องจากเป็นข้อความต่อจากบรรทัดก่อนหน้า)
#smtp inet n - n - - smtpd
smtp inet n - - - - smtpd -o cleanup_service_name=pre-cleanup
#cleanup unix n - - - 0
cleanup cleanup unix n - - - 0 cleanup -o mime_header_checks=
     -o nested_header_checks=
     -o body_checks=
     -o header_checks=
amavis unix - - - - 2 smtp -o smtp_data_done_timeout=1200
     -o smtp_send_xforward_command=yes
127.0.0.1:10025 inet n - - - - smtpd -o content_filter= -o local_recipient_maps=
     -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions=
     -o smtpd_helo_restrictions= -o smtpd_sender_restrictions=
     -o smtpd_recipient_restrictions=permit_mynetworks,reject
     -o strict_rfc821_envelopes=yes -o mynetworks=127.0.0.0/8
     -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001
     -o smtpd_hard_error_limit=1001
pre-cleanup unix n - - - 0 cleanup -o virtual_alias_maps=
     -o canonical_maps= -o sender_canonical_maps=
     -o recipient_canonical_maps= -o masquerade_domains=
จากนั้นแก้ไขไฟล์ main.cf ใน /etc/postfix เพิ่มบรรทัดต่อไปนี้
content_filter = amavis:[127.0.0.1]:10024
#receieve_override_options = no_address_mapping
[แก้ไข]
Anti Virus (ClamAV)
การปรับเปลี่ยนค่าของ ClamAV นั้นไม่ยุ่งยาก ตรวจสอบให้แน่ใจว่า ClamAV นั้นรันโดย user เดียวกันกับ amavisd-new จากนั้นให้ปรับค่าคอนฟิกของ fresclam option เพื่อให้แน่ใจว่าได้มีการอัพเดทไวรัสอยู่เสมอ แก้ไขไฟล์ /etc/clamav/clamd.conf เปลี่ยน user ให้เป็น amavisd-new
# User clamav User virtual
เปลี่ยน ownership ของรันไทม์โฟลเดอร์
chown virtual:virtual /var/run/clamav
และให้แก้ไขไฟล์ freshclam.conf
# how frequent per day. default is once an hourwhich is a bit excesive.
# once per day should do.
Checks 1
เป็นอันเสร็จการปรับค่าของ ClamAV
[แก้ไข]
โปรแกรมต่อต้านเมล์ขยะ Anti Spam (SpamAssassin)
ค่าการติดตั้งของ SpamAssassin สามารถใช้ได้งานได้ หากต้องการปรับแต่งค่าการรันให้เข้าไปแก้ไขไฟล์ /etc/spamassassin/local.cf โดยเปรียบเทียบกับค่าปริยาย (default) ที่ /usr/share/spamassassin/ ยกตัวอย่างเช่นหากต้องการเพิ่มหรือลดระดับในการตัดสินใจว่าจะรับ หรือไม่รับอีเมล์ ให้ทำการแก้ไขไฟล์ local.cf.
skip_rbl_checks 0
use_razor2 0
use_dcc 0
use_pyzor 0
use_bayes 1
bayes_path /etc/spamassassin/bayes
bayes_file_mode 0770
หลังจากที่โปรแกรมรวบรวมข้อมูลเกี่ยวกับสแปม (ประมาณ 200 หรือมากกว่า) เราสามารถให้โปรแกรมเรียนรู้ด้วยการใช้ Bayes filterใน SpamAssassin สำหรับอีเมล์เหล่านั้น
1. ตัวอย่างการใช้งานเบย์ฟิลเตอร์
sa-learn --showdots -C /etc/spamassassin --spam /var/spool/mail/virtual/quarantine/.spam/*
sa-learn --showdots -C /etc/spamassassin --ham /var/spool/mail/virtual/mine/cur/*
หากสังเกตุว่ายังมีสแปมหลุดเข้ามาในเมล์เซอร์ฟเวอร์มากเกินไป (มี false postives มากเกิน อีเมล์จริงถูกโยนทิ้ง) สามารถปรับแต่งค่าเพิ่มเติมได้ ด้วยการลดระดับการตรวจสอบลง ค่าโดยทั่วไปของ SpamAssassin น่าจะสามารถดักจับสแปมได้ประมาณ 97% ของสแปมทั้งหมด. โดยอาจมีประมาณ 1 ใน 1000 ครั้งทำงานผิดพลาด (false positives) ให้ค้นหาข้อมูลที่มีประโยชน์เพ่ิมเติมจากเว็บไซต์ของ SpamAssassin และมีหัวข้อที่น่าสนใจต่าง ๆ เช่น automatic learning การใช้ cronjobs เรียนรู้ spam และ ham ที่ระบุโดยผู้รับอีเมล์.
[แก้ไข]
การควบคุมนโยบาย Policy (Postgrey)
การติดตั้ง Postgrey จะช่วยให้การทำงานของระบบเมล์ดีขึ้น Ubuntu เองก็ขยายข้อมูลและโมดูลเกี่ยวกับการใช้งาน Postgrey ด้วยการติดตั้งใน /etc/postgrey (whitelist configuration) ผู้เขียนไม่แนะนำให้แก้ไขไฟล์นี้ เนื่องจากอาจทำให้เกิดความเสียหายต่อเมล์เซอร์ฟเวอร์ของท่านได้ อย่างไรก็ตามเราจำเป็นต้องแก้ไขไฟล์ main.cf เพื่อเพิ่มมาตรการสำหรับการรับเมล์
#adding the postgrey policy:
smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, reject_non_fqdn_recipient,
                                       reject_unknown_recipient_domain, reject_unauth_destination,
                                       check_policy_service inet:127.0.0.1:60000, permit
ค่าปริยายสำหรับเวลาก่อนที่เซอร์ฟเวอร์จะลองส่งเป็น 300 วินาที (หรือ 5 นาที) เราอาจเปลี่ยนค่านี้ได้ เช่นการต้องการให้เร็วขึ้นอาจเปลี่ยนให้เป็น 1 นาที ให้แก้ไขไฟล์ /etc/default/postgrey
POSTGREY_OPTS="--inet=127.0.0.1:60000 --delay=60"
#POSTGREY_TEXT="Your customized rejection message here"ใ
สามารถใส่ข้อความบอกเหตุผลในการไม่รับเมล์ได้ในตัวแปร POSTGREY_TEXT
[แก้ไข]
Authentication (SASL)
การตรวจสอบสิทธิการใช้งานสามารถใช้โปรแกรม Cyrus SASL ซึ่งมีระบบรักษาความปลอดภัยในการตรวจสอบผู้ใช้งานเมล์เซอร์เวอร์ การตรวจสอบจะกระทำ 2 วิธี คือ ด้วย postfix เมื่อทำการส่งเมล์ และโดย Courier เมื่อทำการับเมล์. ขั้นแรกให้ปรับแต่งค่าของ postfix เพิ่มบรรทัดต่อไปนี้ใน main.cf
# modify the existing smtpd_recipient_restrictions
smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated,
                                       reject_non_fqdn_recipient, reject_unauth_destination,
                                       check_policy_service inet:127.0.0.1:60000, permit
# modify the existing smtpd_sender_restrictions
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_non_fqdn_sender,
                                     reject_unknown_sender_domain, reject_unauth_pipelining, permit
และเพิ่มบรรทัดต่อไปนี้เข้าไป
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_path = /etc/postfix/sasl:/usr/lib/sasl2
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
จากนั้นให้สร้างไฟล์คอนฟิกของ sasl (อาจมีไดเร็กทอรี่นี้อยู่แล้ว) สร้างไดเร็กทอรี่ด้วยคำสั่ง
mkdir /etc/postfix/sasl
แก้ไขไฟล์ smtpd.conf ด้วยคำสั่ง
vi /etc/postfix/sasl/smtpd.conf
ให้มีข้อความต่อไปนี้
pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: plain login cram-md5 digest-md5
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: mail
sql_passwd: apasswd
sql_database: maildb
sql_select: select
clear from users where id='%u@%r' and enabled = 1
หากจบขั้นตอนดังกล่าวข้างต้นเป็นอันว่าการปรับแต่งค่าเมล์ และส่วนที่เกี่ยวข้องต่าง ๆ ได้เสร็จสมบูรณ์ อย่างไรก็ตามเมล์เซอร์ฟเวอร์จะสามารถใช้งานได้อย่างปลอดภัย และมีการเข้ารหัสข้อมูลควรทำขั้นตอนต่อไปด้วยการการปรับแต่งค่าของ Courier (สำหรับการอ่านเมล์) โดยจะทำงานผ่านการตรวจสอบ (authenticate) ผ่าน SASL เช่นกัน ใน Ubuntu จะมีการติดตั้งให้อยู่แล้ว เราจำเป็นต้องแก้ไขเพียงเล็กน้อยใน /etc/courier/imapd ดังนี้
IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT
                           THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 IDLE"
(หมายเหตุ - หากต้องการใช้งาน POP ให้กระทำการปรับแต่งเช่นเดียวกัน)
[แก้ไข]
Encryption (TLS)
การใช้ SASL เป็นการเข้ารหัสสำหรับการตรวจสอบสิทธิของผู้ใช้งานอีเมล์ อย่างไรก็ตามเนื้อความของอีเมล์ยังคงถูกส่งเป็นข้อความธรรมดา ซึ่งสามารถถูกแกะดูด้วยด้วยโปรแกรมบางประเภท เช่น sniffer ต่าง ๆ โปรแกรม TLS เป็นการพัฒนาเพิ่มต่อจาก SSL เพื่อที่จะเข้ารหัสของข้อความที่ส่งโดย postfix และอ่านโดย courier ระหว่างเครื่องเมล์เซอร์ฟเวอร์ โปแกรม TLS เป็นระบบเข้ารหัสระหว่างผู้ส่งกับผู้รับ ไม่ได้เป็นโปรแกรมประเภท client เพียงอย่างเดียว (รายละเอียดเพิ่มเติมดู GNuPG และ S/MIME) ขั้นแรกต้องทำการสร้าง certificates สำหรับ postfix และ courier ในกรณีของ postfix เราต้องสร้าง certificate (มีอายุ 3 ปี) ด้วยคำสั่ง
cd /etc/postfix (เครื่องหมาย '\' แสดงว่าเป็นบรรทัดเดียวกัน)
openssl req -new -outform PEM -out \
     postfix.cert -newkey rsa:2048 -nodes -keyout \
     postfix.key -keyform PEM -days 999 -x509
ในไฟล์ /etc/postfix/main.cf ให้เพิ่มบรรทัดต่อไปนี้
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/postfix/postfix.cert
smtpd_tls_key_file = /etc/postfix/postfix.key
smtpd_data_restrictions = reject_unauth_pipelining
ในไฟล์ master.cf เพิ่ม/ปรับเปลี่ยนค่าต่อไปนี้ (ค่าบางค่าอาจมีอยู่แล้ว)
tlsmgr unix - - n 300 1 tlsmgr smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o
smtpd_sasl_auth_enable=yes
587 inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes
โปรแกรมที่เครื่องลูกข่ายบางอันอาจ (เช่น Novel Evolution) มีความจำเป็นต้องใช้พอร์ต 465 นอกเหนือจากพอร์ต 25 ที่ใช้โดยเมล์อยู่แล้ว ถ้าหากไม่สามารถรัน STARTTLS ได้ เดเบียนแพ็คเกจต่าง ๆ ใน Ubuntu สร้าง certificate สำหรับ coเurier ให้โดยอัตโนมัติ ในกรณีที่ไม่สามารถหา certificate ได้ให้ใช้คำสั่ง
openssl req -x509 -newkey rsa:1024 -keyout imapd.pem -out \
     imapd.pem -nodes -days 999
จากนั้นแก้ไขไฟล์ /etc/courier/imapd-ssl และตรวจสอบดูว่าเป็น path สำหรับ certificate.
TLS_CERTFILE=/etc/courier/imapd.pem
เมื่อทำการแก้ไขเสร็จและเร่ิมใช้งาน TLS แล้วจะมีการเข้า/ถอดรหัสในการรับ-ส่งเมล์ ผู้ใช้อาจถูกถามให้รับ certificate เพื่อเป็นการแลกเปลี่ยนกุญแจในการเข้า-ถอดรหัส ปัญหาในการใช้ SALS และ TLS ในเวลาเดียวกัน อาจมาจากการที่ข้อความของอีเมล์ทั้งหมดถูกเข้ารหัสอยู่แล้วทำให้การใช้งาน SASL มีความจำเป็นน้อยลง
[แก้ไข]
การปรับแต่งค่าของ Webmail SquirrelMail
SquirrelMail เป็นโปรแกรมเว็บเมล์ที่เขียนด้วยภาษา PHP สามารถดาวน์โหลดได้ฟรีจาก sourceforge
เมื่อติดตั้งใน Ubuntu จะวางไว้ที่ไดเร็กทอรี่ /usr/share ดังนั้นเราต้องนำมาไว้ที่เว็บ root ที่ /var/www
  ln  -s   /usr/share/squirrelmail   /var/www/squirrelmail
จากนั้นให้เซ็ทค่า URL เพื่อเข้าใช้ SquirrelMail ด้วยการเรียกผ่านเว็บบราวเซอร์โดยใช้ URL
 http://mail.crma.ac.th/squirrelmail
ในกรณีนี้เราเข้าเป็นแบบ subfolder ซึ่งหากสามารถทำเป็น virtual host แล้วจะทำให้สามารถใช้งานได้สะดวกขึ้น
ใน Ubuntu ให้แก้ไขไฟล์ /etc/apache2/sites-available/webmail
<VirtualHost *>
  ServerAdmin webmaster@yourdomian.com
  ServerName webmail.yourdomain.com
  DocumentRoot /var/www/squirrelmail
  <Directory /var/www/squirrelmail>
      Options Indexes FollowSymLinks MultiViews
      AllowOverride AuthConfig
      Order allow,deny
      allow from all
  </Directory>
  ErrorLog /var/log/apache2/error-webmail.log
  LogLevel warn
  CustomLog /var/log/apache2/access-webmail.log combined
  ServerSignature On
</VirtualHost>
จากนั้นทำการ enable และเปิดใช้งานด้วยคำสั่ง
 ln -s /etc/apache2/sites-available/webmail /etc/apache2/sites-enabled/810-webmail
หรือใช้คำสั่ง
 a2ensite webmail
เริ่มการทำงานของเว็บเซอร์ฟเวอร์ด้วยคำสั่ง
 sudo /etc/init.d/apache2 reload
โฟลเดอร์ config ของ SquirrelMail เป็นเพียงแค่ symbolic link ไปยัง /etc/squirrelmail
ดังนั้นถ้ารัน SquirrelMail หลาย ๆ ตัวจ่าจะสำรองไฟล์ด้วยการก็อปปี้เพิ่มอีก
SquirrelMail มีคอนฟิกไฟล์อยู่สามไฟล์คือ
config_default.php เป็นค่า default ไม่ต้องทำการแก้ไข.
config.php จะ overrides ค่า defaults ได้ -- ไม่ต้องแก้ไขไฟล์นี้เนื่องจากสร้างขึ้นโดยอัตโนมัติโดย conf.pl
conf_local.php แก้ไขไฟล์นี้ได้เพื่อที่จะเพ่ิมเติมหรือเปลี่ยนแปลงค่าที่กำหนดไว้เป็น default.
ในการเปลี่ยนแปลงค่าของ SquirrelMail ให้รันสคริปต์
 /var/www/squirrelmail/config/conf.pl
เป็นโปแกรมที่เป็นเมนู และสามารถแก้ไขรายละเอียดต่าง ๆ ได้ง่าย ให้ใช้ความระมัดระวังในการเปลี่ยนค่า
ระวังอย่าให้มี spaces ในคำสั่งหรือท้ายคำสั่ง ซึ่งอาจทำให้การทำงานไม่ถูกต้องได้
ให้เลือก Database ตัวเลือกที่ 9 จากเมนู
จากนั้นเลือก 1 เพื่อแก้ไข DNS สำหรับ address book ให้ใส่
 mysql://username:password@127.0.0.1/database
จากนั้นเลือก 3 สำหรับ preferences และใส่ข้อมูลเหมือนเดิม
 mysql://username:password@127.0.0.1/database
มี global address เป็นตัวเลือกถ้าจะใช้ก็สามารถตั้งค่านี้ได้
จากนั้นให้เลือก 's' เพื่อบันทึก (save) ค่าที่เปลี่ยนแปลงไป แล้วกด 'r' เพื่อกลับไปยังเมนูหลัก
กด 'q' เพื่อออกจากโปรแกรม
[แก้ไข]
ตัวอย่างไฟล์ config_local.php
อ่านไฟล์ default สำหรับคำอธิบายในรายละเอียด
$org_name = "CRMA webmail";
$org_logo = 'http://flurdy.com/images/flurdy.gif';
$org_logo_width = '212';
$org_logo_height = '108';
$org_title = "webmail by flurdy";
$provider_name = 'flurdy';
$provider_uri = 'http://www.flurdy.com/';
$smtp_auth_mech = 'none';
$default_use_javascript_addr_book = true;
$hide_sm_attributions = true;
$edit_identity = false;
$edit_name = true;
$imap_server_type = 'courier';
$default_folder_prefix = 'INBOX.';
$trash_folder = 'Trash';
$sent_folder = 'Sent';
$draft_folder = 'Drafts';
$show_prefix_option = false;
$default_sub_of_inbox = false;
$show_contain_subfolders_option = false;
$delete_folder = true;
$optional_delimiter = '.';
$force_username_lowercase = true;
$allow_thread_sort = true;
$allow_server_sort = true;
$addrbook_dsn = 'mysql://username:password@localhost/database';
$prefs_dsn = 'mysql://username:password@localhost/database';
$addrbook_global_dsn = 'mysql://username:password@localhost/database';
$addrbook_global_writeable = false;
$addrbook_global_listing = false;
$theme_default = 18;
$theme_css = '/themes/css/verdana-10.css';
จากนั้นให้สร้างตาราง (tables) สำหรับการทำงานของ SquirrelMail
สร้าง user ใหม่สำหรับ SquirrelMail หรือใช้ user 'mail' เดิมที่ได้สร้างไว้แล้ว
สร้างฐานข้อมูลใหม่สำหรับ SquireMail หรืออาจใช้ฐานข้อมูลเดิมของ maildb ที่ได้สร้างไว้แล้ว
รายละเอียดการสร้างให้ดูตัวอย่างในส่วนของ MySQL
แก้ไขไฟล์ config.php ให้มีค่าสอดคล้องกับฐานข้อมูล และ user ที่ใช้
จากนั้นให้ login เข้าไปยัง mysql
 mysql -u username -p database
ป้อนรหัสผ่านที่ใช้ให้ถูกต้อง แล้วใช้คำสั่งของ mysql เพื่อสร้างตารางที่ต้องการใช้
 mysql> CREATE TABLE `address` ( `owner` varchar(128) NOT NULL default , `nickname` varchar(16)
           NOT NULL default , `firstname` varchar(128) NOT NULL default , `lastname` varchar(128)
           NOT NULL default , `email` varchar(128) NOT NULL default , `label` varchar(255)
           default NULL, PRIMARY KEY (`owner`,`nickname`), KEY `firstname` (`firstname`,`lastname`) ) ;
 mysql> CREATE TABLE `userprefs` ( `user` varchar(128) NOT NULL default , `prefkey` varchar(50)
           NOT NULL default , `prefval` varchar(255) default NULL, `modified` timestamp(14)
           NOT NULL, PRIMARY KEY (`user`,`prefkey`) ) ;
 mysql> CREATE TABLE `global_abook` ( `owner` varchar(128) NOT NULL default , `nickname`
           varchar(16) NOT NULL default , `firstname` varchar(128) NOT NULL default , `lastname`
           varchar(128) NOT NULL default , `email` varchar(128) NOT NULL default , `label`
           varchar(255) default NULL, PRIMARY KEY (`owner`,`nickname`),
           KEY `firstname` (`firstname`,`lastname`) );
หลังจากสร้างเสร็จแล้วให้ทดลอง SquirrelMail ด้วยการเปิดเว็บบราวเซอร์ไปที
 http://your-squirrelmail-location/src/configtest.php

วันอาทิตย์ที่ 9 กุมภาพันธ์ พ.ศ. 2557

ติดตั้ง Yii Framework สำหรับ ubuntu



อันดับแรกทำการติดตั้ง Apache และ PHP ให้เรียบร้อย

# apt-get install apache2 php5 libapache2-mod-php5
apache2 php5 libapache2-mod-php5



สร้างฐานข้อมูลสำหรับ Yii Framework

# mysql -u root -p <enter>
Enter Password:

mysql>create database yiidb;

mysql>GRANT ALL PRIVILEGES ON yiidb.* TO 'yiiuser' IDENTIFIED BY 'ubuntu';

mysql>flush privileges;

mysql>exit


Download  Yii Framework มาเก็บไว้ที่ /var/www

 # wget http://yii.googlecode.com/files/yii-1.1.13.e9e4a0.tar.gz

แตกไฟล์ yii

# tar -xvf yii-1.1.13.e9e4a0.tar.gz

 # mv yii-1.1.13.e9e4a0/ /var/www/yii


กำหนดสิทธิ์การเข้าถึงโฟล์เดอร์

# chmod -R 777 /var/www/yii

ติดตั้ง Yii ด้วยคำสั่ง

# php /var/www/yii/framework/yiic.php webapp /var/www/yii/
Create a Web application under '/var/www/webapp'? (yes|no) [no]:y







GRANT ALL PRIVILEGES ON yiidb.* TO 'yiiuser' IDENTIFIED BY 'ubuntu'; - See more at: http://www.unixmen.com/install-yii-php-framework-on-ubuntu-debian/#sthash.4yzOim3R.dpuf



sudo apt-get install apache2 php5 libapache2-mod-php5 - See more at: http://www.unixmen.com/install-yii-php-framework-on-ubuntu-debian/#sthash.4yzOim3R.dpuf
sudo apt-get install apache2 php5 libapache2-mod-php5 - See more at: http://www.unixmen.com/install-yii-php-framework-on-ubuntu-debian/#sthash.4yzOim3R.dpuf
sudo apt-get install apache2 php5 libapache2-mod-php5 - See more at: http://www.unixmen.com/install-yii-php-framework-on-ubuntu-debian/#sthash.4yzOim3R.dpuf
sudo apt-get install apache2 php5 libapache2-mod-php5 - See more at: http://www.unixmen.com/install-yii-php-framework-on-ubuntu-debian/#sthash.4yzOim3R.dpuf

วันพฤหัสบดีที่ 6 กุมภาพันธ์ พ.ศ. 2557

VoIP คืออะไร

VoIP คืออะไร

     VoIP ย่อมาจาก Voice over Internet Protocol คือการสื่อสารทางเสียงผ่านอินเทอร์เน็ต เป็นเทคโนโลยีใหม่สำหรับการโทรศัพท์ผ่านทางเครือข่าย Internet  ซึ่งมีข้อดีอันดับแรก ๆ ที่เห็นได้ชัดก็คือ  ช่วยลดค่าใช้จ่ายในการโทรได้ ไม่ว่าจะเป็นการโทรภายในประเทศ  หรือการโทรระหว่างประเทศก็ตาม เพราะการโทรศัพท์ผ่านทางระบบ Internet นั้นไม่จำเป็นที่จะต้องทำงานผ่านทางชุมสายโทรศัพท์  ซึ่งจะมีค่าใช้จ่ายของส่วนที่ให้บริการด้วย
     VoIP นั้นเป็นการประยุกต์การส่งข้อมูลผ่าน Internet มาใช้งาน  ซึ่งโดยปกติการใช้งาน Internet   จะเป็นการใช้สัญญาณข้อมูลเพียงอย่างเดียว  แต่สำหรับการใช้งาน VoIP นั้นจะเป็นการนำเอาสัญญาณเสียงมารวมเข้ากับสัญญาณข้อมูล เพื่อส่งผ่านไปยังระบบเครือข่ายผ่านทาง Protocol l ที่ใช้สำหรับอินเทอร์เน็ตก็คือ  Internet Protocol  หรือที่เรียกกันทั่วไปว่า IP  ซึ่งตามปกตินั้น IP  จะใช้สัญญาณข้อมูลเท่านั้น แต่ด้วยเทคโนโลยี VoIP  ที่ทำให้ส่งสัญญาณเสียงได้ ตัวอย่างผู้ให้บริการ VoIP ในประเทศไทย เช่น บริษัท แอดวานซ์ เทเลโฟน แอนด์ เทเลคอมมูนิเคชั่น จำกัด
การใช้เทคโนโลยี VoIP รูปแบบต่าง
1. คอมพิวเตอร์ส่วนบุคคล ไปยัง คอมพิวเตอร์ส่วนบุคคล ( PC to PC )
2. คอมพิวเตอร์ส่วนบุคคล ไปยัง โทรศัพท์พื้นฐาน ( PC to Phone )
3.จากเครื่องโทรศัพท์สู่เครื่องคอมพิวเตอร์ (Phone-to-PC)
4. โทรศัพท์กับโทรศัพท์ ( Telephony )
ประโยชน์ที่ได้รับ จาก VoIP
1.ลดค่าใช้จ่าย
2.เพิ่มความยืดหยุ่นในการติดต่อสื่อสาร
3.จัดการระบบเครือข่ายได้ง่ายขึ้น เนื่องจากเครือข่ายการติดต่อสื่อสารทั้งหมด สามารถยุบรวมกันให้เหลือเพียงเครือข่ายเดียวได้ อีกทั้งในกรณีที่มีการโยกย้ายของหน่วยงานหรือพนักงาน การจัดการด้านหมายเลขโทรศัพท์และอื่นๆ สามารถทำได้โดยไม่จำเป็นต้องเดินสายสัญญาณใดๆขึ้นมาใหม่
4.รองรับการขยายตัวของระบบในอนาคต หากในอนาคตองค์กรขยายตัวใหญ่ขึ้น VoIP สามารถรองรับผู้ใช้งานได้เพิ่มมากขึ้นในทันทีโดยการเพิ่ม Virtual User เข้าไปในระบบเท่านั้นเอง
5.ลดค่าใช้จ่ายในการดูแลและจัดการระบบ (Reduce Operating Expenses) เนื่องจากใช้ซอฟต์แวร์ในการจัดการ ทำให้ VoIP นั้นง่ายในการจัดการและบำรุงรักษา
6.เพิ่มประสิทธิภาพการทำงาน (Increase Productivity) พนักงานสามารถส่งเอกสารผ่านเครือข่ายควบคู่ไปกับการสนทนา หรืออาจจัดการประชุมออนไลน์(Conference Call) ทั้งภาพและเสียง และแม้กระทั่งส่งเอกสารการประชุมให้กับผู้เข้าร่วมประชุม ผ่านทางเครือข่ายได้อีกด้วย
7.ใช้ร่วมกับการสื่อสารไร้สายได้ ทำให้อุปกรณ์สื่อสารไร้สายต่างๆ เช่นโทรศัพท์มือถือหรือPDA สามารถติดต่อผ่าน VoIP เข้ามาในเครือข่ายขององค์กรได้
8.เพิ่มประสิทธิภาพในการติดต่อกับลูกค้า (Improved Level of Services) โดยใช้ความสามารถของแอพพลิเคชั่นต่างๆ ของ VoIP เช่น Click-to-talk เพื่อเพิ่มความสะดวกและรวดเร็วในการติดต่อกับลูกค้า

การสื่อสารด้วยระบบ VOIP

การสื่อสารด้วยระบบ VOIP


วิวัฒนาการการสื่อสารผ่านอินเตอร์เน็ต
ในปัจจุปันการใช้อินเทอร์เน็ตมีบทบาทกับชีวิตประจำวันมากขึ้น และใช้งานกันอย่างกว้างขวาง โดยเฉพาะอย่างยิ่งความจำเป็นที่จะต้องติดต่อสื่อสาร อินเตอร์เน็ตจึงได้รับการพัฒนาโครงสร้างพื้นฐานเพื่อรองรับการสื่อสารรูปแบบต่างๆ เช่น การใช้จดหมายอินเล็กทรอนิกส์ การติดต่อด้วยเสียง ระบบ VDO Conference การใช้โทรศัพท์บนเครือข่าย ซึ่งก็มีวิวัฒนาการตามลำดับเบื้องต้นดังนี้ E-mail หรือ จดหมายอิเล็กทรอนิคส์เป็นบริการอย่างหนึ่งที่นิยมใช้กันอย่างแพร่หลายมาก จนทำให้บางคนคิดว่า E-mail คือ อินเตอร์เน็ต และอินเตอร์เน็ตคือ E-mail วิธีใช้งานอีเมลล์ก็ง่ายและมีประโยชน์มาก การทำงานของ E-mail มีลักษณะคล้ายกับระบบไปรษณีย์ปกติ (หมายถึงระบบที่ใช้กระดาษในการเขียนจดหมาย) กล่าวคือในระบบไปรษณีย์ปกติมีหน่วยงานที่ทำหน้าที่ในการรับส่งจดหมายคือเป็นบรุษไปรษณีย์ (ในกรณีของประเทศไทยคือ การสื่อสารแห่งประเทศไทย) ถ้าเป็นในอินเตอร์เน็ตสิ่งที่ทำหน้าที่คอยรับส่งจดหมายคือบรรดาคอมพิวเตอร์ทั้งหลายที่ทำหน้าที่เป็น E-mail Server (คอมพิวเตอร์ที่ทำหน้าที่ให้บริการด้านจดหมายอิเล็กทรอนิคส์) Chat คือ การส่งข้อความสั้นๆ ระหว่างบุคคลที่อยู่หน้าเครื่องคอมพิวเตอร์ในเวลาเดียวกัน และสามารถเขียนโต้ตอบกันไปมาคล้ายกับการคุยกัน ซึ่งก็ได้มีการพัฒนโปรแกรมสำหรับหาร Chat ออกมามากมายที่เป็นที่นิยมและใช้กันอย่างแพร่หลายก็คือ MSN Messenger และสิ่งหนึ่งที่มีการพัฒนาต่อมา คือระบบการสื่อสารด้วยเสียงผ่านเครือข่าย IP ที่เรียกว่า เทคโนโลยี Voice over IP หรือที่รู้จักกันโดยทั่วไปว่า “VoIP” จนสามารถใช้งานได้ดีขึ้น เพื่อให้ได้รับประโยชน์และมีความสะดวกมากที่สุด VoIP ถูกเริ่มต้นใช้งานกันอย่างกว้างขวาง เพื่อให้เครื่องคอมพิวเตอร์ส่วนบุคคลสามารถสนทนา ระหว่างกัน ได้ รวมถึงการสนทนากับโทรศัพท์พื้นฐานอีกด้วยโดยไม่เสียค่าบริการแต่อย่างได และคุณภาพของบริการก็ถูกพัฒนาขึ้นมาเรื่อยๆจนเทียบเท่าระบบ โทรศัพท์พื้นฐาน ซึ่ง VoIP สามารถแบ่งได้เป็น 3 ลักษณะคือ 1. คอมพิวเตอร์ส่วนบุคคล ไปยัง คอมพิวเตอร์ส่วนบุคคล ( PC to PC ) PC มีการติดตั้ง sound card และไมโครโฟน ที่เชื่อมต่ออยู่กับเครือข่าย IP การประยุกต์ใช้ PC และ IP-enabled telephones สามารถสื่อสารกันได้แบบจุดต่อจุด หรือ แบบจุดต่อหลายจุด โดยอาศัย software ทางด้าน IP telephony


2. คอมพิวเตอร์ส่วนบุคคล ไปยัง โทรศัพท์พื้นฐาน ( PC to Phone ) เป็นการเชื่อมเครือข่ายโทรศัพท์เข้ากับ เครือข่าย IP ทำให้โดยอาศัย Voice trunks ที่สนับสนุน voice packet ทำให้สามารถใช้ PC ติดต่อกับ โทรศัพท์ระบบปกติได้


3. โทรศัพท์กับโทรศัพท์ ( Telephony ) เป็นการใช้โทรศัพท์ธรรมดา ติดต่อกับโทรศัพท์ธรรมดา แต่ในกรณีนี้จริงๆแล้วประกอบด้วยขั้นตอนการส่งเสียงบนเครือข่าย Packet ประเภทต่างๆซึ่งทั้งหมดติดต่อกันระหว่างชุมสายโทรศัพท์ (PSTN) การติดต่อกับ PSTN หรือ การใช้โทรศัพท์ร่วมกับเครือข่ายข้อมูลจำเป็นต้องใช้ gateway


เอกสารอ้างอิง
[1] L.R. Rabiner, The impact of voice processing on modern telecommunications, Proceeding of the Speech Communication 17,p 217-226,1995 [2] A.Barberis,C.Casetti,J.C.De Martin,M.Meo, A simulation study of adaptive voice communications on IP networks, Proceeding of the Computer Communication 24,p 757-767,2001 [3] Alcatel Inc. , IP Telephony Design Guide ,Alcatel white paper, April 2003 [4] Voice Over IP Reference Page, Available on http://www.protocols.com/pbook/VoIP.htm( 19 August 2004) [5] Roberto Arcomano berto, VoIP Howto, August 7, 2002, Available on http://www.tldp.org/HOWTO/VoIP-HOWTO.html (19 August 2004) [6] Alan Percy, Senior Sales Engineer, Understanding Latency in IP Telephony, Available on http://www.telephonyworld.com/training/brooktrout/iptel_latency_wp.html (19 August 2004) [7] Asim Karim, Ohio State University , H.323 and Associated Protocols , Available on http://www.cis.ohio-state.edu/~jain/cis788-99/h323/index.html (19 August 2004) [8] ปวีณ เขื่อนแก้ว.2004.”โทรศัพท์บนเครือข่ายอินเตอร์เน็ต (Voice over Internet Protocol ( VoIP )”.ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยเชียงใหม่ [9] กรุงเทพธุรกิจ (กรุงเทพไอที) ฉบับวันที่ 16 สิงหาคม 2544 [10] บริษัท Allied Telesyn [11] การสื่อสารด้วยระบบ Voice-over-IP (VoIP), Available on http://www.voipthailand.com/voip/articles/voip_articles_00002.html

Voice over IP (VoIP) คืออะไร

ก่อนที่เราจะรู้ว่า VoIP คือออะไร สิ่งที่เราควรจะต้องรู้ก่อนก็คือ เครือข่าย IP มีหลักการพื้นฐานอย่างไร แล้วจึงพัฒนาไปเป็น VoIP ได้อย่างไร หลักการพื้นฐานของเครือข่าย IP เครือข่ายไอพี (Internet Protocol) มีพัฒนามาจากรากฐานระบบการสื่อสารแบบ Packet โดยระบบมีการกำหนด Address ที่เรียกว่า IP Address จาก IP Address หนึ่ง ถ้าต้องการส่งข่าวสารไปยังอีก IP Address หนึ่ง ใช้หลักการบรรจุข้อมูลใส่ใน Packet แล้วส่งไปในเครือข่าย ระบบการจัดส่ง Packet กระทำ ด้วยอุปกรณ์สื่อสารจำพวก Router โดยมีหลักพื้นฐานการส่งเป็นแบบ DATAGRAM หรือ Packet ซึ่งมีความหมายว่า "เป็นที่เก็บข้อมูลที่เป็นอิสระ ซึ่งมีสารสนเทศเพียงพอในการเดินทางจากแหล่งข้อมูลไปยังคอมพิวเตอร์ปลายทาง โดยปราศจากความเชื่อมั่นของการเปลี่ยนครั้งก่อน ระหว่างแหล่งข้อมูลกับคอมพิวเตอร์ปลายทาง และเครือข่ายการส่งข้อมูล"


ซึ่งจะเห็นว่าการส่งแบบ Packet เข้าไปในเครือข่ายนั้น จะไม่มีการประกันว่า Packet นั้นจะถึงปลายทางเมื่อไร ดังนั้นรูปแบบของเครือข่ายไอพีจึงไม่เหมาะสมกับการสื่อสารแบบต่อเนื่องเช่น การส่งสัญญาณเสียง หรือวิดีโอ เมื่อเครือข่าย IP กว้างขวางและเชื่อมโยงกันมากขึ้น ความต้องการส่งสัญญาณข้อมูลเสียงที่ได้คุณภาพจึงเกิดขึ้น ก็เลยมีการพัฒนาเป็น VoIP แล้ว Voice over IP (VoIP) คืออะไร VoIP-Voice Over IP หรือที่เรียกกันว่า “VoIP Gateway” หมายถึง การส่งเสียงบนเครือข่ายไอพี เป็นระบบที่แปลงสัญญาณเสียงในรูปของสัญญาณไฟฟ้ามาเปลี่ยนเป็นสัญญาณดิจิตอล คือ นำข้อมูลเสียงมาบีบอัดและบรรจุลงเป็นแพ็กเก็ต ไอพี (IP) แล้วส่งไปโดยมีเราเตอร์ (Router) ที่เป็นตัวรับสัญญาณแพ็กเก็ต และแก้ปัญหาบางอย่างให้ เช่น การบีบอัดสัญญาณเสียง ให้มีขนาดเล็กลง การแก้ปัญหาเมื่อมีบางแพ็กเก็ตสูญหาย หรือได้มาล่าช้า (delay) การสื่อสารผ่านทางเครือข่ายไอพีต้องมีเราเตอร์ (Router) ที่ทำหน้าที่พิเศษเพื่อประกันคุณภาพช่องสัญญาณไอพีนี้ เพื่อให้ข้อมูลไปถึง ปลายทางหรือกลับมาได้อย่างถูกต้อง และอาจมีการให้สิทธิพิเศษก่อนแพ็กเก็ตไอพีอื่น (Quality of Service : QoS) เพื่อการให้บริการที่ทำให้เสียงมีคุณภาพ


นอกจากนั้น Voice over IP (VoIP) ยังเป็นการส่งข้อมูลเสียงแบบ 2 ทางบนระบบเครือข่ายแบบ packet-switched IP network. ซึ่งข้อมูลนี้จะถูกส่งผ่านเครือข่ายอินเตอร์เน็ตสาธารณะ เพื่อสื่อสารระหว่าง VoIP ด้วยกัน โดยที่ยังคงความเป็นส่วนตัวไว้ได้ สำหรับการใช้งานเทคโนโลยี VoIP นั้น จริงๆ แล้วทุกๆ องค์กรสามารถนำเทคโนโลยีนี้มาประยุกต์ใช้งานได้ แต่สำหรับกลุ่มเป้าหมายที่ตรงและน่าจะได้รับประโยชน์จากการนำเทคโนโลยี VoIP มาประยุกต์ใช้งานมากที่สุด ได้แก่... กลุ่มธุรกิจขนาดย่อม หรือ SME (Small/Medium Enterprise) รวมถึงกลุ่ม ISP (Internet Service Provider) ต่างๆ สำหรับกลุ่มธุรกิจ SME อาจจะต้องเป็นกลุ่มที่มีระบบเครือข่ายข้อมูลของตนเองอยู่แล้ว ไม่ว่าจะเป็นเครือข่าย Leased Line, Frame Relay, ISDN หรือแม้กระทั่งเครือข่าย E1/T1 ก็ตาม รวมถึงมีระบบตู้สาขาโทรศัพท์ในการใช้งานด้วย การนำเทคโนโลยี VoIP มาใช้งานนั้นจะทำให้องค์กรลดค่าใช้จ่ายในการใช้งานการสื่อสารสัญญาณเสียงไปได้อย่างมาก และเนื่องด้วยในปัจจุบันการขยายตัวของระบบเครือข่ายสัญญาณข้อมูล หรือ Data Network มีอัตราการเติบโตที่รวดเร็วกว่าการขยายตัวของเครือข่ายสัญญาณเสียงค่อนข้างมาก จึงทำให้มีการนำเทคโนโลยีที่สามารถนำสัญญาณเสียงเหล่านั้นมารวมอยู่บนระบบเครือข่ายของสัญญาณข้อมูลและมีการรับ-ส่งสัญญาณทั้งคู่ได้ในเวลาเดียวกัน เพื่อเป็นการสะดวกและประหยัดค่าใช้จ่าย ไม่ว่าจะเป็นค่าโทรศัพท์ทางไกลต่างจังหวัด หรือรวมถึงค่าโทรศัพท์ทางไกลต่างประเทศด้วยถ้าหากองค์กรนั้นมีสาขาอยู่ในต่างประเทศด้วย สำหรับกลุ่มธุรกิจ ISP นั้นสามารถที่จะนำเทคโนโลยี VoIP นี้มาประยุกต์ใช้งานเพื่อเป็นการเพิ่มโอกาสในธุรกิจของตนเองมากยิ่งขึ้น โดยทาง ISP ต่างๆ นั้นสามารถให้บริการ VoIP เพื่อเป็นบริการเสริมเพิ่มเติมขึ้นมาจากการให้บริการระบบเครือข่าย Internet แบบปกติธรรมดา หรือที่เราเรียกว่า Value Added Services ซึ่งถือว่าเป็นการสร้างความแตกต่างและเพิ่มทางเลือกในการให้บริการกับกลุ่มลูกค้าด้วย
เอกสารอ้างอิง
[1] L.R. Rabiner, The impact of voice processing on modern telecommunications, Proceeding of the Speech Communication 17,p 217-226,1995 [2] A.Barberis,C.Casetti,J.C.De Martin,M.Meo, A simulation study of adaptive voice communications on IP networks, Proceeding of the Computer Communication 24,p 757-767,2001 [3] Alcatel Inc. , IP Telephony Design Guide ,Alcatel white paper, April 2003 [4] Voice Over IP Reference Page, Available on http://www.protocols.com/pbook/VoIP.htm( 19 August 2004) [5] Roberto Arcomano berto, VoIP Howto, August 7, 2002, Available on http://www.tldp.org/HOWTO/VoIP-HOWTO.html (19 August 2004) [6] Alan Percy, Senior Sales Engineer, Understanding Latency in IP Telephony, Available on http://www.telephonyworld.com/training/brooktrout/iptel_latency_wp.html (19 August 2004) [7] Asim Karim, Ohio State University , H.323 and Associated Protocols , Available on http://www.cis.ohio-state.edu/~jain/cis788-99/h323/index.html (19 August 2004) [8] ปวีณ เขื่อนแก้ว.2004.”โทรศัพท์บนเครือข่ายอินเตอร์เน็ต (Voice over Internet Protocol ( VoIP )”.ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยเชียงใหม่ [9] กรุงเทพธุรกิจ (กรุงเทพไอที) ฉบับวันที่ 16 สิงหาคม 2544 [10] บริษัท Allied Telesyn [11] การสื่อสารด้วยระบบ Voice-over-IP (VoIP), Available on http://www.voipthailand.com/voip/articles/voip_articles_00002.html

เทคโนโลยีและการทำงานของ VoIP

Standard of VoIP Technology สำหรับมาตรฐานที่มีการใช้งานอยู่บนเทคโนโลยี VoIP นั้น โดยทั่วไปจะมีอยู่ 2 มาตรฐานด้วยกัน ได้แก่... มาตรฐาน H.323 และมาตรฐาน SIP มาตรฐานเหล่านี้ เราสามารถเรียกได้อีกอย่างหนึ่งว่า “Call Control Technologies” ซึ่งถือว่าเป็นส่วนประกอบสำคัญสำหรับการนำเทคโนโลยี VoIP มาใช้งาน H.323 Standard สำหรับมาตรฐาน H.323 นั้น จริงๆ แล้วไม่ได้ถูกออกแบบมาให้ใช้งานกับระบบเครือข่ายที่ใช้ Internet Protocol (IP) นอกจากนั้นมาตรฐาน H.323 ยังมีการทำงานที่ค่อนข้างช้า โดยปกติแล้วเราจะเสนอการใช้งานมาตรฐาน H.323 ให้กับลูกค้าก็ต่อเมื่อในระบบเดิมของลูกค้ามีการใช้งานมาตรฐาน H.323 อยู่แล้วเท่านั้น  มาตรฐาน H.323 เป็นมาตรฐานภายใต้ ITU-T (International Telecommunications Union) Standard  ในตอนแรกนั้น มาตรฐาน H.323 ได้ถูกพัฒนาขึ้นมาเพื่อเป็นมาตรฐานสำหรับการทำ Multimedia Conferencing บนระบบเครือข่าย LAN เป็นหลัก แต่มาในตอนหลังจึงถูกพัฒนาให้ครอบคลุมถึงการทำงานกับเทคโนโลยี VoIP ด้วย  มาตรฐาน H.323 สามารถรองรับการทำงานได้ทั้งแบบ Point-to-Point Communications และแบบ Multi-Point Conferences  อุปกรณ์ต่างๆ จากหลากหลายยี่ห้อ หรือหลายๆ Vendors นั้นสามารถที่จะทำงานร่วมกัน (Inter-Operate) ผ่านมาตรฐาน H.323 ได้ SIP (Session Initiation Protocol) Standard มาตรฐาน SIP นั้นถือเป็นมาตรฐานใหม่ในการใช้งานเทคโนโลยี VoIP โดยที่มาตรฐาน SIP นั้น ได้ถูกออกแบบมาให้ใช้งานกับระบบ IP โดยเฉพาะ ซึ่งโดยปกติแล้วเราจะแนะนำให้ลูกค้าใหม่ที่จะมีการใช้งาน VoIP ให้มีการใช้งานอยู่บนมาตรฐาน SIP... มาตรฐาน SIP นั้นเป็นมาตรฐานภายใต้ IETF Standard ซึ่งถูกออกแบบมาสำหรับการเชื่อมต่อ VoIP  มาตรฐาน SIP นั้นจะเป็นมาตรฐาน Application Layer Control Protocol สำหรับการเริ่มต้น (Creating), การปรับเปลี่ยน (Modifying) และการสิ้นสุด (Terminating) ของ Session หรือการติดต่อสื่อสารหนึ่งครั้ง  มาตรฐาน SIP จะมีสถาปัตยกรรมการทำงานคล้ายคลึงการทำงานแบบ Client-Server Protocol เป็นมาตรฐานที่มี Reliability ที่ค่อนข้างสูง

เริ่มต้นเข้าสู่การใช้งาน Asterisk

เริ่มต้นเข้าสู่การใช้งาน Asterisk

ก่อนที่จะเริ่มต้นเข้าสู่การใช้งาน Asterisk เราต้องมาเข้าใจกันก่อนนะครับว่า Asterisk คืออะไร ซึ่งตัว Asterisk ก็เป็นระบบ IP-PBX ซึ่งอยุ่ในกลุ่ม Open source ที่สามารถทำงานได้บน Linux, Mac OS X,Open BSD , FreeBSD ,Sun Solaris ซึ่งทำหน้าที่เป็นตู้สาขาโทรศัพท์ PBX ที่มีคุณสมบัติเทียบเท่ากับตู้สาขาโทรศัพท์ราคาแพง ที่เห็นอยู่ในทุกวันนี้

Asterisk คิดค้นโดย Mark Spencer เมื่อปี 1999 รูปด้านบนก็คือ Mark Spencer

Asterisk คืออะไร

• Asterisk เป็น Open source PBX (www.asterisk.org)
• เป็นซอฟต์แวร์ระบบ IPPBX
ที่สมบูรณ์แบบและมีชื่อเสียงมาก
• รองรับกับระบบปฏิบัติการ Linux , BSD , Mac OS ฯลฯ
• รองรับกับ VoIP Protocols มากที่สุด เช่น H.323 , SIP ,
MGCP , IAX2 , XMPP , ISDN
• รองรับ CODECS หลากหลาย เช่นกัน
– Audio : G.711 , 723 ,729 , GSM , iLBC , Speex
– Video : H.263, H.263+ , H.264(MPEG4)
• มีฟังก์ชั่นของระบบโทรศัพท์ เช่น voicemail ,
conferencing , IVR ซึ่งเป็นมาตรฐานในการใช้งานทั่ว ๆ
ไป
• รองรับกับ Hardware ที่มีความหลากหลาย เช่น Analog
Card , E1 , ISDN
• มีภาษาในการเขียนโปรแกรมเองที่เรียกว่า AEL (Asterisk
Extension Language) เพื่อสั่งงาน
• มีระบบบันทึกการใช้งานโทรศัพท์ (Call Detail Record) :
CDR

รูปโครงสร้างของ Asterisk

ระบบ Asterisk คืออะไร และทำงานอย่างไร

ระบบ Asterisk คืออะไร และทำงานอย่างไร

Asterisk คือ opensource software ที่ทำหน้าที่หลักเป็น Softswitch, IP-PBX หรือที่เรียกว่าตู้ชุมสายโทรศัพท์ระบบ IP ซึ่งมีหน้าที่ในการควบคุมและจัดการบริหาร การเชื่อมต่อ ระหว่างอุปกรณ์โทรศัพท์ผ่านเครื่องข่ายเนทเวอร์ค อีกทั้งยังสามรถเพิ่มเติมประสิทธิ์ภาพและความสามารถในการทำงานได้โดยง่าย

1. Switch (PBX) ตู้ชุมสาย
Asterisk สามารถทำหน้าเป็นอุปกรณ์สลับสายโทรศัพท์ไม่ว่าจะเป็นระบบ IP หรือ hybrid, สามรถทำการตั้งค่าเส้นทางการของการโทรศัพท์โดยตัวเอง, สามารถเพิ่มเติม feature ได้เช่น (ระบบ Voicemail, IVR), รองรับการเชื่อมต่อกับระบบโทรศัพท์พื้นฐานไม่ว่าจะเป็นแบบ analog หรือ digital (ISDN)
2. Gateway
สามารถทำหน้าเป็นอุปกรณ์ที่ใช้ในการเชื่อมต่อระหว่าระบบโทรศัพท์พื้นฐานกับระบบ VoIP เช่นการติดตั้งการ์ดบน Asterisk และ ตั้งค่าให้ ทำงานเป็น Gateway เชื่อมระบบ SIP เข้ากับ ระบบ TDM(PSTN)
3. Feature & Media Server
อีกความสามารถของ Asterisk คือสามารถทำเป็น ระบบตอบรับหรือระบบการประชุมทางโทรศัพท์ เพื่อให้ทำงานเข้ากับระบบโทรศัพท์ที่มีอยู่เดิม ได้อีกด้วย
:ตัวอย่างการ implementation
-สามารถทำเป็น IVR หรือระบบตอบรับ ให้กับตู้ชุมสาย (pabx) เดิมที่ไม่มีระบบตอบรับ
-เชื่อมเข้ากับระบบ Database เพื่อให้ asterisk ทำหน้าที่เหมือนเป็น operator ในการรับสายและตอบคำถามตามที่ลูกค้าต้องการโดยอัตโนมัติ
-ทำเป็น Voice Conference server เพื่อรับการประชุมทางเสียง จากหลายๆจุด
-ระบบ Voice Recognition ทำงานร่วมกับ software ภายนอกเพื่อทำให้ asterisk สามารถที่จะ ตอบโต้กับผู้ใช้งานทางเสียงโดยอัตโนมัติ
-Paging server ทำงานเป็นอุปกรณ์ควบคุมระบบกระจายเสียง PA system

4. Call Center
รองรับการทำงานของระบบ Call-Center อย่างเต็มรูปแบบ เช่น ACD, Queue, IVR, Skill-based routing, etc.
5. Media Conversion
รองรับการทำงานในการแปลงข้อมูลเสียงจาก codec ไปเป็นอีก codec ในกรณีนี้ asterisk จะทำหน้าที่เป็นตัวกลางในการแปลงข้อมูลเสียง

จุดดีและจุดด้อยของ Asterisk

ข้อดี: รองรับการทำงานเกียบจะทุกแบบ คืออะไรที่คิดว่าโทรศัพท์ทำได้ Asterisk ทำได้หมด อะไรที่ไม่คิดว่าจะทำได้ astreisk ก็นำไปประยุกต์ใช้งานได้
ข้อด้อย: เนื่องจาก asterisk มีการออกแบบที่อาจไม่รองรับการขยายตัวขนาดนี้จึงทำให้มีปัญหามากมายในการเพิ่มเติมความสามารถในอนาคต ซึ่ง มีตัวอย่างเหตุผลสนับสนุนด้านล่าง
ตัวอย่างจุดด้อยของ asterisk
สามารถพบ deadlock และ crash ได้บ่อย
พบ memory leak ได้บ่อย
เนื่องจาก architechture ของ asterisk การทำงานเป็นแบบ thread ที่ค่อนข้างที่จะมีข้อจำกัดมาก โดยจะอนุญาติให้เฉพาะ channelตันฉบับและchannelที่ทำการ run application เป็น thread ได้ ฉะนั้น หากเป็นกรณีที่ผู้รับสาย (b-leg) มีการทำอะไรบางอย่างเช่นการโอนสาย, Channel นั้นๆ จะต้องถูกโอนเป็น thread ก่อน ซึ่งจะมีต้องมีการทำ channel masquerade โดยนำ channel เดิมไปใส่ไว้ใน channel ใหม่ ซึ่งเหมือนเป็นการ clone channel นั้นๆขึ้นมาใหม่และทำการ hangup channel เดิมลงไป จีงทำให้ระบบ CDR ของ asterisk นั้น ไม่มีความต่อเนื่องในบางกรณี เช่นการทำ attended transfer ที่เราจะเห็นจำนวน channel เกิดขึ้น 3-4 channel สำหรับการโทรเพียง ครั้งเดียว
มีการใช้ linked-lists เพื่อควบคุม Channel, สำหรับการทำงาน thread ใน asterisk ที่ถูกสร้างขึ้น ในแต่ละ linked-lists จะมี Mutexes ที่ควบคุมการถูก write-access โดยหนึ่ง threaded เท่านั้น ซึ่งอาจนำไปสู่ภาวะที่มีการล้าง บาง channel masquerade ได้ ทำให้เกิด Segmentation Fault ที่ระบบทั้งหมดจะหยุดไปทันที
ระบบ AMI ไม่มีกำหนด structure ที่ดีทำให้การส่งรับ data มีปัญหาในการ เก็บข้อมูล (parse data) ได้ยาก
Asterisk core มีการ link dependencies(shared code) ในบาง modules ลูกของ asterisk เอง ทำให้ในบางกรณีที่เราไม่สามารถที่จะ start asterisk ได้เนืี่องจากปัญหาในบาง modules
Asterisk ไม่มีการป้องกัน API ของตัวเอง ทำให้ในการ develop อะไรขึ้นมาเพิ่มเติมอาจไปทำให้ไปกระทบ กับ funcion และ data structure เดิมได้ง่าย

ระบบที่จำเป็นต่อ Asterisk

1. OS ระบบปฎิบัติการ 32/64 bits
Linux, OpenBSD, FreeBSD, MAC OS X
2 PC Hardware อาจเป็นเครื่อง PC หรือ Server ที่สามารถลงระบบปฏิบัติการ linux ได้
2.1 การ์ดสายนอกเพื่อเชื่อมต่อกับสายโทรศัพท์ทั้งระบบ Digital หรือ Analog มีทั้งที่ติดตั้งภายในเครื่อง หรือ ผ่าน USB Port นอกเครื่อง Server
2.2 เครื่อง Server,

Protocol ที่ Asterisk รองรับ

H.323, Session Initiation Protocol (SIP), Media Gateway Control Protocol (MGCP), and Skinny Client Control Protocol (SCCP) และ Inter-Asterisk eXchange (IAX™)

การทำงานของ Asterisk

อย่างที่รู้กันแล้วว่า Asterisk เป็น software ตัวหนึ่งที่ทำหน้าที่หลักในการควบคุมระบบโทรศัพท์ ซึ่งส่วนใหญ่แล้ว Asterisk จะสามารถทำงานบน Linux OS, FressBSD (not officially support by digium) ซึ่งในการทำงาน ของ Asterisk ผู้ใช้งานจำเป็นต้องสามารถที่จะเข้าใจการทำงาน และ ตั้งค่าต่างๆของ Asterisk ได้
Asterisk เป็น software ที่ทำงานเป็น daemon หรือ เป็น Process หนึ่งที่ทำงานอยู่บนเครื่องคอมพิวเตอร์ โดยการตั้งค่าของ Asterisk เพิ่มที่จะทำให้ ระบบทำงานได้ หรือ เป็นไปตามที่ผู้ใช้งานต้องการนั้น มีอยู่ 2 ลักษณะ คือ
1. แบบ .conf ไฟล์ ซึ่งการตั้งค่าแบบนี้ใช้งานกันอยู่อย่างแพร่หลายไม่ว่าจะเป็น การตั้งโดยผ่าน Web-Interface เช่น FreePBX, โดย ไฟล์ที่เขียนลงไปในระบบจะทำหน้าที่ในการบอกให้ Asterisk ทำงานอย่างที่เราต้องการ
2. แบบ database, เป็นอีกลักษณะในการตั้งค่าบางประเภทของ Asterisk โดยการตั้งค่าลักษณะนี้มีข้อดีในการที่เราสามารถที่จะปรับเปลี่ยนค่าได้ทันที โดยไม่จำเป็นต้อง สั่งให้ Asterisk ทำการอ่านค่าจาก file อีก คร้้ง (reload)

โดยหลังจากที่การตั้งค่าต่างๆเสร็จสิ้น Asterisk ก็จะสามารถทำงานได้ทันที โดย ในกรณีที่เป็น ระบบ SIP/IAX/etc. เครื่องลูกข่ายต่างๆก็จะสามารถที่จะเชื่อมต่อเข้ามายังระบบ ผ่านระบบเครือข่าย อนึ่งหากต้องการที่จะให้ Asterisk ทำงานกับ Telephony Hardware เช่น การ์ดสายนอก หรือ กล่องสายนอกต่างๆ ก็ต้องทำการติดตั้งค่าใน Asterisk ด้วย

Features ที Asterisk รองรับ

Call features
ADSI On-Screen Menu System
Alarm Receiver
Append Message
Authentication
Automated Attendant (ระบบตอบรับอัตโนมัติ)
Blacklists (การทำ backlist ใช้ในการ filter ผู้ใช้งานโทรศัพท์ที่โทรเข้าได้)
Blind Transfer (การโอนสายแบบโอนขาด หรือ โอนโดยไม่ถามผู้ที่เราจะโอนไปหาก่อน)
Call Detail Records (การจัดเก็บข้อมูลการโทรศัพท์ในระบบโดยระเอียด)
Call Forward on Busy (การโอนสายไปยังผู้อื่นในกรณ์ที่สายนั้นๆไม่ว่าง)
Call Forward on No Answer (การโอนสายไปยังผู้อื่นในกรณ์ที่สายนั้นๆไม่รับสาย)
Call Forward Variable
Call Monitoring (การดู status (ipaddress,ping time) ของ Client ที่เชื่อมต่อมายังระบบ)
Call Parking
Call Queuing
Call Recording
Call Retrieval
Call Routing (DID & ANI)
Call Snooping
Call Transfer
Call Waiting
Caller ID
Caller ID Blocking
Caller ID on Call Waiting
Calling Cards
Conference Bridging
Database Store / Retrieve
Database Integration
Dial by Name
Direct Inward System Access
Distinctive Ring
Distributed Universal Number Discovery (DUNDi™)
Do Not Disturb
E911
ENUM
Fax Transmit and Receive (3rd Party OSS Package)
Flexible Extension Logic
Interactive Directory Listing
Interactive Voice Response (IVR)
Local and Remote Call Agents
Macros
Music On Hold
Music On Transfer:
- Flexible Mp3-based System
- Random or Linear Play
- Volume Control
Predictive Dialer
Privacy
Open Settlement Protocol (OSP)
Overhead Paging
Protocol Conversion
Remote Call Pickup
Remote Office Support
Roaming Extensions
Route by Caller ID
SMS Messaging
Spell / Say
Streaming Media Access
Supervised Transfer
Talk Detection
Text-to-Speech (via Festival)
Three-way Calling
Time and Date
Transcoding
Trunking
VoIP Gateways
Voicemail:
- Visual Indicator for Message Waiting
- Stutter Dialtone for Message Waiting
- Voicemail to email
- Voicemail Groups
- Web Voicemail Interface
Zapateller

Computer-Telephony Integration
AGI (Asterisk Gateway Interface)
Graphical Call Manager
Outbound Call Spooling
Predictive Dialer
TCP/IP Management Interface

Scalability
TDMoE (Time Division Multiplex over Ethernet)
Allows direct connection of Asterisk PBX
Zero latency
Uses commodity Ethernet hardware
Voice-over IP
Allows for integration of physically separate installations
Uses commonly deployed data connections
Allows a unified dialplan across multiple offices

Codecs
ADPCM
G.711 (A-Law & μ-Law)
G.722
G.723.1 (pass through)
G.726
G.729 (through purchase of a commercial license)
GSM
iLBC
Linear
LPC-10
Speex

Protocols
IAX™ (Inter-Asterisk Exchange)
H.323
SIP (Session Initiation Protocol)
MGCP (Media Gateway Control Protocol
SCCP (Cisco® Skinny®)

Traditional Telephony Interoperability
E&M
E&M Wink
Feature Group D
FXS
FXO
GR-303
Loopstart
Groundstart
Kewlstart
MF and DTMF support
Robbed-bit Signaling (RBS) Types
MFC-R2 (Not supported. However, a patch is available

PRI Protocols
4ESS
BRI (ISDN4Linux)
DMS100
EuroISDN
Lucent 5E
National ISDN2
NFAS

วันอังคารที่ 4 กุมภาพันธ์ พ.ศ. 2557

ติดตั้ง freeradius บน ubuntu

  1. ติดตั้งด้วยคำสั่ง sudo apt-get install freeradius freeradius-utils freeradius-mysql freeradius-ldap gawk
  2. สั่งให้ทำงานด้วยคำสั่ง sudo /etc/init.d/freeradius start
  3. ทดสอบว่า freeradius ติดตั้งใช้งานได้แล้วด้วยตัวอย่างคำสั่ง

    *** จากตัวอย่างให้แทนข้อความ your_root_password ด้วยรหัสผ่านของ root
    sudo radtest your_name your_password 127.0.0.1 0 testing123
    หากถูกต้องจะได้รับข้อความตอบกลับประมาณว่า
    Sending Access-Request of id 232 to 127.0.0.1 port 1812
        User-Name = "your-name"
        User-Password = "your_password"
        NAS-IP-Address = 255.255.255.255
        NAS-Port = 0
    rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=232, length=20

    ถึงตอนนี้แสดงว่า freeradius ใช้งานได้แล้ว แต่ใช้ได้เพียง localhost คือ 127.0.0.1
  4. หากต้องการอนุญาติให้ radius client เข้ามาใช้ radius server นี้ได้
    ต้องแก้ไขสิทธิ์ที่แฟ้ม /etc/freeradius/clients.conf  ปรับตั้งให้มีค่าดังประมาณตัวอย่างนี้
    client 10.0.1.0/24 {
            secret          = mytestkey
            shortname       = private-network
    }
    ตัวอย่างนี้คือให้ radius client ที่มีหมายเลข ip 10.0.1.x  สามารถเข้ามาใช้ด้วย secret key ว่า mytestkey
    เมื่อแก้ไขเสร็จแล้วให้ reload ใหม่ ด้วยคำสั่ง  sudo /etc/init.d/freeradius force-reload
    ลองทดสอบด้วยคำสั่งตัวอย่าง sudo radtest your_name your_password 10.0.1.1 0 mytestkey
    *** ค่า your_password คือ รหัสผ่านของ your_name และ 10.0.1.1 คือหมายเลข ip ของ radius server
    ได้ผลแสดงข้อความดังตัวอย่าง
    Sending Access-Request of id 246 to 10.0.1.1:1812
            User-Name = "your_name"
            User-Password = "your_password"
            NAS-IP-Address = 255.255.255.255
            NAS-Port = 0
    rad_recv: Access-Accept packet from host 10.0.1.1:1812, id=246, length=20

    ถึงขั้นตอนนี้เป็นอันเปิดบริการระบบ radius server ได้แล้ว
  5. ขั้นตอนการทำงานของ configuration ของ freeradius
    แฟ้ม /etc/freeradius/radiusd.conf  เป็นที่ปรับค่าของระบบต่างๆ

    หากเป็น freeradius 2.x จะมีการแยกแฟ้มย่อยออกไปจาก /etc/freeradius/radiusd.conf
    ไปอยู่ที่ /etc/freeradius/sites-available/default  และ /etc/freeradius/modules
    หากเป็น freeradius 1.x ทุกอย่างจะกระจุกตัวในแฟ้ม /etc/freeradius/radiusd.conf

    เมื่อ radius server ได้รับการติดต่อจากผู้ใช้ radius client
    วิธีการตรวจสอบคุณสมบัติของผู้ใช้อยู่ในส่วนที่ชื่อ authorize {...}
    ภายใน authorize {...} นี้ ประกอบด้วยชื่อ modules ตรวจสอบต่างๆ

    หากคุณสมบัติไม่ตรง ปรกติแล้วระบบก็จะรีบดีดออกมาพร้อมแจ้ง reject
    แต่เราสามารถกำหนดให้ไปตรวจสอบต่อกับ authorize modules
    เรียงลำดับอันถัดๆไปที่เหลืออื่นๆได้อีก

    หากคุณสมบัติผ่าน ก็จะเข้าขั้นตอนตรวจสอบรหัสผ่านของผู้ใช้ว่าถูกต้องหรือไม่
    โดย authorize modules จะเลือก modules ที่ต้องการเอง จากส่วนที่ชื่อ authenticate {...}

    หากรหัสผ่านถูกต้อง ก็จะเข้าสู่ส่วนของ postauth {...}
    เป็นการตรวจสอบทิ้งท้ายก่อนส่งคืนค่ากลับให้แก่ radius client ที่ติดต่อมา

    การบันทึกประวัติใช้งานอยู่ในส่วน accounting {...}

    modules ทุกตัวที่ใช้งาน จะต้องได้รับการประกาศไว้ก่อนแล้ว
    หากเป็น freeradius 2.x จะแยก modules ออกเป็นแฟ้มย่อยๆอยู่ที่ directory ชื่อ /etc/freeradius/modules
    หากเป็น freeradius 1.x จะมี modules อยู่ในแฟ้ม /etc/freeradius/radiusd.conf พื้นที่ส่วนของชื่อ modules {...}
  6. หากต้องการตรวจสอบผู้ใช้กับ mail server ผ่าน imap/pop3 ให้ทำดังนี้

    ตัวอย่างนี้จะตรวจสอบกับ mail server ชื่อ your.mail.server
    ต้องติดตั้ง php และ php-imap ก่อนแล้ว ติดตั้งด้วยคำสั่ง sudo apt-get install php5 php5-imap php5-cli
    แก้ไขแฟ้ม /etc/php5/cli/conf.d/imap.ini ตรวจสอบ/เพิ่มให้มีบรรทัดตัวแปรว่า extension=imap.so

    ต่อไปสร้างแฟ้ม /etc/freeradius/imap.php ให้มีเนื้อหาว่า
    <?php
    error_reporting(0);
    $host = $argv[1];
    $username = $argv[2];
    $password = $argv[3];
    $service = $argv[4];
    $imap_host="{" . $host . $service . "}";
    $mbox = imap_open("$imap_host", "$username", "$password");
    $folders = imap_listmailbox($mbox, "$imap_host", "*");
    if ($folders == false) {
            echo "false";
    } else {
            echo "true";
    }
    imap_close($mbox);
    ?>

    สร้างแฟ้มคำสั่ง shell script ชื่อ  /etc/freeradius/imap-authen.sh มีเนื้อหาว่า
    #!/bin/bash
    #exit 0 = valid ; exit 1 = invalid
    AUTHEN_SHADOW="YES"
    AUTHEN_MAIL="YES"
    AUTHEN_LDAP="NO"
    AUTHEN_PSU_PASSPORT="NO"
    NAME=$(echo ${USER_NAME} | cut -d'"' -f2)
    PASSWORD=$(echo ${USER_PASSWORD} | cut -d'"' -f 2-|sed "s/\"$//")
    KEY="false"
    if [ "${AUTHEN_SHADOW}" = "YES" ] ; then
      KEY=$(/bin/sh /etc/freeradius/check-shadow.sh "${NAME}" "${PASSWORD}")
      if [ "${KEY}" = "true" ] ; then
        exit 0
      fi
    fi
    if [ "${AUTHEN_LDAP}" = "YES" ] ; then
      KEY=$(/bin/sh /etc/freeradius/check-ldap.sh "${NAME}" "${PASSWORD}")
      if [ "${KEY}" = "true" ] ; then
        exit 0
      fi
    fi
    if [ "${AUTHEN_PSU_PASSPORT}" = "YES" ] ; then
      USER=$(echo ${NAME} | cut -d'@' -f1)
      KEY=$(/usr/bin/php /etc/freeradius/soap-authen.php ${USER} ${PASSWORD} $1 $2})
      if [ "${KEY}" = "true" ] ; then
        exit 0
      fi
    fi
    if [ "${AUTHEN_MAIL}" = "YES" ] ; then
      IS_EMAIL=$(echo ${NAME}|grep "@")
      if [ -n "${IS_EMAIL}" ] ; then
        USER=$(echo ${NAME} | cut -d'@' -f1)
        DOMAIN=$(echo ${NAME} | cut -d'@' -f2)
      else
        USER=${NAME}
        DOMAIN="mail.psu.ac.th"
      fi
      case ${DOMAIN} in
      psu.ac.th)
        HOST="mail.psu.ac.th"
        SERVICE=":143/imap/notls" ;;
      pharmacy.psu.ac.th)
        HOST="mail.pharmacy.psu.ac.th"
        SERVICE=":143/imap/notls" ;;
      pn.psu.ac.th)
        HOST="bunga.pn.psu.ac.th"
        SERVICE=":143/imap/notls" ;;
      gmail.com)
        HOST="pop.gmail.com"
        SERVICE=":995/pop3/ssl" ;;
      live.com)
        HOST="pop3.live.com"
        USER=${NAME}
        SERVICE=":995/pop3/ssl" ;;
      *)
        HOST=${DOMAIN}
        SERVICE=":110/pop3/notls" ;;
      esac
      KEY=$(/usr/bin/php /etc/freeradius/imap.php ${HOST} ${USER} ${PASSWORD} ${SERVICE})
      if [ "${KEY}" = "true" ] ; then
        exit 0
      fi
    fi
    exit 1

    สร้างแฟ้มแบบ text ชื่อ /etc/freeradius/myusers มีเนื้อหาว่า
    DEFAULT Auth-Type := Accept
                  Exec-Program-Wait="/bin/sh /etc/freeradius/imap-authen.sh"

    หากเป็น freeradius 2.x ให้แก้ไขแฟ้ม /etc/freeradius/modules/files เติมข้อความต่อท้ายแฟ้มว่า
    files  myimap  {
        usersfile = ${confdir}/myusers
    }
    แล้วแก้ไขแฟ้ม /etc/freeradius/sites-available/default
    ที่ส่วนของ authorize {...} ประมาณบรรทัดที่ 152 ที่บริเวณข้อความขึ้นต้นด้วย authorize {
    ...
    #  Read the 'users' file
         files
    ให้ comment บรรทัด files เพื่อยกเลิกค่านี้  แล้วแทรกเพิ่มบรรทัดข้อความเพิ่ม กลายเป็นว่า
    #    files
    แทรกเพิ่มบรรทัดข้อความว่า myimap ต่อไปอีกบรรทัด กลายเป็นว่า
    #   files
    myimap

    เสร็จแล้วให้สั่งทำงานใหม่ด้วยคำสั่ง sudo /etc/init.d/freeradius force-reload
    แค่นี้ก็เสร็จแล้ว ทดสอบผลงานได้เลย
  7. หากต้องการว่าหลังผ่านการตรวจสอบ username/password ถูกต้องแล้ว
    จะทำการบันทึกลงแฟ้ม log file เก็บไว้ที่ /var/log/freeradius/myauthen และยังต้องการตรวจวิธีการพิเศษเฉพาะของตนเองเพิ่มเติมอีก

    ตัวอย่างต้องการไม่อนุญาติให้ผู้ใช้ชื่อ demo และ abc ใช้งาน ให้ทำดังนี้
    สร้างแฟ้มคำสั่ง shell script ชื่อ  /etc/freeradius/my-authen.sh มีเนื้อหาว่า
    #!/bin/bash
    ###exit 0 = valid ; exit1 = invalid
    ALL_PASS="YES"
    CHECK_STAFF="NO"
    CHECK_STUDENT="NO"
    export LANG=en.US
    MYDIR="/var/log/freeradius/myauthen"
    if [ ! -d ${MYDIR} ] ; then
      mkdir -p ${MYDIR}
    fi
    TODAY=$(date "+%Y%m%d")
    MYFILE="${MYDIR}/${TODAY}"
    if [ ! -e ${MYFILE} ] ; then
      touch ${MYFILE}
    fi
    MYTIME=$(echo $1|awk '{print strftime("%Y%m%d:%H:%M:%S",$1)}')
    echo "${MYTIME};${USER_NAME};$2;$1;PASS" >> ${MYFILE}
    MYUSER=$(echo $USER_NAME | cut -d'"' -f2)
    if [ "${ALL_PASS}" = "YES" ] ; then
      exit 0
    fi
    if [ "${CHECK_STAFF}" = "YES" ] ; then
      case "${MYUSER}" in
        demo) exit 1 ;;
        *) exit 0 ;;
      esac
    fi
    if [ "${CHECK_STUDENT}" = "YES" ] ; then
      case "${MYUSER}" in
        demo) exit 1 ;;
        *) exit 0 ;;
      esac
    fi
    exit 1

    หากเป็น freeradius 2.x  ให้แก้ไขแฟ้ม /etc/freeradius/modules/exec เติมข้อความต่อท้ายแฟ้มว่า
    exec my-auth {
            program = "/bin/sh /etc/freeradius/my-authen.sh %l %{Packet-Src-IP-Address}"
            wait = yes
            input_pairs = request
            output_pairs = reply
            packet_type = Access-Accept
    }
    แล้วแก้ไขแฟ้ม /etc/freeradius/sites-available/default
    ที่ส่วนของ post-auth {...} ประมาณบรรทัดที่ 439  ที่บริเวณข้อความขึ้นต้นด้วย post-auth {
    ...
    แทรกเพิ่มบรรทัดข้อความเพิ่ม
    my-auth

    เสร็จแล้วให้สั่งทำงานใหม่ด้วยคำสั่ง sudo /etc/init.d/freeradius force-reload
  8. การบันทึกประวัติการใช้งานของ radius โดย defualt จะบันทึกไว้ในพื้นที่  /var/log/freeradius/radacct
    โดยแยกเป็น directory ของแต่ละหมายเลข ip ของ radius client
    แล้วยังแตกย่อยออกเป็นแฟ้มของแต่วันอีก ซึ่งอาจไม่สะดวกต่อการวิเคราะห์ข้อมูล
    เราสามารถเพิ่ม module บันทึกประวัติการใช้งานเพิ่มเติมจากของเดิม ตัวอย่างคือ
    ต้องการบันทึกไว้ใน directory ชื่อ /var/log/freeradius/myaccount
    แล้วเก็บแฟ้มแยกเป็นรายวันในรูปแบบ 20060729 ภายในแฟ้มมีรูปแบบว่า
    20060729:15:54:05;"demo";10.0.0.153;1154163245;"a5f56ebd6ebc1321";Start;
    20060729:15:55:06;"demo";10.0.0.153;1154163306;"a5f56ebd6ebc1321";Stop;61

    ให้ทำดังนี้ สร้างแฟ้มคำสั่ง shell script ชื่อ  /etc/freeradius/log-radius-account.sh มีเนื้อหาว่า
    #!/bin/bash
    export LANG=en.US
    MYDIR="/var/log/freeradius/myaccount"
    if [ ! -d ${MYDIR} ] ; then
      mkdir -p ${MYDIR}
    fi
    TODAY=$(date "+%Y%m%d")
    myfile="${MYDIR}/${TODAY}"
    if [ ! -e ${MYDIR} ] ; then
      touch ${MYDIR}
    fi
    MYTIME=$(echo $1|awk '{print strftime("%Y%m%d:%H:%M:%S",$1)}')
    echo "${MYTIME};${USER_NAME};$2;$1;${ACCT_UNIQUE_SESSION_ID};${ACCT_STATUS_TYPE};${ACCT_SESSION_TIME}" >> ${MYFILE}
    แฟ้ม shell script จบแค่นี้

    หากเป็น freeradius 2.x  ให้แก้ไขแฟ้ม /etc/freeradius/modules/exec เติมข้อความต่อท้ายแฟ้มว่า
    exec my-log-account {
         wait = no
         program = "/bin/sh /etc/freeradius/log-radius-account.sh %l %{Packet-Src-IP-Address} "
    }
    แล้วแก้ไขแฟ้ม /etc/freeradius/sites-available/default
    ที่ส่วนของ accounting  {...}ประมาณบรรทัดที่ 358  ที่บริเวณข้อความ accounting {
    ...
    detail
    ให้แทรกเพิ่มบรรทัดข้อความว่า
    my-log-account

    เสร็จแล้วให้สั่งทำงานใหม่ ด้วยคำสั่ง sudo /etc/init.d/freeradius force-reload
  9. radius server สามารถส่งค่าบอกเวลาที่ยังคงเหลือให้ใช้งาน
    โดยส่งค่ากลับมาที่ attribute ชื่อ Session-Timeout
    แต่ตัวมันเองคำนวณไม่เป็น ต้องหาวิธีอื่นในการคำนวณเวลา
    แล้วส่งกลับมาให้ radius ส่งคำตอบให้อีกทอดหนึ่ง

    จากตัวอย่างข้อ 8 หากต้องการใส่ค่าเวลาที่เหลือในการใช้งาน
    ตัวอย่างเช่นเหลือ 120 วินาที ให้เพิ่มบรรทัดข้อความว่า
    echo "SESSION-TIMEOUT = \"120\""
    ลงไปก่อนบรรทัดข้อความ  exit 0 ดังตัวอย่าง
    #!/bin/bash
    ###exit 0 = valid ; exit1 = invalid
    MYUSER=$(echo $USER_NAME | cut -d'"' -f2)
    case "${MYUSER}" in
      demo) exit 1 ;;
      abc) exit 1 ;;
      *) echo "SESSION-TIMEOUT = \"120\""
          exit 0 ;;
    esac

    เสร็จแล้วให้สั่งทำงานใหม่ ด้วยคำสั่ง sudo /etc/init.d/freeradius force-reload
    แค่นี้ก็เสร็จแล้ว PC ที่ติดต่อเข้ามาจะได้รับคำตอบกลับไป
    ระบุว่าเหลือเวลาใช้งานอีกเท่าไร ขึ้นกับตัวเลขทีกำหนดส่งออกมา
    จากตัวอย่างให้แก้ไขตัวเลข 120 เป็นอื่นๆตามต้องการ
  10. การบันทึกประวัติการ authen radius ไว้ในพื้นที่  /var/log/freeradius/myauthen ให้ทำดังนี้
    สร้างแฟ้มคำสั่ง shell script ชื่อ  /etc/freeradius/log-radius-authen.sh มีเนื้อหาว่า
    #!/bin/bash
    export LANG=en.US
    MYDIR="/var/log/freeradius/myauthen"
    if [ ! -d ${MYDIR} ] ; then
      mkdir -p ${MYDIR}
    fi
    TODAY=$(date "+%Y%m%d")
    MYFILE="${MYDIR}/${TODAY}"
    if [ ! -e ${MYFILE} ] ; then
      touch ${MYFILE}
    fi
    MYTIME=$(echo $1|awk '{print strftime("%Y%m%d:%H:%M:%S",$1)}')
    echo "${MYTIME};${USER_NAME};$2;$1;CHECK_IN" >> ${MYFILE}
    แฟ้ม shell script จบแค่นี้

    หากเป็น freeradius 2.x  ให้แก้ไขแฟ้ม /etc/freeradius/modules/exec เติมข้อความต่อท้ายแฟ้มว่า
    exec my-log-authen {
         wait = no
         program = "/bin/sh /etc/freeradius/log-radius-authen.sh %l %{Packet-Src-IP-Address} "
    }
    แล้วแก้ไขแฟ้ม /etc/freeradius/sites-available/default
    ที่ส่วนของ authorize  {...}ประมาณบรรทัดที่ 152  ที่บริเวณข้อความ authorize {
    ...
    #   files
    myimap
    ให้แทรกเพิ่มบรรทัดข้อความ กลายเป็นว่า
    my-log-authen
    #   files
    myimap

    เสร็จแล้วให้สั่งทำงานใหม่ ด้วยคำสั่ง sudo /etc/init.d/freeradius force-reload
  11. ตัวอย่างคำสั่งการทดสอบด้วยคำสั่ง radclient
    ทดสอบการ authen คำสั่งประมาณว่า
    echo "User-Name=mama,User-Password=123456" | radclient 10.0.1.2 auth mytestkey

    ทดสอบการ accounting ตอนเข้า คำสั่งประมาณว่า
    echo "User-Name=mama,Acct-Status-Type=Start" | radclient 10.0.1.2 acct mytestkey

    ทดสอบการ accounting ตอนออก คำสั่งประมาณว่า
    echo "User-Name=mama,Acct-Status-Type=Stop" | radclient 10.0.1.2 acct mytestkey

ติดตั้ง postfix บน ubuntu


  • ติดตั้ง postfix ด้วยคำสั่ง sudo apt-get install postfix
    ระบบจะมีหน้าต่าง Postfix Configuration ขึ้นมา  ให้กด TAB ไปเลือกแถบ <Ok>
    จะได้อีกหน้าต่างให้เลื่อนไปเลือกแถบ No configuration แล้วกด TAB ไปเลือกแถบ <Ok>
    เป็นอันว่าติดตั้งเสร็จ ค่อยมาปรับแต่งเพิ่มต่อไป
  • จัดการให้ postfix ทำงานแบบ local คือส่งอีเมล์กันภายใน server นี้ ด้วยคำสั่ง
    sudo dpkg-reconfigure postfix
    ระบบจะมีหน้าต่าง Postfix Configuration ขึ้นมา ให้กด TAB ไปเลือกแถบ <Ok>
    จะได้อีกหน้าต่างให้เลื่อนไปเลือกแถบ Local only แล้วกด TAB ไปเลือกแถบ <Ok>
    ที่ช่อง System mail name :  ให้ป้อนชื่อ server
    ที่ช่อง Root and postmaster mail recipient:  ให้ข้ามไปเลย
    ที่ช่อง Other destinations to accept mail for (blank for none):  ให้ข้ามไปเลย
    ที่คำถาม Force synchronous updates on mail queue? ให้เลือกตอบ NO
    ที่ช่อง Local networks: ให้ป้อนเหลือแค่ว่า 127.0.0.0/8
    ที่ช่อง Mailbox size limit (bytes): ให้ใส่เลข 0
    ที่ช่อง Local address extension character: ปล่อยตามเดิมเป็นเครื่องหมาย +
    ที่คำถาม Internet protocols to use: ให้เลือก ipv4
    ที่คำถาม Use procmail for local delivery? ให้ตอบ No

    เสร็จแล้วพร้อมใช้งานได้เลย
  • ตัวอย่างข้อมูลในแฟ้ม /etc/postfix/main.cf สำหรับ local mail server ที่เพิ่งถูกสร้าง
    smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
    biff = no
    append_dot_mydomain = no
    readme_directory = no
    myhostname = myserver.domain
    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases
    myorigin = /etc/mailname
    mydestination = myserver.domain, localhost
    relayhost =
    mynetworks = 127.0.0.0/8
    mailbox_size_limit = 0
    recipient_delimiter = +
    inet_interfaces = loopback-only
    default_transport = error
    relay_transport = error
    inet_protocols = ipv4
  • หากต้องการปรับปรุงให้ local mail server สามารถส่งอีเมล์ออกได้
    ให้แก้ไขแฟ้ม /etc/postfix/main.cf ปรับปรุงค่าตัวแปรดังนี้คือ
    default_transport = smtp
    relay_transport = smtp

    เสร็จแล้วให้ postfix ทำงานใหม่ ด้วยคำสั่ง sudo /etc/init.d/postfix restart
  • จัดการ aliases ให้แก้ไขที่แฟ้ม /etc/aliases
    เสร็จแล้วสั่งให้ postfix เรียนรู้ข้อมูลใหม่ด้วยคำสั่ง sudo newaliases
  • จัดการ relay mail ไปให้ server อื่นส่งแทน ให้แก้ไขแฟ้ม /etc/postfix/main.cf 
    ตั้งค่าตัวแปรดังตัวอย่าง relayhost = other.mail.net
    เสร็จแล้วสั่งให้ posftix ทำงานใหม่ด้วยคำสั่ง sudo /etc/init.d/postfix force-reload
  • ติดตั้ง wordpress บน ubuntu


  • ติดตั้ง apache web server ด้วยคำสั่ง
    sudo apt-get install apache2
  • ติดตั้ง mysql database server ด้วยคำสั่ง
    sudo apt-get install mysql-server

    ระหว่างติดตั้งหากมีคำถามที่เกี่ยวกับการตั้งรหัสผ่าน ก็ให้เคาะแป้น enter ผ่านไปก่อนทั้งหมด
    หลังติดตั้งเสร็จแล้วให้รีบตั้งรหัสผ่าน root ของ mysql-server ใหม่

    ตัวอย่างนี้ตั้งรหัสผ่านว่า mysqldroot ใช้คำสั่งคือ
    mysqladmin -uroot password mysqldroot
  • ติดตั้ง php ด้วยคำสั่ง
    sudo apt-get install php5 php5-mysql php5-cli php5-gd php5-imap php5-ldap php5-radius unzip
    sudo a2enmod rewrite

    แล้วสั่งให้ apache ทำงานใหม่ด้วยคำสั่ง
    sudo /etc/init.d/apache2 restart
  • สร้าง database สำหรับ wordpress ที่ต้องการติดตั้ง
    ตัวอย่างสร้าง database ชื่อ wpdb ใช้คำสั่ง
    mysql -uroot -pmysqldroot -e "CREATE DATABASE wpdb CHARACTER SET 'UTF8';"

    ***หากต้องการลบ database เดิมที่เคยสร้างไว้แล้ว ใช้คำสั่งว่า
    mysql -uroot -pmysqldroot -e "DROP DATABASE wpdb;"

    แล้วกำหนดสิทธิ์การใช้ database wpdb ให้แก่ user
    ตัวอย่างสร้าง user ชื่อ wpmysql โดยมีรหัสผ่านว่า wppass ใช้คำสั่งคือ
    mysql -uroot -pmysqldroot -e "grant all privileges on wpdb.* to 'wpmysql'@'localhost' identified by 'wppass';"
  • ติดตั้ง wordpress ดาวน์โหลดจาก http://ftp.psu.ac.th/pub/wordpress/wordpress-3.3.1-th.tar.gz ด้วยคำสั่ง
    wget -P /tmp http://ftp.psu.ac.th/pub/wordpress/wordpress-3.3.1-th.tar.gz
    แล้วแตกแฟ้มออกมาด้วยคำสั่ง
    sudo tar -zxvf /tmp/wordpress-3.3.1-th.tar.gz -C /var/www
    แล้วทำงานต่อด้วยคำสั่ง
    sudo chown -R www-data /var/www/wordpress
  • คัดลอกแฟ้ม config ด้วยคำสั่ง
    sudo cp /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php
    แก้ไขแฟ้ม /var/www/wordpress/wp-config.php แก้ไขข้อมูล 3 แห่งคือ
    ประมาณบรรทัด 19 แก้ไขตัวแปรเดิมว่า define('DB_NAME', 'database_name_here');  เปลี่ยนใหม่ให้เป็นว่า define('DB_NAME', 'wpdb');
    ประมาณบรรทัด 22 แก้ไขตัวแปรเดิมว่า define('DB_USER', 'username_here'); เปลี่ยนใหม่ให้เป็นว่า define('DB_USER', 'wpmysql');
    ประมาณบรรทัด 25 แก้ไขตัวแปรเดิมว่า define('DB_PASSWORD', 'password_here'); เปลี่ยนใหม่ให้เป็นว่า define('DB_PASSWORD', 'wppass');
  • เริ่มต้นระบบไปที่เวบ http://localhost/wordpress
    ได้หน้าเวบข้อความว่า
    ยินดีต้อนรับ .. ไปหัวข้อรายละเอียดที่ต้องการ ...
    ช่อง "หัวข้อเว็บ" ให้ป้อนชื่อที่ต้องการตัวอย่างเช่น  MyWordpress
    ช่อง "ชือผู้ใช้" ยังคงเหมือนเดิมคือ admin
    ช่อง "รหัสผ่าน" ให้ป้อน 2 ครั้ง ตัวอย่างนี้ป้อนว่า 123456 ทั้ง 2 ครั้ง
    ช่อง "อีเมล์ของคุณ" ให้ป้อนอีเมล์ที่ต้องการเช่น my@your.domain
    ช่อง "ส่วนตัว" ยังคงติ๊กเลือก "อนุญาตให้เว็บของฉันปรากฎใน search engines..."
    แล้วคลิกปุ่ม "ติดตั้งเวิร์ดเพรส" รอสักครู่ เมื่อได้หน้าเวบข้อความว่า "สำเร็จ"
    ให้คลิกปุ่ม "เข้าสู่ระบบ" เพื่อทดสอบใช้งานได้เลย
  • การปรับแต่งให้ login เข้าด้วย admin
    ได้เวบหน้าหลัก ที่เมนูด้านซ้ายล่าง ให้คลิกเลือกหัวข้อว่า  "ตั้งค่า" ได้เวบหน้า"ตั้งค่าทั่วไป"
    ช่อง "เขตเวลา" ให้เลือกเปลี่ยนเป็น "Asia" -> "Bangkok"
    ช่อง "รูปแบบวันที่" ให้เลือกเปลี่ยนเป็น "ปรับแต่ง d-m-Y"
    ช่อง "รูปแบบเวลา" ให้เลือกเปลี่ยนเป็น "ปรับแต่ง H:i"
    แล้วคลิกปุ่ม "บันทึกการเปลี่ยนแปลง"
  • จัดให้ wordpress ทำการ authen กับ ldap server ทำดังนี้
    ต้องติดตั้ง php5-ldap ก่อน ด้วยคำสั่ง
    sudo apt-get install php5-ldap
    ดาวน์โหลดแฟ้ม http://ftp.psu.ac.th/pub/wordpress/simple-ldap-login.1.4.0.5.1.zip มาติดตั้ง ด้วยคำสั่ง
    wget -P /tmp http://ftp.psu.ac.th/pub/wordpress/simple-ldap-login.1.4.0.5.1.zip
    แตกแฟ้มออกมาแล้วเอาไปติดตั้งด้วยคำสั่ง
    sudo unzip -d /var/www/wordpress/wp-content/plugins  /tmp/simple-ldap-login.1.4.0.5.1.zip
    ต่อไปให้เข้าหน้าเวบของ http://localhost/wordpress ด้วย login เป็น admin
    ที่เมนูด้านซ้าย ให้คลิกเลือกหัวข้อว่า "ปลั๊กอิน" ได้หน้าเวบ "ปลั๊กอิน"
    ไปที่ช่อง "Simple LDAP Login"  แล้วคลิกเลือก "ใช้งาน"
    กลับไปที่เมนูด้านซ้ายล่าง ให้คลิกเลือกหัวข้อว่า  "ตั้งค่า" -> "Simple LDAP Login"
    ได้หน้าเวบ Simple LDAP Login 1.4.0.5.1  (ตัวอย่างนี้ตั้งค่าให้ใช้กับ LDAP ของ PSU)
    ไปด้านขวาที่ส่วนของ Advanced
    ช่อง Login mode: ให้ติ๊กเลือกเปลี่ยนเป็น Create Wordpress account for anyone who successfully authenticates against LDAP.
    ไปด้านซ้ายที่ส่วนของ Settings
    ช่อง  LDAP Directory: ให้เปลี่ยนไปติ๊กเลือกเป็น OpenLDAP
    ช่อง Account Suffix: ให้ลบข้อความออกหมด ให้เหลือกลายเป็นช่องว่างๆ
    ช่อง LDAP Login Attribute ยังคงเหมือนเดิมคือ uid
    ช่อง Base DN: ให้แก้ไขเปลี่ยนเป็นว่า ou=staff,dc=cc,dc=psu
    ช่อง Domain Controller(s): ให้แก้ไขเปลี่ยนเป็นว่า front.psu.ac.th
    เสร็จแล้วเลื่อนลงไปคลิกปุ่ม "Update Options >>"
    ทำเพียงแค่นี้ แล้วทดสอบผลงานได้เลย
  • การปรับปรุงเปลี่ยนมาใช้ nginx แทน apache ให้ปิด  apache ก่อน ด้วยคำสั่ง
    sudo /etc/init.d/apache2 stop
    sudo update-rc.d -f apache2 remove
    ติดตั้ง nginx ด้วยคำสั่ง
    sudo apt-get install nginx php5-cgi

    สร้างแฟ้ม /etc/init.d/php-fastcgi ให้มีข้อมูลดังนี้
    #!/bin/bash
    BIND=127.0.0.1:9000
    USER=www-data
    PHP_FCGI_CHILDREN=15
    PHP_FCGI_MAX_REQUESTS=1000
    PHP_CGI=/usr/bin/php-cgi
    PHP_CGI_NAME=`basename $PHP_CGI`
    PHP_CGI_ARGS="- USER=$USER PATH=/usr/bin PHP_FCGI_CHILDREN=$PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS=$PHP_FCGI_MAX_REQUESTS $PHP_CGI -b $BIND"
    RETVAL=0
    start() {
          echo -n "Starting PHP FastCGI: "
          start-stop-daemon --quiet --start --background --chuid "$USER" --exec /usr/bin/env -- $PHP_CGI_ARGS
          RETVAL=$?
          echo "$PHP_CGI_NAME."
    }
    stop() {
          echo -n "Stopping PHP FastCGI: "
          killall -q -w -u $USER $PHP_CGI
          RETVAL=$?
          echo "$PHP_CGI_NAME."
    }
    case "$1" in
        start)
          start
      ;;
        stop)
          stop
      ;;
        restart)
          stop
          start
      ;;
        *)
          echo "Usage: php-fastcgi {start|stop|restart}"
          exit 1
      ;;
    esac
    exit $RETVAL

    สั่งให้ php-fastcgi ทำงานด้วยคำสั่ง
    sudo chmod +x /etc/init.d/php-fastcgi
    sudo /etc/init.d/php-fastcgi start
    sudo update-rc.d php-fastcgi defaults

    แก้ไขแฟ้ม /etc/nginx/sites-available/default
    ไปประมาณบรรทัด 14-15 แก้ค่าเดิมจาก
    root   /var/www/nginx-default;
    index  index.html index.htm;
    ให้กลายเป็นค่าใหม่ว่า
    root   /var/www;
    index  index.php index.html index.htm;
    ไปประมาณบรรทัด 47-52 แก้ไขยกเลิกการ comment ด้วยการลบเครื่องหมาย # ที่นำหน้าออก กลายเป็นว่า
    location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /var/www$fastcgi_script_name;
    include fastcgi_params;
    }
    สั่งให้ nginx ทำงานใหม่ด้วยคำสั่ง
    sudo /etc/init.d/nginx restart
    ทำเพียงแค่นี้ ก็ได้ wordpress บน nginx แล้ว ทดสอบเข้าหน้าเวบ http://localhost/wordpress ได้เลย
  • ติดตั้ง vsftpd บน ubuntu


  • ติดตั้งด้วยคำสั่ง sudo apt-get install vsftpd
  • การให้แฟ้มข้อมูลสามารถเปิดอ่านได้ผู้ใช้แบบสาธารณะชื่อ anonymous
    หากเป็น ubuntu 10.04 เก็บข้อมูลไว้ภายใต้ directory ชื่อ /srv/ftp/pub
    ต้องสร้าง directory เพิ่มด้วยคำสั่ง  sudo mkdir -p /srv/ftp/pub

    หากเป็น ubuntu 8.04 ให้เก็บข้อมูลไว้ภายใต้ directory ชื่อ /var/ftp/pub
    ซึ่งต้องสร้าง directory เพิ่มด้วยคำสั่ง  sudo mkdir -p /var/ftp/pub
  • การปรับแต่งระบบทำได้โดยการแก้ไขแฟ้ม /etc/vsftpd.conf

    ตั้งเวลาให้แสดงผลเวลาตรงกับของ server
    ด้วยการเพิ่ม/แก้ไขบรรทัดข้อความว่า use_localtime=yes

    หากต้องการให้ใช้งานได้เฉพาะภายใน home ของตนเอง ไม่ต้องการให้ออกไปเพ่นพ่านที่อื่น
    เพิ่ม/แก้ไขบรรทัดข้อความว่า chroot_local_user=YES

    หากต้องการห้าม anonymous เข้ามาใช้บริการ
    เพิ่ม/แก้ไขบรรทัดข้อความว่า anonymous_enable=NO

    หากต้องการให้ user สามารถ upload แฟ้มได้
    เพิ่ม/แก้ไขบรรทัดข้อความว่า local_enable=YES และ write_enable=YES

    ตัวอย่างหากต้องการจำกัดจำนวน client ที่เข้ามาใช้บริการ ftp ไม่ให้เกิน 100 คน
    เพิ่ม/แก้ไขบรรทัดข้อความว่า max_clients=100
    แต่ถ้าต้องการจำกัดจำนวน clinet ต่อ 1 เลข IP ที่เข้ามาใช้บริการ ftp ไม่ให้เกิน 50 คนด้วย
    เพิ่ม/แก้ไขบรรทัดข้อความว่า max_per_ip=50

    แก้ไขเสร็จแล้วสั่ง vsftpd ทำงานใหม่ด้วยคำสั่ง  sudo /etc/init.d/vsftpd restart
  • เทคนิคในการสร้าง link ให้สามารถเปิดดูได้ทั้ง http และ ftp ตัวอย่างเช่น
    http://ftp.psu.ac.th/pub/temp/ และ ftp://ftp.psu.ac.th/pub/temp/
    สมมติว่า root directcory ของ http อยู่ที่ /var/www
    และ root directcory ของ http อยู่ที่  /srv/ftp/pub
    ให้ใช้คำสั่งว่า sudo ln -s /srv/ftp/pub /var/www
    แล้วทดสอบดูผลงานได้เลย
  • ตัวอย่างหากต้องการเพิ่ม hard disk ลูกใหม่เข้าไป และต้องการให้ไปเป็นส่วนหนึ่งของพื้นที่ใน /home/ftp/pub
    ให้จัดการติดตั้ง hard disk และ mount ให้เรียบร้อยสามารถใช้งานได้ซะก่อน
    ตัวอย่างของผมคือเพิ่ม hard disk /dev/hdb1 ไปในพื้นที่ /mnt/data
    และต้องการให้ไปโผล่เป็นส่วนหนึ่งของ /home/ftp/pub/newdisk
    ทำคำสั่งขั้นตอนดังนี้คือ
    sudo mkdir  -p  /mnt/data
    sudo mount  /dev/hdb1  /mnt/data
    sudo mkdir  -p  /home/ftp/pub/newdisk
    sudo mount  --bind  /mnt/data  /home/ftp/pub/newdisk
    แค่นี้ก็เสร็จแล้ว ตรวจสอบดูผลงานได้เลย

    ต้องแก้ไขให้ระบบทำงานคำสั่งเหล่านี้โดยอัตโนมัติทุกครั้งที่บูทเครื่อง
    ต้องแก้ไขแฟ้ม /etc/rc.local โดยเพิ่มบรรทัดคำสั่งเหล่านั้นเข้าไปด้วย
  • ติดตั้ง remastersys บน ubuntu


  • การติดตั้งจาก http://www.geekconnection.org/remastersys/repository ทำดังนี้
    ต้อง apt-get ไปเอา remastersys  จาก repository อื่น

    หากเป็น ubuntu 8.04, 8.10, 9.04  ที่ใช้ grub รุ่นเดิมๆ ให้เพิ่ม repository ด้วยคำสั่งว่า
    sudo sh -c "echo 'deb http://www.geekconnection.org/remastersys/repository ubuntu/' > /etc/apt/sources.list.d/remastersys.list"

    หากเป็น ubuntu 9.10 ที่ใช้ grub2 รุ่นใหม่ ให้เพิ่ม repository ด้วยคำสั่งว่า
    sudo sh -c "echo 'deb http://www.geekconnection.org/remastersys/repository karmic/' > /etc/apt/sources.list.d/remastersys.list"

    หากเป็น ubuntu 10.04 หรือใหม่กว่า ให้เพิ่ม repository ด้วยคำสั่งว่า
    sudo sh -c "echo 'deb http://www.geekconnection.org/remastersys/repository lucid/' > /etc/apt/sources.list.d/remastersys.list"
    หลังติดตั้ง remastersys เสร็จแล้ว จะยกเลิกบรรทัดแฟ้มนี้ออกก็ได้

    ติดตั้งด้วยคำสั่ง sudo apt-get update และ sudo apt-get install remastersys
    บางทีเจอบั๊ก โปรแกรมไม่สร้าง /home/remastersys
    ให้แก้ไขด้วยการสร้างเองด้วยคำสั่ง  sudo mkdir -p /home/remastersys
  • หากติดตั้ง rematersys จาก http://www.geekconnection.org/remastersys/repository/ ไม่สำเร็จ
    ให้ติดตั้งด้วยตนเองทำดังนี้ เริ่มต้นติดตั้งโปรแกรมที่จำเป็นใช้งานด้วยคำสั่ง
    sudo apt-get install coreutils dialog genisoimage findutils bash passwd sed squashfs-tools casper rsync mount eject libdebian-installer4 os-prober
    sudo apt-get install ubiquity user-setup discover laptop-detect syslinux xterm util-linux xresprobe

    ต่อให้ดาวน์โหลดแฟ้ม remastersys มาติดตั้งดังนี้
    wget -P /tmp http://ftp.psu.ac.th/pub/remastersys/remastersys_3.0.0-1_all.deb
    sudo dpkg -i /tmp/remastersys_3.0.0-1_all.deb

    บางทีเจอบั๊ก โปรแกรมไม่สร้าง /home/remastersys
    ให้แก้ไขด้วยการสร้างเองด้วยคำสั่ง  sudo mkdir -p /home/remastersys
  • การใช้งานแบบง่ายที่สุด คือเป็นการ backup ทั้ง hard disk มาเก็บไว้เป็น live DVD
    ที่สามารถนำไปบูทใช้งานได้โดยไม่ต้องมี hard disk ใช้คำสั่งว่า  sudo remastersys backup
    แล้วก็ให้รอๆๆ จนงานเสร็จ ช้าหรือเร็วขึ้นกับความเร็วของ disk
    เมื่อเสร็จแล้วจะได้แฟ้ม iso อยู่ที่ /home/remastersys/remastersys
  • หากต้องการให้ปิดการสั่งดีดแผ่นซีดีออกหลังการสั่งให้ shutdown
    ให้แก้ไขแฟ้ม /etc/init.d/casper ประมาณบรรทัดที่ 96
    ยกเลิกบรรทัดคำสั่ง eject เดิม กลายเป็นดังตัวอย่าง
    # eject -p -m /cdrom > /dev/null 2>&1

    และแก้ไขแฟ้ม /etc/remastersys/isolinux/isolinux.cfg.vesamenu
    ให้เพิ่ม noprompt เข้าไป ตัวอย่างเช่น
    label live
      menu label live - boot the Live System
      kernel /casper/vmlinuz
      append  file=/cdrom/preseed/custom.seed boot=casper initrd=/casper/initrd.gz splash noprompt --