18.2. 組態設定

18.2.1. 基礎

只要您的 /etc/resolv.conf 檔設定妥當或是您本身提供了 DNS 服務,一旦您把FreeBSD 機器安裝好了,您就可以寄信出去了。 如果您想叫其他機器負責處理所有寄給您的信,有兩種方法:

不管您選用那一種方法,如果您想讓電子郵件直接送到您的機器上, 您的機器必須擁有完整的網際網路連線。您必須擁有一個不變的 IP 位址,也就是說不得使用 PPP 的動態位址。如果您的機器位於防火牆內部, 那麼防火牆就必須把 smtp 的通訊轉送給您。設定 /etc/services

    smtp	      25/tcp mail         #Simple Mail Transfer

如果您想要令電子郵件直接寄到您的機器上,您必須確定 DNS 上的 MX 記錄有正確地指向您機器的位址,或是 DNS 上沒有您機器的 MX 記錄。

試試下面這些指令:

    # hostname
    newbsdbox.freebsd.org
    # host newbsdbox.freebsd.org
    newbsdbox.freebsd.org has address 204.216.27.xx

如果在您的機器上面執行出來的結果跟上面一樣的話, 直接寄信給 不會造成任何錯誤。

但是如果您的執行結果像這樣:

    # host newbsdbox.freebsd.org
    newbsdbox.FreeBSD.org has address 204.216.27.xx
    newbsdbox.FreeBSD.org mail is handled (pri=10) by freefall.FreeBSD.org

所有寄到您的機器上面的電子郵件都會被送給 freefall 上的同名使用者。

這些資訊都記錄在您的領域名稱伺服器中, 而這部機器必須是列在您 /etc/resolv.conf 定中的主要名稱伺服器。

負責記錄郵件寄送的 DNS 記錄是 MX (Mail eXchange 郵件交換)。 如果不指定任何 MX 記錄,則電子郵件將會被送往 Address 記錄的機器。

freefall.FreeBSD.org 的 MX 記錄如下:

    freefall                       MX    30   mail.crl.net
    freefall                       MX    40   agora.rdrop.com
    freefall                       HINFO Pentium     FreeBSD
    freefall                       MX    10   freefall.FreeBSD.org
    freefall                       MX    20   who.cdrom.com
    freefall                       A     204.216.27.xx
    freefall                       CNAME www.FreeBSD.org

freefall 設定了許多 MX 記錄, 數字最小的機器是負責接收信件的,而其他的 MX 機器負責在 freefall 忙碌或關機的時候暫時把郵件佇放起來。

最好的使用方式是不同的 MX 機器有不同的網際網路連線方式。 ISP 或是其他友善的單位都可以提供這樣的服務。

dignslookuphost 是您在做這方面設定時的好幫手。

18.2.2. 整個領域的郵件 (網路)

如果您想要設立一整個網路的郵件主機, 您必須把所有寄給網路工作站的信件給重導向;換句話說,您必須把所有寄往 *.smallminingco.com 的郵件都導向到某一部機器,也就是您的``郵件主機''。

而使用者就必須經由 POP 或是 telnet 的方式來拿回他們的郵件。

使用者的同名帳號在兩邊的機器上都必須存在, 請使用 adduser 這個程式來完成這個要求。 如果您把使用者的 shell 設成 /nonexistent,則這個使用者將無法登入主機。

您要使用的郵件主機必須設計成能為每一臺工作站做郵件交換的工作。 這部份的設定是寫在 DNS 中 (也就是 BIND,named)。 請參閱網管書籍以獲得更進一步的資訊。

簡單來說,您只要在 DNS 主機中加入下列設定即可:

    pc24.smallminingco.com	A xxx.xxx.xxx.xxx		; Workstation ip
                           MX  10 smtp.smallminingco.com	; Your mailhost

除非您自己有執行 DNS 程式,否則您無法自行做上述更動。 如果您不想要自己執行DNS 程式,可以請您的 ISP 幫您做。

上面的設定會把寄往工作站的信重導向給郵件主機。 不管 A 記錄指到那裡,郵件一定會送到 MX 所指定的主機上去。

這個特性可以用來做虛擬郵件主機。

範例

我有一個顧客,他的領域名稱是 foo.bar;我想讓所有寄到 foo.bar 的信件都寄到我的主機 smtp.smalliap.com 上。 您必須在 DNS 中做如下設定:

    foo.bar                  MX  10	smtp.smalliap.com	; your mailhost

如果您想要設定某個領域的郵件資訊的話,並不一定要提供 A 記錄。 也就是說,除非真的有一個 foo.bar 的 Address 記錄,否則 ping foo.bar 是無法正常工作的。

您必須告訴最後郵件主機的 sendmail 程式到底它應該接收那些機器的電子郵件。

pc24.smallminingco.com 加到您的 /etc/sendmail.cw 中 (如果您使用了 FEATURE(use_cw_file) 的話),或是在您的 Cw myhost.smalliap.com 中加一行 /etc/sendmail.cf

如果您想對 sendmail 做一些重大的改變的話, 您最好要安裝 sendmail 的原始程式。 原始程式裡面有很多文件可供參考。您可以在 UUCP 資訊 這個節裡找到有關如何取得 sendmail 原始程式的資訊。

18.2.3. 設定 UUCP

從 FAQ 中借用過來的。

FreeBSD 所附的 sendmail 設定檔只適用於直接連接 Internet 的機器。 如果您的機器希望藉由 UUCP 來做信件交換的話,您必須另外安裝一個 sendmail 設定檔。

自己手動設定 /etc/sendmail.cf 是基本教義派的行為。手動製作設定檔是一個更高抽象層次的行為; Sendmail 第八版的一個重大改進就是可以使用 m4 巨集來自動產生設定檔。 您可以使用這個目錄裡面的設定檔: /usr/src/usr.sbin/sendmail/cf

如果您在安裝系統時並沒有把所有的原始程式檔全部安裝進去, 有關 sendmail 設定的一些相關檔案已經分出來放在另一個壓縮檔裡了。 假設您已經掛上 CD-ROM 了,您只要:

    # cd /usr/src
    # tar -xvzf /cdrom/dists/src/ssmailcf.aa

不要緊張,這只有數百 KB 而己。在 cf 目錄中的 README 檔裡提供了對 m4 設定的簡單介紹。

我們建議您最好使用 mailertable 的特性協助您使用 UUCP 來傳遞電子郵件。 sendmail 可以根據這個資料庫來決定電子郵件傳遞的路徑。

首先,您必須創造您自己的 .mc 檔。 您可以在 /usr/src/usr.sbin/sendmail/cf/cf 裡找到這些檔案。附近總有些例子可以拿來參考。 假設您的檔案叫做 foo.mc, 您只要這麼做就可以把它轉換成合法的 sendmail.cf 檔:

    # cd /usr/src/usr.sbin/sendmail/cf/cf
    # make foo.cf

如果您沒有 /usr/obj 這個目錄,您就:

    # cp foo.cf /etc/sendmail.cf

否則您就:

    # cp /usr/obj/`pwd`/foo.cf /etc/sendmail.cf

一個典型的 .mc 檔看起來像:

    include(`../m4/cf.m4')
    VERSIONID(`Your version number')
    OSTYPE(bsd4.4)
    
    FEATURE(nodns)
    FEATURE(nocanonify)
    FEATURE(mailertable)
    
    define(`UUCP_RELAY', your.uucp.relay)
    define(`UUCP_MAX_SIZE', 200000)
    
    MAILER(local)
    MAILER(smtp)
    MAILER(uucp)
    
    Cw    your.alias.host.name
    Cw    youruucpnodename.UUCP

當傳遞電子郵件時,nodnsnocanonify 的目的是抑制 DNS 的使用。 因為某些奇怪的理由,我們必須使用 UUCP_RELAY 這個設定,不要問為什麼。您只要填入一個能夠處理 .UUCP 虛擬網域位址的主機名稱即可;最恰當的填法就是把您 ISP 的郵件轉送主機的名字填進去。

一旦您做了這個設定,您還需要一個叫做 /etc/mailertable 的檔案。下面是一個典型的例子:

    #
    # makemap hash /etc/mailertable.db < /etc/mailertable
    #
    horus.interface-business.de   uucp-dom:horus
    .interface-business.de        uucp-dom:if-bus
    interface-business.de         uucp-dom:if-bus
    .heep.sax.de                  smtp8:%1 horus.UUCP
    uucp-dom:horus                if-bus.UUCP
    uucp-dom:if-bus .	      uucp-dom:sax

就像您所看到的,這是一個實際存在檔案的一部份。 前三行主要是在處理一些不經由預設郵件遞送路徑, 反而經由 UUCP 鄰居來做捷徑的特例。 下一行處理的是可以透過 SMTP 來送的區域乙太網路郵件。 最後是一些以 .UUCP 虛擬網域記名法所記錄的 UUCP 鄰居, 這是為了要用 uucp-neighbor!recipient 來蓋掉預設的規則。最後一行往往只有單一一個點, 把所有無法由上面幾條規則處理的郵件都送往您的某個 UUCP 鄰居, 此時它的身份就是您的郵件閘道器。所有 uucp-dom: 後面的節點名稱必須是一個合法的 UUCP 鄰居,您可以用 uuname 指令去驗證其合法性。

剩下來的工作就是在使用它之前把它轉換成 DBM 格式的資料庫檔, 您最好把轉換所用的命令當作一個註解寫在 mailertable 的最上面。 您必須在每次改 mailertable 之後執行它。

最後一個提示:如果您不確定到底您的郵件遶送路徑派不派得上用場, 不要忘了 sendmail-bt 選項。這個選項可以啟動 sendmail 的 ``位址測試模式'';用法很簡單,只要先輸入一個 0,後面接上您要測試的郵件位址即可。 結果的最後一行會告訴您到底用的是那一個郵件代理程式、 是因為送到那裡所以才用那個代理程式、 還有到底您會寄到那個郵件位址去 (可能已經經過轉換)。 只要按 Control-D 就可以離開這個測試模式。

    % sendmail -bt
    ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
    Enter <ruleset> <address>
    > 0 foo@interface-business.de
    rewrite: ruleset  0   input: foo @ interface-business . de
    ...
    rewrite: ruleset  0 returns: $# uucp-dom $@ if-bus $: foo < @ interface-business . de