前言
POSTFIX是一個性能卓越的MTA,擁有非常高的穩定性及安全性。在一臺普通的機器上擁有足夠帶寬的前提下每天可以處理超過四百萬封郵件。作為一個MTA,POSTFIX被設計為代替Sendmail的一個軟件。關于POSTFIX的更多信息可以參見其官方網站:。
POSTFIX一般情況下與CYRUS-IMAP相配合,由于CYRUS-IMAP及相關的附加模塊配置起來非常復雜,所以POSTFIX+CYRUS-IMAP并不一定適合于初學者使用!
由于此手冊未經實際驗證,所以請不要轉載以免誤導最終用戶!
本手冊只在發表,大家有關于此手冊的任何問題請至LinuxAid.com.cn技術支持論壇的《郵件服務器》版面討論,LinuxAid的技術支持工程師會根據討論的結果繼續完善此手冊。
一、編譯源碼
1、基本概念
POSTFIX只是一個MTA,也就是一個SMTP服務器。它本身只提供SMTP服務,如果你需要POP3或IMAP服務,則需要通過安裝類似于CYRUS這樣的IMAP服務器與其配合從而實現一個完整的系統。
由于POSTFIX只是一個MTA,它只負責郵件的轉發以及本地的分發,用戶管理工作由MDA負責,所以在理解上要注意。
POSTFIX的SMTP驗證需要通過SASL庫才可以實現,SASL庫則通過一個稱為PWCHECK的服務向POSTFIX提供驗證的渠道。
PWCHECK會在/var/pwcheck中創建一個UNIX SOCKET文件,供客戶端進行訪問。
除了CYRUS-IMAP外,所有需要通過SASL進行驗證的客戶端軟件(POSTFIX,等)都需要在SASL庫的SASL目錄下創建其進程所對應的配置文件,如POSTFIX的文件名為smtpd.conf。并在其中指定驗證方式。
POSTFIX通過LMTP或PIPE與CYRUS-IMAP溝通,將發往本地的郵件直接通過LMTP或PIPE轉給CYRUS-IMAP處理。
POSTFIX可以與MySQL結合將別名(Alias)存放于數據庫中。
缺省情況下POSTFIX和CYRUS-IMAP都使用系統賬號作為缺省的用戶數據庫。如果要使用數據庫做為用戶賬號數據庫則需要對源碼進行修改,我們這里不進行介紹。
POSTFIX與CYRUS-IMAP結合并使用系統賬號作為郵件賬號只適用于不超過兩千個賬號的系統,當使用數據庫(MySQL)作為用戶賬號存儲媒介時只適用于不超過十萬個郵件賬號的系統。
基本概念大約就是這么多,希望大家都可以理解POSTFIX和CYRUS-IMAP這一對組合到底可以做些什么,以及有什么限制。
2、先期準備
我們假設系統所有的東西都將安裝在:/usr/local/servers中,之所以要安裝在這個目錄里面而不使用缺省的安裝路徑,是為了方便大家在想要刪除POSTFIX及其相關的支持文件時,可以直接通過rm對應的目錄即可刪除,而不需要手工去查找哪些文件需要刪除(這特別適用于新入門的用戶)。
相關的路徑信息:
POSTFIX源碼目錄:/usr/local/servers/packages/postfix
POSTFIX安裝目錄:/usr/local/servers/postfix
CYRUS-IMAP源碼目錄:/usr/local/servers/packages/cyrus
CYRUS-IMAP安裝目錄:/usr/local/servers/cyrus
CYRUS-SASL源碼目錄:/usr/local/servers/packages/sasl
CYRUS-SASL安裝目錄:/usr/local/servers/library/sasl
在安裝前我們需要先準備好所需要的目錄,按照以下的步驟進行(#號后面的是注釋,執行時不要輸入):
useradd postfix #為POSTFIX添加一個系統賬號
useradd cyrus -g mail #為cyrus添加一個系統賬號,并將其所屬的組設置為mail
passwd cyrus #設置cyrus的密碼,注意此密碼將用于管理用戶賬號。
usermod daemon -g group #將daemon系統賬號所屬的組設置為mail,因為POSTFIX在做為DAEMON支持時需要用到這個用戶
mkdir /var/pwcheck #為PWCHECK,用戶身份驗證服務創建目錄
chown cyrus.mail /var/pwcheck #將這個目錄的所有者設置為cyrus和mail組
3、為支持SMTP驗證準備好庫文件
POSTFIX的SMTP驗證需要SASL庫的支持,為此我們需要在安裝POSTFIX源碼前先行安裝SASL庫文件,步驟如下:
mkdir /usr/local/servers/packages/sasl
cd /usr/local/servers/packages/sasl
wget
tar zxf cyrus-sasl-1.5.24.tar.gz
cd cyrus-sasl-1.5.24
./configure --prefix=/usr/local/servers/library/sasl --enable-plain=yes --enable-login=yes --enable-cram=no --enable-digest=no --with-pwcheck=/var/pwcheck
make
make install
ln -s /usr/local/servers/library/sasl /usr/lib/sasl
修改/etc/ld.so.conf,添加:
/usr/local/servers/library/sasl/lib
/usr/local/servers/library/sasl/lib/sasl
存盤退出,運行:
ldconfig
運行:
/usr/local/servers/library/sasl/sbin/saslpasswd -c admin
輸入兩次密碼,這個程序會在/etc生成一個sasldb文件。對于當前版本的SASL,這個文件是必須的(雖然它在PWCHECK驗證方式下沒有任何作用)。
chmod o+r /etc/sasldb #讓所有用戶都可以訪問,否則POSTFIX在驗證的時候怎么樣都通不過:)。
echo "pwcheck_method: pwcheck" > /usr/lib/sasl/smtpd.conf #創建SMTP驗證文件
至此SASL庫已經成功安裝。
4、安裝POSTFIX源碼
安裝前我們需要先下載域名,可以從POSTFIX的網站上找到相關的鏈接,這里我們使用國內的鏡像:
從這個地址可以下載到最新版本的POSTFIX,我們這里使用
按照以下的步驟創建我們的安裝目錄:
mkdir /usr/local/servers/packages/postfix -p
cd /usr/local/servers/packages/postfix
wget
tar zxf postfix-20010228-pl06.tar.gz
cd postfix-20010228-pl06
到這里我們已經成功的把源碼解開了,并使用CD命令進入了POSTFIX的源碼目錄。接下來需要根據我們的需要進行配置。
make -f Makefile.init makefiles @#CCARGS-DUSE_SASL_AUTH -I/usr/local/servers/library/sasl/include@# @#AUXLIBS=-L/usr/local/servers/library/sasl/lib -lsasl@#
make
sh INSTALL.sh
按照以下的提示輸入相關的路徑([]號中的是缺省值,]號后的是輸入值)
install_root: [/] /
tempdir: [/usr/local/servers/packages/postfix/postfix-20010228-pl06] /tmp
config_directory: [/etc/postfix] /etc/postfix
daemon_directory: [/usr/libexec/postfix] /usr/local/servers/postfix/libexec
command_directory: [/usr/sbin] /usr/local/servers/postfix/sbin
queue_directory: [/var/spool/postfix] /var/spool/postfix
sendmail_path: [/usr/sbin/sendmail]
newaliases_path: [/usr/bin/newaliases]
mailq_path: [/usr/bin/mailq]
mail_owner: [postfix]
setgid: [no]
manpages: [/usr/local/man] /usr/local/servers/postfix/man
完成以后POSTFIX的安裝程序會自動把POSTFIX安裝至所提供的目錄。
5、安裝CYRUS-IMAP源碼
從以下地址得到CYRUS-IMAP的源碼:
按照以下的步驟創建安裝目錄:
mkdir /usr/local/servers/packages/cyrus -p
cd /usr/local/servers/packages/cyrus
wget
tar zxf cyrus-imapd-2.0.16.tar.gz
cd cyrus-imapd-2.0.16
然后使用以下命令配置源碼:
./configure --prefix=/usr/local/servers/cyrus --with-cyrus-prefix=/usr/local/servers/cyrus --with-sasl=/usr/local/servers/library/sasl
make
make install
完成之后Cyrus會安裝在/usr/local/servers/cyrus中。
接下來我們要創建CYRUS運行時所必須的幾個目錄:
mkdir /var/imap/sieve -p
mkdir /var/spool/imap
chown cyrus.mail /var/imap -R
chown cyrus.mail /var/spool/imap -R
二、系統配置
配置工作主要有兩部分,一是配置SMTP服務器也就是POSTFIX,二是配置IMAP服務器也就是CYRUS-IMAP。我們一步一步來,先配置CYRUS-IMAP。
1、配置CYRUS-IMAP服務器
CYRUS-IMAP服務器的配置文件主要有兩個cyrus.conf和imapd.conf
創建/etc/cyrus.conf,內容如下:
START {
mboxlist cmd="ctl_mboxlist -r"
deliver cmd="ctl_deliver -r"
}
SERVICES {
imap cmd="imapd" listen="imap" prefork=0
pop3 cmd="pop3d" listen="pop3" prefork=0
sieve cmd="timsieved" listen="127.0.0.1:sieve" prefork=0
lmtpunix cmd="lmtpd" listen="/var/imap/conf/socket/lmtp" prefork=0
}
存盤退出,在/etc/services中添加一項:
sieve 2000/tcp
存盤退出,再創建/etc/imapd.conf,內容如下:
configdirectory: /var/imap/conf
partition-default: /var/spool/imap
admins: cyrus
sasl_pwcheck_method: pwcheck
sendmail: /usr/sbin/sendmail
sieveusehomedir: false
sievedir: /var/imap/sieve
存盤退出。至此CYRUS-IMAP的配置文件已經設置完成,我們要運行它的初始化命令去生成整個目錄結構:
cd /usr/local/servers/packages/cyrus/cyrus-imapd-2.0.16/tools
su cyrus
./mkimap
exit
完成之后mkimap程序會自動創建CYRUS-IMAP運行時所需的所有目錄。
接下來就要創建啟動腳本了,CYRUS-IMAP缺省是沒有啟動腳本的,我自己寫了兩個:
啟動腳本,請將其存為/sbin/startcyrus,內容如下:
#!/bin/sh
#
# /sbin/startcyrus
#
# Starts the cyrus daemon
test -x /usr/local/servers/cyrus/bin/master@# @#exit 0
if [ ! -f /var/lock/subsys/cyrus.pid ]; then
/usr/local/servers/cyrus/bin/master&
echo $! > /var/lock/subsys/cyrus.pid
echo ""
echo "Cyrus IMAP Server started."
echo ""
else
echo "Cyrus IMAP Server:`cat /var/lock/subsys/cyrus.pid`"
kill -TERM `cat /var/lock/subsys/cyrus.pid`
rm -f /var/lock/subsys/cyrus.pid
echo ""
echo "Cyrus IMAP Server shutdown normally."
echo ""
/usr/local/servers/cyrus/bin/master&
echo $! > /var/lock/subsys/cyrus.pid
echo ""
echo "Cyrus IMAP Server started."
echo ""
fi
停止腳本,請交其存為/sbin/stopcyrus,內容如下:
#!/bin/sh
if [ ! -f /var/lock/subsys/cyrus.pid ]; then
echo ""
echo "Is cyrus running already?"
echo "I can@#t found it@#s pid."
echo ""
else
echo "Cyrus IMAP Server:`cat /var/lock/subsys/cyrus.pid`"
kill -TERM `cat /var/lock/subsys/cyrus.pid`
rm -f /var/lock/subsys/cyrus.pid
echo ""
echo "Cyrus IMAP Server shutdown normally."
echo ""
fi
創建這兩個文件之后,不要忘記給它們設置執行屬性:
chmod +x /sbin/startcyrus
chmod +x /sbin/stopcyrus
完成以后,以ROOT的身份運行
startcyrus
然后使用
tail /var/log/messages
應該可以看到與之類似的內容:
Nov 4 19:48:28 linuxaid master[1092]: process started
Nov 4 19:48:28 linuxaid ctl_mboxlist[1093]: running mboxlist recovery
Nov 4 19:48:29 linuxaid ctl_mboxlist[1093]: done running mboxlist recovery
Nov 4 19:48:29 linuxaid master[1092]: ready for work
如果有其它的錯誤信息,請至論壇《郵件系統》版討論。然后使用
stopcyrus
將CYRUS-IMAP停止。
2、配置POSTFIX服務
POSTFIX的主要配置文件都在/etc/postfix目錄中。主配置文件名為main.cf,內容如下:
queue_directory = /var/spool/postfix
command_directory = /usr/local/servers/postfix/sbin
daemon_directory = /usr/local/servers/postfix/libexec
alias_maps = hash:/etc/postfix/aliases
mail_owner = postfix
myhostname = smtp.linuxaid.com.cn #主機名
mydomain = linuxaid.com.cn #域名
myorigin = $mydomain
mailbox_transport = lmtp:unix:/var/imap/conf/socket/lmtp
fallback_transport = lmtp:unix:/var/imap/conf/socket/lmtp
mynetworks = 127.0.0.0/8
smtpd_banner = $mydomain ESMTP 1.0
local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 10
debug_peer_level = 2
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_maps_rbl, check_relay_domains
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtp_sasl_security_options = noanonymous
maximal_queue_lifetime = 30m
maps_rbl_domains = blackholes.mail-abuse.org, dialups.mail-abuse.org, relays.mail-abuse.org
smtpd_client_restrictions = permit_mynetworks, reject_maps_rbl
完成之后存盤退出,生成別名文件:
/usr/local/servers/postfix/sbin/postalias /etc/postfix/aliases
至此所有配置文件都已經成功設置,再運行:
/usr/local/servers/postfix/sbin/postfix start
即可啟動POSTFIX,使用
tail /var/log/maillog
應該可以看到,與之類似的信息:
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix pid directory
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix incoming directory
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix active directory
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix bounce directory
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix defer directory
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix deferred directory
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix flush directory
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix saved directory
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix corrupt directory
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix public directory
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix private directory
Nov 4 20:10:26 linuxaid postfix-script: starting the Postfix mail system
Nov 4 20:10:26 linuxaid postfix/master[1324]: daemon started
然后使用:
/usr/local/servers/postfix/sbin/postfix stop
將POSTFIX停止
至此一個完整的服務已經安裝完成。
三、管理
1、記錄文件
郵件系統的記錄文件主要有兩個,一個是CYRUS-IMAP的記錄文件/var/log/messages,另外一個是POSTFIX的記錄文件/etc/log/maillog。需要監視系統時只要查看這兩個文件即可。
2、用戶管理
由于POSTFIX和CYRUS-IMAP都使用系統賬號,所以添加用戶時需要在使用系統的useradd對應的添加用戶賬號。下面我們以用戶testuser為例子說明添加用戶的過程。
步驟1,添加普通用戶,并設置用戶主目錄為/home/mailuser,不允許其登錄。
useradd testuser -d /home/mailuser -s/usr/bin/passwd
步驟2,為此用戶添加郵箱。
/usr/local/servers/cyrus/bin/cyradm -u cyrus localhost
#啟動CYRUS郵箱管理器,會提示你輸入CYRUS的密碼,輸入后就可以進入管理命令行。
在命令行運行:
cm user.testuser
即可為此用戶添加一個賬號,如果需要添加發件箱、垃圾箱,則可以繼續使用命令:
cm user.testuser.Sent
cm user.testuser.Trash
cm user.testuser.Drafts
注意,收件箱是user.testuser,所有的文件夾都必須以user.testuser為基礎創建。
其它用戶的管理方法也是這樣。
四、啟動系統
只需要使用:
startcyrus
/usr/local/servers/postfix/sbin/postfix start
就可以啟動,至此你就擁有一個支持以下功能的郵件系統了:
SMTP
SMTP AUTH
IMAP4
POP3
SIEVE
進一步的功能,如郵件賬號與系統賬號分析等等將在以后的版本中繼續說明。
然后由于此手冊還在編寫中,大家在實際操作過程中如果遇到任何問題可以到本站的《郵箱服務器》版討論,同時協助我們更新此檔案。
(作者:FloatBoat)