สวัสดีครับช่วงนี้ก็เสร็จสิ้นการเรียน Summer ของผมแล้วเลยพอมีเวลาว่างมานั่งเขียนโน้นเขียนนี่บ้าง วันนี้นำเรื่องการติดตั้งเมลเซิร์ฟเวอร์สำหรับ CentOS 5 มาฝากกันครับ วันนี้คิดว่าอยู่ว่างๆ เลยมานั่งเขียนให้เสร็จไปเลยดีกว่า อีกอย่างช่วงนี้ผมเองก็ไม่ค่อยจะได้อัพเดทบล๊อกสักเท่าไหร่
ในการติดตั้งเครื่องเซิร์ฟเวอร์ CentOS ใหม่ ผมไม่เลือก Packages อะไรเลยน่ะครับ แม้แต่ Gnome เองผมก็ไม่ได้เลือก เป็นเครื่องเปล่าๆ ผมปิดการทำงานของ iptables และ selinux ทั้งหมด
*Tip แนะนำสำหรับผู้เริ่มเริ่มใช้งานลีนุกซ์ใหม่นิดนึงครับเรื่องการแบ่งพาร์ติชันของลีุนุกซ์ ควรแบ่ง /var/spool/mail และ /var/log แยกออกมาจาก /var จะดีที่สุดครับ และควรให้ /var/log มีขนาดใหญ่เป็นพิเศษ เพราะจากประสบการณ์ของผมหากเราไม่ได้แยก /var/log และ /var/spool/mail ออกมาจาก /var และกำหนดขนาดของ /var ไว้น้อยเกินไปเช่น 4 GB ไม่นาน /var ก็จะเต็มเพราะ /var/log และ /var/spool/mail จะโตขึ้นทุกวันอาจทำให้ Server ที่เราให้บริการมีปัญหาได้
ก็เป็นทิปเล็กๆ น้อยๆ มาเริ่มกันเลยดีกว่าครับ
1.) ติดตั้ง Postfix (SMTP)
# yum install postfix
หลังจากติดตั้งเสร็จ ไฟล์คอนฟิกต่างๆ ของ postfix อยู่ที่ /etc/postfix
ไฟล์สำคัญที่ใช้สำหรับคอนฟิกค่าหลักๆ ของ postfix คือไฟล์ /etc/postfix/main.cf
2.) Generate Certificate Files ให้กัับ Postfix
# mkdir /etc/postfix/ssl
# cd /etc/postfix/ssl/
# openssl genrsa -rand /etc/hosts -out smtpd.key 1024
# chmod 600 smtpd.key
# openssl req -new -key smtpd.key -out smtpd.csr
# openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
# openssl rsa -in smtpd.key -out smtpd.key.unencrypted
# mv -f smtpd.key.unencrypted smtpd.key
# openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
3.) สร้างไฟล์ /etc/postfix/mime_header_checks เพื่อป้องกันไฟล์แนบที่เป็น .bat .exe .com .vbs
# echo "/name=[^>]*\.(bat|com|exe|dll|vbs)/ REJECT" > /etc/postfix/mime_header_checks
4.) สร้างไฟล์ /etc/postfix/mbl-body-deny เพื่อป้องกัน Malware
# wget -O - http://www.malware.com.br/cgi/submit?action=list_postfix > /etc/postfix/mbl-body-deny
5.) สร้างสคริปท์สำหรับใช้อัพเดทไฟล์ /etc/postfix/mbl-body-deny
# nano /etc/postfix/fetch.postfixmalware.sh
จากนั้นเพิ่มบรรทัดเหล่านี้เข้าไป
#!/bin/bash
# Script to update malware urls
/usr/bin/wget -O - http://www.malware.com.br/cgi/submit?action=list_postfix > /etc/postfix/mbl-body-deny
/usr/sbin/postmap /etc/postfix/mbl-body-deny
/etc/init.d/postfix reload
บันทึกและออกจาก nano (บันทึกกด Ctrl + O และออกกด Ctrl + X)
6.) เปลี่ยน permission ให้กับ /etc/postfix/fetch.postfixmalware.sh
# chmod +x /etc/postfix/fetch.postfixmalware.sh
7.) เพิ่ม crontab ดังนี้
# crontab -e
จากนั้นเพิ่มบรรทัดด้านล่างเข้าไป (กด i เพื่อเข้า Insert โหมด)
40 03 * * * /etc/postfix/fetch.postfixmalware.sh >/dev/null 2>&1
บันทึกและออกจาก crontab (กด esc แล้วกด :wq)
8.) ตอนนี้เราสร้างไฟล์ต่างๆ สำหรับ postfix เสร็จเรียบร้อยแล้วก็มาถึงขึ้นตอนการกำหนดค่าในไฟล์คอนฟิกของ postfix กันบ้าง
# cd /etc/postfix
# cp main.cf main.cf.original
# nano main.cf
ค่าที่สำคัญๆ มีดังนี้
myhostname = mail.obsdcontrol.org
mydomain = obsdcontrol.org
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, $mydomain, localhost
mynetworks = 202.41.164.195/128, 127.0.0.0/8
และเพิ่มบรรทัดเหล่านี้ไปต่อท้ายไฟล์
body_checks = regexp:/etc/postfix/mbl-body-deny
mime_header_checks = regexp:/etc/postfix/mime_header_checks
smtpd_tls_auth_only = yes
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
mailbox_size_limit = 0
#ส่วนของการป้องกัน Spam
smtpd_helo_required = yes
disable_vrfy_command = yes
strict_rfc821_envelopes = yes
invalid_hostname_reject_code = 554
multi_recipient_bounce_reject_code = 554
non_fqdn_reject_code = 554
relay_domains_reject_code = 554
unknown_address_reject_code = 554
unknown_client_reject_code = 554
unknown_hostname_reject_code = 554
unknown_local_recipient_reject_code = 554
unknown_relay_recipient_reject_code = 554
unknown_sender_reject_code = 554
unknown_virtual_alias_reject_code = 554
unknown_virtual_mailbox_reject_code = 554
unverified_recipient_reject_code = 554
unverified_sender_reject_code = 554
smtpd_recipient_restrictions =
reject_invalid_hostname,
reject_unknown_recipient_domain,
reject_unauth_pipelining,
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
reject_rbl_client multi.uribl.com,
reject_rbl_client dsn.rfc-ignorant.org,
reject_rbl_client list.dsbl.org,
reject_rbl_client sbl-xbl.spamhaus.org,
reject_rbl_client bl.spamcop.net,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client ix.dnsbl.manitu.net,
reject_rbl_client combined.rbl.msrbl.net,
reject_rbl_client rabl.nuclearelephant.com,
permit
smtpd_error_sleep_time = 1s
smtpd_soft_error_limit = 10
smtpd_hard_error_limit = 20
บันทึกและออกจาก nano
9.) เนื่องด้วย CentOS มีการติดตั้ง Sendmail และกำหนดให้เป็นโปรแกรมเริ่มต้นของระบบดังนั้นจึงจำเป็นต้องถอนการติดตั้งหรือไม่ก็หยุดการทำงานของ Sendmail เสียก่อนถึงจะเปิดใช้งาน Postfix ได้ ในกรณีนี้ผมขอถอนการติดตั้งของ Sendmail
# /etc/init.d/sendmail stop
# yum remove sendmail
กำหนดให้ Postfix ทำงานทุกครั้งเมื่อเริ่มต้นระบบ
# chkconfig postfix on
# postmap /etc/postfix/mbl-body-deny
เริ่มการทำงานของ postfix
# /etc/init.d/postfix start
10.) เปิดการทำงานของเซอร์วิส saslauthd
# ckhconfig saslauthd on
# /etc/init.d/saslauthd start
11.) ติดตั้่ง Dovecot (IMAP, POP3)
# yum install dovecot
หลังจากติดตั้งเสร็จจะได้ไฟล์ /etc/dovecot.conf ค่าเริ่มต้นของ dovecot นี่สามารถใช้งานได้เลย หรือถ้าใครจะแก้ไข เช่น กำหนดให้รับเฉพราะ ipv4 ก็สามารถไปกำหนดได้ในไฟล์ดังกล่าว
12.) กำหนดใช้ Dovecot ทำงานทุกครั้งเมื่อเริ่มต้นระบบ
# chkconfig dovecot on
เริ่มการทำงานของ dovecot
# /etc/init.d/dovecot start
13.) ทดสอบการทำงานของ Postfix และ Dovecot
# ps aux | grep postfix
root 1952 0.0 0.6 6708 1760 ? Ss 12:24 0:00 /usr/libexec/postfix/master
postfix 1955 0.0 0.7 6828 1820 ? S 12:24 0:00 qmgr -l -t fifo -u
postfix 3442 0.0 0.6 6772 1716 ? S 15:44 0:00 pickup -l -t fifo -u
# ps aux | grep dovecot
root 2035 0.0 0.2 1844 560 ? Ss 12:31 0:03 /usr/sbin/dovecot
root 2037 0.0 0.6 7496 1640 ? S 12:31 0:03 dovecot-auth
dovecot 2038 0.0 0.6 4788 1680 ? S 12:31 0:03 pop3-login
dovecot 2039 0.0 0.6 4788 1684 ? S 12:31 0:03 pop3-login
dovecot 2040 0.0 0.6 4788 1684 ? S 12:31 0:03 pop3-login
dovecot 2041 0.0 0.6 4792 1684 ? S 12:31 0:03 imap-login
dovecot 2042 0.0 0.6 4792 1684 ? S 12:31 0:03 imap-login
dovecot 2043 0.0 0.6 4792 1688 ? S 12:31 0:03 imap-login
# netstat -pant | grep 25
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1952/master
# netstat -pant | grep 110
tcp 0 0 :::110 :::* LISTEN 2035/dovecot
# netstat -pant | grep 143
tcp 0 0 :::143 :::* LISTEN 2035/dovecot
# netstat -pant | grep 993
tcp 0 0 :::993 :::* LISTEN 2035/dovecot
# netstat -pant | grep 995
tcp 0 0 :::995 :::* LISTEN 2035/dovecot
ทดสอบโดยใช้คำสั่ง telnet ไปยังเครื่องเซิร์ฟเวอร์ที่พอร์ต 25, 110, 143 เพื่อทดสอบ postfix และ dovecot
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
Escape character is '^]'.
220 mail.obsdcontrol.org ESMTP Postfix
ehlo mailserver
250-mail.obsdcontrol.org
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
Escape character is '^]'.
+OK Dovecot ready.
# telnet localhost 143
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
Escape character is '^]'.
* OK Dovecot ready.
14.) ติดตั้ง httpd (Apache) + mod_ssl + mod_perl
# yum install httpd mod_ssl mod_perl
หลังจากติดตั้งเสร็จแล้วไฟล์คอนฟิกต่างของ httpd จะอยู่ที่ /etc/httpd/conf และ /etc/httpd/conf.d ไฟล์คอนฟิกหลักของ httpd คือ /etc/httpd/conf/httpd.conf
กำหนดให้ httpd ทำงานเองทุกครั้งเมื่อเริ่มต้นระบบ
# chkconfig httpd on
เริ่มการทำงานของ httpd
# /etc/init.d/httpd start
15.) ติดตั้ง OpenWebmail สำหรับใช้เป็นเว็บเมล เราสามารถติดตั้ง openwebmail ได้หลายรูปแบบแต่ที่ผมจะทำในขั้นตอนต่อไปนี้ผมจะติดตั้งผ่านคำสั่ง yum
ดาวน์โหลด Repository ของ Openwebmail
# cd /etc/yum.repos.d
# lftpget ftp://openwebmail.org/pub/yum/openwebmail.repo แก้ไข 21 กรกฎาคม 2551
# lftpget http://openwebmail.org/openwebmail/download/redhat/rpm/release/openwebmail.repo
ติดตั้ง Repository ของ DAG เพิ่มเติมเข้าไปสำคัญมาก หากไม่ติดตั้งจะทำให้ไม่สามารถติดตั้ง Packages perl-Text-Iconv ได้
# rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
ติดตั้ง Openwebmail
# yum install openwebmail
เมื่อติดตั้งเสร็จแล้ว openwebmail จะอยู่ที่ /var/www/cgi-bin/openwebmail
จากนั้นรันคำสั่งต่อไปนี้
# /var/www/cgi-bin/openwebmail/openwebmail-tool.pl --init
16.) รีสตาร์ท httpd และทดลองเข้า openwebmail โดยเรียก url ดังนี้
http://mail.yourdomain.com/cgi-bin/openwebmail/openwebmail.pl หรือ
http://mail.yourdomain.com/webmail (ในกรณีที่มีการติดตั้ง Squirrelmail อยู่ก่อนหน้าแล้ว Alias ของ Openwebmail จะไปแทนที่ Alias ของ Squirrelmail ซึ่งจะอธิบายในข้อต่อไป) จะได้หน้าเว็บดังนี้

17.) จากที่กล่าวไว้ข้างต้นเรื่อง Alias ของ Openwebmail อาจไปซ้ำซ้อนกับ Squirrelmail (หากไม่ได้ติดตั้ง Squirrelmail ไว้ก่อนหน้า ข้ามหัวข้อนี้ไปได้เลย) ตำแหน่งที่เก็บไฟล์ Alias ของ Openwebmail จะอยู่ที่ /etc/httpd/conf.d/openwebmail.conf โดยในไฟล์ดังกล่าวมีข้อมูลดังนี้
ScriptAlias /webmail /var/www/cgi-bin/openwebmail/openwebmail.pl
Alias /data /var/www/data
วิธีเปลี่ยนชื่อ Alias ทำได้โดยเปลี่ยนค่า /webmail เป็นชื่อที่ต้องการเช่น /openwebmail จากนั้นรีสตาร์ท httpd และเรียก url
http://mail.yourdomain.com/openwebmail
ส่งท้ายเรื่อง Openwebmail หากต้องการแก้ไข logo ในหน้า login สามารถแก้ไขไฟล์ /var/www/data/openwebmail/images/openwebmail.gif โดยนำรูปที่ต้องการเป็น logo ไปเซฟทับไฟล์เก่าได้เลยครับ
18.) ติดตั้ง MailGraph เพื่อดูสถิติการใช้งานเมลเซิร์ฟเวอร์
ดาวน์โหลด mailgraph
# wget http://mailgraph.schweikert.ch/pub/mailgraph-1.14.tar.gz
# tar zxvf mailgraph-1.14.tar.gz
# cd mailgraph-1.14
# mv mailgraph.pl /usr/local/bin/
# chmod +x mailgraph-init
# mv mailgraph-init /etc/init.d/mailgraph
แก้ไขไฟล์ /etc/init.d/mailgraph
# nano /etc/init.d/mailgraph
โดยเปลี่ยนค่าบรรทัดต่อไปนี้
MAIL_LOG=/var/log/syslog
เป็น
MAIL_LOG=/var/log/maillog
และเพิ่ม IGNORE_LOCALHOST="--ignore-localhost" ต่อท้าย RRD_DIR=/var/lib ดังตัวอย่าง
PATH=/bin:/usr/bin
MAILGRAPH_PL=/usr/local/bin/mailgraph.pl
MAIL_LOG=/var/log/maillog #เปลี่ยนค่า
PID_FILE=/var/run/mailgraph.pid
RRD_DIR=/var/lib
IGNORE_LOCALHOST="--ignore-localhost" #เพิ่มเข้าไป
case "$1" in
'start')
echo "Starting mail statistics grapher: mailgraph";
nice -19 $MAILGRAPH_PL -l $MAIL_LOG -d \
--daemon-pid=$PID_FILE --daemon-rrd=$RRD_DIR $IGNORE_LOCALHOST #เพิ่มต่อเข้าไป
;;
# mv mailgraph.* /var/www/cgi-bin
แก้ไขไฟล์ /var/www/cgi-bin/mailgraph.cgi
โดยแก้สองบรรทัดดังนี้
my $rrd = 'mailgraph.rrd'; # path to where the RRD database is
my $rrd_virus = 'mailgraph_virus.rrd'; # path to where the Virus RRD database is
เป็น
my $rrd = '/var/lib/mailgraph.rrd'; # path to where the RRD database is
my $rrd_virus = '/var/lib/mailgraph_virus.rrd'; # path to where the Virus RRD database is
เนื่องจาก mailgraph จำเป็นต้องใช้เพ็กเกจ rrdtool และ perl-File-Tail ดังนั้นจึงจำเป็นต้องติดตั้ง rrdtool และ perl-File-Tail เสียก่อน (อ่านได้จาก README)
# yum install rrdtool perl-File-Tail
เริ่มการทำงานของ mailgraph
# /etc/init.d/mailgraph start
ให้ mailgraph ทำงานเองเมื่อเริ่มต้นระบบ
# ckhconfig mailgraph on
ทดสอบเรียกดูหน้าเว็บของ mailgraph โดยเรียก url
http://mail.yourdomail.com/cgi-bin/mailgraph.cgi

สำหรับเรื่องของเมลเซิร์ฟเวอร์ก็คงมีแค่นี้ครับ สำหรับวิธีการใช้งานก็สร้าง user ขึ้นมาตามต้องการจากนั้นก็ลองรับส่งกันดูได้ครับ
เพิ่มเติมนิดนึงครับ สำหรับใครที่ต้องการให้บริการแค่เว็บเมล และไม่ได้ใช้โปรแกรม mail agent อย่างพวก outlook, thunder bird , etc... ก็สามารถปิดบริการของ Dovecot ออกไปได้เลยครับ เพราะ Openwebmail ไม่จำเป็นต้องใช้ imap เหมือนกัน Squirrelmail และทางที่ดีควรใช้โปรโทคอล https ในการ login เพื่อใช้งานระบบเว็บเมลจะดีที่สุดครับ เพราะมีความปลอดกับกว่า http ธรรมดา
หากขาดตกบกพร่องส่วนไหนไปยินดีรับความคิดเห็นของทุกคนน่ะครับ
ขอบคุณครับ
แหล่งข้อมูล :
http://dag.wieers.com/rpm/FAQ.php#B
http://www.openwebmail.org/openwebmail/download/redhat/yum/readme.txt
http://www.howtoforge.com/perfect_server_centos4.5_p5
http://www.cyberciti.biz/tips/howto-setup-postfix-mail-server-to-block-mal
http://www.howtoforge.com/block_spam_at_mta_level_postfix
http://www.cyberciti.biz/tips/postfix-spam-filtering-with-blacklists-howto.html


เมนูของ gillclub












เมื่อ ส. 17 พฤษภาคม 2551 @ 02:06
250573 [ลบ]
เยี่ยมครับ...การแบ่งปันและถ่ายทอดความรู้ให้คนอื่นๆ แบบนี้ น่ายกย่อง ให้กำลังใจและทำดีต่อไปนะ...แต่ไงกิว ก้อพยายามทำสิ่งดีให้กับตัวเองด้วยล่ะ ขอบคุณแทนเพื่อนๆ ที่ได้อ่านบทความนี้ด้วยครับผม ^o^
เมื่อ อ. 27 พฤษภาคม 2551 @ 14:44
251756 [ลบ]
ขอบคุณครับ เดี่ยวจะลองทำดู
เมื่อ จ. 18 ส.ค. 2551 @ 09:10
290637 [ลบ]
สุดยอดครับ หามานานแล้ว ขอบคุณมากเดี๋ยวจะลองทำดู
เมื่อ จ. 01 ก.ย. 2551 @ 17:53
300135 [ลบ]
สุดยอดมากเลยครับ ลองทำดูแล้วเวิร์กมาเลยครับ ขอบคุณมากครับ
เมื่อ อ. 04 พ.ย. 2551 @ 10:45
318993 [ลบ]
คือว่านะคัฟ มีปัญหาการใช้ telnet อ่ะคัฟ
คือว่า มีตัว install แร้ว
แต่ว่า จะใช้เครื่องอื่นทำการ
ติดต่อกับฐานข้อมูลของเครื่องเราอ่ะคัฟ
คือว่า เราใช้ sent OS 5 อ่ะคัฟ
ไม่สามารถติดต่อกันได้เรย
ควรทำไงดี ปวดหัวมากมายเรย