例文环境centos 5
当sendmail从任意MTA收到一封邮件时,首先检查收信地址. 如果”@”后面的部分和本机文件”/etc/mail/local-host-names”里的一条匹配则尝试将其作为本地邮件保存, 无匹配项时则尝试将该邮件转发给外部MTA.
※MTA: 邮件转发代理,邮件服务的一部分.
如上sendmail的邮件接收,转发机制是作为MTA最重要的部分.这里的设置如果有问题,邮件服务器很可能成为垃圾邮件的中转站.所以有必要熟悉理解这部分的设置方法.
MTA 通常通过邮件的送信人地址或者域名来判断是否接收或转送.
Sendmail 通过参照二进制数据库文件”/etc/mail/access.db”来进行各种控制.
“/etc/mail/access.db”可以通过”makemap”命令将文本文件“/etc/mail/access”转换生成. 因此实际修改时,先改文本文件“/etc/mail/access”,然后转换.
生成二进制文件命令:
[root@sunnybox mail]#makemap �C v hash /etc/mail/access.db < /etc/mail/access
基本格式
标签:设置对象IP地址或域名空格或Tab 制约关键字.
[标签]:[参数] [制约关键字]
redhat linux版本可能默认情况下没有标签项。
不加标签的默认为Connect.,另外标签还可以指定为From,To
Connect: 检查对象域名或IP
From: 检查对象 送信人地址
(这里注意送信人地址和收信人地址是可以伪装的,所以送信人地址和送信服务器地址不一定一致.所以From 的设置有时是必要的)
From 设置例:
From:[email protected] REJECT (拒绝某人发来的邮件)
From:obenrispam.com REJECT (拒绝从obenrispam.com发来的所以邮件)
From:spam@ REJECT(拒绝所以名字叫spam的邮件,无论来自哪个域)
To: 检查对象 收信人地址(设置理由,方法同上)
制约关键字
OK RELAY REJECT 550 DISCARD
OK : 只接收发给自己/本地的邮件. 其他的全部拒绝并向送信服务器返回错误消息.
未指定的默认值为OK.
RELAY: 允许接收允许转发.
REJECT:拒绝接收,转发. 向送信服务器返回错误消息.
500: 与reject基本相同,拒绝接收,转发,并向送信服务器返回错误消息和原邮件.
DISCARD:丢弃接收到的邮件,并且不向送信邮件服务器返回任何消息.
sendmail 使用下列配置文件:
文件名 | 功能 |
---|---|
/etc/mail/access |
sendmail 访问数据库文件 |
/etc/mail/aliases |
邮箱别名 |
/etc/mail/local-host-names |
sendmail 接收邮件主机列表 |
/etc/mail/mailer.conf |
邮寄配置程序 |
/etc/mail/mailertable |
邮件分发列表 |
/etc/mail/sendmail.cf |
sendmail的主配置文件 |
/etc/mail/virtusertable |
虚拟用户和域列表 |
/etc/mail/access
访问数据库定义了什么主机或者 IP 地址可以访问本地邮件服务器和它们是哪种类型的访问。 主机可能会列出 OK
、 REJECT
、RELAY
或者简单的通过 sendmail 的出错处理程序检测一个给定的邮件错误。 主机默认列出 OK
,允许传送邮件到主机, 只要邮件的最后目的地是本地主机。列出 REJECT
将拒绝所有的邮件连接。如果带有 RELAY
选项的主机将被允许通过这个邮件服务器发送邮件到任何地方。
cyberspammer.com 550 We do not accept mail from spammers
FREE.STEALTH.MAILER@ 550 We do not accept mail from spammers
another.source.of.spam REJECT
okay.cyberspammer.com OK
128.32 RELAY
在上面的例子中我们有 5 条记录。 与左边列表匹配的发件人受到右边列表动作的影响。 前边的两个例子给出了 sendmail 的出错处理程序检测到的错误代码。 当一个邮件与左边列表相匹配时,这个信息会被打印到远程主机上。 下一条记录拒绝来自 Internet 上的一个特别主机的邮件 another.source.of.spam
。接下来的记录允许来自 okay.cyberspammer.com
的邮件连接, 这条记录比上面那行 cyberspammer.com
更准确。更多的准确匹配使不准确的匹配无效。最后一行允许电子邮件从主机和 128.32
开头的 IP 地址转发。 这些主机将被允许通过这台邮件服务器前往其它邮件服务器发送邮件。
当这个文件被升级的时候,您必须在 /etc/mail/
运行 make
升级数据库。
/etc/mail/aliases
别名数据库包含一个扩展到用户,程序或者其它别名的虚拟邮箱列表。 下面是一些在 /etc/mail/aliases
中使用的例子:
root: localuser
ftp-bugs: joe,eric,paul
bit.bucket: /dev/null
procmail: "|/usr/local/bin/procmail"
这个文件的格式很简单; 冒号左边的邮箱名, 会被展开成右边的形式。 第一个例子简单地将 root
邮箱扩展为 localuser
, 之后将继续在别名数据库中进行查找。 如果没有找到匹配的记录, 则邮件会被发给本地用户 localuser
。 第二个例子展示了一个邮件列表。 发送到 ftp-bugs
的邮件会被展开成 joe
, eric
和 paul
这三个邮箱。 注意也可以通过 <[email protected]>
这样的形式来指定远程的邮箱。 接下来的例子展示了如何把邮件写入到文件中, 这个例子中是 /dev/null
。 最后一个例子展示了如何将邮件发给一个程序, 具体而言是通过 UNIX 管道发到/usr/local/bin/procmail
的标准输入。
更新此文件时, 您需要在 /etc/mail/
中使用 make
来更新数据库。
/etc/mail/local-host-names
这是一个 sendmail(8) 被接受为一个本地主机名的主机名列表。 可以放入任何 sendmail 将从那里收发邮件的域名或主机。例如,如果这个邮件服务器从域 example.com
和主机mail.example.com
接收邮件,它的 local-host-names
文件,可以看起来象如下这样:
example.com
mail.example.com
当这个文件被升级,sendmail(8) 必须重新启动,以便更新设置。
/etc/mail/sendmail.cf
sendmail的主配置文件 sendmail.cf
控制着 sendmail 的所有行为, 包括从重写邮件地址到打印拒绝远程邮件服务器信息等所有事。 当然,作为一个不同的角色,这个配置文件是相当复杂的, 它的细节部分已经超出了本节的范围。幸运的是, 这个文件对于标准的邮件服务器来说很少需要被改动。
sendmail 主配置文件可以用 m4(1) 宏定义 sendmail 的特性和行为。它的细节请看 /usr/src/contrib/sendmail/cf/README
。
当这个文件被修改时, sendmail 必须重新启动以便对新修改生效。
/etc/mail/virtusertable
virtusertable
映射虚拟域名和邮箱到真实的邮箱。 这些邮箱可以是本地的、远程的、/etc/mail/aliases
中定义的别名或一个文件。
在上面这个例子中, 我们映射了一个域 example.com
。 这个文件是按照从上到下, 首个匹配的方式来处理的。 第一项将 <[email protected]>
映射到本地邮箱 root
。 下一项则将<[email protected]>
映射到位于 noc.example.net
的 postmaster
。 最后, 如果没有来自 example.com
的匹配, 则将使用最后一条映射, 它表示将所有的其它邮件发给 example.com
域的某个人。 这样, 将映射到本地信箱 joe
。