Postfix 是一种电子邮件服务器,它是由任职于IBM华生研究中心(T.J. Watson Research Center)的荷兰籍研究员Wietse Venema为了改良sendmail邮件服务器而产生的。最早在1990年代晚期出现,是一个开放源代码的软件。
sendmail由于出现的比较早,但是各方面的问题也比较突出,postfix就是为了替代sendmail的缺点而出现的,postfix 邮件服务器的优点很明显:
开源的,要知道开源的即是免费的
速度更快,比sendmail×××倍
兼容性好,与sendmail兼容,两者互相迁移很方便。
更能干,在重负荷之下仍然能正常工作,当超负荷之后,他会自动调整
更灵活,不同于sendmail一体化的设计,postfix使用模块化的设计,各个模块专注于自己的工作。
安全性,具有多层的防御结构。
postfix的模块有哪些呢?
smtpd 用于响应用户的请求
cleanup 用于检测语法
pickup 用于分检邮件
smtp 类似于客户端,传输邮件
qmgr 队列管理器 用于不同邮件状态的管理。
postfix由这些还有其他的一些模块来进行服务,各个模块自己完成自己的任务,他们由一个master进程统一调度
postfix的四种邮件队列?
maildrop 本地邮件存放处
incoming 放置正在到达或者队列管理进程尚未发现的邮件
active 放置已经打开了正准备投递的邮件,当然它是由长度限制的。
deferred 放置不能被投递的邮件
队列管理进程仅仅在内存中保留active队列,并且限制其长度。
postfix 对邮件风暴的处理
当有新的邮件到达的时候,postfix进行初始化,此时postfix同时只接受两个并发连接请求,当邮件投递成功后,可以同时接收的并发连接就会缓慢地增长,一直到可配置的值
当系统资源消耗已经达到不能承受的负载,就会停止并发连接数量的增长,或者postfix在处理邮件过程中遇到问题,数量也会减少。
当接收到的新邮件的数量,超过它的投递能力时,postfix会停止投递deferred队列中的邮件,去处理新接收到的邮件,因为处理新邮件的延迟小于处理defferred队列中的邮件。
postfix 对无法投递的邮件的处理
当第一次发送失败,postfix会给该邮件,贴上一个将来的时间有票,在达到这个时间之前,不会再处理该类邮件,到到达这个时间时,进行投递,再次失败,将再次贴上一个双倍与第一次的邮件将来时间的邮票,以此类推,进行多次尝试之后,放弃该邮件,回复用户错误信息
postfix对于目标不可达的目的邮件的处理
postfix内存之中保存了一个有长度限制的不可达的地址列表,避免想这些地方进行邮件投递
postfix的安全性
动态分配内存,放置系统缓冲区溢出
把大邮件分割成几块处理,投递时在进行重组
postfix的各个进程互相不进行控制,只接受master主进程的控制
postfix 的队列文件有其特殊格式,只能被postfix本身识别
postfix邮件服务对于邮件的处理过程:
接收的过程: 当接受新邮件时,新的邮件首选在incoming队列停留,并进行处理
对于来自与本地的邮件:local进程负责接收,并放置邮件于maildrop队列中,然后pickup进程对其进行完整性检测,maildrop目录的权限必须进行设置 避免用户删除其他用户的邮件
对于网络的邮件:smtpd 进程负责接收邮件,并且进行安全性检测
postfix进程会自己产生邮件,用于将邮件的不可投递信息返回给发件人,这些工作由bounce后台程序产生
postfix 产生邮件,提示postfix管理员 postfix运行过程中出现问题
cleanup进程,对邮件进行处理,添加信头中丢失的Form信息。也就是将地址重写为标准的user@’域名‘ 的格式,从信头中抽取收件人的地址,投入到incoming队列中,请求处理该信件,请求地址重写进程将收件人地址转换为标准的user@‘域名’的格式
邮件的投递过程
上面的部分结束之后,邮件已经到达incoming的队列了,接下来进行邮件的投递。
邮件到达邮件队列管理进程,他将办含有队列文件路径信息,发件人地址,收件人地址的投递请求发送给投递代理。
与此同时,邮件队列管理进程维护者deferred,active队列,不同状态的邮件放置于的队列
针对于发送成功与失败,队列管理进程与rewrite,与bounce后台程序练习,成功的给rewrite进行地址解析,失败的给bounce返回信息给用户
检查成功的邮件送给投递代理进程,local和smtpd
实验:linux中实现postfix邮件服务器
实验环境:linux 虚拟机5.4
1.安装postfix。
[root@mailServer]# rpm -ivh postfix-2.3.3-2.1.el5_2.i386.rpm
[root@mailServer]# rpm -ivh system-switch-mail-0.5.25-12.noarch.rpm
//用于转换邮件服务器的工具,系统默认sendmail作为邮件服务器,转换为postfix
2.选择postfixmail
模块管理文件 /etc/postfix/master.cf
主配置文档 /etc/postfix/main.cf
Postconf -d 查看默认的参数值
Postconf -n 查看新的参数值
Postconf -e 编辑
编辑main.cf文件
69myhostname = mail.163.com //本地域名
77mydomain = 163.com //自己的域名
93myorigin = $mydomain
//实现地址伪装,将邮件的真实来源改正为myorigin所指的域名中。
110inet_interfaces = localhost //只接受自己的用户
107inet_interfaces = all //监听所有
156mydestination = m y h o s t n a m e , l o c a l h o s t . myhostname, localhost. myhostname,localhost.mydomain, localhost, $mydomain
//哪些是本地信件,允许本地作用域发送邮件。
观察日志信息,如果咩有打开main.cf 156行的注释
邮件状态进入到了 deferred,发送失败
配置本地用户可以发送邮件。则发送成功!
Postfix mail的中继!!
255mynetworks = 168.100.189.0/28, 127.0.0.0/8
在所标记网段中 的 计算机发来的邮件允许中继。
Postfix mail的中安全认证!
broken_sasl_auth_clients= yes
smtpd_sasl_auth_enable= yes
smtpd_sasl_security_options= noanonymous //不允许匿名账号发送
#smtpd_sasl_application_name= smtpd //smtpd
#smtpd_client_restrictions= permit_sasl_authenticated,reject//经过验证可以连接,没经过
验证拒绝
#smtpd_client_restrictions= permit_sasl_authenticated //限制用户连接验证不验证都连
接
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
将他们写入postfix的主配置文件中
[root@mail~]# service saslauthd restart
[root@mail~]# vim /usr/lib/sasl2/smtpd.conf
当然此时如果使用不存在的账号,来测试是否能通讯的话,还是能够发送邮件,那是因为身份验证不是强制性的。
673smtpd_client_restrictions = permit_sasl_authenticated,reject //更改配置文件
还是需要 auth login 进行验证账号密码 均为base64 编码
拓展:
SquirrelMail是一套基于标准的,采用PHP4开发Webmail 邮件系统。它内置纯PHP支持的IMAP和SMTP协议,所有页面都遵循HTML4.0标准(没有使用JavaScript支持),以便最大限度兼容更多浏览器上。它对系统要求非常低,并且安装和配置非常容易。SquirrelMail具备一个客户端邮件程序所应拥有的一切功能,包括支持增强型的MIME、地址薄、文件夹操作等等功能。Outlook皮肤主题。
[root@mail~]# yum install squirrelmail
[root@mail~]# cd /var/www/html/
[root@mailhtml]# ln -s /usr/share/squirrelmail mail
[root@mailsqurrmail]# cd /var/www/html/squrrmail
[root@mailsqurrmail]# ./conf.pl
与性能有关的配置
服务器设置
全局配置
语言选项
登陆测试
当登陆之后,提示错误,错误信息是没有imap服务器,也就是没有邮件接收服务器,而linux中的邮件接收服务器是dovecot,所以安装dovecot,并启动dovecot 服务之后
673#smtpd_client_restrictions = permit_sasl_authenticated,reject
编辑配置文件,注释行
邮件可以发送出去了