22.4. 那个/etc/sendmail.mc文件 /中央邮件枢纽

那个/etc/sendmail.mc中央邮件枢纽的文件,网络中不是让每台单独的服务器或工作站处理自己的邮件,而是使用强大的中央服务器处理所有邮件可能更有优势。这样的服务器称为邮件枢纽。中央邮件枢纽的优势在于

  1. 所有传入邮件都发送到枢纽,没有邮件直接发送到客户端机器。

  2. 来自客户端的所有传出邮件都发送到枢纽,然后枢纽将邮件转发到最终目的地。

  3. 所有传出邮件都显示来自单个服务器,外部世界无需知道任何客户端的名称。

  4. 客户端无需运行 sendmail 守护进程来监听邮件。

sendmail.cf 是 Sendmail 运行时读取的第一个文件,也是 Sendmail 最重要的文件之一。该文件中包含的许多项包括所有其他文件的位置、Sendmail 需要的这些文件和目录的默认权限。Linux 的 m4 宏预处理器程序被 Sendmail V8 用来生成 Sendmail 配置文件。这个宏程序将生成/etc/mail/sendmail.cf配置文件,通过处理名称以.mc.

结尾的文件。因此,我们将创建此文件sendmail.mc并将必要的宏值放入其中,以允许 m4 程序处理、读取其输入并收集宏的定义,然后用它们的值替换这些宏,并输出结果以创建我们的sendmail.cf文件。有关更多信息,请参阅 Sendmail 文档和 README 文件,位于 V8 Sendmail 源代码发布版本的cf子目录下。

创建 sendmail.mc 文件,touch/var/tmp/sendmail-version/cf/cf/sendmail.mc并添加以下行
         define(`confDEF_USER_ID',``8:12'')dnl
         OSTYPE(`linux')dnl
         DOMAIN(`generic')dnl
         define(`confTRY_NULL_MX_LIST',true)dnl
         define(`confDONT_PROBE_INTERFACES',true)dnl
         define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
         define(`LOCAL_MAILER_FLAGS', `ShPfn')dnl
         define(`LOCAL_MAILER_ARGS', `procmail -a $h -d $u')dnl
         FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
         FEATURE(`mailertable')dnl
         FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl
         FEATURE(`redirect')dnl
         FEATURE(`always_add_domain')dnl
         FEATURE(`use_cw_file')dnl
         FEATURE(`local_procmail')dnl
         FEATURE(`access_db')dnl
         FEATURE(`blacklist_recipients')dnl
         FEATURE(`dnsbl')dnl
         MAILER(`local')dnl
         MAILER(`smtp')dnl
         MAILER(`procmail')dnl
         

这告诉 sendmail.mc 文件使用以下内容为特定配置进行设置

define(`confDEF_USER_ID',``8:12'')dnl

此配置选项指定默认用户 ID。在我们的例子中是user mailgroup mail,它们对应于 ID 号8:12 参见/etc/passwd/etc/group文件.

OSTYPE(`linux')dnl

此配置选项指定 Sendmail 将在其上运行的默认操作系统;在我们的例子中是linux系统。此项是mc文件所需的最小信息之一。

DOMAIN(`generic')dnl

此配置选项将指定和描述适合您环境的特定域。

define(`confTRY_NULL_MX_LIST',true)dnl

此配置选项指定接收服务器是否是最佳MX主机,如果是,则尝试直接连接到该主机。

define(`confDONT_PROBE_INTERFACES',true)dnl

此配置选项,如果设置为 true,则表示 Sendmail 将 _不_ 将任何本地接口的名称和地址插入到$=w类,已知等效地址列表

define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl

此配置选项设置服务器上安装的 procmail 程序的路径。由于 Red Hat Linux 中的路径与其他 Linux 版本不同,我们必须使用此宏指定新路径。重要的是要注意,此宏也由FEATURE(`local_procmail')使用,如稍后在此文件中定义。

define(`LOCAL_MAILER_FLAGS', `ShPfn')dnl

此配置选项定义本地邮件程序 (procmail) 必须使用的标志。有关每个标志的更多信息,请参阅 Sendmail 文档。

define(`LOCAL_MAILER_ARGS', `procmail -a $h -d $u')dnl

此配置选项定义必须传递给本地邮件程序 (procmail) 的参数。有关每个参数的更多信息,请参阅 Sendmail 文档。

FEATURE(`smrsh',`/usr/sbin/smrsh')dnl

此 m4 宏启用 smrshsendmail 受限 shell 的使用,而不是默认的/bin/sh用于邮件程序。使用此功能,您可以通过/etc/mail/aliases~/.forward文件控制通过电子邮件运行的程序。smrsh 程序的默认位置是/usr/libexec/smrsh。由于我们在另一个位置安装了 smrsh,我们需要向 smrsh 功能添加一个参数来指示新位置/usr/sbin/smrshCERT 建议使用 smrsh,因此鼓励您尽可能多地使用此功能。

FEATURE(`mailertable')dnl

此 m4 宏启用mailertable 数据库选择新的投递代理 的使用。mailertable 是一个数据库,它将host.domain名称映射到特殊的投递代理和新的域名对。使用此功能,可以通过使用指定的或特定的投递代理将邮件投递到新的域名。通常,此功能必须仅在中央邮件枢纽服务器上可用。

FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl

此 m4 宏启用virtusertable虚拟域支持,它允许多个虚拟域托管在一台机器上。virtusertable 是一个数据库,它将虚拟域映射到新的地址。使用此功能,虚拟域的邮件可以投递到本地、远程或单个用户地址。通常,此功能必须仅在中央邮件枢纽服务器上可用。

FEATURE(`redirect')dnl

此 m4 宏启用redirect 支持 address.REDIRECT。使用此功能,发送到已退休用户帐户wahib的邮件,例如,将被退回,并指示新的转发地址。退休帐户必须在邮件服务器上的别名文件中设置。通常,此功能必须仅在中央邮件枢纽服务器上可用。

FEATURE(`always_add_domain')dnl

此 m4 宏启用always_add_domain即使在本地邮件上也添加本地域。使用此功能,所有本地投递的地址都将是完全限定的。出于安全原因,设置此功能是安全且推荐的。

FEATURE(`use_cw_file')dnl

此 m4 宏启用use_cw_file,使用/etc/mail/local-host-names文件用于本地主机名。使用此功能,您可以在/etc/mail/local-host-names文件中声明主机列表,本地主机充当这些主机的MX收件人。换句话说,此功能导致读取/etc/mail/local-host-names文件以获取本地主机的备用名称。

FEATURE(`local_procmail')dnl

此 m4 宏启用local_procmail 使用 procmail 作为本地投递代理。使用此功能,您可以将 procmail 用作 Sendmail 投递代理。

FEATURE(`access_db')dnl

此 m4 宏启用访问数据库功能。使用此功能,您可以通过访问数据库来允许或拒绝接受来自指定域的邮件。通常,此功能必须仅在中央邮件枢纽服务器中可用。

FEATURE(`blacklist_recipients')dnl

此 m4 宏启用阻止某些收件人用户名、主机名或地址的传入邮件的功能。使用此功能,您可以例如阻止发送到user nobody, host foo.mydomain.com,或guest@bar.mydomain.com

的传入邮件。

FEATURE(`dnsbl')dnl此 m4 宏使 Sendmail 能够拒绝来自实时黑名单数据库中任何站点的邮件rbl.maps.vix.com

DNS 基于拒绝是一个在 DNS 中维护的垃圾邮件发送者数据库。有关详细信息,请参阅 http://maps.vix.com/rbl/

MAILER(`local'), MAILER(`smtp'), 和 MAILER(`procmail')dnl

Note: 有时,您希望继续通信的域可能会最终出现在 RBL 列表中。在这种情况下,Sendmail 允许您覆盖这些域以允许接收他们的电子邮件。为此,只需编辑/etc/mail/access文件并添加适当的域信息。

示例 22-1. 覆盖 RBL

         blacklisted.domain      OK