網(wǎng)上介紹sendmail的文章千百種,很少有跟著做下來一次成功的。多少都有些說的不準確的地方。我給大家共享一下我經(jīng)過實驗環(huán)境測試,完全可行的方法。
1.軟件準備
操作系統(tǒng):centos5.0
我選擇centos5,最新的操作系統(tǒng),不要再用redhat9了,很久沒有更新了,企業(yè)里用有風險的。更新?lián)Q代吧。
以下軟件,centos5全部自帶,無需另外下載。
郵件系統(tǒng):
sendmail8.13
sendmail-cf-8.13
m4-1.4
pop3認證:dovecot-1.0
smtp認證:
cyrus-sasl-2.1
cyrus-sasl-md5-2.1
cyrus-sasl-plain-2.1
cyrus-sasl-lib-2.1
sasl這里,我要說一句,網(wǎng)上有人說“sendmail-8.13已經(jīng)包含cyrus-sasl的功能,所沒必要再安裝cyrus-sasl”
大 哥大姐們,沒有cyrus-sasl用什么做認證.....sendmail官方只是說,sendmail的rpm包默認已經(jīng)支持了cyrus-sasl 認證方式,也就是說,sendmail會在cyrus-sasl的工作目錄下自動創(chuàng)建相關(guān)認證配置文件,并監(jiān)聽25號端口,就不用你去手動自己建立配置文 件和監(jiān)聽端口了。當有請求進入25號端口的時候,sendmail會自動找到/usr/lib/sasl2/Sendmail.conf讀取認證方法。下 面我會詳細解釋。
2.安裝軟件
rpm -ivh把上面軟件全裝上,都在光盤里呢,好裝。
3.認證配置
pop3:
網(wǎng) 上說修改/etc/dovecot.conf文件,將第17行的:#protocols = imap imaps pop3 pop3s的#去掉。其實不用,它默認已經(jīng)啟用了這些服務(wù),除非你只想用dovecot-auth的認證,你可以改成protocols = none,否則不用改。
smtp:
注意,smtp稍微麻煩一下。
我講下原理:
當用戶請求進入 25號端口后,sendmail調(diào)用cyrus-sasl的saslauthd進程,saslauthd要求對方輸入本地系統(tǒng)用戶的用戶名和密碼,當用戶 輸入好后,saslauthd會去查找系統(tǒng)的/etc/shadow文件,密碼確認無誤,放行,告訴sendmail,這個用戶合法,可以使用郵件服務(wù)來 發(fā)郵件。
這時候你去/usr/lib/sasl2/下看看,sendmail已經(jīng)做好了一個sendmail.conf文件,里面指明了:pwcheck_method=saslauthd,說明sendmail認證時就要調(diào)用saslauthd
所以要實現(xiàn)上述功能,就要設(shè)置cyrus-sasl的saslauthd,給它指定認證方式。
首先,進入/etc/sysconfig/,打開saslauthd的腳本,找到第7行的:
MECH=
等號后面不管寫什么,我們都要改成:
MECH=shadow
保存
這樣saslauthd才會去找shadow文件給用戶做認證。
其實saslauthd還可以用自己的用戶名和密碼數(shù)據(jù)庫做驗證,但這樣不方便,還要另外創(chuàng)建用戶,不如直接用系統(tǒng)自身存在的用戶名和密碼。
4.Sendmail配置.
配置郵件服務(wù)器名稱:
打開/etc/mail/local-host-names
加入你 @后面的郵箱地址。比如我這里是otto@linuxedentest.com
那么,你要在local-host-names文件里的第二行添加:
linuxedentest.com
保存
當然
local-host-names還可以設(shè)置郵箱別名,這個不多說,大家查文檔看看。
改好后還要去你的dns服務(wù)器上,打上mx標志,添加A標記,用來解析dns名和地址。具體方法就要查查bind的設(shè)置方法了,或者win2003的dns設(shè)置方法。
配置sendmail.mc:
打開/etc/mail/sendmail.mc文件,
找到:
dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
把前面的dnl注釋去掉,變成:
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
上面兩句的意思是:
放行那些通過EXTERNAL, LOGIN, PLAIN, CRAM-MD5或DIGEST-MD5等方式驗證的郵件用戶,無視access文件中的設(shè)置。
confAUTH_MECHANISMS,確定系統(tǒng)支持的認證方式。LOGIN PLAIN 方式下,outlook用的多。
還不算完,找到:
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, )dnl
改成:
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, )dnl
這樣所有ip地址都可以通過smtp端口使用我們的郵件服務(wù)器了。
-----------------------------------------------------------
這里要說一句,不要改
dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
這句話!保持注釋狀態(tài)。
上面那句話,網(wǎng)上好多文章都說把Port=submission,改成Port=25,說是強制所有用戶在25端口上做認證。
我不知道sendmail以前的版本是怎么樣設(shè)置smtp認證的。sendmail8.13不用這么設(shè)置,這句話人家sendmail的意思是:取消注釋后,一旦當25號端口被重定向或者被屏蔽,或者在25號端口打不開的情況下,馬上使用587備用端口給用戶做認證。
本來人家sendmail就已經(jīng)打開了25端口(Port=smtp了已經(jīng)),你卻在這里還Port=25,把備用端口也改成25,這不是讓sendmail的sm-client認
證進程和sendmail的主進程搶端口么....
-----------------------------------------------------------
到此為止,保存sendmail.mc
用m4重新生成sendmail.cf文件
# m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
啟動dovecot進程:
/etc/init.d/dovecot start
啟動saslauthd進程:
/etc/init.d/saslauthd start
啟動sendmail進程:
/etc/init.d/sendmail start
把這些進程加入到啟動腳本中去:
chkconfig dovecot on
chkconfig saslauthd on
chkconfig sendmail on
ok,所有設(shè)置全部完成,可以正常認證和收發(fā)郵件了。
本文如有不準確的地方,請各位海批~~~
=============================分割線==============================================
smtp測試方法:
以下sh#表示在shell上輸入;C 為客戶端輸入, S為服務(wù)器端返回信息 。
sh# telnet <郵件服務(wù)器地址/IP> <port(一般是25)>
S : 220 localhost.localdomain ESMTP Sendmail 8.13.8/8.13.8; Sun, 18 May 2008 01:55:03 +0800
C : ehlo <名字> (不帶認證功能的是helo +名字)
S : 250-localhost.localdomain Hello zhangzb.nec-as.nec.com.cn [172.28.90.9], pleased to meet you
S : 250-ENHANCEDSTATUSCODES
S : 250-PIPELINING
S : 250-8BITMIME
S : 250-SIZE
S : 250-DSN
S : 250-ETRN
S : 250-AUTH GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN
S : 250-DELIVERBY
S : 250 HELP
C : auth login
S : 334 VXNlcm5hbWU6
注:{ 下面先輸入username后passwd,兩者需要輸入encode base64碼,轉(zhuǎn)換方法:
sh# perl -MMIME::Base64 -e 'print encode_base64("username")'
(注意print前后 是單引號,username 處替換成你需要的單詞)
}
C : MQ== (這是我的用戶名:1)
S : 334 UGFzc3dvcmQ6
C : MQ== (密碼,也是1)
S : 235 2.0.0 OK Authenticated
C : MAIL FROM:<XXXX@XXXX> (部分服務(wù)器設(shè)置后,需要真實的郵箱后綴名,具體方法不詳)
S : 250 2.1.0 <XXXX@XXXX>... Sender ok
C : RCPT TO:<XXXX@XXXX> (目標郵箱)
S : 250 2.1.5 <XXXX@XXXX>... Recipient ok
C : DATA
S : 354 Enter mail, end with "." on a line by itself
C : 〈這里添郵件內(nèi)容〉
C :. (點)
S : 250 2.0.0 m4HHt3Sj005640 Message accepted for delivery
C: quit
〈mail send successful〉
1.軟件準備
操作系統(tǒng):centos5.0
我選擇centos5,最新的操作系統(tǒng),不要再用redhat9了,很久沒有更新了,企業(yè)里用有風險的。更新?lián)Q代吧。
以下軟件,centos5全部自帶,無需另外下載。
郵件系統(tǒng):
sendmail8.13
sendmail-cf-8.13
m4-1.4
pop3認證:dovecot-1.0
smtp認證:
cyrus-sasl-2.1
cyrus-sasl-md5-2.1
cyrus-sasl-plain-2.1
cyrus-sasl-lib-2.1
sasl這里,我要說一句,網(wǎng)上有人說“sendmail-8.13已經(jīng)包含cyrus-sasl的功能,所沒必要再安裝cyrus-sasl”
大 哥大姐們,沒有cyrus-sasl用什么做認證.....sendmail官方只是說,sendmail的rpm包默認已經(jīng)支持了cyrus-sasl 認證方式,也就是說,sendmail會在cyrus-sasl的工作目錄下自動創(chuàng)建相關(guān)認證配置文件,并監(jiān)聽25號端口,就不用你去手動自己建立配置文 件和監(jiān)聽端口了。當有請求進入25號端口的時候,sendmail會自動找到/usr/lib/sasl2/Sendmail.conf讀取認證方法。下 面我會詳細解釋。
2.安裝軟件
rpm -ivh把上面軟件全裝上,都在光盤里呢,好裝。
3.認證配置
pop3:
網(wǎng) 上說修改/etc/dovecot.conf文件,將第17行的:#protocols = imap imaps pop3 pop3s的#去掉。其實不用,它默認已經(jīng)啟用了這些服務(wù),除非你只想用dovecot-auth的認證,你可以改成protocols = none,否則不用改。
smtp:
注意,smtp稍微麻煩一下。
我講下原理:
當用戶請求進入 25號端口后,sendmail調(diào)用cyrus-sasl的saslauthd進程,saslauthd要求對方輸入本地系統(tǒng)用戶的用戶名和密碼,當用戶 輸入好后,saslauthd會去查找系統(tǒng)的/etc/shadow文件,密碼確認無誤,放行,告訴sendmail,這個用戶合法,可以使用郵件服務(wù)來 發(fā)郵件。
這時候你去/usr/lib/sasl2/下看看,sendmail已經(jīng)做好了一個sendmail.conf文件,里面指明了:pwcheck_method=saslauthd,說明sendmail認證時就要調(diào)用saslauthd
所以要實現(xiàn)上述功能,就要設(shè)置cyrus-sasl的saslauthd,給它指定認證方式。
首先,進入/etc/sysconfig/,打開saslauthd的腳本,找到第7行的:
MECH=
等號后面不管寫什么,我們都要改成:
MECH=shadow
保存
這樣saslauthd才會去找shadow文件給用戶做認證。
其實saslauthd還可以用自己的用戶名和密碼數(shù)據(jù)庫做驗證,但這樣不方便,還要另外創(chuàng)建用戶,不如直接用系統(tǒng)自身存在的用戶名和密碼。
4.Sendmail配置.
配置郵件服務(wù)器名稱:
打開/etc/mail/local-host-names
加入你 @后面的郵箱地址。比如我這里是otto@linuxedentest.com
那么,你要在local-host-names文件里的第二行添加:
linuxedentest.com
保存
當然
local-host-names還可以設(shè)置郵箱別名,這個不多說,大家查文檔看看。
改好后還要去你的dns服務(wù)器上,打上mx標志,添加A標記,用來解析dns名和地址。具體方法就要查查bind的設(shè)置方法了,或者win2003的dns設(shè)置方法。
配置sendmail.mc:
打開/etc/mail/sendmail.mc文件,
找到:
dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
把前面的dnl注釋去掉,變成:
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
上面兩句的意思是:
放行那些通過EXTERNAL, LOGIN, PLAIN, CRAM-MD5或DIGEST-MD5等方式驗證的郵件用戶,無視access文件中的設(shè)置。
confAUTH_MECHANISMS,確定系統(tǒng)支持的認證方式。LOGIN PLAIN 方式下,outlook用的多。
還不算完,找到:
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, )dnl
改成:
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, )dnl
這樣所有ip地址都可以通過smtp端口使用我們的郵件服務(wù)器了。
-----------------------------------------------------------
這里要說一句,不要改
dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
這句話!保持注釋狀態(tài)。
上面那句話,網(wǎng)上好多文章都說把Port=submission,改成Port=25,說是強制所有用戶在25端口上做認證。
我不知道sendmail以前的版本是怎么樣設(shè)置smtp認證的。sendmail8.13不用這么設(shè)置,這句話人家sendmail的意思是:取消注釋后,一旦當25號端口被重定向或者被屏蔽,或者在25號端口打不開的情況下,馬上使用587備用端口給用戶做認證。
本來人家sendmail就已經(jīng)打開了25端口(Port=smtp了已經(jīng)),你卻在這里還Port=25,把備用端口也改成25,這不是讓sendmail的sm-client認
證進程和sendmail的主進程搶端口么....
-----------------------------------------------------------
到此為止,保存sendmail.mc
用m4重新生成sendmail.cf文件
# m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
啟動dovecot進程:
/etc/init.d/dovecot start
啟動saslauthd進程:
/etc/init.d/saslauthd start
啟動sendmail進程:
/etc/init.d/sendmail start
把這些進程加入到啟動腳本中去:
chkconfig dovecot on
chkconfig saslauthd on
chkconfig sendmail on
ok,所有設(shè)置全部完成,可以正常認證和收發(fā)郵件了。
本文如有不準確的地方,請各位海批~~~
=============================分割線==============================================
smtp測試方法:
以下sh#表示在shell上輸入;C 為客戶端輸入, S為服務(wù)器端返回信息 。
sh# telnet <郵件服務(wù)器地址/IP> <port(一般是25)>
S : 220 localhost.localdomain ESMTP Sendmail 8.13.8/8.13.8; Sun, 18 May 2008 01:55:03 +0800
C : ehlo <名字> (不帶認證功能的是helo +名字)
S : 250-localhost.localdomain Hello zhangzb.nec-as.nec.com.cn [172.28.90.9], pleased to meet you
S : 250-ENHANCEDSTATUSCODES
S : 250-PIPELINING
S : 250-8BITMIME
S : 250-SIZE
S : 250-DSN
S : 250-ETRN
S : 250-AUTH GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN
S : 250-DELIVERBY
S : 250 HELP
C : auth login
S : 334 VXNlcm5hbWU6
注:{ 下面先輸入username后passwd,兩者需要輸入encode base64碼,轉(zhuǎn)換方法:
sh# perl -MMIME::Base64 -e 'print encode_base64("username")'
(注意print前后 是單引號,username 處替換成你需要的單詞)
}
C : MQ== (這是我的用戶名:1)
S : 334 UGFzc3dvcmQ6
C : MQ== (密碼,也是1)
S : 235 2.0.0 OK Authenticated
C : MAIL FROM:<XXXX@XXXX> (部分服務(wù)器設(shè)置后,需要真實的郵箱后綴名,具體方法不詳)
S : 250 2.1.0 <XXXX@XXXX>... Sender ok
C : RCPT TO:<XXXX@XXXX> (目標郵箱)
S : 250 2.1.5 <XXXX@XXXX>... Recipient ok
C : DATA
S : 354 Enter mail, end with "." on a line by itself
C : 〈這里添郵件內(nèi)容〉
C :. (點)
S : 250 2.0.0 m4HHt3Sj005640 Message accepted for delivery
C: quit
〈mail send successful〉