postfi的配置详解

上传人:jin****ng 文档编号:187675781 上传时间:2023-02-16 格式:DOCX 页数:9 大小:25.59KB
返回 下载 相关 举报
postfi的配置详解_第1页
第1页 / 共9页
postfi的配置详解_第2页
第2页 / 共9页
postfi的配置详解_第3页
第3页 / 共9页
点击查看更多>>
资源描述
postfix 的配置详解 (一)(1) postfix 的配置文件结构postfix的配置文件位于/etc/postfix下,安装完postfix以后,我们可以通过Is命令查看postfix的配置文 件:rootmaiI postfix# IsinstaII.cf main.cf master.cf postfix-script这四个文件就是postfix最基本的配置文件,它们的区别在于:mail.cf:是postfix主要的配置文件。Install.cf:包含安装过程中安装程序产生的postfix初始化设置。master.cf:是postfix的master进程的配置文件,该文件中的每一行都是用来配置postfix的组件进程的运 行方式。postfix-script:包装了一些postfix命令,以便我们在linux环境中安全地执行这些postfix命令。(2) postfix 的基本配置postfix大约有100个配置参数,这些参数都可以通过main.cf指定。配置的格式是这样的,用等号连接参 数和参数的值。如:myhost name = mail.mydoma in .com等号的左边是参数的名称,等号的右边是参数的值; 当然,我们也可以在参数的前面加上$来引用该参数, 如:myorigin = $myhostname虽然postfix有100个左右的参数,但是postfix为大多数的参数都设置了缺省值,所以在让postfix正常为 你服务之前,你只需要配置为数不多的几个参数。下面我们一起来看一看这些基本的postfix参数。需要注 意的是,一旦你更改了 main.cf文件的内容,则必须运行postfix reload命令使其生效。1 myoriginmyorigin参数指明发件人所在的域名。如果你的用户的邮件地址为user,则该参数指定后 面的域名。缺省地,postfix使用本地主机名作为myorigin,但是建议你最好使用你的域名,因为这样更具 有可读性。比如:安装 postfix 的主机为 则我们可以这样指定 myorigin:myorigin = 当然我们也可以引用其他参数,如:myorigin = $mydomain2 mydestinationmydestination 参数指定 postfix 接收邮件时收件人的域名,换句话说,也就是你的 postfix 系统要接收什么样的邮件。比如:你的用户的邮件地址为 user, 也就是你的 域为,则你就需要接收所有收件人为user_name的邮件。与myorigin 样,缺 省地,postfix使用本地主机名作为mydestination。如:mydestination = $mydomainmydestination = 3 notify_classes在postfix系统中,必须指定一个postfix系统管理员的别名指向一个用户,只有这样,在用户遇到问题时才有报告的对象,postfix也才能将系统的问题报告给管理员。notify_classes 参数就是用来指定向postfix管理员报告错误时的信息级别。共有以下几种级别:bounee:将不可以投递的邮件的拷贝发送给postfix管理员。出于个人隐私的缘故,该邮件的拷贝不包含 信头。2bounee:将两次不可投递的邮件拷贝发送给postfix管理员。delay:将邮件的投递延迟信息发送给管理员,仅仅包含信头。policy:将由于UCE规则限制而被拒绝的用户请求发送给postfix管理员,包含整个SMTP会话的内容。protocol:将协议的错误信息或用户企图执行不支持的命令的记录发送给postfix管理员。同样包含整个 SMTP会话的内容。resource:将由于资源错误而不可投递的错误信息发送给postfix管理员,比如:队列文件写错误等等。software:将由于软件错误而导致不可投递的错误信息发送给postfix管理员。缺省值为:notify_classes = resource, software4myhostnamemyhostname 参数指定运行 postfix 邮件系统的主机的主机名。缺省地,该值被设定为本地机器名。你也可 以指定该值,需要注意的是,要指定完整的主机名。如:myhostname = 5mydomainmydomain参数指定你的域名,缺省地,postfix将myhostname的第一部分删除而作为mydomain的值。 你也可以自己指定该值,如:mydomain = 6mynetworksmynetworks参数指定你所在的网络的网络地址,postfix系统根据其值来区别用户是远程的还是本地的, 如果是本地网络用户则允许其访问。你可以用标准的A、B、C类网络地址,也可以用CIDR(无类域间路 由)地址来表示,如:192.168.1.0/24192.168.1.0/267inet_interfacesinet_interfaces参数指定postfix系统监听的网络接口。缺省地,postfix监听所有的网络接口。如果你的postfix运行在一个虚拟的ip地址上,则必须指定其监听的地址。如: inet_interfaces = allinet_interface = 192.168.1.1(3) postfix 的 UCE (unsolicited commercial email)控制所谓UCE控制就是指控制postfix接收或转发来自于什么地方的邮件。缺省地,postfix转发符合以下条件的邮件:*来自客户端ip地址符合$mynetworks的邮件。*来自客户端主机名符合$relay_domains及其子域的邮件。*目的地为$relay_domains及其子域的邮件。缺省地,postfix接受符合以下条件的邮件:*目的地为$inet_interfaces的邮件。*目的地为$mydestination的邮件。*目的地为$virtual_maps的邮件。但是我们也可以通过下面的规则来实现更强大的控制功能。1 信头过滤通过 header_checks 参数限制接收邮件的信头的格式,如果符合指定的格式,则拒绝接收该邮件。可以指 定一个或多个查询列表,如果新邮件的信头符合列表中的某一项则拒绝该接收邮件。如:header_checks = regexp:/etc/postfix/header_checksheader_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_domai ns参数的值则拒绝该客户端的连接请求。 可以用maps_rbl_reject_code参数指定返回给客户机的错误代码(缺省为554)。示例:smtpd_client_restrictions = hash:/etc/postfix/access, reject_maps_rblsmtpd_client_restrictions = permit_mynetworks, reject_unknown_client 该参数的缺省值为:smtpd_client_restrictions =也即接收来自任何客户端的SMTP连接。3. 是否请求 HELO 命令可以通过smtpd_helo_required参数指定客户端在SMTP会话的开始是否发送一个HELO命令。你可以指定该参数的值为yes或no。缺省值为:smtpd_helo_required = no4. HELO主机名限制可以通过smtpd_helo_restrictions参数指定客户端在执行HELO命令时发送给postfix的主机名。缺省地,postfix接收客户端发送的任意形式的主机名。可以指定一个或多个参数值, 中间用逗号隔开。限制规则是按照查询的顺序进行的,第一条符合条件的规则被执行。可用的规则有: rejectnvalid_hostname:如果HELO命令所带的主机名参数不符合语法规范则拒绝客户机的连接请求。可 以用invalid_hostnameeject_code参数指定返回给客户机的错误代码(缺省为501)。permit_naked_ip_address: RFC 要求客户端的 HELO 命令包含的 ip 地址放在方括号内,你可以用 permit_naked_ip_address 参数取消该限制。因为有的 mail 客户端不遵守该 RFC 的规定。reject_unknown_hostname:如果客户端执行HELO命令时的主机名在DNS中没有相应的A或MX记录 则拒绝该客户端的连接请求。可以用invalid_hostnameeject_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_hostname5. RFC 821 信头限制RFC 821对邮件的信头做了严格的规定,但是广泛使用的sendmail并不支 持该规定,所以对于该参数我们只能说不,即:strict_rfc821_envelopes = no6. 通过发件人地址进行限制可以用 smtpd_sender_restrictions 参数通过发件人在执行 MAIL FROM 命令时提供的地址进行限制。可以 指定一个或多个参数值,中间用逗号隔开。限制规则是按照查询的顺序进行的,第一条符合条件的规则被执行。可用的规则有: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. 通过收件人地址进行过滤可以用smtpdecipient_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_mapspermit_auth_desti natio n:不管客户端的主机名,只要符合以下的条件,就接受 SMTP 连接请求:*解析后的目标地址符合$relay_domains及其子域* 解析后的目标地址符合$山 et_ in terfaces、$mydesti nation 或 $virtual_mapsreject_u nauth_dest in atio n:不管客户端的主机名,只要符合以下的条件,就拒绝该客户端SMTP连接请求:*解析后的目标地址符合$relay_domains及其子域* 解析后的目标地址符合$山 et_ in terfaces、$mydesti nation 或 $virtual_mapscheck_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)。(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:控制对同一目标主机的初始化并发连接数目。缺省值为2。postfix 的配置详解 (三)* default_destination_concurrency_limit :控制初始化连接后对同一目标主机的最大并发 连接数目。缺省值为 10。* local_destination_concurrency_limit :控制对同一本地收件人的最大同时投递的邮件数 目。缺省值为2,因为对本地同一收件人投递邮件时投递工作只能一个接一个的进行,所以设得 在大也没用。3 对同一封邮件的收件人数目限制通过 default_destination_recipient_limit 参数来控制 postfix 的投递代理(如smtp 进程)可以将同一封邮件发送给多少个收件人。缺省值为 50。也可以用明确指出该投递 代理的参数来覆盖该缺省值。如用 smtpd_recipient_limit 来指定 smtp 投递代理可以将同一 封邮件发送给多少个收件人,该参数的缺省值为 1000。4 推迟投递控制通过 defer_transports 参数,我们可以推迟投递该参数指定的邮件直到 postfix 明确的提出投 递要求。下面我们看一个例子: 有一个小型的局域网,用户都将邮件发送给局域网内部的一台 postfix 邮件服务器,然后通过在该服务器上拨号将邮件发送出去。这时我们可以这样指定该参数的值: defer_transports = smtp该语句表示 postfix 推迟投递所有的邮件直到执行 sendmail -q 命令,这样我们就可以在ppp的脚本中加上sendmail -q,以便在拨号成功后让postfix开始投递邮件。5 关于延迟邮件的再投递控制 可以通过以下的几个参数实现对延迟邮件的再投递控制: queue_run_delay:设置队列管理进行扫描deferred邮件队列的频率,缺省值为1000秒。 maxima l_q ueue_lifetime :设置 postfix 在放弃投递而返回不可投递信息前,被延迟邮件再 deferred 邮件队列中的生存时间。mi nimal_backoff_time :当一封邮件投递失败后,邮件队列将在一段时间内忽视该邮件的存 在,也就是我们前面讲的时间邮票。该参数就是用来设置最小的时间邮票。缺省值为 1000秒。 maximal_backoff_time :设置最大的时间邮票。6 对拒绝服务攻击的处理postfix对每一个SMTP会话都设置一个错误计数器,当该客户端的请求未被接受或违反那UCE规则时,该计数器就增1。随着计数器的增加,postfix将采取不同的措 施来防止恶意用户的拒绝服务攻击。smtpd_error_sleep_time:当该错误计数器的值还很小时,postfix将暂停smtpd_error_sleep_time 指定的时间,然后向客户端报告一个错误。该参数的缺省值为 5 秒。smtpd_soft_error_limit:当错误计数器的值超过该参数指定的值时,postfix在响应该客 户端请求前将沉睡一段时间。缺省值为 10。smtpd_hard_error_limit:当错误计数器的值超过该参数指定的值时,postfix 中断同该客户端的连接。缺省值为 100。(5) postfix 对使用资源的控制通过特定的postfix配置参数,我们可以实现postfix运行时对所消耗的资源的灵活控制。可以 通过以下几个方面来控制postfix消耗的资源:1 限制内存中的对象的大小 要控制对内存资源的消耗,必须控制内存中对象的大小。可以用以下的参数来进行对象大小的控 制:lin e_le ngth_limit :控制读入数据时每一行的大小,如果太长则强行将其分割成更短的行,太 长的行在投递时再重组。缺省值为 2048 bytes。header_size_limit:限制信头长度。缺省值为 102400bytes。message_size_limit:限制 postfix 队列文件的大小。缺省值为 10240000 bytes。 queue_minfree: 邮件队列中可用的空间大小。 缺省为无限制。 建议该值最好时 message_size_limit 的数倍以便于处理大邮件。bounce_size_limit:限制某一邮件不可投递时,返回给发件人不可投递报告的大小,缺省值为 50000 bytes。2 限制内存中对象的数目qmgr_message _r ecipie nt_limit:设置内存中收件人地址的最大数目。缺省值为10000。 qmgr_message_active_limit:设置active邮件队列中邮件数目的最大值。缺省值为1000。 duplicate_filter_limit:设置需要local和cleanup后台程序记住的收件人地址的最大数目。 缺省值为 1000。3限制等待一个外部命令完成的时间command_time_limit:设置local程序等待一个外部命令完成的时间。缺省值为1000秒。4 限制文件锁定的操作时间deliver_lock_attempts :设置锁定一个文件的最大尝试次数。缺省值为 5 次。deliver_lock_delay :设置如果锁定一个文件失败后再次尝试的等待时间,缺省值为1秒。5 控制错误恢复在某些情况下(如高负载),postfix的某个进程可能会死掉,这时master进 程会试图重新启动该进程,我们可以通过下面的参数来控制这种行为: fork_attempts:试图重启动一个进程的最大尝试次数。缺省值为5次。 fork_delay:每两次尝试之间的等待时间,缺省值为1秒。transport_retry_time:队列管理进程每两次尝试连接一个不正常的投递代理进程之间的等待 时间。缺省为 60 秒。(6) postfix 中的地址操作1 将地址改写为标准格式postfix 的配置详解 (四)在 cleanup 进程进行表查询之前,它首选请求 trivial-rewrite 进程将新邮件地址改写成标准的 userfully.qualified.domain 格式。改写的目的是为了减少查询表中的条目, 从而提供查询的效率。trivial-rewrite进程可以实现以下的地址改写:* 将包含源路由信息的地址如 hosta,hostb:usersite 写成 usersite ,因为 postfix 不支持包含 源路由信息的地址格式。*将形如user%domain的地址改写成userdomain的形式。该特性可通过allow_percent_hack参 数进行控制,其缺省值为 yes。*将只包含user的地址改写成user$myorigin。该特性可通过append_at_myorigin参数进行控制, 其缺省值为yes。最好不要改动其缺省值,因为大多数的postfix进程更擅长处理地址形如 user$myorigin 的邮件。* 将形如 userhost 的地址改写成 userhost.$mydomain。该特性可通过 append_dot_mydomain 参数进行控制,其缺省值为 yes。*将形如usersite.的地址改写成usersite,也即除去了最后的点号。2 规范地址映射在cleanup进程将一封新邮件存入incoming邮件队列之前,cleanup进程将根据查询规范表来进行地址改写,从而使之更具可读性。主要是替换形如 Firstname.Lastname 风格 的地址以及清除无效的域。缺省postfix是不进行规范地址改写的,你可以通过指定canonical_maps参 数的值来使其生效。如:canonical_maps = hash:/etc/postfix/canonical 也可以分别为收件人和发件人地址分别指定不同的改写规范,这时参数 sender_canonical_maps 和recipient_canonical_maps 的优先级比 canonical_maps 高。如: sender_canonical_maps = hash:/etc/postfix/sender_canonical recipient_canonical_maps = hash:/etc/postfix/recipient_canonical3 地址欺骗就是将形如 userhost.domain 的地址改写成 userdomain 或 userother.doma,好像是从其他的邮件服务器发出的一样。缺省该功能是被禁止的,可以用参数 masquerade_domains 使其生效,如:masquerade_domains = $mydomain也可以通过 masquerade_exceptions 参数对特定的用户不进行地址欺骗,如: masquerade_exceptions = root注意:地址欺骗只对发件人地址有作用。4 虚拟地址映射在运用了规范地址映射和地址欺骗之后,cleanup将使用虚拟表映射将邮件重定向到所有的收件人。注意,该操作仅仅作用于信头上的收件人地址。这样,我们就可以将发送到虚拟 域的邮件投递到真实用户的邮箱。系统的别名数据库同样可以起到相同的作用。缺省该功能是被禁止的, 可以用参数virtual_maps使其生效,如:virtual_maps = hash:/etc/postfix/virtual5 Relocated 数据库查询Relocated 表格提供如何将邮件发送给在系统中没有帐号的用户。缺省该功能是被禁止的,可以用参数 relocated_maps 使其生效,如:relocated_maps = hash:/etc/postfix/relocated6 别名数据库查询当邮件在本地投递时,local投递代理进程会在别名数据库(linux下为/etc/aliases)中查询收件人的别名。该操作不会作用于邮件信头中的地址。可以用alias_maps指定使 用的别名数据库。缺省地,该功能是有效的,如:alias_maps = hash:/etc/aliases可以通过alias_database参数控制别名数据库的路径,如:alias_database = hash:/etc/aliases
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑环境 > 机械电气


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!