Qmail是世界上安裝使用量僅次于Linux/Unix上缺省使用的Sendmail的郵件服務器軟件。Qmail配置較Sendmail簡單,而且速度較之要快,所以在本郵件系統的架設過程中我選擇了Qmail作為郵件服務器的核心。
一個郵件服務器主要包括三個主要的功能,郵件傳輸代理MTA(Mail Transport Agent)、郵件分發代理MDA(Mail Delevery Agent)和郵件用戶代理MUA(Mail User Agent)。Qmail軟件包實現了這三個基本的功能,之所以說其只實現了郵件服務器的基本功能是因為它沒有實現很多郵件服務器需要的功能,這些功能有些是安全和防止垃圾郵件方面,比如SMTP驗證、APOP功能、Relay控制功能和對使用者IP地址的限定等等,還有一些擴展的功能象Webmail功能、虛擬域、基于數據庫的用戶管理、郵件列表、自動轉發它也不能提供。
好在現在Qmail流行開來,有了不少自由軟件聯盟來為Qmail添磚加瓦,這些人們自發組織起來的聯盟開發了能夠補償Qmail不足的一些補丁。這些軟件補丁主要包括:
Ucspi-tcp-0.88 (tcpsever服務程序,提供對IP地址限定功能)
Checkpassword-0.81 (把/etc/passwd的用戶和密碼作為POP3的用戶和密碼進行驗證)
Ezmlm-0.53(支持郵件列表功能)
vpopmail-5.2.2(這個重要,提供虛擬域和數據庫支持)
Qmailadmin-0.35 (虛擬域的web管理工具)
Autorespond-1.0.0 (自動回復程序,Ezmlm需要)
Sqwebmail-1.2.0 webmail (一個CGI的Webmail系統)
Vqsignup-0.4 (提供web方式的用戶郵箱注冊)
qmail-smtpd-auth-0.26 (提供SMTP認證功能)
cmd5checkpw-0.22 (提供認證加密算法)
因為安裝期間涉及的軟件眾多,如果不能搞清楚各個軟件在郵件服務器中所起到的作用將會感到滿頭霧水。基本的Qmail系統和整個郵件系統的架構如圖1和圖2所示:
圖1 Qmail基本功能結構圖
圖2 郵件服務器總體架構
有了這些架構在軟件安裝和調試的過程中會感覺非常的清晰明快。
在安裝進行之前必須要有DNS的支持,如果你的服務器IP地址沒有被DNS解析可以自己運行named deamon作為Dns服務器,并給自己分配一個域名,然后把自己的IP放到/etc/resolve.conf中。我這里是 mail.itp.swjtu.edu.cn。
首先要安裝Qmail的基本系統。詳細步驟如下:(mail.itp.swjtu.edu.cn替換成相應的郵件服務器的域名)
建立必要的用戶和用戶組
# pw groupadd nofiles
# pw useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent
# pw useradd qmaild -g nofiles -d /var/qmail -s /nonexistent
# pw useradd qmaill -g nofiles -d /var/qmail -s /nonexistent
# pw useradd qmailp -g nofiles -d /var/qmail -s /nonexistent
# pw groupadd qmail
# pw useradd qmailq -g qmail -d /var/qmail -s /nonexistent
# pw useradd qmailr -g qmail -d /var/qmail -s /nonexistent
# pw useradd qmails -g qmail -d /var/qmail -s /nonexistent
創建安裝目錄,解壓安裝軟件源代碼包
# mkdir /var/qmail #創建安裝目錄缺省為/var/qmail
# tar zxvf qmail-1.03.tar.gz #解開源碼
# cd qmail-1.03.tar.gz #進入源碼目錄
進行安裝
# make setup check #安裝拷貝文件
#./config-fast mail.itp.swjtu.edu.cn #添加域名到/var/qmail/control目錄下的文件中
# (cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root)
# chmod 644 ~alias/.qmail*
拷貝MDA執行代碼
# cp /var/qmail/boot/home to /var/qmail/rc #拷貝home腳本到缺省啟動位置
# csh -cf '/var/qmail/rc &' 啟動MDA部分
由于現在有兩種比較流行的郵箱目錄形式:/home/$user/Mailbox和/home/$user/Maildir/,郵件分發代理MDA要判斷郵件往哪一個郵箱分發郵件所以必須正確配置/var/qmail/rc文件,Mailbox是用一個文件來保存$user用戶的所有郵件,而 Maildir/方式是采用目錄的方式來保存用戶的每一封郵件,效率比前者高且減少了錯誤幾率。所以推薦使用Maildir/格式,因為rc文件缺省采用 Mailbox格式所以我們打開該文件將‘Mailbox’替換成為‘Maildir/’保存,kill掉剛才前面用rc啟動的qmail-send等進程并且重新啟動MDA。
用Inetd啟動smtp模塊:
相當于運行了/var/qmail/bin/tcp-env /var/qmail/bin/qmail-smtpd
編輯/etc/inetd.conf,找到smtp模塊,去除其前面的注釋“#”號