歡迎您光臨本站 註冊首頁

qmail-smtpd-auth-0.31.tar.gz認證問題的解決 .

←手機掃碼閱讀     火星人 @ 2014-03-03 , reply:0

qmail-smtpd-auth-0.31.tar.gz認證問題的解決 .

qmail-smtpd-auth-0.31.tar.gz認證問題的解決 .






        在按裝配置qmail的過程中,設置SMTP認證是非常重要的,傳統的郵件伺服器是不包含SMTP認證的,幫助轉發不屬於自己管轄域的郵件,是網路開放和共享的精神的體現。但現在網上有太多的垃圾,他們會利用郵件伺服器的這個特點,利用你的伺服器發送大量的廣告、甚至非法信息,給系統管理員帶來巨大的風險,導致其他郵件伺服器拒收你的正常郵件,甚至被有關部門請去喝茶都是可能的,所以必須加上正確的SMTP的認證,只有本域的合法用戶才能通過伺服器發送郵件。

        qmail是linux上非常流行的MTA,但它本身並不提供SMTP認證,需要通過其他的patch來實現。目前網路上流行的SMTP-AUTH的補丁有兩個,一個是qmail-smtpd-auth-0.31.tar.gz,另一是直接修改smtpd.c文件。國內的幾大論壇,如ChinaUnix都推薦直接修改smtp.c文件的方式,主要是在patch的過程中,很多人發現qmail-smtpd-auth-0.31.tar.gz有這樣的問題,就是要不所有用戶和隨便的密碼都能通過,要不就是合法用戶也無法通過,無法真正實現SMTP認證。

         我在配置中也發現了這樣的問題,搜索國外的權威技術站點,都沒有提到qmail-smtpd-auth-0.31.tar.gz的這個問題,所以我對這個補丁進行了測試和配置,最終發現其實這個補丁是沒有問題的,出現上述問題是配置不當的結果。

過程如下,以供大家參考(補丁的安裝過程,請參見補丁內部的安裝文檔):


1、最初的smtp-run的腳本#!/bin/sh

QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
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 15000000 \
    /usr/local/bin/tcpserver -H -R -l "$LOCAL" -t 1 -v -p -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
        -u "$QMAILDUID" -g "$NOFILESGID" 0 25 /usr/local/bin/rblsmtpd -r relay.ordb.org /var/qmail/bin/qmail-smtpd  /home/vpopmail/bin/vchkpw
/bin/true /usr/local/sbin/cmd5checkpw 2>&1為了測試smtp認證的問題,我直接運行smtp認證# /var/qmail/bin/qmail-smtpd /home/vpopmail/bin/vchkpw
220 example.com ESMTP
ehlo
250-example.com
250-AUTH LOGIN CRAM-MD5 PLAIN
250-AUTH=LOGIN CRAM-MD5 PLAIN
250-PIPELINING
250 8BITMIME
auth login
334 VXNlcm5hbWU6
amluemhhby55aXVABXVkKXF1ZS5jb20=
334 UGFzc3dvcmQ6
bzIx60EwKTg=
235 ok, go ahead (#2.0.0)注意這裡的用戶名和密碼都需要經過base64轉換后才行。經過測試,無論你的密碼是否正確,都會驗證通過。經過查看網上各位的討論,這個認證補丁要求在smtpd後面帶域名,所以我就把run腳本修改為:#!/bin/sh

QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
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" ]; the
n
    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 80000000 \
    /usr/local/bin/tcpserver -H -R -l "$LOCAL" -t 1 -v -p -x /etc/tcp.smtp.cdb -
c "$MAXSMTPD" \
        -u "$QMAILDUID" -g "$NOFILESGID" 0 25 /var/qmail/bin/qmail-smtpd "$LOCAL" /home/vpopmail/bin/vchkpw /bin/true /usr/local/sbin/cmd5che
ckpw 2>&1紅色的部分就是加了域名,然後接著用# /var/qmail/bin/qmail-smtpd example.com /home/vpopmail/bin/vchkpw
220 example.com ESMTP
ehlo audaque.com
250-example.com
250-AUTH LOGIN CRAM-MD5 PLAIN
250-AUTH=LOGIN CRAM-MD5 PLAIN
250-PIPELINING
250 8BITMIME
auth login
334 VXNlcm5hbWU6
amluemhhby55aXVABXVkKXF1ZS5jb20=
334 UGFzc3dvcmQ6

bzIxMzEwMTg=
535 authorization failed (#5.7.0)
auth login
334 VXNlcm5hbWU6
amluemhhby55aXVABXVkKXF1ZS5jb20=
334 UGFzc3dvcmQ6
MTExMTEx
235 ok, go ahead (#2.0.0)結果用戶名密碼都正確才能通過認證,所以說認證結果是正確的。然後,我運行smtpd-run文件,通過telenet server 25連上來,結果輸入正確的用戶名、密碼也無法通過驗證。這兩者的唯一區別是上面的驗證我是用root運行的,而smtpd-run的運行用戶卻是qmaild,是不是用戶許可權不對呢?我接著測試:#su - qmaild
$/var/qmail/bin/qmail-smtpd /home/vpopmail/bin/vchkpw
220 example.com ESMTP
ehlo
250-example.com
250-AUTH LOGIN CRAM-MD5 PLAIN
250-AUTH=LOGIN CRAM-MD5 PLAIN
250-PIPELINING
250 8BITMIME
334 VXNlcm5hbWU6
amluemhhby55aXVABXVkKXF1ZS5jb20=
334 UGFzc3dvcmQ6
MTExMTEx
535 authorization failed (#5.7.0)結果顯示認證失敗。所以可以肯定是qmaild用戶許可權不夠,在這個運行過程中,涉及到的文件包括/home/vpopmail/vchkpw以及連接mysql的文件,我檢查了這些文件許可權,確實在我的伺服器里,vchkpw已經設為6755,/home/vpopmail這個目錄卻不允許普通用戶訪問,/var/lib/mysql/mysql.sock也不允許普通用戶運行,修改了這些許可權以後,qmaild用戶的運行結果與root用戶的運行結果相同了,然後重新運行smtpd-run,再用telnet server 25訪問進行驗證,也能正確認證了。
    至此,我們可以肯定qmail-smtpd-auth-0.31是可以正確認證的,如果隨便的密碼都能通過,是因為在smptd後面沒有加域名,系統認為任何用戶都能直接通過;出現合法用戶也不能通過的情況,是因為qmaild用戶沒有足夠的許可權。
    另外還有兩點注意:1、vchkpw的許可權要設置為6755,4755是不行的(有些人說設置為4755)2、在這個過程中還有softlimit 的問題,如果設置太小,會因為模塊無法調入出錯,我的就設置的很大,因為我直到調整到80000000才解決這些問題,我的系統是64位的。

《解決方案》

謝謝分享

[火星人 ] qmail-smtpd-auth-0.31.tar.gz認證問題的解決 .已經有380次圍觀

http://coctec.com/docs/service/show-post-924.html