下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

E-mail服务器的架设配置

作者:课课家教育     来源: http://www.kokojia.com点击数:1977发布时间: 2017-04-06 10:00:32

标签: 服务器网络应用配置网络工程师

  Postfix 是一种电子邮件服务器,它是由任职于IBM华生研究中心(T.J. Watson Research Center)的荷兰籍研究员Wietse Venema为了改良sendmail邮件服务器而产生的。最早在1990年代晚期出现,是一个开放源代码的软件。这部分文档主要讲解postfix最小化配置,极其配置文件中各个语句的作用。同时也尽作者所能,以通俗易懂的方式,讲解了postfix各个进程之间运作的原理。以便对配置文件的深入理解。

E-mail服务器的架设配置_服务器_网络应用配置_网络工程师_课课家
  Postfix收邮件过程
  Postfix通过smtpd/qmqpd,Postfix(由Postfix生成的邮件)收取邮件,并将邮件传递给cleanup处理。cleanup进程对收到的邮件做一些处理,必要时调用trivial-rewrite格式化不合格发件人地址后。将邮件存放到incoming队列中。
  通过sendmail调用接受的邮件先将邮件发送给postdrop,postdrop将邮件放置到maildrop队列中。在Postfix服务没启动的情况下,maildrop队列作为缓存存放待发送的邮件。一旦Postfix服务启动,有master创建的pickup进程就会检测maildrop队列中是否有邮件。此时maildrop中暂存的邮件就被pickup传递给cleanup处理了。下图为Postfix收取邮件流程简图(紫框 代表进程,蓝框 代表队列):

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投递邮件过程
  qmgr进程从incoming队列中读取邮件,将邮件传递到active队列。为了防止active队列因为邮件数量过多造成内存溢出,设置用来暂存未处理邮件的deferred队列。qmgr每次从active队列取一封邮件多一些处理,必要时调用trivial-rewrite格式化不合格的收件人地址后,根据收件人域的不同将邮件投递给smtp,lmtp,local,virtual,pipe进程按照如下方法处理:
  smtp处理外部域的邮件,即外发邮件。
  lmtp常见于分布式电子邮件系统。用于处理去往代理目的端的邮件,即转发邮件。
  local处理基于linux/Unix账户和包含邮件别名的邮件以及其他邮件,即到往本地账户,和用户名在/etc/aliases文件中的邮件。local可将邮件投递给第三方MDA,所以其他邮件由第三方MDA处理。
  virtual可简单处理基于virtual domains和virtual mailbox的邮件。
  pipe管道将邮件传递给第三方MDA处理。
  Postfix投递邮件流程简图如下:

Postfix投递邮件流程简图
  postfix对无法投递的邮件的处理
  当一封邮件第一次不能成功投递时,postfix会给该邮件贴上一个将来的时间邮票。邮件队列管理程序会忽略贴有将来时间邮票的邮件。时间邮票到期时,postfix会尝试再对该邮件进行一次投递,如果这次投递再次失败,postfix就给该邮件贴上一个两倍于上次时[间邮票的时间邮票,等时间邮票到期时再次进行投递,依此类推。当然,经过一定次数的尝试之后,postfix会放弃]对该邮件的投递,返回一个错误信息给该邮件的发件人。
  postfix对不可到达的目的地邮件的处理
  postfix会在内存中保存一个有长度限制的当前不可到达的地址列表。这样就避免了对那些目的地为当前不可到达地址的邮件的投递尝试。从而大大提高了系统的性能。
  基础配置
  软件安装,需要安装E-mail Server 软件包组,在安装之前可以查看这个软件包组包含那些软件。
  [root@mail2 ~]# yum groupinfo 'E-mail Server'
  Loaded plugins: fastestmirror, presto, security
  Setting up Group Process
  Group: E-mail server
  Description: Allows the system to act as a SMTP and/or IMAP e-mail server. //组描述
  Default Packages: //默认安装的软件包
  dovecot //用来实现POP3/IMAP4服务
  postfix //用来实现SMTP服务
  spamassassin //用来检测垃圾邮件
  Optional Packages: //可选安装的软件
  clamav //反病毒
  clamav-data
  clamav-milter
  cyrus-imapd //另外一个POP3/IMAP4实现
  dovecot-MySQL //Dovecot的mysql扩展
  dovecot-pgsql
  dovecot-pigeonhole
  mailman //提供邮件列表功能
  opendkim
  sendmail
  sendmail-cf
  spambayes
  sqlgrey
  uw-imap
  安装软件包
  yum groupinstall “E-mail Server”
  切换MTA
  将系统默认的MTA从Sendmail切换到Postfix。
  [root@mail2 ~]# alternatives --config mta
  There are 2 programs which provide 'mta'.
  //*号表示默认值,+号表示生效
  Selection command
  -----------------------------------------------
  * +1 /usr/sbin/sendmail.sendmail
  + 2 /usr/sbin/sendmail.postfix
  Enter to keep the current selection[+], or type selection number: <b>2</b>
  [root@mail2 ~]# chkconfig sendmail off
  [root@mail2 ~]# chkconfig postfix on
  [root@mail2 ~]# service sendmail stop
  Shutting down sm-client: [ OK ]
  Shutting down sendmail: [ OK ]
  [root@mail2 ~]# service postfix start
  Starting postfix: [ OK ]
  设置Linux防火墙设置
  需要允许TCP 协议25 110 143 463 993 995 端口的入连接。编辑/etc/sysconfig/iptables 文件,根据实际情况,添加如下两行中的一行到包含“–dport 22 -j accept ”行的后面:
  -A INPUT -m state --state NEW -m multiport -p tcp --dport 25,110,143,465,993,995 -j ACCEPT
  #CentOS风格
  -A RH-Firewall-1-INPUT -m state --state NEW -m multiport -p tcp --dport 25,110,143,465,995,993 -j ACCEPT
  #Redhat风格
  service iptables restart
  Linux SElinux设置
  建议设置SElinux为Permissive 模式。但是不要在disabled。笔者还没有找到简单的解决Postfix和SElinux冲突方法。很有可能要手动编写SElinux模块。没时间和精力再捯饬SElinux了。设置为Permissive模式,留着以后解决。这点和政府对待钓鱼岛问题采取的策略一样。
  [root@mail2 ~]# getenforce
  Enforcing
  [root@mail2 ~]# setenforce 0
  [root@mail2 ~]# getenforce
  Permissive
  编辑文件/etc/selinux/config做如下修改,使配置重启后仍旧生效。
  # This file controls the state of SELinux on the system.
  # SELINUX= can take one of these three values:
  # enforcing - SELinux security policy is enforced.
  # permissive - SELinux prints warnings instead of enforcing.
  # disabled - No SELinux policy is loaded.
  SELINUX=permissive //修改部分
  # SELINUXTYPE= can take one of these two values:
  # targeted - Targeted processes are protected,
  # mls - Multi Level Security protection.
  SELINUXTYPE=targeted
  Postfix配置文件
  postfix主要有master.cf main.cf两个配置文件。main.cf文件开启或关闭Postfix功能,指明Postfix要操作的文件的路径,及其他信息。master.cf设定由master创建的子进程所使用的参数,创建的数量,子进程类型等。Postfix主进程为master;master根据master.cf配置创建子进程来完成邮件的收发。
  Postfix使用syslogd记录日志。其日志内容输出到/var/log/maillog
  main.cf必备配置
  myhostname = mail2.xiyang-liu.com
  #我的主机名
  mydomain = mail2.xiyang-liu.com
  #我的域
  myorigin = $mydomain
  #我发送出去的邮件用户名以什么结尾
  inet_interfaces = $myhostname
  #监听哪个ip地址,必要时修改/etc/hosts
  inet_protocols = all
  #只支持IPv4协议,还是IPv4 IPv6都支持
  mydestination = $myhostname,localhost
  #我收取用户名以什么结尾的邮件
  mynetworks_style = host
  #我信任的网络类型
  home_mailbox = Maildir/
  #“邮筒”类型。Unix style ,Q-mail style
  smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
  #smtpd 旗标
  验证配置
  首先,验证DNS配置是否生效。启动Postfix服务后,向163发送邮件。然后直接回复看能否收到。
  修改inet_interfaces 参数的值,使其分别取all, localhost,$myhostname。使用netstat -tNLP查看25端口分别在哪个地址监听?
  在inet_interfaces取值$myhostname的时候,很有可能会遇到Postfix服务起不来的情况,只需要在/etc/hosts文件中添加mail2.xiyang-liu.com 到 10.1.100.107的映射即可解决问题。添加到公网地址的映射行不行?你知道为什么吗?
  阅读配置文件确定mynetworks_style和mynetworks的关系,实际应用中改用哪个参数?
  mynetwork取值127.0.0.0/8时,分别在服务器本地(mail2.xiyang-liu.com)和你的电脑(随便一个客户端)通过telnet登录到mail2.xiyang-liu.com的25端口按照上面讲的方法发送一封邮件,看结果有何不同?你认为为什么?
  修改smtpd_banner内容,telnet 25端口查看有什么变化?你知道该如何伪装自己SMTP程序吗?你看,一不小心也涉及到安全范畴了不是。
  查看/var/log/maillog日志记录,看cleanup,qmgr等进程是怎么处理邮件的?对照上面的收信和投递流程理解。
  以上就是小编为大家准备的精彩内容了,如果有哪些知识点没有讲到的,欢迎各位朋友进行补充,虚心请教。若想学习更多知识,还等什么,小编在课课家等着你!

赞(15)
踩(0)
分享到:
上一篇:ARP技术报告
华为认证网络工程师 HCIE直播课视频教程