Sealyu

          --- 博客已遷移至: http://www.sealyu.com/blog

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
          網上介紹sendmail的文章千百種,很少有跟著做下來一次成功的。多少都有些說的不準確的地方。我給大家共享一下我經過實驗環境測試,完全可行的方法。

          1.軟件準備

          操作系統:centos5.0

          我選擇centos5,最新的操作系統,不要再用redhat9了,很久沒有更新了,企業里用有風險的。更新換代吧。

          以下軟件,centos5全部自帶,無需另外下載。

          郵件系統:
                         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這里,我要說一句,網上有人說“sendmail-8.13已經包含cyrus-sasl的功能,所沒必要再安裝cyrus-sasl”
          大 哥大姐們,沒有cyrus-sasl用什么做認證.....sendmail官方只是說,sendmail的rpm包默認已經支持了cyrus-sasl 認證方式,也就是說,sendmail會在cyrus-sasl的工作目錄下自動創建相關認證配置文件,并監聽25號端口,就不用你去手動自己建立配置文 件和監聽端口了。當有請求進入25號端口的時候,sendmail會自動找到/usr/lib/sasl2/Sendmail.conf讀取認證方法。下 面我會詳細解釋。

          2.安裝軟件

          rpm -ivh把上面軟件全裝上,都在光盤里呢,好裝。

          3.認證配置

          pop3:

          網 上說修改/etc/dovecot.conf文件,將第17行的:#protocols = imap imaps pop3 pop3s的#去掉。其實不用,它默認已經啟用了這些服務,除非你只想用dovecot-auth的認證,你可以改成protocols = none,否則不用改。

          smtp:
          注意,smtp稍微麻煩一下。

          我講下原理:

          當用戶請求進入 25號端口后,sendmail調用cyrus-sasl的saslauthd進程,saslauthd要求對方輸入本地系統用戶的用戶名和密碼,當用戶 輸入好后,saslauthd會去查找系統的/etc/shadow文件,密碼確認無誤,放行,告訴sendmail,這個用戶合法,可以使用郵件服務來 發郵件。

          這時候你去/usr/lib/sasl2/下看看,sendmail已經做好了一個sendmail.conf文件,里面指明了:pwcheck_method=saslauthd,說明sendmail認證時就要調用saslauthd
          所以要實現上述功能,就要設置cyrus-sasl的saslauthd,給它指定認證方式。
          首先,進入/etc/sysconfig/,打開saslauthd的腳本,找到第7行的:

          MECH=

          等號后面不管寫什么,我們都要改成:

          MECH=shadow

          保存

          這樣saslauthd才會去找shadow文件給用戶做認證。


          其實saslauthd還可以用自己的用戶名和密碼數據庫做驗證,但這樣不方便,還要另外創建用戶,不如直接用系統自身存在的用戶名和密碼。




          4.Sendmail配置.

          配置郵件服務器名稱:

          打開/etc/mail/local-host-names
          加入你 @后面的郵箱地址。比如我這里是otto@linuxedentest.com
          那么,你要在local-host-names文件里的第二行添加:
          linuxedentest.com
          保存

          當然
          local-host-names還可以設置郵箱別名,這個不多說,大家查文檔看看。

          改好后還要去你的dns服務器上,打上mx標志,添加A標記,用來解析dns名和地址。具體方法就要查查bind的設置方法了,或者win2003的dns設置方法。


          配置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文件中的設置。

          confAUTH_MECHANISMS,確定系統支持的認證方式。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端口使用我們的郵件服務器了。


          -----------------------------------------------------------
          這里要說一句,不要改

          dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl

          這句話!保持注釋狀態。

          上面那句話,網上好多文章都說把Port=submission,改成Port=25,說是強制所有用戶在25端口上做認證。

          我不知道sendmail以前的版本是怎么樣設置smtp認證的。sendmail8.13不用這么設置,這句話人家sendmail的意思是:取消注釋后,一旦當25號端口被重定向或者被屏蔽,或者在25號端口打不開的情況下,馬上使用587備用端口給用戶做認證。

          本來人家sendmail就已經打開了25端口(Port=smtp了已經),你卻在這里還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,所有設置全部完成,可以正常認證和收發郵件了。

          本文如有不準確的地方,請各位海批~~~


          =============================分割線==============================================


                                      smtp測試方法:

          以下sh#表示在shell上輸入;C 為客戶端輸入, S為服務器端返回信息 。


          sh# telnet <郵件服務器地址/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碼,轉換方法:
          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> (部分服務器設置后,需要真實的郵箱后綴名,具體方法不詳)

           
          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 : 〈這里添郵件內容〉
          C :.  (點)
           
          S : 250 2.0.0 m4HHt3Sj005640 Message accepted for delivery
           
          C: quit 
          〈mail send successful〉
          posted on 2008-07-24 00:24 seal 閱讀(339) 評論(0)  編輯  收藏 所屬分類: Linux
          主站蜘蛛池模板: 开江县| 崇州市| 从江县| 福清市| 兴国县| 吉隆县| 叙永县| 津南区| 新民市| 富蕴县| 大石桥市| 柘城县| 和田县| 溧阳市| 湖州市| 石台县| 崇明县| 成安县| 隆化县| 渭源县| 华坪县| 渝中区| 涪陵区| 泰州市| 南开区| 陆丰市| 义乌市| 施秉县| 涟水县| 东安县| 靖宇县| 宁乡县| 突泉县| 南丹县| 利川市| 大竹县| 石阡县| 额敏县| 胶南市| 新安县| 德保县|