一、下載下傳軟體包
qmail, ftp://cr.yp.to/software/qmail-1.03.tar.gz ·
ucspi-tcp, ftp://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz ·
daemontools, ftp://cr.yp.to/daemontools/daemontools-0.76.tar.gz ·
vpopmail http://www.inter7.com/vpopmail/vpopmail-5.2.1.tar.gz
mysql
二、安裝
1、準備安裝檔案和目錄
su
umask 022
mkdir -p /usr/local/src
mv qmail-1.03.tar.gz ucspi-tcp-0.88.tar.gz /usr/local/src
mkdir -p /package
mv daemontools-0.76.tar.gz /package
chmod 1755 /package
2、解壓檔案
cd /usr/local/src
tar -xzf qmail-1.03.tar.gz
tar -xzf ucspi-tcp-0.88.tar.gz
cd /package
tar -xzf daemontools-0.76.tar.gz
3、安裝qmail
mkdir /var/qmail 建立qmail安裝目錄
#mkdir /etc/qmail
#ln -s /etc/qmail /var/qmail/control
閱讀INSTALL.ids檔案。根據要求建立安裝qmail所需要的使用者組
groupadd nofiles
useradd qmaild -g nofiles -d /var/qmail -s /nonexistent
useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent
useradd qmaill -g nofiles -d /var/qmail -s /nonexistent
useradd qmailp -g nofiles -d /var/qmail -s /nonexistent
groupadd qmail
useradd qmailq -g qmail -d /var/qmail -s /nonexistent
useradd qmailr -g qmail -d /var/qmail -s /nonexistent
useradd qmails -g qmail -d /var/qmail -s /nonexistent
#build qmail source
cd /usr/local/src/qmail-1.03
make setup check
./config or ./config-fast mail2.fugui.cn
4、安裝vpopmail(需要mysql資料庫)
1、添加使用者群組 vpopmail/vchkpw
groupadd -g 89 vchkpw
useradd -g vchkpw -u 89 vpopmail
2、準備軟體包
tar xzf vpopmail-5.3.23.tar.gz
chown -R root.root vpopmail-5.3.23
cd vpopmail-5.3.23
3、在vpopmail的源檔案中設定對mysql的支援
修改vmysql.h中的下面幾行。
#define MYSQL_UPDATE_USER "vpopmailuser"
#define MYSQL_UPDATE_PASSWD "vpoppasswd"
#define MYSQL_READ_USER "vpopmailuser"
#define MYSQL_READ_PASSWD "vpoppasswd“
4、在mysql中建立資料庫并進行使用者授權
mysql --password="mysql-root-pwd"
CREATE DATABASE vpopmail;
GRANT select,insert,update,delete,create,drop ON vpopmail.*
TO vpopmailuser@localhost IDENTIFIED BY 'vpoppasswd';
quit
5、編譯vpopmail
./configure \
--enable-roaming-users=y \ #這裡用y也許可以支援有選擇的relay
--enable-logging=p \
--enable-defaultquota=20971520S \
--enable-ip-alias-domains=n \
--enable-passwd=n \
--enable-clear-passwd=y \
--enable-domain-quotas=n \
--enable-mysql=y \
--enable-incdir=/usr/local/mysql/include \
--enable-libdir=/usr/local/mysql/lib \
--enable-many-domains=n \
--enable-auth-logging=y \
--enable-mysql-logging=y \
--enable-valias=y \
--enable-mysql-limits=n
make
make install-strip
5、安裝ucspi-tcp
cd /usr/local/src/ucspi-tcp-0.88
6、安裝daemontools
cd /package/admin/daemontools-0.76
package/install
#安裝完後可以驗證
1、 ps -ef | grep svscan
2、 在/etc/inittab 中增加以下行SV:123456:respawn:/command/svscanboot
7、準備啟動管理qmail的腳本
/var/qmail/supervise/qmail-send/run
\log/run
\qmail-smtpd/run
\qmail-pop3d/run
/var/qmail/rc
1、/var/qmail/rc的建立,采用qmail-local來分發信件
#!/bin/sh
# Using stdout for logging
# Using control/defaultdelivery from qmail-local to deliver
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start "`cat /var/qmail/control/defaultdelivery`"
chmod 755 /var/qmail/rc
#決定預設的郵箱類型。而非由.qmail分發類型
mailbox format name location defaultdelivery
mbox Mailbox $HOME ./Mailbox
maildir Maildir $HOME ./Maildir/
mbox username /var/spool/mail 可以參看INSTALL.vsm
#要使用/var/spool/mail郵箱類型可以使用/var/qmail/boot/proc 作為rc腳本
echo ./Maildir/ >;/var/qmail/control/defaultdelivery
2、/var/qmail/bin/qmailctl控制腳本
Create the qmailctl file by vi /var/qmail/bin/qmailctl
# For Red Hat chkconfig
# chkconfig: - 30 80
# 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
#調用/var/qmail/supervice/qmail-send/run
else
echo qmail-send service not running
fi
if svok /service/qmail-smtpd ; then #調用/var/qmail/supervice/qmail-smtpd/run
svc -u /service/qmail-smtpd /service/qmail-smtpd/log
echo qmail-smtpd service not running
if [ -d /var/lock/subsys ]; then
touch /var/lock/subsys/qmail
if svok /service/qmail-pop3d ; then #調用/var/qmail/supervice/qmail-pop3d/run
svc -u /service/qmail-pop3d /service/qmail-pop3d/log
echo qmail-pop3d service not running
;;
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
if [ -f /var/lock/subsys/qmail ]; then
rm /var/lock/subsys/qmail
echo " qmail-pop3d"
svc -d /service/qmail-pop3d /service/qmail-pop3d/log
stat)
svstat /service/qmail-send
svstat /service/qmail-send/log
svstat /service/qmail-smtpd
svstat /service/qmail-smtpd/log
qmail-qstat
svstat /service/qmail-pop3d
svstat /service/qmail-pop3d/log
doqueue|alrm|flush)
echo "Sending ALRM signal to qmail-send."
svc -a /service/qmail-send
queue)
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
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /service/qmail-send
echo "* Restarting qmail-smtpd."
svc -u /service/qmail-smtpd
echo "* Restarting qmail-pop3d."
svc -t /service/qmail-pop3d
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 (smtp connections accepted, but 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 -- sends qmail-send ALRM, scheduling queued messages for 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
>; chmod 755 /var/qmail/bin/qmailctl
>; ln -s /var/qmail/bin/qmailctl /etc/init.d/qmail
>; ln -s /var/qmail/bin/qmailctl /usr/bin/qmailctl
##其餘的一些腳本
#建立腳本的目錄
mkdir -p /var/qmail/supervise/qmail-send/log
mkdir -p /var/qmail/supervise/qmail-smtpd/log
mkdir -p /var/qmail/supervise/qmail-pop3d/log
1>;/var/qmail/supervise/qmail-send/run腳本
exec /var/qmail/rc
2>;/var/qmail/supervise/qmail-send/log/run
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail
**multilog 是daemontools中的一個工具。t告訴在每條日志記錄前加上@timestamp
**multilog script
**multilog /var/log/qmail 表示可以在此目錄添加日志内容。目前日志為current
**以及一些老的日志檔案。當日志足夠大的時候(預設為99999=96k)的時候把current
**更名為老檔案。日志檔案大小可以用設定。也可以設定最多保留多少份日志預設為
**10
**multilog t /dir sszie nnum
**setuidgid username child 就是以username的身份執行child
3>;/var/qmail/supervise/qmail-smtpd/run腳本
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
if [ ! -f /var/qmail/control/rcpthosts ]; then
echo "No /var/qmail/control/rcpthosts!"
echo "because it'll create an open relay"
exec /usr/local/bin/softlimit -m 2000000 /usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>;&1
###softlimit 工具 softlimit opts child 限制child運作時的soft resource
###tcpserver opts host port prog
###tcpserver等待客戶連接配接,然後運作prog 服務的位址由host 和 port 給出,host可
##以是0,這樣就允許連接配接到任何本地ip.
##options 分為3類[正常選項,連接配接選項,資料收集選項]
-v : 輸出詳細的錯誤資訊 [正常選項]
-R : 不去查詢遠端主機的資訊 [資料收集選項]
-l $LOCAL 設定本地主機名 [資料收集選項]
-x cdb 定義如何設定環境變量或者拒絕某類連接配接
-c n 定義允許的最大連接配接數
-u uid
-g gid 以使用者群組的身份運作prog
-H 不查詢用戶端域名
echo 20 >; /var/qmail/control/concurrencyincoming
chmod 644 /var/qmail/control/concurrencyincoming
4》3>;/var/qmail/supervise/qmail-smtpd/log/run腳本
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd
5>;/var/qmail/supervise/qmail-pop3d/run
exec /usr/local/bin/softlimit -m 3000000 \
/usr/local/bin/tcpserver -v -R -H -c 30 -l hostname.yourdomain.com 0 110 /var/qmail/bin/qmail-popup hostname.yourdomain.com /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>;&1
6>;/var/qmail/supervise/qmail-pop3d/log/run
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t \
/var/log/qmail/pop3d
ln -s /var/qmail/supervise/qmail-send /service
ln -s /var/qmail/supervise/qmail-smtpd /service
ln -s /var/qmail/supervise/qmail-pop3d /service
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
###準備日志目錄
mkdir -p /var/log/qmail/qmail-smtpd
mkdir -p /var/log/qmail/qmail-pop3d
chown qmaill /var/log/qmail /var/log/qmail/smtpd /var/log/qmail/qmail-pop3d
SMTP Access Control
Allow the local host to inject mail via SMTP:
echo '127.:allow,RELAYCLIENT=""' >;>;/etc/tcp.smtp
qmailctl cdb
###starting qmail
#替換sendmail程式
mv /usr/lib/sendmail /usr/lib/sendmail.old # ignore errors
mv /usr/sbin/sendmail /usr/sbin/sendmail.old # ignore errors
chmod 0 /usr/lib/sendmail.old /usr/sbin/sendmail.old # ignore errors
ln -s /var/qmail/bin/sendmail /usr/lib
ln -s /var/qmail/bin/sendmail /usr/sbin
#建立必須的别名
echo dave >; /var/qmail/alias/.qmail-root
echo dave >; /var/qmail/alias/.qmail-postmaster
ln -s .qmail-postmaster /var/qmail/alias/.qmail-mailer-daemon
chmod 644 /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-postmaster
[size=18]
smtp auth docuemnt[/size]
可以使用qmail-smtpd-auth 實作smtp auth
1、打更新檔及編繹安裝qmail
#wget http://members.elysium.pl/brush/qmail-smtpd-auth/dist/qmail-smtpd-auth-0.31.tar.gz
#tar zxvf qmail-1.03.tar.gz
#tar zxvf qmail-smtpd-auth-0.31.tar.gz //smtp auth更新檔。
#cp qmail-smtpd-auth-0.31/base64.* qmail-1.03 //安裝smtp-auth更新檔,支援smtp認證
#patch -d qmail-1.03 < qmail-smtpd-auth-0.31/auth.patch
2、修改/var/qmail/supervise/qmail-smtpd/run
exec /usr/local/bin/softlimit -m 4000000 tcpserver -H -l0 -R -c 512 -x
/home/vpopmail/etc/tcp.smtp.cdb -u VPOPMAILUID -g VPOPMAILGUID 0 smtp
/var/qmail/bin/qmail-smtpd your.qmail.server.name /home/vpopmail/bin/vchkpw
/bin/true &
收集的一些常見問題
################################
如何限制附件大小:
在/var/qmail/control/databytes中寫入想要限制的大小值:
#################################
###############################33
如何将進出internet的信件轉發一封給某個人
你以前問過吧。
置頂的有個問題相關。
簡單的辦法,就是你所有的信件都轉給某個使用者。
再到這個使用者進行過濾。
#############################################
###########################################
最好不要用raoming user方式編譯,沒什麼好處。
auth的時候,把後面的域名去掉試試看
############################################
#########################################
最近有幾封郵件無法發送出去,日志中提示說對方伺服器block 掉了發送位址。可是我的qmail 還是不斷的嘗試,直到大概7 天後回複給發送者說無法發送,現在我要更改這個時間為2 個小時,請問有什麼參數來着???
壞郵件在隊列中存在時間過長?????
queuelifetime 預設
604800 也就是7天
秒為機關
1小時 3600