本帖最后由 zlj2208 于 2010-06-30 20:48 編輯
Qmail install on Debian5
zlj2208
2010-01-08
轉(zhuǎn)載請注明!
修改記錄:
2010-02-01:增加Dovecot 部分
2010-02-02:增加反病毒模塊安裝
2010-06-28:修正部分文字描述
本文檔主要針對Debian系統(tǒng)編寫,大部分Redhat/Fedora/CentOS系統(tǒng)也基本適用。
最近看到論壇中有很幾個朋友在搞qmail,遇到了很多問題,將以前的文檔整理一下。由于不做SA了,沒有可以隨便折騰的服務(wù)器了,昨天在晚上在家里的虛擬機上安裝了,將文檔完善了一下,希望對初學這有幫助。
這是Qmail的最基本安裝,POP3服務(wù)使用qmail自帶的,如果不滿足需求可以使用dovecot做為POP3和IMAP服務(wù)器,dovecot很優(yōu)秀,維護也比較及時;這里也沒有反垃圾郵件模塊的加入,由于篇幅原因這里就不寫了。
Qmail 是非常優(yōu)秀的Mail服務(wù)器軟件,但是現(xiàn)在已經(jīng)很多年沒有更新了,如果建立一個完整的一套郵件系統(tǒng)需要打很多的第三方補丁。如果想系統(tǒng)學習郵件系統(tǒng)級,我還是建議大家使用Postfix 。Postfix維護比較即時,功能也很多,我使用Postfix的體會是,只有你想不到的,沒有Postfix做不到的。
有很多Qmail的Fans或組織提供了整合的Qmail解決方案,可以參以下內(nèi)容:
http://www.qmailtoaster.com/
http://qmail.jms1.net/
http://www.inter7.com/vpopmail/
http://www.igenus.org
http://www.lifewithqmail.org/
一. 安裝Qmail相關(guān)軟件
系統(tǒng)為Debian5
準備工作
卸載exim4
aptitude remove exim4 exim4-base |
安裝編譯器
aptitude install gcc g++ make
aptitude install openssl libssl-dev mysql-server libmysqlclient15-dev |
1. 安裝Qmail
1).建立qmail需要的用戶
2).建立Qmail目錄
3).建立qmail和vpopmail需要的用戶
建立qmail需要的用戶
groupadd qmail
groupadd nofiles
useradd alias -g qmail -d /var/qmail/alias -s /bin/false
useradd qmaild -g qmail -d /var/qmail -s /bin/false
useradd qmaill -g qmail -d /var/qmail -s /bin/false
useradd qmailp -g qmail -d /var/qmail -s /bin/false
useradd qmailq -g nofiles -d /var/qmail -s /bin/false
useradd qmailr -g nofiles -d /var/qmail -s /bin/false
useradd qmails -g nofiles -d /var/qmail -s /bin/false |
建立vpopmail需要的用戶和組
groupadd -g 89 vchkpw
useradd -g vchkpw -u 89 -d /home/vpopmail -s /bin/false -p'*' vpopmail
mkdir /home/vpopmail
chown -R vpopmail.vchkpw /home/vpopmail |
4).下載qmail軟件包
5).下載qmail補丁
6).為netqmail-1.06打補丁
cd /usr/local/src/netqmail-1.06
patch < /usr/local/src/patchs/netqmail-1.05-tls-smtpauth-20070417.patch |
7).修改CA的過期時間,給他設(shè)置成10年,夠多了吧
sed -i 's/-days 366/-days 3650/' Makefile-cert.mk |
8 ).如果不想讓qmail支持CRAM_MD5認證方式修改下面文件
/usr/local/src/netqmail-1.06/qmail-smtpd.c
將下面代碼
改成
9).編譯安裝qmail
cd /usr/local/src/netqmail-1.06
make setup check
make cert
make tmprsadh |
設(shè)置證書文件權(quán)限
chown vpopmail.vchkpw /var/qmail/control/servercert.pem |
10).配置qmail
如果正確配置了dns
cd /usr/local/src/netqmail-1.06
./config-fast |
如果沒配置dns使用下面命令
cd /usr/local/src/netqmail-1.06
./config-fast your.domain.name |
Qmail安裝完畢.
2. 安裝 ucspi-tcp
ucspi-tcp 是代替inetd的一套程序。
程序安裝的位置為: /usr/local/bin
ucspi-tcp安裝完畢.
3. 安裝daemontools
daemontools是一套管理UNIX服務(wù)的工具。
mkdir -p /package
cd /package
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
chmod 1755 /package
tar zxvf daemontools-0.76.tar.gz
cd /package/admin/daemontools-0.76/src
patch < /usr/local/src/netqmail-1.06/other-patches/daemontools-0.76.errno.patch
cd /package/admin/daemontools-0.76
package/install |
4. 安裝autorespond
5. 安裝ezmlm
ezmlm是一套郵件列表管理軟件。
6. 安裝vpopmail
1). 準備工作
mkdir ~vpopmail/etc
chown vpopmail:vchkpw ~vpopmail/etc
echo "localhost|0|vpopmail|passwd@|vpopmail" > ~vpopmail/etc/vpopmail.mysql
chown vpopmail:vchkpw ~vpopmail/etc/vpopmail.mysql
chmod 640 ~vpopmail/etc/vpopmail.mysql
mysql -u root -p -e "CREATE DATABASE vpopmail;"
mysql -u root -p -e "GRANT all ON vpopmail.* TO vpopmail@localhost IDENTIFIED BY 'passwd@'; " |
測試vpopmail用戶是否能夠連接數(shù)據(jù)庫
mysql -u vpopmail -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 35
Server version: 5.0.51a-24+lenny2 (Debian)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| vpopmail |
+--------------------+
2 rows in set (0.00 sec)
mysql> quit |
2). 編譯安裝vpopmail
cd /usr/local/src/vpopmail-5.4.30
./configure --enable-logging=v \
--enable-auth-module=mysql \
--disable-passwd \
--enable-clear-passwd \
--disable-many-domains \
--enable-auth-logging \
--enable-sql-logging \
--enable-valias \
--enable-mysql-limits |
make && make install-strip |
3).建立虛擬域和虛擬用戶
/home/vpopmail/bin/vadddomain mydomain.com
echo mydomain.com > ~vpopmail/etc/defaultdomain
/home/vpopmail/bin/vadduser test 123456
|
4).檢查虛擬用戶是否建立正確
/home/vpopmail/bin/vuserinfo test |
下面為輸出信息
name: test
passwd: $1$5AFlHref$Ms7f.rjHAe34cIJ.3.xoF.
clear passwd: 123456
comment/gecos: test
uid: 0
gid: 0
flags: 0
gecos: test1
limits: No user limits set.
dir: /home/vpopmail/domains/mydomain.com/test
quota: NOQUOTA
usage: NOQUOTA
account created: Fri Jan 8 18:12:33 2010
last auth: Never logged in
|
二. 啟動qmail
1. 系統(tǒng)啟動腳本
建立 /var/qmail/bin/qmailctl 啟動腳本
#!/bin/sh
# For Red Hat chkconfig
# chkconfig: - 80 30
# description: the qmail MTA
PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
export PATH
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
case "$1" in
start)
echo "Starting qmail..."
if svok /service/qmail-send ; then
svc -u /service/qmail-send /service/qmail-send/log
echo " qmail-send"
else
echo "qmail-send supervise not running"
fi
if svok /service/qmail-smtpd ; then
svc -u /service/qmail-smtpd /service/qmail-smtpd/log
echo " qmail-smtpd"
else
echo "qmail-smtpd supervise not running"
fi
if svok /service/qmail-pop3d ; then
svc -u /service/qmail-pop3d /service/qmail-pop3d/log
echo " qmail-pop3d"
else
echo "qmail-pop3d supervise not running"
fi
if [ -d /var/lock/subsys ]; then
touch /var/lock/subsys/qmail
fi
;;
stop)
echo "Stopping qmail..."
echo " qmail-smtpd"
svc -d /service/qmail-smtpd /service/qmail-smtpd/log
echo " qmail-send"
svc -d /service/qmail-send /service/qmail-send/log
echo " qmail-pop3d"
svc -d /service/qmail-pop3d /service/qmail-pop3d/log
if [ -f /var/lock/subsys/qmail ]; then
rm /var/lock/subsys/qmail
fi
;;
stat)
svstat /service/qmail-send
svstat /service/qmail-send/log
svstat /service/qmail-smtpd
svstat /service/qmail-smtpd/log
svstat /service/qmail-pop3d
svstat /service/qmail-pop3d/log
qmail-qstat
;;
doqueue|alrm|flush)
echo "Flushing timeout table and sending ALRM signal to qmail-send."
/var/qmail/bin/qmail-tcpok
svc -a /service/qmail-send
;;
queue)
qmail-qstat
qmail-qread
;;
reload|hup)
echo "Sending HUP signal to qmail-send."
svc -h /service/qmail-send
;;
pause)
echo "Pausing qmail-send"
svc -p /service/qmail-send
echo "Pausing qmail-smtpd"
svc -p /service/qmail-smtpd
echo "Pausing qmail-pop3d"
svc -p /service/qmail-pop3d
;;
cont)
echo "Continuing qmail-send"
svc -c /service/qmail-send
echo "Continuing qmail-smtpd"
svc -c /service/qmail-smtpd
echo "Continuing qmail-pop3d"
svc -c /service/qmail-pop3d
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd."
svc -d /service/qmail-smtpd /service/qmail-smtpd/log
echo "* Restarting qmail-smtpd."
svc -u /service/qmail-smtpd /service/qmail-smtpd/log
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /service/qmail-send /service/qmail-send/log
echo "* Stopping qmail-pop3d."
svc -d /service/qmail-pop3d /service/qmail-pop3d/log
echo "* Restarting qmail-pop3d."
svc -u /service/qmail-pop3d /service/qmail-pop3d/log
;;
cdb)
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
chmod 644 /etc/tcp.smtp.cdb
echo "Reloaded /etc/tcp.smtp."
;;
help)
cat <<HELP
stop -- stops mail service (smtp connections refused, nothing goes out)
start -- starts mail service (smtp connection accepted, mail can go out)
pause -- temporarily stops mail service (connections accepted, nothing leaves)
cont -- continues paused mail service
stat -- displays status of mail service
cdb -- rebuild the tcpserver cdb file for smtp
restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it
doqueue -- schedules queued messages for immediate delivery
reload -- sends qmail-send HUP, rereading locals and virtualdomains
queue -- shows status of queue
alrm -- same as doqueue
flush -- same as doqueue
hup -- same as reload
HELP
;;
*)
echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}"
exit 1
;;
esac
exit 0
#end of qmailctl |
賦予腳本執(zhí)行權(quán)限,并建立相關(guān)連接
chmod 755 /var/qmail/bin/qmailctl
ln -s /var/qmail/bin/qmailctl /usr/bin
ln -s /var/qmail/bin/qmailctl /etc/init.d/qmaild |
2. 建立 supervise 腳本
建立 supervise 目錄
mkdir -p /var/qmail/supervise/qmail-send/log \
/var/qmail/supervise/qmail-smtpd/log \
/var/qmail/supervise/qmail-pop3d/log |
然后建立log文件目錄
mkdir -p /var/log/qmail/smtpd \
/var/log/qmail/send \
/var/log/qmail/pop3d
chown -R qmaill /var/log/qmail |
1). 建立 /var/qmail/rc 文件
#!/bin/sh
# Using stdout for logging
# Using control/defaultdelivery from qmail-local to deliver messages by default
exec env - PATH="$PATH:/var/qmail/bin" \
qmail-start "`cat /var/qmail/control/defaultdelivery`"
#end of /var/qmail/rc
|
echo ./Maildir/ > /var/qmail/control/defaultdelivery |
2). 建立 qmail-send 腳本
建立 /var/qmail/supervise/qmail-send/run 文件
#!/bin/sh
exec /var/qmail/rc |
建立 /var/qmail/supervise/qmail-send/log/run 文件
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/send |
3).建立 qmail-smtpd 腳本
建立 /var/qmail/supervise/qmail-smtpd/run 文件
#!/bin/sh
QMAILDUID=`id -u vpopmail`
NOFILESGID=`id -g vpopmail`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`
if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
echo /var/qmail/supervise/qmail-smtpd/run
exit 1
fi
if [ ! -f /var/qmail/control/rcpthosts ]; then
echo "No /var/qmail/control/rcpthosts!"
echo "Refusing to start SMTP listener because it'll create an open relay"
exit 1
fi
exec /usr/local/bin/softlimit -m 40000000 \
/usr/local/bin/tcpserver -v -H -R -l "$LOCAL" \
-x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /usr/local/bin/rblsmtpd \
-r bl.spamcop.net /var/qmail/bin/qmail-smtpd \
/home/vpopmail/bin/vchkpw /bin/true 2>&1
|
建立 concurrencyincoming 控制文件
echo 20 > /var/qmail/control/concurrencyincoming
chmod 644 /var/qmail/control/concurrencyincoming |
注意: concurrencyincoming并不是標準的qmail控制文件. 它是上面腳本的一個要素. 并且, 第一個LOCAL 行上面的是"破折號 + 數(shù)字1", 下面的tcpserver行上的參數(shù)是"破折號 + 小寫字母l" . (由于英文小寫字母l和數(shù)字1容易混淆, 原作者特意補充的注意事項. 由譯者將被提到兩行修改成為紅色. 這也是為什么作者希望讀者直接拷貝腳本而不是自行輸入避免腳本出錯的主要原因之一. 另外注意這個腳本中很多字體很小的引號和反引號. 譯者注)
注意: 根據(jù)你的操作系統(tǒng)和硬件平臺的不同, 可能需要調(diào)整softlimit命令的的內(nèi)存限制參數(shù). 如果你的系統(tǒng)出現(xiàn)連接25端口失敗和無法接收遠程系統(tǒng)發(fā)送的郵件, 或者看到了類似下面這樣的錯誤消息:
/usr/local/bin/tcpserver: error while loading shared libraries:
libc.so.6: failed to map segment from shared object: Cannot
allocate memory |
試一下把這個參數(shù)調(diào)整到4000000或者更大.
建立 /var/qmail/supervise/qmail-smtpd/log/run 文件
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd |
4). 配置pop3腳本
建立 /var/qmail/supervise/qmail-pop3d/run 文件
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
exec tcpserver -H -R -v -c100 0 110 qmail-popup 127.0.0.1 \
/home/vpopmail/bin/vchkpw qmail-pop3d Maildir 2>&1 |
建立 /var/qmail/supervise/qmail-pop3d/log/run 文件
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
exec setuidgid qmaill multilog t s100000 n20 /var/log/qmail/pop3d 2>&1 |
5).設(shè)置腳本的可執(zhí)行權(quán)限
chmod 755 /var/qmail/rc
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 751 /var/qmail/supervise/qmail-pop3d/run
chmod 751 /var/qmail/supervise/qmail-pop3d/log/run |
6).建立 supervise 目錄到 /service 目錄的鏈接
ln -s /var/qmail/supervise/qmail-send \
/var/qmail/supervise/qmail-smtpd \
/var/qmail/supervise/qmail-pop3d \
/service |
/service 目錄是 daemontools 安裝時建立的目錄.
注意: 建立這個鏈接之后 qmail 系統(tǒng)會很快自動被啟動起來。
7).啟動qmail服務(wù)器方法
可以使用qmailctl命令來控制qmail的啟動、運行、查看狀態(tài)等。
啟動qmail
停止qmail
重啟動qmail
查看qmail狀態(tài)
查看qmail隊列
8).SMTP訪問控制
允許本地主機通過SMTP方式發(fā)送郵件,/etc/tcp.smtp 為tcprules的配置文件,如果配置可以設(shè)定哪些IP允許訪問,哪些IP不允許訪問。
echo '127.:allow,RELAYCLIENT=""' >>/etc/tcp.smtp
qmailctl cdb |
9).使用qmail的sendmail程序替換原有的sendmail程序
mv /usr/lib/sendmail /usr/lib/sendmail.old
mv /usr/sbin/sendmail /usr/sbin/sendmail.old
ln -s /var/qmail/bin/sendmail /usr/lib
ln -s /var/qmail/bin/sendmail /usr/sbin |
10).建立系統(tǒng)別名文件
建立這些系統(tǒng)別名, 取決于你想讓這些郵件發(fā)送到哪里(一個本地用戶或者一個遠程地址)并且適當?shù)膭?chuàng)建一個.qmail 文件集合. 舉個例子, 加入你想讓本地用戶 dave 接收發(fā)給系統(tǒng)管理員和郵件管理員的郵件, 就這么作:
echo YourUser > /var/qmail/alias/.qmail-root
echo YourUser > /var/qmail/alias/.qmail-postmaster
ln -s /var/qmail/alias/.qmail-postmaster /var/qmail/alias/.qmail-mailer-daemon
ln -s /var/qmail/alias/.qmail-postmaster /var/qmail/alias/.qmail-abuse
chmod 644 /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-postmaster
|
11).重啟動qmail
檢查進行是否存在
[ 本帖最后由 zlj2208 于 2010-1-23 14:28 編輯 ] |