介紹

作為Linux下面主流的郵件系統核心,大量著名的商業郵件系統都是在Qmail核心下開發,比如Hotmail
等。Qmail具有安裝方便、安全性高、郵件結構合理、支持SMTP服務、佇列管理、郵件反彈、基於域名的郵件路由、SMTP傳輸、轉發和郵件列表、本地(郵件)傳送、POP3 服務等強大的功能。它已經逐漸替代傳統的Sendmail成為linux下郵件系統核心的主流選擇。qmail是面向安全而設計的,作者曾經懸賞500美元來找出qmail的安全漏洞,但是直到2006年,還是沒有人能領取這筆獎金。
qmail的主要競爭對手是Exim以及Postfix。與它的競爭對手不同的是,Qmail已經許多年沒有更新了,用戶已經習慣於通過第三方的外掛程式及補丁來使qmail增加新的功能。
qmail 的原始碼現已開放為公有領域。
實戰套用部署
目錄
qmail 安裝部署1
一、準備工作1
二、LAMP殘留(執行即可)1
三、上傳所需安裝包2
四、 檢查DNS配置2
五、 設定或關閉防火牆2
六、 卸載已有的郵件系統3
七、 解壓縮netqmail-1.05.tar.gz3
八、 安裝daemontools3
九、 安裝ucspi-tcp3
十、 創建所需的用戶4
十一、 準備安裝qmail4
十二、 qmail編譯安裝5
十三、 設定管理員的信箱地址5
十四、 開啟SPF設定5
十五、 添加qmail的幫助手冊5
十六、 為qmail服務建立監控目錄和日誌檔案5
十七、 檢查服務6
十八、 安裝vpopmail7
十九、 檢查服務9
二十、 用POP3和SMTP測試10
二十一、安裝qmailadmin14
一、準備工作
1.1 需要安裝LAMP環境,mysql必須為單實例,apache支持cgi
1.2若apache、mysql的路徑不在/usr/local下,那么需要做一個軟連線
#ln –s /application/apache2.2.13 /usr/local/apache2
#ln –s /application/webserver/mysql /usr/local/mysql
//ln –s 源 目標
1.3 配置DNS,詳見《安裝配置DNS》文檔。
二、LAMP殘留(執行即可)
2.1 Put the dns and apache statr cmd to /etc/rc.local file
#echo "/usr/local/sbin/named" >>/etc/rc.local
#echo "/usr/local/apache2/bin/apachectl restart" >>/etc/rc.local
#echo "rndc reload" >>/etc/rc.local
2.2 Start named and apache services
#/usr/local/sbin/named
#/usr/local/apache2/bin/apachectl restart
#rndc reload
三、上傳所需安裝包
#cd /home/jeacen/tool/qmail
#rz
所需上傳安裝包
Daemontools-0.76.tar.gz
ucspi-tcp-0.88.tar.gz
toaster-scripts-0.7.tar.gz
vpopmail-5.4.13.tar.gz
netqmail-1.05
qmailadmin-1.2.13.tar.gz
四、 檢查DNS配置
在開始之前,確保正確設定了DNS?MX記錄.例如使用"etiantian.org"作為郵件域,
對MX記錄進行測試:在Linux下:
首先要把etiantian.org 的mx 記錄指向mx1.etiantian.org. (DNS里已設定好)
由於本文檔是本機配置的DNS,因此需執行:
#echo "127.0.0.1">/etc/resolv.conf
#host -t a mx1.etiantian.org
mx1.etiantian.org has address 10.0.0.139
#host -t mx etiantian.org
etiantian.org mail is handled by 10 mx1.etiantian.org.
#host mx1.etiantian.org
mx1.etiantian.org has address 10.0.0.139
五、 設定或關閉防火牆
a. 關閉防火牆
#service iptables stop
b. 設定防火牆
Outbound ports (tcp)
25 - SMTP
110 - POP
143 - IMAP
783 - spamassassin
993 - IMAPS
Inbound Ports (tcp)
22-SSH
25 - SMTP
80 - HTTP
110 - POP services
143 - IMAP
443 - HTTPS
783 - Spamassassin
993 - IMAPS
六、 卸載已有的郵件系統
確認沒有SMTP/POP/IMAP服務在運行,同時卸載掉mysql
#rpm -aq sendmail mysql
#service sendmail stop
#rpm -e --nodeps sendmail
#rpm -e --nodeps mysql
#rpm -aq sendmail mysql
七、 解壓縮netqmail-1.05.tar.gz
#chmod 755 -R /home/jeacen/
#cd /home/jeacen/tool/qmail
#tar -xzf netqmail-1.05.tar.gz
#cd netqmail-1.05
#./collate.sh
#cd /home/jeacen/tool/qmail
八、 安裝daemontools
#tar -zxvf daemontools-0.76.tar.gz
#cd admin/daemontools-0.76
#patch -p1 < ../../daemontools-0.76.errno.patch
#./package/install
#ps ax | grep svscan
驗證daemontools已經正常運行:
#ps ax | grep svscan
28555 ? Ss 0:00 /bin/sh /command/svscanboot
28557 ? S 0:00 svscan /service
九、 安裝ucspi-tcp
說明
ucspi-tcp軟體包由一組工具組成。它們用來簡單的建立客戶機-伺服器tcp後台程式。
TcpServer是一個比inetd安全性更好的選擇。它內建有基於規則的連線控制,能完善
地在達到預定義的最大系統負載時將連線推遲,這點比 inetd好。Tcpserver也被推薦
與qmail一同使用,因為它們是同一個作者編的程式。
參考:http://cr.yp.to/ucspi-tcp.html
安裝
#cd /home/jeacen/tool/qmail
#tar zxvf ucspi-tcp-0.88.tar.gz
#cd ucspi-tcp-0.88
#patch -p1 < ../ucspi-tcp-0.88.errno.patch
#make
#make setup check
十、 創建所需的用戶
#groupadd nofiles
#useradd alias -g nofiles -d /var/qmail/alias -s /sbin/nologin
#useradd qmaild -g nofiles -d /var/qmail -s /sbin/nologin
#useradd qmaill -g nofiles -d /var/qmail -s /sbin/nologin
#useradd qmailp -g nofiles -d /var/qmail -s /sbin/nologin
#groupadd qmail
#useradd qmailq -g qmail -d /var/qmail -s /sbin/nologin
#useradd qmailr -g qmail -d /var/qmail -s /sbin/nologin
#useradd qmails -g qmail -d /var/qmail -s /sbin/nologin
創建vpopmail用戶
#groupadd vchkpw -g 89
#useradd vpopmail -u 89 -g vchkpw
十一、 準備安裝qmail
#cd /home/jeacen/tool/qmail
#tar -xzf toaster-scripts-0.7.tar.gz
#cd netqmail-1.05/netqmail-1.05/
#vi qmail-smtpd.c +50
搜尋函式straynewline中的451改為553 第50行
當你的伺服器收到無效格式的郵件時,會傳送:"I am not going to accept that message at the moment,you can try again later",對方伺服器收到後,幾秒鐘後又會傳送同樣的郵件給你,造成多次的重複。改為553後,你的伺服器將直接傳送:"I am not going to accept that message,don't try sending it again.",告訴對方的伺服器不要再發這封無效的信件。
RedHat/Fedora用戶可能需要為TLS補丁連結一個include檔案
#ln -s /usr/kerberos/include/com_err.h /usr/include/
#rm -rf /usr/sbin/sendmail
//刪除sendmail的連結
十二、 qmail編譯安裝
#make
#make setup check
//註:qmail的補丁在vpopmail安裝之後再打。
用你自己的域名代替下面的mx1.etiantian.org
#./config-fast mx1.etiantian.org
十三、 設定管理員的信箱地址
發往root/postmaster/mailer-daemon地址的郵件將會由定義的管理員信箱接收。
將如下的“admin@etiantian.org"替換成你的管理員信箱。
#cd /var/qmail/alias
#echo "admin@etiantian.org" > .qmail-postmaster
#echo "admin@etiantian.org" > .qmail-mailer-daemon
#echo "admin@etiantian.org" > .qmail-root
#chmod 644 /var/qmail/alias/.qmail*
十四、 開啟SPF設定
#echo ./Maildir/ >/var/qmail/control/defaultdelivery
#echo 3 > /var/qmail/control/spfbehavior
十五、 添加qmail的幫助手冊
#echo MANPATH /var/qmail/man >> /etc/man.config
十六、 為qmail服務建立監控目錄和日誌檔案
#mkdir -p /var/qmail/supervise/qmail-send/log
#mkdir -p /var/qmail/supervise/qmail-smtpd/log
#mkdir -p /var/qmail/supervise/qmail-pop3d/log
#mkdir -p /var/qmail/supervise/qmail-pop3ds/log
#cd /home/jeacen/tool/qmail
#cp /home/jeacen/tool/qmail/toaster-scripts-0.7/send.run /var/qmail/supervise/qmail-send/run
#cp /home/jeacen/tool/qmail/toaster-scripts-0.7/send.log.run /var/qmail/supervise/qmail-send/log/run
#cp /home/jeacen/tool/qmail/toaster-scripts-0.7/smtpd.run /var/qmail/supervise/qmail-smtpd/run
#cp /home/jeacen/tool/qmail/toaster-scripts-0.7/smtpd.log.run /var/qmail/supervise/qmail-smtpd/log/run
#cp /home/jeacen/tool/qmail/toaster-scripts-0.7/pop3d.run /var/qmail/supervise/qmail-pop3d/run
#cp /home/jeacen/tool/qmail/toaster-scripts-0.7/pop3d.log.run /var/qmail/supervise/qmail-pop3d/log/run
#cp /home/jeacen/tool/qmail/toaster-scripts-0.7/pop3ds.run /var/qmail/supervise/qmail-pop3ds/run
#cp /home/jeacen/tool/qmail/toaster-scripts-0.7/pop3ds.log.run /var/qmail/supervise/qmail-pop3ds/log/run
#echo 20 > /var/qmail/control/concurrencyincoming
#chmod 644 /var/qmail/control/concurrencyincoming
#chmod 755 /var/qmail/supervise/qmail-send/run
#chmod 755 /var/qmail/supervise/qmail-send/log/run
#chmod 755 /var/qmail/supervise/qmail-smtpd/run
#chmod 755 /var/qmail/supervise/qmail-smtpd/log/run
#chmod 755 /var/qmail/supervise/qmail-pop3d/run
#chmod 755 /var/qmail/supervise/qmail-pop3d/log/run
#chmod 755 /var/qmail/supervise/qmail-pop3ds/run
#chmod 755 /var/qmail/supervise/qmail-pop3ds/log/run
#mkdir -p /var/log/qmail/smtpd
#mkdir -p /var/log/qmail/pop3d
#mkdir -p /var/log/qmail/pop3ds
#chown -R qmaill /var/log/qmail
Start script:
#cd /home/jeacen/tool/qmail
#cp toaster-scripts-0.7/rc /var/qmail/rc
#chmod 755 /var/qmail/rc
#cp toaster-scripts-0.7/qmailctl /var/qmail/bin/
#chmod 755 /var/qmail/bin/qmailctl
#ln -s /var/qmail/bin/qmailctl /usr/bin
#ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
#rm -rf /usr/lib/sendmail
#ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
用daemontools來啟動qmail-send和qmail-smtpd
#ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service
命令列表
啟動,停止,重啟,查看佇列等
qmailctl start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help
十七、 檢查服務
#netstat -an | grep 25
#ps -ef | grep qmail
#ps -efl | grep "service errors" | grep -v grep
# ps -ef | grep qmail|grep -v grep |wc –l
9
# ps -efl | grep "service errors" | grep -v grep
4 S root 3729 3289 0 78 0 - 619 pipe_w 16:03 ? 00:00:00 readproctitle service errors: ................................................................................................................................................................................................................................................................................................................................................................................................................
日誌:
/var/log/maillog
/var/log/qmail/current
/var/log/qmail/pop3d/current
/var/log/qmail/pop3ds/current
/var/log/qmail/smtpd/current
十八、 安裝vpopmail
vpopmail是一個以qmail為基礎的虛擬域管理包;其允許在一個IP位址添加多個虛擬域;並且可以不需要使用系統帳號做郵件帳號。
參考:http://vpopmail.sf.net
創建目錄,設定默認域。
#mkdir -p /home/vpopmail/etc
#echo "etiantian.org " > /home/vpopmail/etc/defaultdomain
設定smtp規則,關閉open relays
#echo '127.0.0.1:allow,RELAYCLIENT=""' > /home/vpopmail/etc/tcp.smtp
#cd /home/vpopmail/etc ; tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp
設定MySQL信息,第一個vpopmail是帳號,123456為密碼,第二個vpopmail是資料庫
#echo "localhost|0|vpopmail|123456|vpopmail" > /home/vpopmail/etc/vpopmail.mysql
#chmod 640 /home/vpopmail/etc/vpopmail.mysql
#chown -R vpopmail.vchkpw /home/vpopmail/etc
在MySQL里添加vpopmail的帳號
#mysql -uroot -p'123456'
Mysql>CREATE DATABASE vpopmail;
Mysql>GRANT select,insert,update,delete,create,drop ON vpopmail.* TO vpopmail@localhost IDENTIFIED BY '123456';
Mysql>FLUSH PRIVILEGES;
Mysql>QUIT;
安裝:
#cd /home/jeacen/tool/qmail/
#tar zxvf vpopmail-5.4.13.tar.gz
#cd vpopmail-5.4.13
#./configure --enable-incdir=/usr/local/mysql/include/mysql --enable-libdir=/usr/local/mysql/lib/mysql --disable-roaming-users --enable-logging=p --disable-passwd --enable-clear-passwd --disable-domain-quotas --enable-auth-module=mysql --enable-auth-logging --enable-sql-logging --disable-valias --disable-mysql-limits --enable-learn-passwords
#make
#make install-strip
//帶資料庫支持 #./configure這裡的--enable-incdir 和 --enable-libdir要配置到mysql的安裝目錄下的include和lib
設定/etc/profile
#echo 'export PATH=$PATH:/home/vpopmail/bin' >> /etc/profile
#source /etc/profile
添加域,前面是域名,後面是管理員(postmaster)密碼
#ln -s /usr/local/mysql/lib/mysql/libmysqlclient.so.15 /lib/libmysqlclient.so.15
#vadddomain etiantian.org 123456
添加用戶
#vadduser -q 10485760S ranhongyuan@etiantian.org 123456
#vadduser -q 10485760S wubin@etiantian.org 123456
#vmoduser -c ranhongyuan ranhongyuan@etiantian.org
#vmoduser -c wubin wubin@etiantian.org
配置Linux支持中文
#echo "LANG="zh_CN.GB18030" ">/etc/sysconfig/I18N
#echo "SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"">>/etc/sysconfig/i18n
#echo "SYSFONT="latarcyrheb-sun16" ">>/etc/sysconfig/i18n
#cat /etc/sysconfig/i18n
#source /etc/sysconfig/i18n
設定信箱容量達到90%的警告信息
#cat >> /home/vpopmail/domains/.quotawarn.msg <
From: 信箱管理員
Reply-To: postmaster@etiantian.org
To: 信箱用戶
Subject: 信箱空間警告
Mime-Version: 1.0
Content-Type: text/html; charset=gb2312
Content-Transfer-Encoding: base64
您的信箱空間已經達到90%.如果想繼續使用,請刪除一些信件.
如果需要幫助,請聯繫信箱管理員:
Email : postmaster@etiantian.org
EOF
設定信箱已滿的警告信息
#echo "郵件被拒絕,用戶的信箱空間已滿." > /home/vpopmail/domains/.over-quota.msg
#cat /home/vpopmail/domains/.over-quota.msg
啟動腳本
#cp /home/jeacen/tool/qmail/toaster-scripts-0.7/vpopmailctl /var/qmail/bin
#ln -s /var/qmail/bin/vpopmailctl /usr/bin
#chmod 755 /var/qmail/bin/vpopmailctl
現在打上qmail的補丁
#cd /home/jeacen/tool/qmail/netqmail-1.05/netqmail-1.05
#bunzip2 -c /home/rhy/tools/qmail/qmail-toaster-0.7.2.patch.bz2 | patch -p0
#make clean
#make
#qmailctl stop
#make setup check
#chown -R vpopmail:vchkpw /var/qmail/spam
創建SSL Key
# make cert
按提示輸入公司信息
Country Name (2 letter code) [GB]:CN
State or Province Name (full name) [Berkshire]:beijing
Locality Name (eg, city) [Newbury]:beijing
Organization Name (eg, company) [My Company Ltd]:etiantian.org
Organizational Unit Name (eg, section) []:etiantian.org
Common Name (eg, your name or your server's hostname) []:etiantian.org
Email Address []:admin@etiantian.org
#make tmprsadh
#chown -R vpopmail:qmail /var/qmail/control/clientcert.pem /var/qmail/control/servercert.pem
啟動qmail
#qmailctl start
用daemontools來啟動qmail-pop3d和qmail-pop3ds
#ln -s /var/qmail/supervise/qmail-pop3d /service
#ln -s /var/qmail/supervise/qmail-pop3ds /service
十九、 檢查服務
#netstat -an | grep 110
# ps -ef | grep qmail |wc -l
16
# ps -efl | grep "service errors" | grep -v grep
4 S root 3729 3289 0 78 0 - 619 pipe_w 16:03 ? 00:00:00 readproctitle service errors:
二十、 用POP3和SMTP測試
用Outlook Express測試qmail的smtp和pop3是否正常,注意由於vpopmail支持虛擬域名,所以在outlook中設定郵件帳號時,用戶名後要加上域名,如demo@demo.com。smtp是帶認證的,在outlook中也要作相應設定。建議先測試正常後再進行下一步安裝。如果qmail出現問題,可查看mysql中的vpopmail資料庫,/var/log下的mysqld和maillog日誌記錄,這樣容易很快找出問題。(這個地方不存在日誌,主要通過 ps –ef |grep qmail 和 vpopmail 資料庫來看。)