郵件服務器的搭建過程

本筆記僅用於局域網內兩臺sendmail實驗,以方便日後實驗的拓展。關於sendmail網上的例子很多,醃還是按自己的步驟進行吧!一步一步。。。。
目的:熟悉sendmail的配置方法、以及在sendmail出現故障時排錯方法。
要求:熟悉BIND(DNS)的配置方法
要點:熟悉sendmail的朋友可以閃了,兩臺機器之間發郵件。
    1、能夠相互解析
    2、如果是利用客戶端向另外一個郵件域發郵件,需要開啓客戶端所登錄的服務器上的RELAY功能。
知識點回顧:
===================================
這個兄弟把MUA、MDA、MTA講的很好。轉了轉了!
http://hi.baidu.com/xiamenyu/blog/item/3e1db3d15b37903d9a50277d.html
MUA:郵件用戶代理; 指的就是如Foxmail,outlook,等郵件客戶端程序。

MDA(Mail Delivery Agent):“郵件投遞代理”主要的功能就是將MTA接收的信件依照信件的流向(送到哪裏)將該信件放置到本機賬戶下的郵件文件中(收件箱),或者再經由MTA將信件送到下個MTA。如果信件的流向是到本機,這個郵件代理的功能就不只是將由MTA傳來的郵件放置到每個用戶的收件箱,它還可以具有郵件過濾(filtering)與其他相關功能

MTA(Mail Transfer Agent):MUA是用在Client端的軟件,而MTA是用在郵件主機上的軟件,它也是主要的郵件服務器。MTA就是“郵件傳送代理”的意思,既然是 “傳送代理”,那麼用戶寄信與收信時,都找MTA就對了!因爲它負責幫用戶傳送。基本上,MTA的功能如下。
接收外部主機寄來的信件:既然是郵件主機,接收信件自然是主要功能,只要這個信件裏有MTA內部賬號,這封信就會被MTA收下來;
幫用戶發(寄出)信:既然可以收信,自然也可以發信,只要用戶具有合法的使用MTA的權力,就可以利用這臺MTA主機把信傳送出去!不過要注意,MTA會將信件送給目的地的MTA而不是目的地的MUA。不要搞錯了! 
====================================

一封郵件投 遞過程:

小人使用MUA發一封郵件給[email protected];MUA首先連接郵件提供商的MTA,認證通過後,MDA開始判斷這個郵件將投遞到哪裏?如果是本域,則將該郵件投遞到本域用戶的收件夾,如果是另外一個郵件域,則將其投遞到對方的MTA上,最終[email protected]使用MUA收取這封郵件。

筆記實驗環境介紹:
設備及網絡環境介紹:(省去拓補圖,因爲太簡單了)
三臺服務器,一臺交換機   (所有服務器IP在同一個網段內)
Server:內網ftp服務器,已安裝vsftpd,用於做另外兩臺PC的軟件倉庫。地址:ftp://192.168.10.129
unix:內網的sendmail服務器1,只是安裝了一個操作系統。ip:192.168.10.33
linux:內網的sendmail服務器2,只是安裝了一個操作系統。ip:192.168.10.34:

實現要求:
1、要求在unix上有四個賬戶: Boss,jerry,mary,jam
2、要求在linux上四個賬戶:jack,bing,badboy,chen_baocheng
3、要求發送[email protected]郵件時,jack,bing,badboy,chen_baocheng可能收到。
4、要求發送到bing的郵件自動會發一封給jack
5、要求發送到[email protected]的郵件,chen_baocheng@可以收到
6、要求發送到jack的郵件自動轉發到badboy.

7、要求linux.com可以與unix.com相互郵件發送
8、要求unix裏有四個賬戶:boss,jerry,mary,jam
9、要求unix裏所有賬戶在接收郵件時,都自動發送一封給boss
10、要求發送給[email protected]的郵件,實際的接收者爲boss (老闆的郵件不一樣啊!)

配置思路:
a、配置兩臺服務器的yum source.
b、安裝配置DNS服務器及相應的轉發
c、安裝與配置sendmail服務器
d、確定賬戶與相應的郵件設定
e、檢查兩臺主機的真實主機名。
    (請注意主機名的問題,我也曾因主機名的問題,導致兩臺機互發郵件解析出現問題)
f、兩臺郵件服務器之間相互郵件發送
g、開啓針對用戶認證的relay設置
============================================ 
在這裏我已關閉兩臺機的firewall\selinux
a、配置兩臺服務器的yum source
[root@unix ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo 
[redhat5.4]
name=redhat
baseurl=ftp://192.168.10.129
enable=1
gpgcheck=0
做一下清潔工作!
[root@unix ~]# yum clean all
Loaded plugins: rhnplugin, security
Cleaning up Everything
開始獲取倉庫軟件清單了
[root@unix ~]# yum list
郵件服務器2,也仍照此操作。

b、安裝DNS服務器,並做相應的轉發。
即unix.com 需要把訪問到linux.com的請求轉向192.168.10.34
即linux.com需要把訪問到unix.com的請求轉向192.168.10.33
1、安裝BIND需要四個包。bind,bind-chroot,bind-until,bind-devel
[root@unix ~]# rpm -qa | grep ^bind    #缺少三個包
bind-utils-9.3.6-4.P1.el5
bind-libs-9.3.6-4.P1.el5
[root@unix ~]# yum list | grep ^bind   #通過yum來安裝吧
This system is not registered with RHN.
RHN support will be disabled.
bind-libs.i386                             30:9.3.6-4.P1.el5           installed
bind-utils.i386                            30:9.3.6-4.P1.el5           installed
bind.i386                                  30:9.3.6-4.P1.el5           redhat5.4
bind-chroot.i386                           30:9.3.6-4.P1.el5           redhat5.4
bind-devel.i386                            30:9.3.6-4.P1.el5           redhat5.4
bind-libbind-devel.i386                    30:9.3.6-4.P1.el5           redhat5.4
bind-sdb.i386                              30:9.3.6-4.P1.el5           redhat5.4
[root@unix ~]# yum install -y bind bind-chroot bind-devel    #安裝

2、配置DNS服務器,並做相應的轉發。
    I、編輯unix服務器的named.conf文件 
    [root@unix ~]# vim /var/named/chroot/etc/named.conf
    options {
            directory "/var/named";
    };

    zone "unix.com" IN {
            type master;
            file "data/master.unix.com.zone";
    };

    zone "linux.com" IN {    
            type forward;
            forwarders { 192.168.10.34; };
    };


linux服務器DNS的設定:
    options {
            directory "/var/named";
    };

    zone "linux.com" IN {
            type master;
            file "data/master.linux.com.zone";
    };

    zone "unix.com" IN {
            type forward;
            forwarders { 192.168.10.33; };
    };

編輯unix服務器的正向代理
    [root@unix ~]# vim /var/named/chroot/var/master.unix.com.zone
    $TTL 86400
    @       IN      SOA     sz.unix.com.    baoch8.163.com  (
                            0000001
                            1400
                            2800
                            36000
                            86400   )
    @       IN      NS              sz.unix.com.
              IN         MX                  sz.unix.com.
    sz      IN      A               192.168.10.33
    [root@unix ~]# service named restart
    停止 named:                                               [確定]
    啓動 named:                                               [確定]

II,設置/etc/resolv.conf文件
[root@unix ~]# cat /etc/resolv.conf     
nameserver 192.168.10.33

III.unix.com的DNS服務器配置完成。  linux.com的DNS服務器配置與此類似,不再提供。

IIII.測試
[root@linux ~]# nslookup
> sz.unix.com
Server:         192.168.10.34
Address:        192.168.10.34#53

Non-authoritative answer:
Name:   sz.unix.com
Address: 192.168.10.33
> bj.linux.com
Server:         192.168.10.34
Address:        192.168.10.34#53

Name:   bj.linux.com
Address: 192.168.10.34


IIIII.另外一臺服務器,請也按此設定。

c、安裝與配置sendmail服務器

1、sendmail在系統安裝之時,已經將其加入了。但是有些包還是沒有裝的,所以在這裏我查詢一下。
[root@unix ~]# yum list *sasl  m4  dovecot sendmail-*
Installed Packages
cyrus-sasl.i386                       2.1.22-5.el5                     installed
m4.i386                               1.4.5-3.el5.1                    installed
sendmail.i386                         8.13.8-2.el5                     installed
Available Packages
dovecot.i386                          1.0.7-7.el5                      redhat5.4
sendmail-cf.i386                      8.13.8-2.el5                     redhat5.4
sendmail-devel.i386                   8.13.8-2.el5                     redhat5.4
sendmail-doc.i386                     8.13.8-2.el5                     redhat5.4


sendmail-cf生成配置文件 的包
sendmail-devel. 需要的頭文件 
sendmail-doc 文檔包
dovecot 用於pop3協議IMAP協議接收包
m4  用於日後將sendmail.mc 編輯成sendmail.cf的包
cyrus-sasl    用於日後,開啓用戶的SMTP的認證包。

安裝sendmail的必須包:
[root@unix ~]# yum install -y dovecot sendmail-cf sendmail-devel sendmail-doc

2、開始配置sendmail服務器
[root@unix ~]# vim /etc/mail/sendmail.mc
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl   #允許偵聽本機所有網絡地址
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl   #  
以下是定義可以使用短主機名。
發郵人定義:比如:你的完整郵址爲[email protected] ,定義後你的發件會變成[email protected]
MASQUERADE_AS(`unix.com')dnl             #定義你的郵件域名
MASQUERADE_DOMAIN(localhost)dnl                    
MASQUERADE_DOMAIN(localhost.localdomain)dnl
MASQUERADE_DOMAIN(unix.com)dnl 

[root@unix ~]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf 
[root@unix ~]# vi /etc/mail/local-host-names 
# local-host-names - include all aliases for your machine here.
# 定義短的收件人名單。如你的完整郵址爲[email protected],別人發給你的郵件時,可以將收件人寫成[email protected]
sz.unix.com
unix.com

啓用我們的pop3協議
[root@unix ~]# vi /etc/mail/local-host-names
protocols = pop3
[root@unix ~]# service dovecot start
啓動 Dovecot Imap:                                        [確定]

開啓用戶認證服務:
[root@unix ~]# service saslauthd start
啓動 saslauthd:                                           [確定]

d、確定賬戶與相應的郵件設定
添加賬戶
[root@unix ~]# vi user.sh
#!/bin/bash
for i in boss jerry mary jam
do
        useradd $i
        echo "123456" | passwd --stdin $i
done
[root@unix ~]# chmod u+x user.sh 
[root@unix ~]# ./user.sh 
Changing password for user boss.
passwd: all authentication tokens updated successfully.
Changing password for user jerry.
passwd: all authentication tokens updated successfully.
Changing password for user mary.
passwd: all authentication tokens updated successfully.
Changing password for user jam.
passwd: all authentication tokens updated successfully.

郵件設定
[root@unix ~]# vi /etc/aliases
jerry:          jerry,boss   #凡是收件爲jerry, 老闆也會接收一封。
mary:           mary,boss
jam:            jam,boss
haha:           boss            #老闆的郵件別名。
備註:關於linux.com上的郵件設定也跟此類改,配置文件不再提供。
[root@unix ~]# newaliases       #讓別名生效
/etc/aliases: 80 aliases, longest 10 bytes, 812 bytes total

[root@unix ~]# service sendmail restart
關閉 sm-client:                                           [確定]
關閉 sendmail:                                            [確定]
啓動 sendmail:                                            [確定]
啓動 sm-client:                                           [確定]

測試一下:
[root@unix ~]# mail -s "to-jam" [email protected]
Hello.jam. 
20101025
.
Cc: 

看一下郵件:OK
[root@unix ~]# cat /var/mail/jam 
From [email protected]  Mon Oct 25 19:58:27 2010
Return-Path: <[email protected]>
Date: Mon, 25 Oct 2010 19:58:27 +0800
From: root <[email protected]>
Message-Id: <[email protected]>
To: [email protected]
Subject: to-jam
Hello.jam. 
20101025

[root@unix ~]# cat /var/mail/boss 
From [email protected]  Mon Oct 25 19:58:27 2010
Date: Mon, 25 Oct 2010 19:58:27 +0800
From: root <[email protected]>
Message-Id: <[email protected]>
To: [email protected]
Subject: to-jam
Hello.jam. 
20101025


[root@unix ~]# mail -s "hello.haha" [email protected]
hello.Boss,where is my money
.
Cc: 
[root@unix ~]# cat /var/mail/boss 
From [email protected]  Mon Oct 25 20:28:41 2010
Return-Path: <[email protected]>
Date: Mon, 25 Oct 2010 20:28:41 +0800
From: root <[email protected]>
Message-Id: <[email protected]>
To: [email protected]
Subject: hello.haha

hello.Boss,where is my money

e、檢查兩臺主機的真實主機名與添加MX記錄 。
[root@linux ~]# hostname
linux
[root@linux ~]# hostname
linux
兩臺主機均沒有以FQDN的標準命名,爲此,我們要修改:/etc/hosts文件   /etc/sysconfig/network文件 
在這裏,我們以unix.com的主機爲例:  (linux.com的主機請按類似修改)
在/etc/hosts文件中,添加:
192.168.10.33           sz.unix.com     unix
在/etc/sysconfig/network中修改:
HOSTNAME=sz.unix.com

[root@unix ~]# hostname sz.unix.com    #讓主機名立即生效。

可以開始發郵件了,測試一下:
從unix.com上的發郵件到linux.com---->[email protected]  mailto : [email protected]
結果需要:1、郵件能成功發送。
             2、這封郵件最終是被[email protected]給收走!
[root@sz ~]# su - mary

[mary@sz ~]$ mail -s "money" [email protected]
hi,please tell me you passwd

驗證一下:
[root@bj ~]# cat /var/mail/chen_baocheng 
From [email protected]  Mon Oct 25 23:21:53 2010
Return-Path: <[email protected]>
Received: from sz.unix.com ([192.168.10.33])
From: [email protected]
Message-Id: <[email protected]>
To: [email protected]
Subject: money

hi,please tell me you passwd


g、開啓針對用戶認證的relay設置
僅僅是上面的設定還是不夠的,我們搭建郵件服務器是爲了什麼 ?  
爲客戶端傳輸郵件;難道要讓客戶自己登陸到服務器上來發,NO。  
當然是客戶自己在郵件客戶端自己發,在這裏我們就要開啓relay的功能。

1、針對IP或是域名的relay。  配置文件在/etc/mail/access,修改後,我們還要做:
makemap hash /etc/mail/access.db < /etc/mail/access   
這個僅適用於局域網用戶,如果有用戶在外地,我們總不能這麼做吧。 

2、針對用戶認證的relay
在這裏我們要修改幾個地址;
vi /etc/mail/sendmail.mc

TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

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

[root@bj mail]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
[root@bj mail]# service saslauthd start
[root@bj mail]# service sendmail restart

客戶端需要注意的是:在開 啓針對用戶認證的relay後,我們的郵件客戶端上,需要啓用SMTP認證!這樣就OK了。

以下是我從虛擬機XP中,用outlook express。給[email protected]發的郵件。(由於使用提linux在寫博客方面,基本上以文字爲主。雖然我也用有圖有真相來說明問題,但是文本有時候也以說明問題。呵呵。歡迎大家來拍磚塊!)
From [email protected]  Tue Oct 26 00:00:55 2010
Return-Path: <[email protected]>
Received: from bj.linux.com ([192.168.10.34])
        by sz.unix.com (8.13.8/8.13.8) with ESMTP id o9PG0tiQ003740
        for <[email protected]>; Tue, 26 Oct 2010 00:00:55 +0800
Received: from ISLAND6CA79F1F ([192.168.10.5])
        (authenticated bits=0)
        by bj.linux.com (8.13.8/8.13.8) with ESMTP id o9PG0spY003449
        for <[email protected]>; Tue, 26 Oct 2010 00:00:54 +0800
Message-ID: <6EA8806B2B264A0594AEAB12D4397785@ISLAND6CA79F1F>
From: "jack" <[email protected]>
To: <[email protected]>
Subject: hi.....
Date: Mon, 25 Oct 2010 16:00:54 +0800
MIME-Version: 1.0
Content-Type: multipart/alternative;
        boundary="----=_NextPart_000_0003_01CB745D.CDBEB880"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.5512
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579

This is a multi-part message in MIME format.

------=_NextPart_000_0003_01CB745D.CDBEB880
Content-Type: text/plain;
        charset="gb2312"
Content-Transfer-Encoding: base64

d2hlcmUgYXJlIHlvdT8=

------=_NextPart_000_0003_01CB745D.CDBEB880
Content-Type: text/html;
        charset="gb2312"
Content-Transfer-Encoding: base64

PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv
L0VOIj4NCjxIVE1MPjxIRUFEPg0KPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVu
dD0idGV4dC9odG1sOyBjaGFyc2V0PWdiMjMxMiI+DQo8TUVUQSBjb250ZW50PSJNU0hUTUwgNi4w
MC41NzMwLjEzIiBuYW1lPUdFTkVSQVRPUj4NCjxTVFlMRT48L1NUWUxFPg0KPC9IRUFEPg0KPEJP
RFkgYmdDb2xvcj0jZmZmZmZmPg0KPERJVj48Rk9OVCBzaXplPTI+d2hlcmUgYXJlIHlvdT88L0ZP
TlQ+PC9ESVY+PC9CT0RZPjwvSFRNTD4NCg==

------=_NextPart_000_0003_01CB745D.CDBEB880--



FAQ:
在配置sendmail中可能出現的問題:
1、爲什麼 出現這樣?
Oct 25 21:55:09 sz sendmail[3539]: o9PDt8Tt003537: to=<[email protected]>, ctladdr=<[email protected]> (0/0), delay=00:00:01, xdelay=00:00:00, mailer=esmtp, pri=120349, relay=bj.linux.com. [192.168.10.34], dsn=4.4.0, stat=Deferred: 450 4.4.0 <[email protected]>... Relaying temporarily denied. Cannot resolve PTR record for 192.168.10.33
因解析linux.com時,發現不正確,無法獲取到192.168.10.33記錄。
原因:可能是因爲linux.com沒在做接收郵件的短主機名設置. /etc/mail/local-host-names

2.--->5.3.5 mail.abc.com. config error: mail loops back to me (MX problem?)
        554 5.3.5 Local configuration error
原因:解析的問題。可以從hostname,DNS中尋找原因。
網友的一個奇怪的問題:
兩臺SENDMAIL相互發信,在DNS中註冊兩個域名,在域名文件中分別設定MX記錄表示兩個域的MAIL服務器,DIG能正確解析這兩個MX記錄,兩個SENDMAIL都啓用認證功能,一切都按照我預想的在進行,每臺SENDMAIL服務器都能在本機發郵件,本機的通訊能成功。在兩個域相互發郵件的時候,問題出來了:
5.3.5 mail.abc.com. config error: mail loops back to me (MX problem?)
554 5.3.5 Local configuration error

遇到這個問題,我第一反應是MX記錄出現了問題,我反覆檢查我的DNS的問題(後來事實證明我是錯誤的),但是每次的檢查都能正確返回給我正確的關於域名的正確MX記錄。我百思不得其解,於是上網查找解決的方法,但是最終我沒找到我的正確的答案,我發現網上提出這個問題的帖子倒是木佬佬,唉,靠自己吧

我開始進行SENDMAIL的全面檢查,ACCESS,LOCAL-HOST-NAMES,SENDMAIL.CW,SENDMAIL.CF,還是不行,我再次陷入了困境,突然我想到SENDMAIL
是GNU的產品,也就是說它肯定有一個官方網站,我何不去那裏看看,帶着沉甸甸的心情,我來到了
www.sendmail.org
,我進入了FAQ,找啊找,找了好久,總算是有了一些心得。當然最後我解決了問題,現在我來總結下

首先出現這個問題的主要原因在於SENDMAIL服務器不能正確的識別在DNS服務器中相關的MX記錄,我們能解析出來,但是SENDMAIL確不能正常識別;
我解決的步驟爲:

修改local-host-names,添加MX的FQDN進去

修改ACCESS,添加這兩個域的域名進去

重新啓動服務

最重要的一步:kill -HUP -1 /var/run/sendmail.pid

搞定,正常工作了
其實當SENDMAIL出問題的時候,我曾經嘗試過1,2,3個步驟,但是沒成功,運行了第4步以後就成功了,第4步的作用實際上就是用來刷新SENDMAIL的進程文件的。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章