天天看點

[精華] qmail安裝心得(安裝過程)

一、下載下傳軟體包 

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 

繼續閱讀