郵件服務器的搭建過程

本筆記僅用於局域網內兩臺sendmail實驗,以方便往後實驗的拓展。關於sendmail網上的例子不少,醃仍是按本身的步驟進行吧!一步一步。。。。
目的:熟悉sendmail的配置方法、以及在sendmail出現故障時排錯方法。
要求:熟悉BIND(DNS)的配置方法
要點:熟悉sendmail的朋友能夠閃了,兩臺機器之間發郵件。
    一、可以相互解析
    二、若是是利用客戶端向另一個郵件域發郵件,須要開啓客戶端所登陸的服務器上的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發一封郵件給xx@yy.com;MUA首先鏈接郵件提供商的MTA,認證經過後,MDA開始判斷這個郵件將投遞到哪裏?若是是本域,則將該郵件投遞到本域用戶的收件夾,若是是另一個郵件域,則將其投遞到對方的MTA上,最終xx@yy.com使用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:

實現要求:
一、要求在unix上有四個帳戶: Boss,jerry,mary,jam
二、要求在linux上四個帳戶:jack,bing,badboy,chen_baocheng
三、要求發送all@linux.com郵件時,jack,bing,badboy,chen_baocheng可能收到。
四、要求發送到bing的郵件自動會發一封給jack
五、要求發送到Bnsen@linux.com的郵件,chen_baocheng@能夠收到
六、要求發送到jack的郵件自動轉發到badboy.

七、要求linux.com能夠與unix.com相互郵件發送
八、要求unix裏有四個帳戶:boss,jerry,mary,jam
九、要求unix裏全部帳戶在接收郵件時,都自動發送一封給boss
十、要求發送給haha@unix.com的郵件,實際的接收者爲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
一、安裝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    #安裝

二、配置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服務器

一、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

二、開始配置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   #  
如下是定義可使用短主機名。
發郵人定義:好比:你的完整郵址爲mary@sz.unix.com ,定義後你的發件會變成mary@unix.com
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.
# 定義短的收件人名單。如你的完整郵址爲mary@sz.unix.com,別人發給你的郵件時,能夠將收件人寫成mary@unix.com
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" jam@unix.com
Hello.jam. 
20101025
.
Cc: 

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

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


[root@unix ~]# mail -s "hello.haha" haha@unix.com
hello.Boss,where is my money
.
Cc: 
[root@unix ~]# cat /var/mail/boss 
From root@localhost.localdomain  Mon Oct 25 20:28:41 2010
Return-Path: <root@localhost.localdomain>
Date: Mon, 25 Oct 2010 20:28:41 +0800
From: root <root@localhost.localdomain>
Message-Id: <201010251228.o9PCSfDw019864@localhost.localdomain>
To: haha@unix.com
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---->mary@unix.com  mailto : bnsen@linux.com
結果須要:一、郵件能成功發送。
             二、這封郵件最終是被chen_baocheng@linux.com給收走!
[root@sz ~]# su - mary

[mary@sz ~]$ mail -s "money" bnsen@linux.com
hi,please tell me you passwd

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

hi,please tell me you passwd


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

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

二、針對用戶認證的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。給jam@unix.com發的郵件。(因爲使用提linux在寫博客方面,基本上以文字爲主。雖然我也用有圖有真相來講明問題,可是文本有時候也以說明問題。呵呵。歡迎你們來拍磚塊!)
From jack@linux.com  Tue Oct 26 00:00:55 2010
Return-Path: <jack@linux.com>
Received: from bj.linux.com ([192.168.10.34])
        by sz.unix.com (8.13.8/8.13.8) with ESMTP id o9PG0tiQ003740
        for <jam@unix.com>; 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 <jam@unix.com>; Tue, 26 Oct 2010 00:00:54 +0800
Message-ID: <6EA8806B2B264A0594AEAB12D4397785@ISLAND6CA79F1F>
From: "jack" <jack@linux.com>
To: <jam@unix.com>
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中可能出現的問題:
一、爲何 出現這樣?
Oct 25 21:55:09 sz sendmail[3539]: o9PDt8Tt003537: to=<bing@linux.com>, ctladdr=<root@sz.unix.com> (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 <bing@linux.com>... 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的進程文件的。。html

相關文章
相關標籤/搜索