一、postfix背景及优点
postfix的为了替代传统的sendmail,基于GPL协议开发的一款MTA(邮件传输代理)软件。相较于sendmail,postfix在速度,性能,安全性和稳定性上都更胜一筹。
- postfix是免费开源的:postfix想要作用的范围是广大的Internet用户。试图影响大多数的Internet上的电子邮件系统,因此它是免费的。
- 更快:postfix在性能上大约比sendmail快三倍。一部执行postfix的台式PC每天能够收发上百万封邮件。
- 兼容性好:postfix是sendmail兼容的,从而使sendmail用户能够非常方便地迁移到postfix。Postfix支持/var[/spool]/mail、/etc/aliases、 NIS、和 ~/.forward 文件。
- 更健壮:postfix被设计成在重负荷之下仍然能够正常工作。当系统执行超出了可用的内存或磁盘空间时,postfix会自己主动降低执行进程的数目。当处理的邮件数目增长时,postfix执行的进程不会跟着添加。
- 更灵活:postfix是由超过一打的小程序组成的,每一个程序完毕特定的功能。你能够通过配置文件设置每一个程序的执行參数。
- 安全性: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