目標是建一個支持SMTP認證服務器.
我安裝的是REDHAT AdvanceServer 3,系統自帶的是sendmail8.12.10,我直接升級到sendmail 8.13.1後編譯安裝了cyrus-sasl-2.1.19,telnet localhost 25信息如下:
[root@freemail mail]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 freemail.161.com ESMTP Sendmail 8.12.11/8.12.11; Fri, 3 Sep 2004 09:29:22 +0800
ehlo sd
250-freemail.161.com Hello localhost.localdomain [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-EXPN
250-VERB
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN
250-DELIVERBY
250 HELP
250-AUTH LOGIN PLAIN出現應該是已經支持SMTP認證了.
我的ACCESS文件內容:
localhost.localdomain RELAY
localhost RELAY
127.0.0.1 RELAY
問題就出現了,我用客戶端OUTLOOK發信,始終說我IP不在支持範圍:
Sep 3 09:32:57 freemail sendmail[3805]: i831Wjej003805: ruleset=check_rcpt, arg1=<microsea@go.com>, relay=[208.5.5.145], reject=550 5.7.1 <microsea@go.com>... Relaying denied. IP name lookup failed [208.5.5.145]
Sep 3 09:33:00 freemail sendmail[3805]: i831Wjej003805: from=<microsea@161.com>, size=0, class=0, nrcpts=0, proto=ESMTP, daemon=MTA, relay=[208.5.5.145]
我只好在access文件中加入208.5.5 RELAY,但是這樣一加,SMTP認證就失效了,只要是208.5.5網段的都可以發信.試來試去始終是access文件生效,走不到smtp認證這一步,應該是SMTP認證先於access文件吧?
大家有沒碰到過這樣的情況?如何解決?急盼!
Re: sendmail中關於只認access控制文件的問題
終於搞定了,原來是sasl沒配置好的原因!!而且sasl 2版本和1有些不一樣,被它搞s了,以下是配置步驟給大家分享一下:
* 安裝cyrus-sasl-2.1.19下載地址: ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/
./configure --enable-login
make
make install
安裝完成後,要仔細檢查sasl的函數庫位置,否則會給後面的配置帶來很多問題.
缺省情況下,所有的庫函數安裝到/usr/local/lib目錄下,但sendmail使用的庫函數是在目錄/usr/lib下的,所以需要做一些調整。
cd /usr/lib
ln /usr/local/lib/sasl2/ ./sasl -s
在/usr/lib/sasl目錄下建立文件Sendmail.conf,加入如下一行
pwcheck_method:saslauthd #-------->很關鍵啊!!
檢查saslauthd的配置:
首先檢查/usr/lib/sasl/Sendmail.conf裡的那句話是否使用的是saslauthd,
其次檢查/etc/sysconfig/saslauthd這個文件,將裡面的:
MECH=pam改為MECH=shadow
然後啟動/etc/rc.d/init.d/saslauthd start,查看進程是否有以下進程:
root 5093 1 0 13:39 ? 00:00:00 /usr/sbin/saslauthd -m /var/run/saslauthd -a shadow
root 5094 5093 0 13:39 ? 00:00:00 /usr/sbin/saslauthd -m /var/run/saslauthd -a shadow
root 5095 5093 0 13:39 ? 00:00:00 /usr/sbin/saslauthd -m /var/run/saslauthd -a shadow
root 5096 5093 0 13:39 ? 00:00:00 /usr/sbin/saslauthd -m /var/run/saslauthd -a shadow
root 5098 5093 0 13:39 ? 00:00:00 /usr/sbin/saslauthd -m /var/run/saslauthd -a shadow
如果以上sasl模塊沒有生效,sendmail將會跳過認證直接讀取access文件來判斷是否允許relay.通常就會出現:
Sep 1 15:57:31 freemail sendmail[16694]: i817vP38016694: ruleset=check_rcpt, arg1=<microsea@126.com>, relay=[222.5.5.145], reject=550 5.7.1 <microsea@126.com>... Relaying denied. IP name lookup failed [222.5.5.145]
Sep 1 15:57:44 freemail sendmail[16694]: i817vP38016694: from=<microsea@go2north.com>, size=0, class=0, nrcpts=0, proto=ESMTP, daemon=MTA, relay=[222.5.5.145]
這樣的錯誤
* 編譯和配置sendmail
解壓sendmail軟件到你希望的目錄,進入sendmail-8.12.11目錄。
在devtools/Site/目錄下創建config.site.m4文件,加入如下文字,把SMTP認證
功能編譯到sendmail中。
PREPENDDEF(`confMAPDEF', `-DMAP_REGEX')
PREPENDDEF(`confOPTIMIZE', `-O6')
PREPENDDEF(`confOPTIMIZE', `-O6')
APPENDDEF(`confENVDEF', `-DSASL=2')
APPENDDEF(`conf_sendmail_LIBS', `-lsasl2')
APPENDDEF(`confLIBDIRS', `-L/usr/local/lib -L/usr/local/lib/sasl2')
APPENDDEF(`confINCDIRS', `-I/usr/local/include -I/usr/local/include/sasl')
回到sendmail-8.12.11目錄,再進入sendmail目錄,開始編譯sendmail。
./Build -c(如果不是第一次編譯,需要加入-c選項,清除以前的配置)
編譯成功後,運行./Build install安裝軟件。
接下來編輯 sendmail 設置範本文件以便產生出具有身份認證功能的 sendmail.cf 設置檔,請以下列指令執行
# cd cf/cf
# cp generic-linux.mc MYCF.mc
# cd ../feature
# cat access_db.m4 >> ../cf/MYCF.mc
# cat delay_checks.m4 >> ../cf/MYCF.mc
# cat virtusertable.m4 >> ../cf/MYCF.mc
# cd ../cf
# cat >> MYCF.mc
TRUST_AUTH_MECH(`LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `LOGIN PLAIN')dnl
^D
# sh Build MYCF.cf
# mkdir /etc/mail
# cp MYCF.cf /etc/mail/sendmail.cf
# cd /etc/mail
# cat > access
localhost.localdomain RELAY
localhost RELAY
127.0.0.1 RELAY
說明:"TRUST_AUTH_MECH"的作用是使sendmail不管access文件中如何設置,都能
relay那些通過LOGIN,PLAIN或DIGEST-MD5方式驗證的郵件。
"confAUTH_MECHANISMS"的作用是確定系統的認證方式。
"confDEF_AUTH_INFO"的作用是當你的計算機作為客戶機時,向另外一台有smtp認
證功能的主機進行認證,用戶和密碼存放在auth-info文件中,在這個例子中並不需要這
個功能,所以註釋掉了。
現在基本上可以了,啟動sendmail讓我們來測試一下吧
sendmail -bd -q20m
運行下面命令
[root@freemail mail]# telnet 222.5.5.55 25
Trying 222.5.5.55...
Connected to freemail.161mail.com (222.5.5.55).
Escape character is '^]'.
220 freemail.161mail.com ESMTP Sendmail 8.12.11/8.12.11; Thu, 2 Sep 2004 16:09:18 +0800
ehlo localhost
250-freemail.161mail.com Hello freemail.161mail.com [222.5.5.55], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-EXPN
250-VERB
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN
250-DELIVERBY
250 HELP
quit
221 2.0.0 freemail.161mail.com closing connection
Connection closed by foreign host.
有出現250-AUTH LOGIN PLAIN說明sendmail提供認證功能了,再用outlook或其它客戶端軟件測試一下!