ความเห็น: 25
การติดตั้ง mail server บน freebsd ด้วย postfix + dovecot + squirrelmail
ติดพันมาหลายวันแล้วครับ ว่าจะเขียนวิธีติดตั้ง Mail Server บน FreeBSD ดีใจมากเลยครับที่ได้กลับมาจับ FreeBSD อีกครั้ง สาเหตุก็มาจากท่าน กุ๊ก ท่านขอให้ช่วย config mail server ให้เครื่องนึง ก็คุย msn กับท่านครับท่านให้ ip, user, passwd ผมก็เข้าไปจัดการเลย ไม่ได้เล่น FreeBSD มาหลายเดือนแล้ว (ช่วงนี้เล่น OpenBSD อยู่กะพี่ วิ) พอเข้าไปก็ดูโน้นดูนี่ของระบบนิดหน่อย ไม่รอช้าครับก็เริ่มติดตั้งเลย
1.) ติดตั้ง Postfix โดยเข้าไปทที่ /usr/ports/mail/postfix-current/
# cd /usr/ports/mail/postfix-current/
# make config
จะมีหน้าจอมาให้เราเลือก options ของ postfix ผมเลือก PCRE, DOVECOT และ TLS

แล้วเลือก OK จากนั้นสั่ง make install clean
# make install clean
แล้วก็รอ ...
Added group “postfix”.
Added group “maildrop”.
Added user “postfix”.
You need user “postfix” added to group “mail”.
Would you like me to add it [y]? y
install -d -o root -g wheel -m 555 /usr/local/share/doc/postfix
Installed HTML documentation in /usr/local/share/doc/postfix
Would you like to activate Postfix in /etc/mail/mailer.conf [n]? y
2.) เปิดไฟล์ /etc/rc.conf
# vi /etc/rc.conf
เพิ่มบรรทัดเหล่านี้เข้าไป
postfix_enable="YES"
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
save และออกจาก vi
3.) Generate Cert ให้ Postfix
# mkdir /usr/local/etc/postfix/ssl
# cd /usr/local/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
4.) สร้างไฟล์ mime_header_checks เพื่อป้องกันไฟล์แนบที่เป็น .bat .exe .com .vbs
# echo "/name=[^>]*\.(bat|com|exe|dll|vbs)/ REJECT" > /usr/local/etc/postfix/mime_header_checks
5.) แก้ไขไฟล์ /usr/local/etc/postfix/main.cf
# cd /usr/local/etc/postfix
# cp main.cf main.cf.original
# vi main.cf
โดยค่าที่สำคัญๆ มีดังนี้
myhostname = mail.suratham.ac.th
mydomain = suratham.ac.th
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, $mydomain, localhost
mynetworks = 61.19.30.48/29, 127.0.0.0/8
และเพิ่มบรรทัดเหล่านี้ไปต่อท้ายไฟล์
mime_header_checks = regexp:/usr/local/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 = /usr/local/etc/postfix/ssl/smtpd.key
smtpd_tls_cert_file = /usr/local/etc/postfix/ssl/smtpd.crt
smtpd_tls_CAfile = /usr/local/etc/postfix/ssl/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
mailbox_size_limit = 0
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
save และออกจาก vi
6.) ติดตั้ง Dovecot โดยเข้าไปที่ /usr/ports/mail/dovecot/
# cd /usr/ports/mail/dovecot/
# make install clean
จะมีหน้าจอให้เราเลือก Options for dovecot 1.0.r7_2

ในขั้นตอนนี้ผมไม่ได้เลือกอะไรเพิ่มเติมเข้าไป
ตอบ OK แล้วก็รอสักครู่ ... ระบบจะถามให้เรา add user กับ group ของ dovecot เข้าไปในระบบเหมือนกับ postfix ก็ตอบ y ไปน่ะครับ
7.) แก้ไขไฟล์ dovecot.conf
# cd /usr/local/etc/
# cp dovecot-example.conf dovecot.conf
# vi dovecot.conf
โดยกำหนดค่า ดังนี้
protocols = imap pop3 imaps pop3s
disable_plaintext_auth = no
ssl_cert_file = /usr/local/etc/postfix/ssl/cacert.pem
ssl_key_file = /usr/local/etc/postfix/ssl/cakey.pem
ssl_key_password = 1234 # password ที่เราใส่ตอน Generate Cert ของ Postfix
***สาเหตุที่ผมใช้ Cert ร่วมกับ Postfix เนื่องจากไม่อยาก Generate ใหม่
8.) เมื่อติดตั้งและคอนฟิก Dovecot เสร็จแล้ว เปิดไฟล์ /etc/rc.conf
#vi /etc/rc.conf
จากนั้นเพิ่มบรรทัดต่อไปนี้เข้าไป
dovecot_enable="YES"
save และออกจาก vi
9.) สั่งสร้าง aliases ใหม่
# newaliases
10.) ตอนนี้เราก็ได้ติดตั้ง SMTP, POP3, IMAP เซิร์ฟเวอร์เสร็จเรียบร้อยแล้ว ให้ทำการ reboot เครื่องเพื่อให้เซอร์วิสทำงาน
# reboot
11.) หลังจากบูตเครื่องขึ้นมาใหม่ทดสอบการทำงานของระบบได้โดยใช้คำสั่ง
# ps aux | grep master
root 59072 0.0 0.4 2680 1900 ?? Is 4:31PM 0:00.12 /usr/local/libexec/postfix/master
# ps aux | grep dovecot
root 59103 0.0 0.2 1472 1160 ?? Ss 4:31PM 0:00.43 /usr/local/sbin/dovecot
root 59104 0.0 0.2 1704 1276 ?? S 4:31PM 0:00.32 dovecot-auth
dovecot 59105 0.0 0.4 2612 2044 ?? S 4:31PM 0:00.35 pop3-login
dovecot 59106 0.0 0.4 2612 2044 ?? S 4:31PM 0:00.31 pop3-login
dovecot 59107 0.0 0.4 2612 2044 ?? S 4:31PM 0:00.32 pop3-login
dovecot 59109 0.0 0.4 2616 2048 ?? S 4:31PM 0:00.31 imap-login
dovecot 59110 0.0 0.4 2616 2048 ?? S 4:31PM 0:00.32 imap-login
dovecot 65521 0.0 0.4 2616 2048 ?? S 9:30PM 0:00.01 imap-login
# netstat -an | grep 25
tcp4 0 0 *.25 *.* LISTEN
#netstat -an | grep 110
tcp4 0 0 *.110 *.* LISTEN
# netstat -an | grep 143
tcp4 0 0 *.143 *.* LISTEN
#netstat -an | grep 993
tcp4 0 0 *.993 *.* LISTEN
# netstat -an | grep 995
tcp4 0 0 *.995 *.* LISTEN
12.) telnet ไปยังเครื่องเซิร์ฟเวอร์ที่พอร์ต 25,110,143 เพื่อทดสอบ postfix และ dovecot
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.suratham.ac.th.
Escape character is '^]'.
220 mail.suratham.ac.th ESMTP Postfix
ehlo server
250-mail.suratham.ac.th
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-STARTTLS <- แสดงว่า TLS ทำงานแล้ว
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.suratham.ac.th.
Escape character is '^]'.
+OK Dovecot ready.
# telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.suratham.ac.th.
Escape character is '^]'.
* OK Dovecot ready.
หากเอาท์พุตออกมาเหมือนข้อ 11 - 12 แสดงว่าเครื่องของเราพร้อมให้บริการ E-Mail แล้ว
เมื่อตัว Postfix และ Dovecot เสร็จ ต่อไปก็มาถึงเว็บเมล์กันบ้าง
เนื่องด้วย Squirrelmail พัฒนามาจากภาษา PHP ดังนั้นจึงต้องติดตั้ง Apache + PHP5 เข้าไปด้วย
การติดตั้ง Apache + PHP + Squirrelmail
1.) ติดตั้ง Apache22
# cd /usr/ports/www/apache22
#make install clean
รอสักครู่ ... จะมีหน้าจอให้เราเลือก Option ของ gettext ให้กด OK ไปเลยโดยไม่ต้องเลือกอะไร

รอจนติดตั้งเสร็จ ...
2.) ติดตั้ง PHP5
# cd /usr/ports/lang/php5
# make config
จะมีหน้าจอให้เราเลือก Option ในการติดตั้ง ผมเลือก APACHE, SUHOSIN และ MULTIBYTE เพิ่มเข้าไป (ผมไม่เลือก IPV6)
แล้วก็เลือก OK
# make install clean
จากนั้นก็รอ ...
3.) เมืือติดตั้ง PHP5 เสร็จแล้วทีนี้มาติดตั้ง php5-extensions
# cd /usr/ports/lang/php5-extensions
#make config
จะมีหน้าจอให้เราเลือกว่าจะติดตั้ง extensions อะไรเพิ่มเติมบ้าง
ผมไม่ได้เลือก GD น่ะครับเพราะใช้เวลาคอมไพล์ค่อนข้างนาน ที่ผมเลือกมี BZ2,CTYPE,DOM,HASH,ICONV,IMAP,MBSTRING,MCRYPT,MHASH,
OPENSSL,PCRE,PDO,POSIX,SESSION,SIMPLEXML,SQLITE,TOKENIZER,XML,XMLREADER,XMLWRITER,ZLIB
เมื่อเลือกเสร็จแล้วก็มาถึงขั้นตอนการติดตั้ง
# make install clean
แล้วก็รออีกเช่นเคย ...
4.) เมื่อติดตั้ง php5-extensions เสร็จแล้วก็มาถึงขั้นตอนการทำให้ Apache รู้จักกับ PHP ให้เข้าไปที่ /usr/local/etc/apache22/Include
# cd /usr/local/etc/apache22/Includes
สร้างไฟล์ชื่อ php5.conf โดยใช้ vi
# vi php5.conf
เพิ่มบรรทัดต่อไปนี้เข้าไป
DirectoryIndex index.php
AddDefaultCharset tis-620
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Include etc/apache22/extra/httpd-ssl.conf
save และออกจาก vi
5.) สร้างไฟล์ php.ini
# cd /usr/local/etc/
# cp php.ini-recommended php.ini
กำหนดค่าในไฟล์ php.ini
default_charset = "tis-620" #เอาเรื่องหมาย ; ออกด้วย
session.save_path = "/tmp/sesstmp" #เอาเครื่องหมาย ; ออกด้วย อย่าลืมไปสร้าง /tmp/sesstmp ใน /tmp พร้อมกับ chmod 777 /tmp/sesstmp ด้วยน่ะครับ
ุ
6.) Generate Cert ให้ apache เพื่อใช้รัน HTTPS
# cd /usr/local/etc/apache22/
# openssl genrsa -out server.key 1024
# openssl req -new -days 365 -key server.key -out server.csr
# openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365
# chmod 400 server.*
7.) ให้ apache ทำงานทุกครั้งเมื่อเปิดเครื่อง
# vi /etc/rc.conf
เพิ่มบรรทัดต่อไปนี้เข้าไป
apache22_enable="YES"
save และออกจาก vi
8.) reboot เครื่อง
# reboot
9.) ตอนนี้ระบบของเราก็พร้อมที่จะติดตั้ง Squirrelmail แล้ว สามารถทดสอบ php ได้โดย
# cd /usr/local/www/apache22/data
# echlo "<?PHP phpinfo();?>" > info.php
เปิด browser แล้วเข้าไปที่ http://mail.suratham.ac.th/info.php หรือ https://mail.suratham.ac.th/info.php
10.) ติดตั้ง Squirrelmail
# cd /usr/ports/mail/squirrelmail
# make install clean
รอสักครู่ ...
เมื่อติดตั้งเสร็จแล้ว squirrelmail จะอยู่ที่ /usr/local/www/squirrelmail/
11.) คอนฟิก squirrelmail
# cd /usr/local/www/squirrelmail
# ./configure

เลือกเมนูหมายเลข 2

กำหนดค่าต่างๆ ตามความต้องการได้เลยครับ ผมจะไม่ขอแจงรายละเอียดในส่วนนี้มากน่ะครับ ส่วน Languages เมนูหมายเลข 10 ของหน้าเมนูหลักผมเลือกเป็น th_TH และ tis-620
12.) ทำให้หน้าแรกของ mail.suratham.ac.th เป็นหน้า login ของ squirrelmail ที่จริงแล้วเราควรเข้าไปเปลี่ยน DocumentRoot ของ Apache น่ะครับ แต่ผมถือเอาความมักง่ายใช้วิธีสร้าง Symbolic link แทน
# cd /usr/local/www/apache22
# mv data data_bak
# ln -s /usr/local/www/squirrelmail data
13.) เปลี่ยนจาก http ไปใช้ https เพื่อเพิ่มความปลอดภัยเวลา login
# cd /usr/local/www/squirrelmail/
# vi index.php
เปลี่ยนค่าในฟังก์ชัน header ดังนี้ครับ
เปลี่ยนจาก header('Location: /src/login.php');
เปลี่ยนเป็น header('Location: https://mail.suratham.ac.th/src/login.php');
ดังนั้น ทุกครั้งที่เราเรียก http://mail.suratham.ac.th ก็จะถูก redirect ไปที่ https://mail.suratham.ac.th/src/login.php จึงมั่นใจได้ว่าเวลาที่เราล็อกอิน User กับ Password ของเราจะถูกเข้ารหัสก่อนส่งไปหาเซิร์ฟเวอร์
13.) คงเป็นเรื่องสุดท้ายแล้วครับ คือ เรื่องของภาษาไทยของ squirrelmail สำหรับ version ใหม่ๆ จะไม่มีเมนูภาษาไทยมาให้ วิธีแก้ก็ไม่ยากครับ ไปดาวน์โหลดมาเองเลยจาก
http://jaist.dl.sourceforge.net/sourceforge/squirrelmail/th_TH-1.5.1-20060409.tar.gz
# cd /tmp
# mkdir local
# cd local
# fetch http://jaist.dl.sourceforge.net/sourceforge/squirrelmail/th_TH-1.5.1-20060409.tar.gz
# tar zxvf th_TH-1.5.1-20060409.tar.gz
# ./install
Please enter path to your squirrelmail installation:/usr/local/www/squirrelmail <-กรอก path ของ squirrelmail
# cd /usr/local/www/squirrelmail/functions/
# vi i18n.php
หาบรรทัดต่อไปนี้ครับ
/* translation is disabled because it contains less than 50%
* translated strings
$languages['th_TH']['NAME'] = 'Thai';
$languages['th_TH']['CHARSET'] = 'tis-620';
$languages['th_TH']['LOCALE'] = 'th_TH.TIS-620';
$languages['th']['ALIAS'] = 'th_TH';
*/
เอา comment ออก(บรรทัดที่มี * ) เป็น
$languages['th_TH']['NAME'] = 'Thai';
$languages['th_TH']['CHARSET'] = 'tis-620';
$languages['th_TH']['LOCALE'] = 'th_TH.TIS-620';
$languages['th']['ALIAS'] = 'th_TH';
save และออกจาก vi
ส่วนเรื่องการเปลี่ยน logo ผมไม่ขอพูดถึงน่ะครับ
แค่นี้ mail server พร้อมเว็บเมล์ของเราก็พร้อมใช้งานแล้วครับ
สรุป
การติดตั้งครั้งนี้ติดตั้งบน FreeBSD 6.2 โดยใช้โปรแกรม Postfix เป็น smtp และโปรแกรม dovecot เป็น imap,pop3 โดยมี squirrelmail เป็นเว็บเมล์ output ที่ได้ออกมาคือ http://mail.suratham.ac.th ซึ่งสามารถใช้งานภาษาไทยได้ในระดับนึง
path ของ script สำหรับควบคุมการทำงานของโปรแกรมต่างๆ ที่ติดตั้งไป
/usr/local/etc/rc.d/postfix <- ควบคุมการทำงานของ Postfix สามารถ start | restart | stop service ได้
/usr/local/etc/rc.d/dovecot <- ควบคุมการทำงานของ Dovecot สามารถ start | restart | stop service ได้
/usr/local/etc/rc.d/apache22 <- ควบคุมการทำงานของ Apache สามารถ start | restart | stop service ได้
แหล่งข้อมูล :
http://www.unixug.net/weBlog/2007/howto-setup-postfix-and-qpopper-on-freebsd-62/
http://chatpong.exteen.com/20050830/postfix-2-3-freebsd-5-4
http://chatpong.exteen.com/20050708/freebsd-5-4
http://bsd.psru.ac.th/FreeBSD62/FreeBSD62_FAMP_62.pdf
http://www.howtoforge.com/perfect_server_centos4.5_p5
http://learners.in.th/blog/mrgill/51494
บันทึกอื่นๆ
- เก่ากว่า « ปลดปล่อยพันธนาการ การดูหนังฟังเพ...
- ใหม่กว่า » คำศัพท์พื้นบ้านพัทลุง
ความเห็น
โอ สวรรค์ทรงโปรด
ในที่สุด ก็มีคนบอกเราแล้ว
แต่ยังไม่ได้ลอง ขอลองทำใหม่ก่อนนะครับ
แบบว่ามั่วเจ้าเมล์นี้มาจะเดือนแล้วครับ อิอิ
ขอบคุณมากครับ
สวัสดีครับ ขอถามหน่อยครับ
ผมยังไม่ค่อยเข้าใจเรื่อง blog อยากจะทำแบบเว็บ
แบบนี้บ้าง ไม่ทราบว่าผมต้องลงแพคเกจตัวไหนเพิ่มบ้างครับ ตอนนี้ผใช้ FreeBSD 6.2 ครับ และใช้ dynamic dns มีให้ดาวน์โหลดมั้ยครับ หรือว่ามี ports ของ FreeBSD มั้ยครับ ช่วยแนะนำหน่อยครับ
ขอบคุณครับ
ตอบคุณ jimmy ครับ
ผมเองก็เขียนเว็ปไม่เก่งเหมือนกันครับ blog ของผมเป็นของ http://learners.in.th ครับ
ส่วนเรื่อง templete ผมว่าถ้าใช้เป็น CMS ดีกว่าน่ะครับ แค่มาเพิ่มเนื้อหาเอง เช่น ตอนนี้เค้ากำลังนิยม Drupal กัน แต่ถ้าเป็น blog ก็ลองใช้ wordpress ดูครับ
รบ กวนขอ ถามหน่อยนะครับ
mail server ของผมมันมีปํญหาอย่างนี้ครับ
คือภายในระบบ สามารถรับ - ส่ง เมลล์ ได้
แต่ภายนอก รับได้อย่างเดียว - ส่งไม่ได้ มันขึ้นมาว่า
Message not sent. Server replied:
Transaction failed
554 5.7.1 <****@***.***>: Relay access denied
พอมีทางแนะนำหรือเปล่าครับ
freebsd 6.3
postfix + dovecot + squirrelmail
ผมทำตาม ในข้อ 11 ได้ผลเหมือนกัน แต่ ข้อ 12 เมื่อ telnet localhost 25
แล้วได้ผลดังนี้
Trying 127.0.0.1...
Connect to localhost.
Escape character is '^]'.
Conection closed by foreign host.
เกิดจากอะไรครับ
ตอบคุณ preechaso ไม่ทราบว่ารัน postfix ขึ้นมาแล้วหรือยังครับ ลองตรวจสอบอีกครั้งดุน่ะครับ ปกติถ้ารัน postfix ไว้ก็จะสามารถ telnet ไปที่ port 25 ได้
ผมมีอาการเหมือนหัวข้อที่ 11
โดยผมใช้ Microsoft Office Outlook
มันขึ้น error แบบนี้ครับ
Your message did not reach some or all of the intended recipients.
Subject: test
Sent: 25/7/2551 9:48
The following recipient(s) cannot be reached:
'abc@hotmail.com' on 25/7/2551 9:48
554 5.7.1 <abc@hotmail.com>: Relay access denied
หมายเหตุ:
1.ทั้งรับและส่งผ่านหน้าเว็ป (squirrelmail) ผ่านนะครับ
2.ถ้าใช้ outlook ส่งไม่ผ่าน แต่รับได้
แสดงว่าการเซ็ตแบบนี้ไม่ระบุ networks จะอยู่ที่ไหนก็ใช้งานได้ เข้าใจถูกป่าว
แต่ทำได้แล้ว ขอบคุณมาก ๆ นะครับ
ถามต่อนิดนึง
อย่างนี้แสดงว่าทุก ๆ คนสามารถรีเลย์เมล์มาที่เครื่องนี้
ถูกหรือผิดครับ
แล้วถ้าถูก เราจะทำอย่างไรดี
อืมคิดไม่ออกจริง ๆ อ่ะ
ติดตั้งแล้วตอนส่งเมล์ ขึ้นดังนี้
ผิดพลาด:
Message not sent. Server replied:
Bad sequence of commands
503 5.5.1 Error: authentication not enabled
จะต้องไปแก้ที่ไหนอย่างไรครับ
ขอโทษที่ตอบช้าครับ
ผมแนะนำให้ copy ไฟล์ main.cf ตัวก่อนที่จะแก้ไขทับตัวที่ config แล้วนะครับ
แล้วลองสั่ง restart postfix ดูโดยที่ไม่้ต้องแก้ไขอะไร
หากมันรับส่งภายใน local ไ้ด้ก็ให้ทำแก้ config ทีละจุดแล้วลอง restart postix ใหม่อีกครั้ง ทดลองดูเหมือนเดิมจะได้รู้ว่าเราทำขั้นตอนไหนผิดครับ
คุย gtalk กับผมไ้ด้ที่ phmont[at]gmail[dot]com

















ร่วมแสดงความเห็นในหน้านี้