Postfix:MTA(邮件传输代理)软件

2年前 (2022) 程序员胖胖胖虎阿
287 0 0

一、postfix背景及优点

postfix的为了替代传统的sendmail,基于GPL协议开发的一款MTA(邮件传输代理)软件。相较于sendmail,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程序能够执行在较低的权限之下,不能够通过网络訪问安全性相关的本地投递程序等等。

二、postfix的安装使用

redhat6.0以上版本应该是默认集成了postfix服务的,假如没有安装的话,可以手动安装。

rpm -qa | grep postifx #查看是否安装

yum install postfix # 安装

Postfix邮件的log位置是:/var/log/maillog

发送成功的话,会返回250和OK,也可以去自己的邮件客户端查收。

三、配置

vi /etc/postfix/main.cf

myhostname = sample.test.com  ← 设置系统的主机名

mydomain = test.com  ← 设置域名(我们将让此处设置将成为E-mail地址“@”后面的部分)

myorigin = $mydomain  ← 将发信地址“@”后面的部分设置为域名(非系统主机名)

inet_interfaces = all  ← 接受来自所有网络的请求

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain  ← 指定发给本地邮件的域名

home_mailbox = Maildir/  ← 指定用户邮箱目录

四、postfix组件结构

1、 postfix中队列状态共有五种,分别如下:

收件:incoming

活动:active

延迟:deferred

故障:corrupt

保留:hold

2、主要有以下组件:

master组件:主导邮件处理流程、其他组件的总管。配置文件:main.cf和master.cf。

qmgr组件:队列管理器。各个postfix组件之间的合作依靠队列交换邮件。

sendmail组件:服务器本机发送邮件。

postdrop组件:将邮件存入postfix队列目录下的maildrop/子目录。

pickup组件:监视maildrop/子目录,读出新邮件,交给cleanup组件。

cleanup组件:补足遗漏的标头字段。

trivial-rewrite组件:地址处理,改成标准格式。决定路由信息,包括传输方法、下一站以及收件人地址。

smtpd组件:接收来自网络的邮件,交给cleanup组件处理。

defer组件:邮件被延时时产生通知函。

bounce组件:邮件无法送达目的地时产生通知函。

dns组件:查找符合条件的邮件服务器。

四、postfix起停及查看操作

 service postfix start

service postfix status

service postfix stop

五、配置文件详解

   postfix的配置文件是main.cf

别名数据库(postalias/newaliases 命令生成)

alias_database = hash:/etc/postfix/aliases

别名表,列出local mda 所使用的别名数据库

alias_maps = hash:/etc/postfix/aliases

退回的邮件重新投递的最长时间

bounce_queue_lifetime = 1d

支持非标准验证规定的行为

broken_sasl_auth_clients = yes

postfix命令目录

command_directory = /usr/sbin

postfix配置文档目录

config_directory = /etc/postfix

配置内容过滤 amavis

content_filter = smtp-amavis:[127.0.0.1]:10024

postfix 的各个服务器程序目录

daemon_directory = /usr/libexec/postfix

data_directory = /var/lib/postfix

debug_peer_level = 2

重复邮件

enable_original_recipient = no

html_directory = /usr/share/doc/postfix-2.6.2-documentation/html

mail_name = Postfix – welcome mail.xmall.com

以此参数指定的系统账户,作为队列文件的拥有者以及postfix daemon 进程的运行身份

mail_owner = postfix

单封邮件大小限制,单位字节

mailbox_size_limit = 150242880

mailq_path = /usr/bin/mailq.postfi

manpage 目录

manpage_directory = /usr/share/man

postfix在放弃投递而返回不可投递信息前,被延迟邮件再deferred邮件队列中的生存时间

maximal_queue_lifetime = 1d

限制单封邮件的最大长度,单位字节

message_size_limit = 150242880

设置”本地网域”

mydestination = $mynetworks $myhostname

完整主机名称(主机名称+网域名称)

myhostname = mail.xmall.com

邮件系统的网域名称

mydomain = xmall.com

附加到只含人名部分的,不完整邮件地址的网域名称

myorigin

列出可通过本邮件系统寄出邮件的网络地址或ip地址

mynetworks = 127.0.0.1

兼容sendmail,用于重建别名数据库的newaliases程序路径

newaliases_path = /usr/bin/newaliases.postfix

postfix 队列的主目录

queue_directory = /var/spool/postfix

readme_directory = /usr/share/doc/postfix-2.6.2-documentation/readme

receive_override_options = no_address_mappings

样本配置文件目录

sample_directory = /etc/postfix

供脚本或命令行用来寄送邮件

sendmail_path = /usr/sbin/sendmail.postfix

用来提交邮件或管理队列的组标识符

setgid_group = postdrop

show_user_unknown_table_name = no

smtp 问候信息

smtpd_banner = $myhostname ESMTP $mail_name

当客户端引发错误时,postfix 的初始等待时间

smtpd_error_sleep_time = 0s

收件人限制条件

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname, check_policy_service inet:127.0.0.1:10030

启动sasl 验证

smtpd_sasl_auth_enable = yes

smtpd_sasl_local_domain = $myhostname

指定密码验证机制(除noanonymous) 所有可用机制

smtpd_sasl_security_options = noanonymous

设定寄件地址与sasl登录身份的对应关系,只能使用本域地址避免使用其他寄件地址!

smtpd_sender_login_maps = mysql:/etc/postfix/mysql_virtual_sender_maps.cf, mysql:/etc/postfix/mysql_virtual_alias_maps.cf

发件人限制条件

smtpd_sender_restrictions = permit_mynetworks, reject_sender_login_mismatch, reject_authenticated_sender_login_mismatch, reject_unauthenticated_sender_login_mismatch

unknown_local_recipient_reject_code = 550

指向含有“虚拟别名地址”与“实际收件地址”对应关系的查询表

virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf

虚拟网域查询表

virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf

虚拟邮箱查询表

virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf

用于投递邮件到虚拟邮箱地址的默认传输服务(虚拟mda)

六、收发邮件处理过程

整个处理流程分为三个阶段:接收邮件、将邮件排入队列、递送邮件。每个阶段由一组独立的Postfix组件负责。当一封邮件被收下并排入队列之后,队列管理器(Queue Manager)会启动适当的MDA,将邮件送到终点。

七、postfix命令行工具

postalias:创建或查询别名数据库。

postcat:显示出队列文件的内容,让管理员可观察滞留在队列里的邮件内容。

postconf:显示或改变postfix参数。

postdrop:将邮件放回到maildrop目录,由postfix重新进行投递操作。

postfix:启动或停止postfix系统,或重新读取配置文件。

postkick:对特定postfix服务发出请求。

postlock:锁定特定文件,确保能够独占访问。

postlog:将特定的信息记录到系统日志文件中。

postmap:创建查询表的DB数据库或查询查询表内容。

postqueue:让一般的用户能够有限度地访问postfix队列。

postsuper:供管理员访问postfix队列。
参考链接:
3 Ways to Remove Mails from Postfix queues with Postsuper

版权声明:程序员胖胖胖虎阿 发表于 2022年11月1日 下午11:00。
转载请注明:Postfix:MTA(邮件传输代理)软件 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...