/var/spool/postfix 是postfix存儲隊列的地方, /var/vmail 是用來存儲虛擬賬號郵件的。
CentOS提供了很方便的yum在線安裝,我的基本原則是非重要、對版本不敏感的模塊盡量用yum安裝,郵件系統主要模塊則用源碼編譯安裝。
首先用yum安裝的模塊有: mysql mysql-server mysql-devel db4-devel openssl gcc libxml2 libxml2-devel gcc-c++
幾個模塊都需要用到PCRE, 前面說的 gcc-c++ 是安裝PCRE必須的。
下載安裝 RCRE:
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.8.tar.gz
先說明一下幾個模塊的搭配。
MTA 用的是 postfix的最新版本 postfix-2.5.5。
web模塊是最先需要確定的,因為它決定了mysql表結構,這裡選用國產的extmail,其他的根據extmail的需要倒推來確定。
webmail 使用 extmail-1.0.5 ,web管理模塊用 extman-0.2.5
最新版本的extmail對maildrop的自動回復、轉發等提供了很好的支持,所以MDA採用最流行的maildrop(2.0.4 )
這裡面簡單說一下為什麼要用maildrop。
對虛擬用戶投遞的支持,postfix自帶了一個投遞代理(MDA):virtual
virtual投遞代理在 master.cf 里描述為:
virtual unix - n n - - virtual
如果我們在main.cf 里 設置 virtual_transport = virtual ,就表示對於包含在 virtual_mailbox_domains 域名里的郵件,都使用virtual進行投遞。
postfix自帶的virtual只提供了最基本的QUOTA功能,如果想使用更複雜的功能,如自動轉發,自動回復,郵件自定義過濾等,就需要換成更高級的MDA。
當然可選擇的MDA有很多種,比如 procmail, maildrop 等。我這裡選用maildrop,為啥?大家都用這個。。。
用戶信息存儲方式也有很多可選的,比如mysql,ldap等。這裡選mysql,原因是各個模塊,包括extmail等對這個支持最好最方便最簡單。
maildrop 在投遞郵件的時候,需要確定一些數據,比如收件用戶的Maildir的路徑,保存郵件用的uid,gid,郵箱容量等,這些數據需要maildrop的同門師兄 courier-authlib 來提供,所以要先吧courier-authlib裝好。
下面要說的是SMTP 的 SASL認證(這個說來話長,有空補上)。postfix的模塊化設計在這裡也體現出比qmail高明的地方。
postfix 2.3 以後sasl支持三種模塊:
Cyrus SASL version 1
Cyrus SASL version 2
Dovecot protocol version 1
網上大部分的文章都是講用 Cyrus SASL 2(並用Cyrus IMAP 提供POP3/IMAP服務),本文採用後起新秀 Dovecot 做為 sasl模塊,Dovecot同時提供 POP3/IMAP 服務。
Dovecot使用最新的dovecot-1.1.4 。
開始安裝!
下載 postfix-2.5.5.tar.gz
postfix安裝的是需要指定幾個專門的用戶和組,先創建
#groupadd -g 2001 postfix
#useradd -g postfix -u 1001 -s /sbin/nologin -M postfix
#groupadd -g 2002 postdrop
#useradd -g postdrop -u 2002 -s /bin/false -M postdrop
編譯
#make makefiles CCARGS='-DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\" \
-DHAS_PCRE -DHAS_MYSQL \
-I/usr/include/ -I/usr/local/include -I/usr/include/mysql/' \
AUXLIBS='-L/usr/local/lib -L/usr/lib/mysql -lmysqlclient -lpcre'
#make
#make install
make install的提問全部回車默認。
注意參數
-DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\"
表示啟用SASL身份認證,並默認使用dovecot。
mysql的幾個路徑可以根據實際情況做修改,我這裡的目錄都是yum默認安裝的。
先導入mysql表結構和數據。
下載extman-0.2.5.tar.gz
解開後進入 docs目錄
建庫建表:
#mysql -u root -p < extmail.sql
(注意extmail.sql里配置的資料庫,用戶名,口令都是extmail)
導入初始數據:
#mysql -u root -p < init.sql
(先吧 init.sql 文件里的 extmail.org 改成你自己的域名)
把目錄下 mysql_*.cf 全部拷貝至 /etc/postfix
# cp mysql_*.cf /etc/postfix/
下載 dovecot-1.1.4.tar.gz
#./configure --prefix=/usr/local/dovecot --sysconfdir=/etc/dovecot --with-sql --with-sql-drivers --with-mysql --with-ssl=openssl
#make
#make install
註:dovecot的安裝參考了javaeye unixboy的文章,略有改動
配置dovecot.conf
#cd /etc/dovecot
#cp dovecot-example.conf dovecot.conf
#vi dovecot.conf
base_dir=/var/run/dovecot
protocols=imap imaps pop3 pop3s
listen=*
disable_plaintext_auth = no
ssl_disable = yes
mail_location = maildir:/var/vmail/%d/%n/Maildir
pop3_uidl_format=%08Xu%08Xv
auth default {
...
mechanisms = plain login digest-md5 cram-md5
# 去掉註釋
passdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
...
# 去掉註釋
userdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
...
socket listen {
...
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}
配置dovecot-sql.conf
#cp dovecot-sql-example.conf dovecot-sql.conf
#vi dovecot-sql.conf
driver = mysql
connect = host=localhost dbname=extmail user=extmail password=extmail
default_pass_scheme = MD5-CRYPT
password_query = SELECT username AS user, password AS password \
FROM mailbox WHERE username = '%u' AND active = '1'
user_query = \
SELECT maildir as home,2001 as uid ,2001 as gid \
FROM mailbox WHERE username='%u' and active='1'
創建符號鏈接
#ln -s /usr/local/dovecot/sbin/dovecot /usr/bin/dovecot
繼續配置 postfix
#mv /etc/aliases /etc/aliases.old
#ln -s /etc/postfix/aliases /etc/aliases
#/usr/bin/newaliases
# vi main.cf
myhostname = mail.abc.com
mydomain = abc.com
myorigin = $mydomain
mydestination = $myhostname localhost localhost.$mydomain
mynetworks = 127.0.0.0/8
inet_interfaces = all
home_mailbox = Maildir/
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/local/man
sample_directory = /etc/postfix
#=====================Vritual Mailbox settings=========================
virtual_mailbox_base = /var/vmail/
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_domains =
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_uid_maps = static:2001
virtual_gid_maps = static:2001
virtual_transport = virtual
#====================QUOTA========================
message_size_limit = 52428800
mailbox_size_limit = 209715200
virtual_mailbox_limit = 209715200
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_overquota_bounce = yes
#====================SASL ESMTP Authenticat=================
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
#smtpd_sasl_path 注意這個是dovecot的sasl路徑,與 dovecot.conf 里的對應
smtpd_sasl_path = private/auth
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_invalid_hostname,
reject_non_fqdn_hostname,
reject_unknown_sender_domain,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_unauth_pipelining,
reject_unauth_destination
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
smtpd_banner=$myhostname ESMTP
readme_directory = no
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
queue_directory = /var/spool/postfix
mail_owner = postfix
data_directory = /var/lib/postfix
啟動服務
dovecot
postfix start
如果出錯,看看 /var/log/maillog
[火星人
]