sendmail address rewriting mini-HOWTO 作者: Thomas Roessler [1]roessler@guug.de 譯者: 蘇江文 [2]softsprite@yeah.net v0.0, 6 May 1998 翻譯日期: 16 Dec 1999 _________________________________________________________________ 本文介紹家庭用戶撥號訪問如何配置 sendmail 。 _________________________________________________________________ 1. 導言 2. 文件路徑映射 3. 配置 sendmail * 3.1 主要的配置文件 * 3.2 地址重寫 * 3.3 別名 4. 進階閱讀 _________________________________________________________________ 1. 導言 我們假設你現在已經能夠進行類似通常在大學中的互聯網訪問及在線服務:你在 串口聯接通過PPP撥號進入你的聯接供應商的網絡。 你接收的郵件是放在供應商 的POP或IMAP服務器中,發出的郵件則通過SMTP送出。你沒有一個屬于你的域名, 因此一切都必須使用一個地址。 我們假設你已經安裝了Eric Allman的sendmail的最新版本(本文寫作時最新版本 是8.8.8,這個版本能很好地工作)。(譯者:當前最新穩定版本是8.9.3) 本文部分說明專指Debian GNU/Linux系統,使用其它發行版本的用戶應引起注意 。 確認你手頭掌握了以下信息: * 你的ISP的郵件服務器。 * 你的互聯網郵件地址。 我們計划中的配置包括兩個主要目標: 1. 能在兩個不同的本地用戶之間發送郵件。 2. 外部世界接收郵件時看到的是本地用戶的ISP的郵件地址,而不是本地郵件地 址。 為了達到這個目的,我們將使用sendmail的 genericstable 特點。 2. 文件路徑映射 我們將把所有sendmail的配置文件放在以下不同的目錄中: /etc: /etc/mail 。 通常,sendmail將期待這些文件存放在 /etc 。 為了避免這個問題,將 /etc/sendmail.cf 符號鏈接到 /etc/mail/sendmail.cf 。 以下文件存放在 /etc/mail: * =20 * aliases - 包含附加的本地地址 * genericsdomain - 包含本地主機配置的一些信息 * genericstable - 包含重寫規則 * sendmail.cf - sendmail的配置文件 * sendmail.mc - sendmail.cf 的配置源代碼。 以上部分文件都附帶著 .db 文件。它們包含能被sendmail直接使用的哈希數據庫 。 我們假設sendmail配置源代碼樹的 cf 部分存放在目錄 /usr/lib/sendmail.cf 中。 在 Debian GNU/Linux 系統中就是這樣存放的。其它發行版本可能存放在不 同的地方。詳情請參考你的發行版本的文檔。 3. 配置 sendmail 3.1 主要的配置文件 sendmail 在它的配置中使用相當復雜的規則系統。在你掌握許多配置竅門之前, 通過手工寫一個 sendmail.cf 文件很不常見并且耗費大量時間。如果你對此感興 趣,你可以停止閱讀本文而去看 O'Reilly 的 "Bat Book" 。 取代使用手工配置的方法,我們使用 m4 宏處理器將預定義好的文件生成你的配 置文件,這些預定義文件隨 sendmail 的發行版本一并提供。 請看文件 sendmail.mc 的第一行: _________________________________________________________________ include(/usr/lib/sendmail.cf/m4/cf.m4) VERSIONID(`sendmail.mc - roessler@guug.de') OSTYPE(debian) define(`ALIAS_FILE',`/etc/mail/aliases') _________________________________________________________________ 在第一行, cf.m4 被包含進來。這個 m4 宏文件包含了其它部分將用到的許多宏 定義。 確定你提供的路徑是正確的 - 在我們這個例子中提供的這個路徑 是Debian GNU/Linux的典型路徑。 OSTYPE 宏被用來給出一些非常有用的當前配 置的缺省值。 如果你不是使用Debian系統,你可以將這里的 "debian" 換成 "linux" 。 ALIAS_FILE 告訴 sendmail 到哪里去找到 aliases 文件。 以下几行告訴 sendmail 使用 genericstable 特點和到哪里去找到使用該特點的 配置文件: _________________________________________________________________ FEATURE(masquerade_envelope) FEATURE(genericstable, `hash -o /etc/mail/genericstable') GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain') _________________________________________________________________ masquerade_envelope 特點告訴 sendmail 去實現郵頭重寫到郵件的信封 傳送者 。 這是一個外部郵件投遞系統將用來直接投遞失敗報告和警告郵件的郵件地址 。generics* 文件將在下面解釋。 現在,我們必須定義一個所謂 smart 主機,就是將要負責為你的系統傳送外部郵 件的主機。 注意:這台主機有可能不是你的ISP的POP和IMAP服務器。 如果對此 不太清楚,聯系你的ISP供應商。 主配置文件的代碼如下: _________________________________________________________________ define(`SMART_HOST',`mail-out.your.provider') _________________________________________________________________ 請替換 mail-out.your.provider 成你的ISP的主機地址。 最后兩行包含 "mailer" 定義,sendmail 根據這些定義才能知道如何處理不同類 型的郵件: _________________________________________________________________ MAILER(local) MAILER(smtp) _________________________________________________________________ 為了從這個 sendmail.mc 生成 sendmail.cf 文件,輸入以下命令 (作為 root 用戶): _________________________________________________________________ # m4 sendmail.mc > _sendmail.cf # mv -f _sendmail.cf sendmail.cf _________________________________________________________________ 注意我們使用的技朮:將 m4 的輸出寫入一個臨時文件,再轉移到合適的地方。 這將幫助我們避免sendmail讀入只寫了一部分的配置文件。 3.2 地址重寫 首先,我們必須告訴sendmail哪些地址將被認為是本地地址(然后將被重寫)。這 很簡單:只要將你的機器的完整主機名放入文件 /etc/mail/genericsdomain。 為了取得你的機器的完整主機名,輸入以下命令: _________________________________________________________________ $ hostname -f _________________________________________________________________ 現在,讓我們看一下重寫表: /etc/mail/genericstable 。這個文件由被空格分 開的兩列組成。第一列包含本地地址,第二列包含替換后的郵件地址。 文件看起 來如下: _________________________________________________________________ harry harryx@your.isp maude maudey@her.isp root fredx@your.isp news fredx@your.isp _________________________________________________________________ 注意每一個本地機器上的賬號都要有一行,這樣自動生成的外發郵件能帶上正確 的頭信息。 為了性能的考慮, sendmail 并不直接使用這個文本文件,而是用“哈希”版本 替代。為了生成這個版本,輸入以下命令: _________________________________________________________________ # makemap -r hash genericstable.db < genericstable _________________________________________________________________ 注意: genericstable 指定的重寫規則將不 作用在本地郵件或你從外部接收到 的郵件 - 這種轉換只使用在從你本地機器通過你的ISP主機發往外部的郵件。 3.3 別名 別名文件包含只對你本地郵件有效的附加本地名字。這對管理員賬號象 root 非 常有用,從你的系統接收自動轉換來的郵件。 /etc/mail/aliases 可能如下所示: _________________________________________________________________ root: fred news: root postmaster: root mail: root www: root nobody: /dev/null MAILER-DAEMON: nobody _________________________________________________________________ 這個例子將路由送往 root, news, postmaster, mail, 和 www 用戶的本地郵件 到 fred , 而送往 nobody 和 MAILER-DAEMON 的郵件將重定向到 /dev/null 。 就象 genericstable, aliases 可能包含許多 項。因此,就象我們上面所說的 ,sendmail直接使用文本文件將效率低下。 aliases 采用和 genericstable 同 樣的機制:生成一個哈希數據庫。 取代直接使用 makemap ,這次你可以輸入命 令 newaliases 。它將自動處理所需的一切。 4. 進階閱讀 sendmail源代碼發行版中包含了許多文檔。閱讀它們,特別是文件 cf/README 。 如果你想深入了解sendmail的配置選項,你可以從以下地址取得“Bat Book”: O'Reilly: Bryan Costales, Eric Allman, and Neil Rickert: "sendmail". O'Reilly, 1993. References 1. mailto:roessler@guug.de 2. mailto:softsprite@yeah.net