2022年邮件系统postfix安装与配置 .pdf
-
资源ID:30553459
资源大小:210.96KB
全文页数:29页
- 资源格式: PDF
下载积分:4.3金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
2022年邮件系统postfix安装与配置 .pdf
邮件系统 postfix 安装与配置一、 postfix 概述postfix 是 Wietse Venema 在 IBM 的 GPL 协议之下开发的MTA(邮件传输代理)软件。下面一段话摘自postfix 的官方站点( http:/www.postfix.org) :“postfix 是 Wietse Venema想要为使用最广泛的sendmail提供替代品的一个尝试。在 Internet 世界中,大部分的电子邮件都是通过sendmail来投递的,大约有100 万用户使用 sendmail,每天投递上亿封邮件。这真实一个让人吃惊的数字。Postfix 试图更快、更容易管理、更安全,同时还与 sendmail保持足够的兼容性 。”1.1 postfix 的特点1. postfix 是免费的: postfix 想要作用的范围是广大的Internet 用户,试图影响大多数的Internet 上的电子邮件系统,因此它是免费的。2. 更快: postfix 在性能上大约比 sendmail快三倍。一部运行postfix 的台式 PC每天可以收发上百万封邮件。3. 兼容性好 : postfix 是 sendmail兼容的,从而使 sendmail用户可以很方便地迁移到postfix。Postfix 支持/var/spool/mail 、/etc/aliases 、 NIS、和 /.forward 文件。 4. 更健壮:postfix 被设计成在重负荷之下仍然可以正常工作。当系统运行超出了可用的内存或磁盘空间时, postfix 会自动减少运行进程的数目。当处理的邮件数目增长时,postfix 运行的进程不会跟着增加。5. 更灵活: postfix 是由超过一打的小程序组成的,每个程序完成特定的功能。你可以通过配置文件设置每个程序的运行参数。 6. 安全性postfix 具有多层防御结构,可以有效地抵御恶意入侵者。如大多数的postfix 程序可以运行在较低的权限之下 ,不可以通过网络访问安全性相关的本地投递程序等等。1.2 postfix 的总体结构postfix 由十几个具有不同功能的半驻留进程组成,并且在这些进程中并无特定的进程间父子关系。某一个特定的进程可以为其他进程提供特定的服务。大多数的 postfix 进程由一个进程统一进行管理,该进程负责在需要的时候调用其他进程,这个管理进程就是master进程。该进程也是一个后台程序。这些 postfix 进程是可以配置的,我们可以配置每个进程运行的数目,可重用的次数,生存的时间等等。通过灵活的配置特性可以使整个系统的运行成本大大降低。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 29 页 - - - - - - - - - 1.2.1 postfix 的邮件队列( mail queues )postfix 有四种不同的邮件队列,并且由队列管理进程统一进行管理:1 maildrop:本地邮件放置在maildrop 中,同时也被拷贝到incoming 中。2 incoming:放置正在到达或队列管理进程尚未发现的邮件。3 active:放置队列管理进程已经打开了并正准备投递的邮件,该队列有长度的限制。4 deferred:放置不能被投递的邮件。队列管理进程仅仅在内存中保留active队列,并且对该队列的长度进行限制,这样做的目的是为了避免进程运行内存超过系统的可用内存。1.2.2 postfix 对邮件风暴的处理当有新的邮件到达时, postfix 进行初始化,初始化时postfix 同时只接受两个并发的连接请求。当邮件投递成功后,可以同时接受的并发连接的数目就会缓慢地增长至一个可以配置的值。当然,如果这时系统的消耗已到达系统不能承受的负载就会停止增长。还有一种情况时,如果postfix 在处理邮件过程中遇到了问题,则该值会开始降低。当接收到的新邮件的数量超过postfix 的投递能力时, postfix 会暂时停止投递deferred队列中的邮件而去处理新接收到的邮件。这是因为处理新邮件的延迟要小于处理 deferred队列中的邮件。 Postfix 会在空闲时处理 deferred中的邮件。1.2.3 postfix 对无法投递的邮件的处理当一封邮件第一次不能成功投递时,postfix 会给该邮件贴上一个将来的时间邮票。邮件队列管理程序会忽略贴有将来时间邮票的邮件。时间邮票到期时 ,postfix会尝试再对该邮件进行一次投递,如果这次投递再次失败,postfix 就给该邮件贴上一个两倍于上次时间邮票的时间邮票,等时间邮票到期时再次进行投递,依此类推。当然,经过一定次数的尝试之后,postfix 会放弃对该邮件的投递,返回一个错误信息给该邮件的发件人。1.2.4 postfix 对不可到达的目的地邮件的处理postfix 会在内存中保存一个有长度限制的当前不可到达的地址列表。这样就避免了对那些目的地为当前不可到达地址的邮件的投递尝试。从而大大提高了系统的性能。1.2.2 postfix 的安全性postfix 通过一系列的措施来提高系统的安全性,这些措施包括:1 动态分配内存,从而防止系统缓冲区溢出;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 29 页 - - - - - - - - - 2 把大邮件分割成几块进行处理,投递时再重组;3 Postfix 的各种进程不在其他用户进程的控制之下运行,而是运行在驻留主进程 master的控制之下,与其他用户进程无父子关系,所有有很好的绝缘性。4 Postfix 的队列文件有其特殊的格式,只能被postfix 本身识别;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 29 页 - - - - - - - - - 二、 postfix 对邮件的处理过程2.1 接收邮件的过程图二、 postfix 对接收邮件的处理当 postfix 接收到一封新邮件时,新邮件首选在incoming 队列处停留,然后针对不同的情况进行不同的处理:1对于来自于本地的邮件 :sendmail进程负责接收来自本地的邮件放在maildrop队列中,然后 pickup 进程对 maildrop 中的邮件进行完整性检测。maildrop 目录的权限必须设置为某一用户不能删除其他用户的邮件。2对于来自于网络的邮件:smtpd进程负责接收来自于网络的邮件,并且进行安全性检测。可以通过UCE(unsolicited commercial email)控制 smtpd的行为。3由 postfix 进程产生的邮件:这是为了将不可投递的信息返回给发件人。这些邮件是由 bounce后台程序产生的。5 由 postfix 自己产生的邮件:提示postmaster (也即 postfix 管理员) postfix 运行过程中出现的问题。 (如 SMTP 协议问题,违反 UCE 规则的记录等等。)关于 cleanup后台程序的说明: cleanup是对新邮件进行处理的最后一道工序它对新邮件进行以下的处理:添加信头中丢失的Form 信息;为将地址重写成标准的 userfully.qualified.domain 格式进行排列;重信头中抽出收件人的地址;将邮件投入 incoming 队列中,并请求邮件队列管理进程处理该邮件;请求trivial-rewrite 进程将地址转换成标准的userfully.qualified.domain 格式。2.2 投递邮件的过程新邮件一旦到达 incoming 队列,下一步就是开始投递邮件,postfix 投递邮件时的处理过程如图三所示。相关的说明如下:邮件队列管理进程是整个postfix 邮件系统的心脏。它和local、smtp、pipe 等投递代理相联系,将包含有队列文件路径信息、邮件发件人地址、邮件收件人地址的投递请求发送给投递代理。队列管理进程维护着一个deferred队列,那些无法投递的邮件被投递到该队列中。除此之外,队列管理进程还维护着一个active队列,该队列中的邮件数目是有限制的,这是为了防止在负载太大时内存溢出。邮件队列管理程序还负责将收件人地址在relocated表中列出的邮件返回给发件人,该表包含无效的收件人地址。如果邮件队列管理进程请求 ,rewrite 后台程序对收件人地址进行解析。但是缺省地,rewrite 只对邮件收件人是本地的还是远程的进行区别。如果邮件对你管理进程请求,bounce后台程序可以生成一个邮件不可投递的报名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 29 页 - - - - - - - - - 告。本地投递代理 local 进程可以理解类似UNIX 风格的邮箱, sendmail风格的系统别名数据库和 sendmail 风格的 .forward 文件。可以同时运行多个local 进程,但是对同一个用户的并发投递进程数目是有限制的。你可以配置local 将邮件投递到用户的宿主目录,也可以配置local 将邮件发送给一个外部命令,如流行的本地投递代理 procmail。在流行的 linux 发行版本 RedHat中,我们就使用 procmail作为最终的本地投递代理。远程投递代理 SMTP 进程根据收件人地址查询一个SMTP 服务器列表,按照顺序连接每一个 SMTP 服务器,根据性能对该表进行排序。在系统负载太大时,可以有数个并发的SMTP 进程同时运行。pipe 是用于 UUCP 协议的投递代理。三、 postfix 的安装过程3.1 源代码包的安装1 获取 postfix 的源代码包从 postfix 官方站点 www.postfix.org 取得 postfix 的源代码包postfix-19991231-pl08.tar.gz。将其拷贝到 /tmp 2解开源代码包,将生成 /tmp/ postfix-19991231-pl08 目录。tar xvzf postfix-19991231-pl08.tar.gz 3编译源代码包cd /tmp/ postfix-19991231-pl08 make 4建立一个新用户“ postfix”,该用户必须具有唯一的用户id 和组 id 号,同时应该让该用户不能登录到系统 ,也即不为该用户指定可执行的登录外壳程序和可用的用户宿主目录。我们可以先用adduser postfix 添加用户再编辑 /etc/passwd文件中的相关条目如下所示: postfix:*:12345:12345:postfix:/no/where:/no/shell 5确定 /etc/aliases文件中包含如下的条目: postfix: root 6 以 root 用户登录,在 /tmp/ postfix-19991231-pl08 目录下执行命令:./INSTALL.sh 7 启动 postfix # postfix start 8关于 maildrop 目录权限的说明: postfix 可以使用一个所有用户都可写的(也即目录权限为1773)的 maildrop 目录来让本地用户提交邮件。这种方法避免了使用set-uid 或 set-gid 软件,并且在邮件系统不可用时,用户仍然可以提交邮件。其他用户没有访问该目录中的队列文件的权限。接收来自网络的邮件时postfix 不使用 maildrop 目录。但是,由名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 29 页 - - - - - - - - - 于该目录的权限是733,其他用户可以建立一个硬连接到该目录中的文件从而导致该邮件被投递多次或无法删除,也就是说这将导致安全性问题。如果你想要使用这种方式来让用户提交邮件 ,就要在 INSTALL.sh 脚本问你是否需要set-gid 时回答 no。如果你的系统有多个用户的话,最好取消以上的方式而采用利用set-gid 用户权限提交邮件的方式。这时,我们首先需要建立一个组id 唯一的组maildrop 并且确定该组中没有用户成员。然后在INSTALL.sh 问你是否需要set-gid 时指定 maildrop 。提示:在安装 postfix 之前,请删除已经安装的sendmail。3.2 rpm 包的安装1 获取 postfix 的 rpm 软件包。我们可以从 http:/www.alltrading.es/postfix/RPMS/i386/ 获得 postfix 的 rpm 软件包。当前的最新版本是postfix-20000531-2.i386.rpm。2 备份你的 /etc/aliases和/etc/aliases.db ,因为 postfix 要使用该别名数据库。3 用以下命令查看系统是否安装了sendmail: rootmail /root# rpm -qa |grep sendmail sendmail-doc-8.9.3-15 sendmail-8.9.3-15 sendmail-cf-8.9.3-15 4 用以下命令强行卸载sendmail: rootmail /root# rpm -e sendmail sendmail-cf sendmail-doc -nodeps 5 用以下命令杀死运行中的sendmail进程:rootmail /root# killall sendmail 6 安装 postfix: rootmail /root# rpm -Uvh postfix-20000531-2.i386.rpm postfix # postfix-script: warning: creating missing Postfix pid directory postfix-script: warning: creating missing Postfix incoming directory postfix-script: warning: creating missing Postfix active directory postfix-script: warning: creating missing Postfix bounce directory postfix-script: warning: creating missing Postfix defer directory postfix-script: warning: creating missing Postfix deferred directory postfix-script: warning: creating missing Postfix saved directory postfix-script: warning: creating missing Postfix corrupt directory postfix-script: warning: creating missing Postfix public directory postfix-script: warning: creating missing Postfix private directory rootmail /root# 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 29 页 - - - - - - - - - 7 启动 postfix rootmail /root# /etc/rc.d/init.d/postfix start 3.3 配置系统每次启动时自动启动postfix 1.如果你安装的是postfix 的源代码包,可以在 /etc/rc.d/rc.local 文件中加入如下的语句让系统每次启动时自动启动postfix:if -f /usr/libexec/postfix ; then /usr/libexec/postfix start fi 2.如果你安装的是postfix 的 rpm 包,可以通过 setup命令来设置在系统启动时启动 postfix。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 29 页 - - - - - - - - - 四、 postfix 的配置详解4.1 postfix 的配置文件结构 postfix 的配置文件位于 /etc/postfix 下,安装完 postfix 以后,我们可以通过ls命令查看 postfix 的配置文件: rootmail postfix# ls install.cf main.cf master.cf postfix-script 这四个文件就是 postfix 最基本的配置文件,它们的区别在于: mail.cf:是 postfix 主要的配置文件。 Install.cf:包含安装过程中安装程序产生的postfix 初始化设置。master.cf :是 postfix 的 master进程的配置文件, 该文件中的每一行都是用来配置postfix 的组件进程的运行方式。postfix-script:包装了一些 postfix 命令,以便我们在linux 环境中安全地执行这些 postfix 命令。4.2 postfix 的基本配置postfix 大约有 100个配置参数,这些参数都可以通过main.cf 指定。配置的格式是这样的,用等号连接参数和参数的值。如:myhostname 等号的左边是参数的名称,等号的右边是参数的值;当然,我们也可以在参数的前面加上 $来引用该参数,如:myorigin = $myhostname 虽然 postfix 有 100 个左右的参数,但是 postfix 为大多数的参数都设置了缺省值 ,所以在让 postfix 正常为你服务之前,你只需要配置为数不多的几个参数。下面我们一起来看一看这些基本的postfix 参数。 需要注意的是 ,一旦你更改了 main.cf文件的内容,则必须运行postfix reload 命令使其生效。1 myorigin myorigin 参数指明发件人所在的域名。如果你的用户的邮件地址为, 则该参数指定 后面的域名。缺省地, postfix 使用本地主机名作为 myorigin,但是建议你最好使用你的域名,因为这样更具有可读性。比如:安装 postfix 的主机为 则我们可以这样指定myorigin: myorigin = 当然我们也可以引用其他参数,如: myorigin = $mydomain 2 mydestination mydestination参数指定 postfix 接收邮件时收件人的域名,换句话说,也就名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 29 页 - - - - - - - - - 是你的 postfix 系统要接收什么样的邮件。比如:你的用户的邮件地址为, 也就是你的域为 , 则你就需要接收所有收件人为user_ 的邮件。与 myorigin 一样,缺省地, postfix 使用本地主机名作为 mydestination。如: mydestination = $mydomain mydestination = 3 notify_classes 在 postfix 系统中,必须指定一个postfix 系统管理员的别名指向一个用户,只有这样,在用户遇到问题时才有报告的对象,postfix 也才能将系统的问题报告给管理员。 notify_classes参数就是用来指定向postfix 管理员报告错误时的信息级别。共有以下几种级别:bounce :将不可以投递的邮件的拷贝发送给postfix 管理员。出于个人隐私的缘故,该邮件的拷贝不包含信头。2bounce :将两次不可投递的邮件拷贝发送给postfix 管理员。delay:将邮件的投递延迟信息发送给管理员,仅仅包含信头。policy:将由于 UCE 规则限制而被拒绝的用户请求发送给postfix 管理员,包含整个 SMTP 会话的内容。protocol:将协议的错误信息或用户企图执行不支持的命令的记录发送给postfix管理员。同样包含整个SMTP 会话的内容。resource :将由于资源错误而不可投递的错误信息发送给postfix 管理员,比如:队列文件写错误等等。software:将由于软件错误而导致不可投递的错误信息发送给postfix 管理员。缺省值为:notify_classes = resource, software 4myhostname myhostname 参数指定运行 postfix 邮件系统的主机的主机名。缺省地,该值被设定为本地机器名 。你也可以指定该值 ,需要注意的是 ,要指定完整的主机名 。如: myhostname = 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 29 页 - - - - - - - - - 5mydomain mydomain 参数指定你的域名,缺省地,postfix 将 myhostname的第一部分删除而作为 mydomain的值。你也可以自己指定该值,如:mydomain = 6mynetworks mynetworks 参数指定你所在的网络的网络地址,postfix 系统根据其值来区别用户是远程的还是本地的,如果是本地网络用户则允许其访问。你可以用标准的A、B、C 类网络地址,也可以用CIDR(无类域间路由)地址来表示,如:192.168.1.0/24 192.168.1.0/26 7inet_interfaces inet_interfaces 参数指定 postfix 系统监听的网络接口。缺省地,postfix 监听所有的网络接口。如果你的postfix 运行在一个虚拟的ip 地址上,则必须指定其监听的地址。如: inet_interfaces = all inet_interface = 192.168.1.1 4.3 postfix 的 UCE(unsolicited commercial email)控制所谓 UCE 控制就是指控制 postfix 接收或转发来自于什么地方的邮件。缺省地, postfix 转发符合以下条件的邮件:* 来自客户端 ip 地址符合 $mynetworks 的邮件。* 来自客户端主机名符合 $relay_domains及其子域的邮件。* 目的地为 $relay_domains及其子域的邮件。缺省地, postfix 接受符合以下条件的邮件:* 目的地为 $inet_interfaces的邮件。* 目的地为 $mydestination的邮件。* 目的地为 $virtual_maps的邮件。但是我们也可以通过下面的规则来实现更强大的控制功能。1 信头过滤通过 header_checks 参数限制接收邮件的信头的格式,如果符合指定的格式,则拒绝接收该邮件。可以指定一个或多个查询列表,如果新邮件的信头符合列表中的某一项则拒绝该接收邮件。如:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 29 页 - - - - - - - - - header_checks = regexp:/etc/postfix/header_checks header_checks = pcre:/etc/postfix/header_checks 缺省地, postfix 不进行信头过滤。2客户端主机名 /地址限制通过 smtpd_client_restrictions参数限制可以向 postfix 发起 SMTP 连接的客户端的主机名或 ip 地址。可以指定一个或多个参数值,中间用逗号隔开。限制规则是按照查询的顺序进行的,第一条符合条件的规则被执行。可用的规则有:reject_unknown_client:如果客户端的ip 地址在 DNS 中没有 PTR 记录则拒绝转发该客户端的连接请求 。可以用 unknown_client_reject_code参数指定返回给客户机的错误代码(缺省为 450) 。如果你有用户没有作DNS 记录则不要启用该选项 。permit_mynetworks :如果客户端的 ip 地址符合 $mynetworks 参数定义的范围则接受该客户端的连接请求,并转发该邮件。check_client_access maptype:mapname:根据客户端的主机名、父域名、ip 地址或属于的网络搜索access数据库。如果搜索的结果为REJECT 或者 45XX text 则拒绝该客户端的连接请求 ;如果搜索的结果为OK、RELAY 或数字则接受该客户端的连接请求 ,并转发该邮件。 。可以用 access_map_reject_code参数指定返回给客户机的错误代码(缺省为554) 。reject_maps_rbl :如果客户端的网络地址符合$maps_rbl_domains参数的值则拒绝该客户端的连接请求。可以用maps_rbl_reject_code参数指定返回给客户机的错误代码(缺省为 554) 。示例: smtpd_client_restrictions = hash:/etc/postfix/access, reject_maps_rbl smtpd_client_restrictions = permit_mynetworks, reject_unknown_client 该参数的缺省值为: smtpd_client_restrictions = 也即接收来自任何客户端的SMTP 连接。3. 是否请求 HELO 命令可以通过 smtpd_helo_required参数指定客户端在SMTP 会话的开始是否发送一个 HELO 命令。你可以指定该参数的值为yes或 no。缺省值为: smtpd_helo_required = no 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 29 页 - - - - - - - - - 4. HELO 主机名限制可以通过 smtpd_helo_restrictions参数指定客户端在执行HELO 命令时发送给 postfix 的主机名。缺省地, postfix 接收客户端发送的任意形式的主机名。可以指定一个或多个参数值,中间用逗号隔开。限制规则是按照查询的顺序进行的,第一条符合条件的规则被执行。可用的规则有:reject_invalid_hostname :如果 HELO 命令所带的主机名参数不符合语法规范则拒绝客户机的连接请求。可以用invalid_hostname_reject_code参数指定返回给客户机的错误代码(缺省为501) 。permit_naked_ip_address :RFC 要求客户端的 HELO 命令包含的 ip 地址放在方括号内,你可以用 permit_naked_ip_address 参数取消该限制。因为有的mail 客户端不遵守该 RFC 的规定。reject_unknown_hostname :如果客户端执行HELO 命令时的主机名在DNS 中没有相应的 A 或 MX 记录则拒绝该客户端的连接请求。可以用invalid_hostname_reject_code参数指定返回给客户机的错误代码(缺省为 450) 。reject_non_fqdn_hostname :如果客户端执行HELO 命令时的主机名不是RFC 规定的完整的域名则拒绝客户端的连接请求。可以用invalid_hostname_reject_code参数指定返回给客户机的错误代码(缺省为504) 。check_helo_access maptype:mapname:根据客户端 HELO 的主机名、父域名搜索access数据库。如果搜索的结果为 REJECT 或者 45XX text 则拒绝该客户端的连接请求;如果搜索的结果为OK、RELAY 或数字则接受该客户端的连接请求。可以用 access_map_reject_code 参数指定返回给客户机的错误代码 (缺省为 554) 。示例:smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname 5. RFC 821信头限制RFC 821对邮件的信头做了严格的规定,但是广泛使用的sendmail并不支持该规定,所以对于该参数我们只能说不,即: strict_rfc821_envelopes = no 6. 通过发件人地址进行限制可以用 smtpd_sender_restrictions 参数通过发件人在执行MAIL FROM 命令时提供的地址进行限制。可以指定一个或多个参数值,中间用逗号隔开。限制规则是按照查询的顺序进行的,第一条符合条件的规则被执行。可用的规则有:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 29 页 - - - - - - - - - reject_unknown_sender_domain :如果 MAIL FROM 命令提供的主机名在DNS 中没有相应的 A 或 MX 记录则拒绝该客户端的连接请求。可以用unknown_address_reject_code 参数指定返回给客户机的错误代码(缺省为 450) 。check_sender_access maptype:mapname:根据 MAIL FROM 命令提供的主机名、父域搜索 access数据库。如果搜索的结果为REJECT 或者 45XX text 则拒绝该客户端的连接请求;如果搜索的结果为OK、RELAY 或数字则接受该客户端的连接请求。可以用access_map_reject_code 参数指定返回给客户机的错误代码(缺省为 554) 。可以通过该参数过滤来自某些不受欢迎的发件人的邮件。reject_non_fqdn_sender :如果 MAIL FROM 命令提供的主机名不是RFC 规定的完整的域名则拒绝客户端的连接请求。可以用non_fqdn_reject_code 参数指定返回给客户机的错误代码(缺省为504) 。缺省地, postfix 接受来自任何发件人的邮件。示例:smtpd_sender_restrictions = hash:/etc/postfix/access, reject_unknown_sender_domain7. 通过收件人地址进行过滤可以用 smtpd_recipient_restrictions参数通过发件人在执行RCPT TO 命令时提供的地址进行限制。缺省值为:smtpd_recipient_restrictions = permit_mynetworks, check_relay_domains 可以指定一个或多个参数值,中间用逗号隔开。限制规则是按照查询的顺序进行的,第一条符合条件的规则被执行。可用的规则有:check_relay_domains :如果符合以下的条件,则接受SMTP 连接请求,否则拒绝该连接,可以用 relay_domains_reject_code 参数指定返回给客户机的错误代码 (缺省为 504) 。* 客户端主机名符合 $relay_domains及其子域* 目的地为 $inet_interfaces 、$mydestination 或$virtual_maps permit_auth_destination :不管客户端的主机名,只要符合以下的条件,就接受 SMTP 连接请求:* 解析后的目标地址符合 $relay_domains及其子域* 解析后的目标地址符合 $inet_interfaces、$mydestination 或$virtual_maps reject_unauth_destination :不管客户端的主机名,只要符合以下的条件,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 29 页 - - - - - - - - - 就拒绝该客户端 SMTP 连接请求:* 解析后的目标地址符合 $relay_domains及其子域* 解析后的目标地址符合 $inet_interfaces、$mydestination 或$virtual_maps check_recipient_access :根据解析后的目标地址、父域搜索access数据库。如果搜索的结果为 REJECT 或者 45XX text 则拒绝该客户端的连接请求;如果搜索的结果为 OK、RELAY 或数字则接受该客户端的连接请求。可以用access_map_reject_code 参数指定返回给客户机的错误代码(缺省为554) 。reject_unknown_recipient_domain :如果收件人的邮件地址在DNS 中没有相应的A 或 MX 记录则拒绝该客户端的连接请求。可以用unknown_address_reject_code参数指定返回给客户机的错误代码(缺省为450) 。reject_non_fqdn_recipient :如果发件人在执行RCPT TO 命令时提供的地址不是完整的域名则拒绝其SMTP 连接请求。可以用The non_fqdn_reject_code参数指定返回给客户机的错误代码(缺省为504) 。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 29 页 - - - - - - - - - 4.4 posftfix 的性能控制之所以对 postfix 的性能进行控制,是为了在遇到邮件风暴时保证postfix 可以正常运行。通常,我们可以通过对下列postfix 参数的配置来调节 postfix 的性能,这些参数都是通过mail.cf 配置文件进行配置的,修改以后不要忘了运行postfix reload 命令来使配置生效。1 进程数限制可以通过 default_process_limit 参数来控制 postfix 系统同时可以运行的最大进程数目。缺省值是50 个。2 对同一目标主机的并发连接限制当向同一目标主机发出SMTP 连接时, postfix 初始化发出两个 SMTP 连接,如果投递成功则增加并发的SMTP 连接数目,遇到拥塞时又减少并发连接的数目。postfix 中通过以下的参数对同一目标主机的并发连接进行控制:* initial_destination_concurrency:控制对同一目标主