ads

วันพุธที่ 31 กรกฎาคม พ.ศ. 2556

install postfix mailserver Debian 6

  หลังจากครั้งก่อนลงเครือง postfix ไว้ยิงเมลออกอย่างเดียวไปแล้ว   ครั้งนี้เบื้องบนมีความต้องการอยากได้
mail server postfix ที่เต็มระบบเพื่อนำมาแทน Qmail server ที่เคยทำไว้ใช้นานแล้วเหมือนกัน  ได้จัดให้  ลองผิดลองถูกหลายวันเลย
เอามาแชร์ไว้

1. ก่อนอื่นเพื่อความแน่นอน ทำการอัพเกรดซอฟแวร์ server ก่อน
[code] # apt-get update
 # apt-get upgrade[/code]

2. install software ที่ต้องใช้ในการติดตั้งครั้งนี้ครับ  บน debian ก็ apt ทีเดียวรวดเลยครับ
รวมถึงพวก apache mysql phpmyadmin จัดเลยทีเดียว
[code]
# apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server dovecot-common dovecot-imapd dovecot-pop3d libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl telnet mailutils php5 php5-ldap php5-mysql phpmyadmin apache2[/code]

- จะขึ้นหน้าต่างให้เราใส่ตั้ง password สำหรับ mysql5
- postfix  จะขึ้นหน้าเลือกออฟชั่นในการลง ให้เลือก internet site
- ตั้งชื่อในการใช้งาน dns ให้เห็นคอนเฟิก postfix ซึ่งมักจะใช้ชื่อเครื่องเรานั้่นเอง  ลองดูจาก uname -a ก็ได้

เสร็จขึ้นตอนนี้  ก็ลองเข้าใช้งาน mysql
[code]# mysql -u root -p[/code]

แล้วสร้าง database ในการ install mailserver เลยครับตั้งชื่อว่า postfix

[code]CREATE DATABASE postfix;[/code]

[code]USE posfix;[/code]

สร้าง user และกำหนดสิทธิ์ user ( แทนค่า admin ด้วย user ที่เราต้องการ, แทน admin_password ด้วย password ที่ต้องการ

[code]GRANT SELECT, INSERT, UPDATE, DELETE ON postfix.* TO 'admin'@'localhost' IDENTIFIED BY 'admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON posfix.* TO 'admin'@'localhost.localdomain' IDENTIFIED BY 'admin_password';
FLUSH PRIVILEGES;[/code]

แล้วสร้างตารางต่างๆไว้รองรับเมล์ postfix
[code]CREATE TABLE domain (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );[/code]
[code]CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );[/code]
[code]CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );[/code]
[code]CREATE TABLE transport ( domain varchar(128) NOT NULL default '', transport varchar(128) NOT NULL default '', UNIQUE KEY domain (domain) );[/code]
[quote]quit[/quote]

ตรวจไฟล์ my.cnf ว่าค่าตรงค่า bind ได้ตัั้งไว้ไหม
# vi /etc/mysql/my.cnf
bind-address = 127.0.0.1

ออกมาแล้ว restar service รอบหนึ่ง
# /etc/init.d/mysql restart

3 Install postfix admin ก่อนเลยครับ  ตรวจสอบเวอร์ชั่นใหม่ๆ ได้ที่นี่ http://postfixadmin.sourceforge.net/
เหตุที่ลงตัวนี้ก่อนเพราะตัวโปรกแกรมนี้ค่อนข้าง fix ชื่อตารางด้านในไว้แล้วครับ  ถ้าเปลียตอนหลังยุ่งยากมากแล้วโอกาสไม่เวิรคสูงครับ  ( เคยปวดหัวมาแล้ว )
หลังจากดาวโหลดมาในตอนแรกแล้วก็นำไปไว้ในพาร์ทของเวปเราเลยครับ

# cd /var/www
# tar -xzf  postfixadmin-2.3.3.tar.gz
# mv  postfixadmin-2.3.3.tar.gz  postfixadmin
# cd  postfixadmin

แก้ configure.inc.php  
$CONF['configured'] = true;
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'admin';
$CONF['database_password'] = 'admin_password';
$CONF['database_name'] = 'postfix';

แล้วเปิดเข้าหน้า postfixadmin
http://ipaddress/postfixadmin/setup.php
โปรแกรมจะตรวจสอบระบบที่ต้องการของเครืองเรา  เมื่อผ่านหมดจะขึ้นให้เราใส่ ระหัสในการติดตั้ง
[img]http://img84.imageshack.us/img84/8908/001rea.jpg[/img]

เมื่อใส่ไปแล้วมันจะเด้งการ gent code ออกมาด้านบนครับ   เราต้องก๊อประหัสนนี้ไปใส่ในไฟล์  configure.inc.php  อีกทีครับ
$CONF['setup_password'] = 'รหัสที่ได้จากการ gen';
[img]http://img9.imageshack.us/img9/6259/002ren.jpg[/img]

เมื่อใส่เสร็จก็ refresh หน้าเวปครั้งหนึ่งก็จะโผล่หน้าให้เรา add  e-mail  admin ที่จะเป็นผู้เข้ามาใช้หน้าจัดการหน้านี้แล้ัวครับ
ใส่ไป admin@yourdomain.com  ใส่ตามที่ระบบคุณใช้ละกันตรับ
[img]http://img29.imageshack.us/img29/2451/003rey.jpg[/img]

เมื่อเสร็จก็ ok แล้วครับ   ลองทดสอบเข้าใช้งานได้ที่
url  http://youraddress.com/postfixadmin/  แล้วใส่  e-mail adminที่เราตั้งไปเมื่อสักครู่นั่นเอง
แต่ระบบข้างในยังใช้งานไม่ได้จริง  เราต้องไปเซ็ตระบบ postfix mail server ให้ลิงค์กับมันเสียก่อนครับ

4. สร้างไฟล์ configure ไว้สำหรับในการเรียกค่าคอนฟิกจาก postfix ให้มาเรียกใช้

# vi /etc/postfix/mysql_virtual_mailbox_domains.cf
[code]hosts = 127.0.0.1
user = admin
password = admin_password
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = 0 and active = 1[/code]

# vi /etc/postfix/mysql_virtual_mailbox_maps.cf
[code]hosts = 127.0.0.1
user = admin
password = admin_password
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
[/code]

# vi /etc/postfix/mysql_virtual_alias_maps.cf
[code]hosts = 127.0.0.1
user = admin
password = admin_pasword
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = 1[/code]

# vi /etc/postfix/mysql_virtual_forwardings.cf
[code]user = root
password = admin_password
dbname = postfix
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1
[/code]

# vi /etc/postfix/mysql_virtual_email2email.cf
[code]user = admin
password = admin_password
dbname = postfix
query = SELECT email FROM users WHERE email='%s'
hosts = 127.0.0.1[/code]


กำหนดค่า permition ไฟล์ทั้งหมด
[code]chmod o= /etc/postfix/mysql_virtual_*.cf
chgrp postfix /etc/postfix/mysql_virtual_*.cf[/code]

กำหนด group
[code]groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m[/code]

ตรวจสอบค่าในไฟล์ /etc/postfix/main.cf  ตามนี้ครับ

[code]smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = /usr/share/doc/postfix

# TLS parameters
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

myhostname = mail.yourdomain.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = mail.yourdomain.com, localhost, localhost.localdomain
relayhost =
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
html_directory = /usr/share/doc/postfix/html
message_size_limit = 30720000
#virtual_alias_domains = mysql:/etc/postfix/mysql_virtual_mailbox_domains.cf
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_forwardings.cf, mysql:/etc/postfix/mysql_virtual_email2email.cf
#virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
#virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_mailbox_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf

#relay_domains = mysql:/etc/postfix/mysql_relay_domains.cf
relay_domains = mysql:/etc/postfix/mysql_relay_domains.cf
virtual_mailbox_base = /home/vmail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
virtual_create_maildirsize = yes
virtual_maildir_extended = yes
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
relay_domains =
mailman_destination_recipient_limit = 1
transport_maps = hash:/etc/postfix/transport

### add after by rukwa ###
mynetworks_style = subnet
smtpd_helo_required = no
strict_rfc821_envelopes = no
smtpd_reject_unlisted_sender = no
smtpd_reject_unlisted_recipient = no[/code]


[color=red]- ค่า mynetworks = ค่าเน็ทเวิร์คที่จะยอมให้วงไหนใช้ mail เครื่องนี้บ้างก็ใส่เพิ่มตรงนี้ไปครับ
- ค่า mydestination = เปลียนจาก yourdomain เป็นโดมนของคุณใช้อยู่[/color]


5.สร้าง SSL Certificate ให้ postfix
[code]# cd /etc/postfix
# openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509[/code]

แล้วใส่ค่าตามที่ระบบเราเป็น
Country Name (2 letter code) [AU]:TH
State or Province Name (full name) [Some-State]:Bangkok
Locality Name (eg, city) []:Klongteoy
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany, LLC
Organizational Unit Name (eg, section) []:Email Services
Common Name (eg, YOUR name) []:server.yourdomain.com
Email Address []:support@yourdomain.com

เซ็ต permittion ให้ smtp
[code]# chmod o= /etc/postfix/smtpd.key[/code]

6. ตั้งค่า saslauthd ให้ mysql
[code]# mkdir -p /var/spool/postfix/var/run/saslauthd[/code]
ก๊อปไฟล์เก่าเก็บแบคอัพไว้ก่อน
# cp -a /etc/default/saslauthd /etc/default/saslauthd.bak

แก้ไฟล์ /etc/default/saslauthd  ให้มีค่าดังนี้
[code]START=yes
DESC="SASL Authentication Daemon"
NAME="saslauthd"
MECHANISMS="rimap"
MECH_OPTIONS=""
THREADS=5
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"[/code]

สร้างไฟล์ /etc/pam.d/smtp แล้วใส่ค่าดังนี้ไป  แก้ admin และ password เป็นค่าที่คุณระบุไว้ในไฟล์คอนเฟิก
# vi  /etc/pam.d/smtp
[code]auth    required   pam_mysql.so user=admin passwd=admin_password host=127.0.0.1 db=postfix table=users usercolumn=email passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=admin passwd=admin_password host=127.0.0.1 db=posfix table=users usercolumn=email passwdcolumn=password crypt=1[/code]

สร้างไฟล์ /etc/postfix/sasl/smtpd.conf  แล้วใส่ค่าดังนี้
# vi /etc/postfix/sasl/smtpd.conf
[code]pwcheck_method: saslauthd
mech_list: plain login
auxprop_plugin: rimap[/code]

add  user sasl แล้วทำการรีสตาร์เซอซ์วิสเพื่อเริ่มค่าคอนฟิกใหม่
[code]# adduser postfix sasl
# service postfix restart
# service saslauthd restart[/code]

7. Configure Dovecot
แก้ไขไฟล์ /etc/postfix/master.cf  เพิ่มเติมในส่วนค่า dovecot ไว้ที่ด้านล่างสุดดังนี้
[code]dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}[/code]

แก้ไขไฟล์  โดย coppy เก็บไฟล์ต้นฉบับไว้ก่อนกันพลาด
# cp -a /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.bak
# vi /etc/dovecot/dovecot.conf   ใส่ค่าดังนี้

[code]disable_plaintext_auth=no
protocols = imap imaps pop3 pop3s
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/home/vmail/%d/%n/Maildir

ssl_cert_file = /etc/ssl/certs/dovecot.pem
ssl_key_file = /etc/ssl/private/dovecot.pem

namespace private {
    separator = .
    prefix = INBOX.
    inbox = yes
}

protocol lda {
    log_path = /home/vmail/dovecot-deliver.log
    auth_socket_path = /var/run/dovecot/auth-master
    postmaster_address = postmaster@yourdomain.com
    mail_plugins = sieve
    global_script_path = /home/vmail/globalsieverc
}

protocol pop3 {
    pop3_uidl_format = %08Xu%08Xv
}

auth default {
    user = root

    userdb sql {
        args = /etc/dovecot/dovecot-mysql.conf
    }
    passdb sql {
        args = /etc/dovecot/dovecot-mysql.conf
    }

    socket listen {
        master {
            path = /var/run/dovecot/auth-master
            mode = 0600
            user = vmail
        }

        client {
            path = /var/spool/postfix/private/auth
            mode = 0660
            user = postfix
            group = postfix
        }
    }
}
[/code]

แก้ไขไฟล์ /etc/dovecot/dovecot-sql.conf   ( เปลียน user - password ตามระบบที่คุณใช้ )
# vi /etc/dovecot/dovecot-sql.conf
[code]driver = mysql
connect = host=127.0.0.1 dbname=postfix user=admin password=admin_password
default_pass_scheme = CRYPT
password_query = SELECT email as user, password FROM users WHERE email='%u';[/code]

แก้ permittion ไฟล์
[code]# chgrp vmail /etc/dovecot/dovecot.conf[/code]
[code]# chmod g+r /etc/dovecot/dovecot.conf[/code]

restart service
# /etc/init.d/dovecot restart

เช็คดู /var/log/mail.log  ถ้าขึ้นตามนี้แสดงว่า  work แล้ว
[code]Jul 29 14:45:01 mail postfix/pipe[31225]: 85CB33C010: to=<postmaster@yourdomain.com>, orig_to=<root>, relay=dovecot, delay=0.01, delays=0/0/0/0.01, dsn=2.0.0, status=sent (delivered via dovecot service)
Jul 29 14:45:01 mail postfix/qmgr[31125]: 85CB33C010: removed[/code]

8. Configure Mail Aliases
แก้ไขไฟล์ /etc/aliases ให้เป็นดังนี้
[code]postmaster:    root
root:   postmaster@gmmdigital.com[/code]

แล้วรันคำสั่งเพื่อรับค่าใหม่ แล้วรี service อีกรอบ
[code]# newaliases[/code]
[code]# service postfix restart[/code]


ลองเช็คค่า configure ใช้คำสั่ง
# postconf -n    จะแสดงค่าที่ระบบใช้อยู่ครับ

[code]alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
broken_sasl_auth_clients = yes
config_directory = /etc/postfix
html_directory = /usr/share/doc/postfix/html
inet_interfaces = all
mailbox_size_limit = 0
message_size_limit = 30720000
mydestination = mail.yourdomain.com, localhost, localhost.localdomain
myhostname = mail.yourdomain.com
mynetworks = 127.0.0.0/8
mynetworks_style = subnet
myorigin = /etc/mailname
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps
readme_directory = /usr/share/doc/postfix
recipient_delimiter = +
relay_domains =
relayhost =
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_helo_required = no
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_reject_unlisted_recipient = no
smtpd_reject_unlisted_sender = no
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
strict_rfc821_envelopes = no
transport_maps = hash:/etc/postfix/transport
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_gid_maps = static:5000
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_mailbox_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_transport = dovecot
virtual_uid_maps = static:5000[/code]


8 . ทดสอบการใช้งาน
# telnet localhost 25
[quote]Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 mail.gmmdigital.com ESMTP Postfix (Debian/GNU)
ehlo localhost
250-mail.yourdomain.com
250-PIPELINING
250-SIZE 30720000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN[/quote]
ok smtp ทำงานโอเค

[quote]
# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
+OK Dovecot ready.[/quote]
ok  pop3 ทำงานแล้ว

ต่อไปทดสอบการ add domainและ user  ผ่านหน้า postfixadmin login เข้าไปแล้วสร้าง Domain สักชื่อแล้ว add mailbox ไว้
[img]http://img263.imageshack.us/img263/1346/004rel.jpg[/img]
( ในรูปภาพสร้างโดเมน test.com )

แล้วเข้าไปดูในพาร์ท server  ที่ /home/vmail/   จะต้องมีโดเมน test.com แล้วสร้างให้เรา auto แล้วภายในนั้นมี  folder แยกตามแต่ละคนเลยดังนี้
root@mail:/home/vmail/test.com# ls -al
total 12
drwx------ 14 vmail vmail   96 Jul 29 14:35 .
drwxr-xr-x 13 vmail vmail 4096 Jul 29 10:23 ..
drwx------  3 vmail vmail    8 Jul 29 00:07 00001
drwx------  3 vmail vmail    8 Jul 28 19:07 add18
drwx------  3 vmail vmail    8 Jul 29 00:08 cong
drwx------  3 vmail vmail    8 Jul 28 19:07 gogo
drwx------  3 vmail vmail    8 Jul 29 01:00 jatujak
drwx------  3 vmail vmail    8 Jul 28 18:02 ken
drwx------  3 vmail vmail    8 Jul 28 18:30 mygod
drwx------  3 vmail vmail    8 Jul 29 14:35 ohho
drwx------  3 vmail vmail    8 Jul 28 17:26 pramote
drwx------  3 vmail vmail    8 Jul 28 17:29 rukawa
drwx------  3 vmail vmail    8 Jul 29 00:07 who
drwx------  3 vmail vmail    8 Jul 28 17:39 work

ทีนี้เราลองเปิด outlook ขึ้นมาแล้ว  set account มาสักชื่อหนึ่งแล้วชี้ smpt และ pop3 มายัง server ที่เราเทสเลยครับ
จะต้อง login ได้และไดัรับ e-mail ต้อนรับ ครับถ้าไม่ได้   แสดงว่ามีข้อผิดพลาดให้
เช็คที่
/var/log/mail.log  ครับว่าขึ้นอะไร  
กรณีที่ login หน้า outlook ไม่ได้  ให้ไปดูไฟล์ /etc/dovecot/dovecot.conf เลยครับ  ว่าผิดตรงไหน

แล้วค่อยเทสให้ระบบส่งเมล์ไปหา  user นั้นด้วยเลย  ด้วยคำสั่ง
# mailx  user1@test.com    <enter>
cc:   ใส่ หรือ <enter> ผ่าน
Subject:   yoursubject
< ข้อความที่จะส่ง >  แล้ว <enter>
Ctrl + D เพื่อส่งจดหมาย

แล้วไปเช็ค  log และจดหมายในไฟล์เดอร์ของ user นั้นๆ ครับว่ามีมาป่าว  ถ้ามาแล้วก็ย้อนไปเทสผ่านหน้าจัดการ postfixadmin
และเซ็๖ accout บน outlook ตามด้านบนอีกที  ถ้าผ่านหมดก็เรียบร้อยแล้วครับ   ระบบ mail server postfix โอ้ว  ยาวเฟื้อย  :P


แหล่งอ้างอิง: http://library.linode.com/email/postfix/dovecot-mysql-debian-6-squeeze


ไม่มีความคิดเห็น:

แสดงความคิดเห็น