一、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 - SSLHOW​