Postfix邮件系统

Postfix邮件系统(一)
 
1. 电子邮件系统基础
在日常工作和生活中,发送和收取电子邮件已成为人们相互沟通的常见方式。对于国内的许多用户来说,大多会注册使用新浪、网易、Hotmail、Gmail等Web界面的电子邮箱,这些邮箱都是IT服务商提供的免费邮箱服务,在邮箱空间,功能等方面会有所限制。
现在更多的企业和机构要求员工使用公司自有的电子邮件系统,通过客户端软件直接与邮件服务器进行通信,以获得更好的通信效率,以及安全、功能方面的保障。
 
1.1 邮件系统角色、邮件协议
Internet网络中的电子邮件系统并不是一个孤立的体系。除了需要DNS服务器提供邮件域的解析,通过Web服务器提供邮箱操作界面以外,邮件收取、传递等功能也是由不同的组件来提供的。
 
1.邮件系统的角色
在实现电子邮件收发的完整系统中,根据各组件所处的位置,承担的功能不同,可以分为不同的角色。
➣   MTA(Mail Transfer Agent,邮件传输代理):一般被称为邮件服务器软件。MTA软件负责接收客户端软件发送的邮件,并将邮件传输给其他的MTA程序,是电子邮件系统中的核心部分。Exchange和Sendmail,Postfix等服务器软件都属于MTA。
➣   MUA(Mail User Agent,邮件用户代理): 一般被称为邮件客户端软件。MUA软件的功能是为用户提供发送、接收和管理电子邮件的界面。在Windows平台中使用的MUA软件包括Outlook  Express,Outlook、Foxmail等,在Linux平台中常用的MUA软件包括Thunderbird,Kmail,Evolution等。
➣   MDA(Mail Delivery Agent邮件分发代理):MDA软件负责在服务器中将邮件分发到用户的邮箱目录。MDA软件相对比较特殊,它并不直接面向邮件用户,而是在后台默默地工作。有时候MDA的功能可以直接集成在MTA软件中,因此经常被忽略。
通过邮件系统中的角色划分可以看出电子邮件系统与其他C/S(Client/Server,客户端服务器)模式的网络应用一样,包括独立的客户端和服务器端软件。
 
2.邮件通信协议
在电子邮件通信过程中邮件传递,收取是最基本的两个功能,应用于不同角色的软件之间。其中最常用的二种邮件协议如下所述。
➣   SMTP(Simple Mail Transfer Protocol,简单邮件传输协议):主要用于发送和传输邮件。MUA使用SMTP协议将邮件发送到MTA服务器中
,而MTA将邮件传输给其他MTA服务器时同样也使用SMTP协议。SMTP协议使用的TCP 25号端口支持发信认证的邮件服务器,将会采用扩展的SMTP协议(Extended SMTP)。
➣   POP(Post Office Protocol,邮局协议):主要用于从邮件服务器中收取邮件。目前POP协议的最新版本是POP3。大多数MUA 软件都支持使用POP3协议,因此该协议应用最为广泛POP3协议使用TCP 110端口(不支持在线,要先下载到本地)
➣   IMAP(Internet Message Access Protocol,互联网消息访问协议)同样用于收取邮件。目前IMAP协议的最新版本是IMAP4。与POP3相比较IMAP4协议提供灵活和强大的邮件收取,邮件管理功能。IMAP4协议使用的TCP 143端口(支持先看再存)
只有电子邮件客户端和服务器同时支持SMTP和POP/IMAP协议才能够实现完整的邮件发送和收取功能。
 
1.2 常见的邮件服务器软件
当用户在享受电子邮件带来的便利的时候,往往看到的只是邮件系统的”品牌“,而忽视了邮件系统的”幕后英雄“——邮件服务器软件。例如使用163邮箱的用户可能并没有想过,网易公司的邮件服务器是使用什么软件搭建的。然而对于企业邮件系统的管理员来说,则必须熟练掌握邮件服务器软件的配置和管理。
邮件服务器软件种类不是很多,常见的主要包括以下几种。
 
1.商业邮件系统
➣   Exchange:Windows系统中最著名的邮件服务器软件,也是微软公司的重量级产品,可以与活动目录等应用很好地结合在一起。当使用Windows服务器平台构建电子邮件系统时Excharge自然就成为首选。
➣   Notes/Domino由IBM公司出品的商业电子邮件和办公协作软件产品,其功能丰富,强大集成性较好且提供跨系统平台的支持,给用户提供了广泛的选择。多应用于一些高校政府部门,银行等较大型的企业单位。
 
2. 开源邮件系统
➣   Sendmail:对于运行在UNIX/Linux环境中的邮件服务器,Sendmail无疑是资格最老的,目前仍然有许多企业的电子邮件系统是使用Sendmail进行搭建的。Sendmail行的稳定性较好,但安全性欠佳。
➣   Qmail:另一款运行在UNIX/Linux环境中的邮件服务器,比Sendmail具有更好的执行效率且配置,管理更加方便,很多商用电子邮件系统都采用Qmail作为服务器。
➣   Postfix:同样是运行在UNIX/Linux环境中的邮件服务器,Postfix由Wietse负责开发,其目的是为Sendmail提供一个更好的替代产品。Postfix在投递效率稳定性,服务性能及安全性方面都有相当出色的表现。
 
2. Postfix邮件服务基础
Postfix邮件服务器采用了模块化的设计,由许多个不同的程序集合而成,分别用于实现不同的功能。Postfix在启动时首先启动名为master的进程,由master进程主导邮件的处理工作,并在需要时自动加载其他程序以协同工作。
本节主要介绍Postfix的编译安装过程,服务控制以及主要目录和配置文件。
 
2.1 编译安装及服务控制
本节将以源码包postfix-2.8.2.tar.gz为例,讲解Postfix服务的编译安装过程务、控制方法。从其官方网站http://www.postfix.org中可以获取最新的源码包。
 
1.准备工作
为了避免发生端口冲突、程序冲突等现象,应将系统自带的sendmail服务停用,并将默认启动状态设为关闭。由于Postfix系统兼容并沿用了Sendmail的部分设置,因此建议保留Sendmail软件包,而不是直接卸载。
[root@mail ~]# /etc/init.d/sendmail stop
[root@mail ~]# chkconfig --level 2345 sendmail off
 
除此以外,因在下一章中需要Postfix支持SASL认证(通过软件包cyrus-sasl) ,所以应确认已安装好相关软件包。
[root@mail ~]# rpm -qa | grep cyrus
cyrus-sasl-plain-2.1.23-13.el6_3.1.x86_64
cyrus-sasl-lib-2.1.23-13.el6_3.1.x86_64
cyrus-sasl-md5-2.1.23-13.el6_3.1.x86_64
cyrus-sasl-gssapi-2.1.23-13.el6_3.1.x86_64
cyrus-sasl-2.1.23-13.el6_3.1.x86_64
 
2.源码编译及安装
1)创建运行组,用户
为了加强邮件服务的权限控制,需要创建专门的运行组账号postfix和postdrop,以及用户账号postfix。运行用户不需要直接登录到系统也无需创建宿主文件夹。
[root@mail ~]# groupadd -g 1200 postdrop
[root@mail ~]# groupadd -g 1000 postfix
[root@mail ~]# useradd -M -u 1000 -g postfix -G postdrop -s /sbin/nologin postfix
 
2)解包
将下载的postfix源码包解压,释放到/usr/src/目录下,并切换到展开后的源码目录。
[root@mail home]# tar zxf postfix-2.8.2.tar.gz -C /usr/src/
[root@mail home]# cd /usr/src/postfix-2.8.2/
 
3)配置
Postfix软件包的配置步骤使用“make makefiles“进行,具体配置选项可以参考源码目录中README_FILES/文件夹下的说明文件。例如,若要使Postfix支持发信认证可参考文件SASL_README中的相关信息。
[root@mail postfix-2.8.2]# yum -y install gcc-c++
[root@mail postfix-2.8.2]# yum -y install db*-devel
[root@mail postfix-2.8.2]# yum -y install cyrus-sasl-*
[root@mail postfix-2.8.2]# make makefiles 'CCARGS=-DUSE_SASL_AUTH  -DUSE_CYRUS_SASL -I/usr/include/sasl'  'AUXLIBS=-L/usr/lib/sasl2  -lsasl2'
 
其中编译参数CCARGS和AUXLIBS的作用如下。
➣   CCARGS参数:为编译器提供额外的扩展参数。例如,启用SASL认证,并指出cyrus-sasl认证程序的头文件位于/usr/include/sasl/。
➣   AUXLIBS参数:为编译器指出位于标准位置之外的额外函数库。例如,cyrus-sasl 认证程序的库文件位于/usr/lib/sasl2/。
 
4)编译并安装
[root@mail postfix-2.8.2]# make
[root@mail postfix-2.8.2]# make install
执行make install命令以后,最后阶段会需要设置一些安装参数,一般直接“按回车”键接受默认或自动识别的配置即可。完成安装以后,应执行postconf-a命令检查所支持的认证方式,若输出结果中未包含“cyrus“则应检查配置步骤,纠正错误后重新进行配置,编译并安装。
[root@mail postfix-2.8.2]# postconf -a
cyrus           <==支持cyrus认证
dovecot        <==支持dovecot认证
 
3.postfix服务控制
Postfix邮件系统的控制主要通过/usr/sbin/postfix命令进行,结合start、stop、check、reload选项分别实现启动、停止、检查、重载服务的操作。例如,若要启动postfix邮件服务,并验证服务状态,可以执行以下操作。
[root@mail ~]# postfix start
postfix/postfix-script: fatal: the Postfix mail system is already running
[root@mail ~]# postfix status
postfix/postfix-script: the Postfix mail system is running: PID: 2289
 需要注意的是,实际监听服务的进程名并不是postfix,而是master。
[root@mail ~]# netstat -anpt | grep ":25"
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      2289/master         
tcp        0      0 ::1:25                      :::*                        LISTEN      2289/master
 
当重新调整邮件服务配置以后可以通道check选项进行基本的语法检查,检查无误后再通过reload选项来重载服务。
[root@mail ~]# postfix check <==配置无误,则无输出信息
[root@mail ~]# postfix reload
postfix/postfix-scriptrefreshing the Postfix mail system
 
2.2主要目录和配置文件
安装好postfix软件以后,最好对相关的目录和配置文件有所了解,这样将有助于对Postfix服务器的进一步配置和使用。
 
1. 主要目录
➣   /etc/postfix:包括Postfix服务的主配置文件,各类脚本,查询表等。
➣   /usr/libexec/postfix/:包括Postfix服务的各个服务器程序文件。
➣   /var/spool/postfix/:包括Postfix服务的邮件队列相关的子目录,每个队列子目录用于保存不同的邮件。常见的几个子目录及用途如下所述。
◆   incoming (传入) :存放刚接收到的邮件。
◆   active(活动):存放正在投递的邮件。
◆   deferred(推迟):存放以前投递失败的邮件。
◆   hold(约束):存放被阻止发送的邮件。
◆   corrupt(错误):存放不可读或不可分析的邮件。
➣   /usr/sbin/:包括Postfix服务的各种管理工具程序,这些程序文件名以post开头。
主要的几个程序文件及其用途如下所述。
◆   postalias:构造,修改和查询别名表。
◆   postconf:显示和编辑main.cf配置文件。
◆   postfix:启动、停止Postfix邮件服务,要求有root用户权限。
◆   postmap:构造、修改或者查询表文件(记录如别名等映射关系的文件)。
◆   postqueue:查看邮件队列,一般用户也可以使用。
◆   postsuper:管理邮件队列,要求有root用户权限。
 
2. 主要配置文件
       Postfix邮件系统的主要配置文件包括main.cf,master.cf,都位于/ete/postfix/文件夹下。其中,main.cf是Postfix服务的配置文件,设置邮      件服务器时以修改此文件的内容为主;而master.cf是主程序master的配置文件,一般不需要修改。
       在主配置文件main.cf中可以调整的各种配置参数有近千个。大部分的配置参数都被自动设置了默认值,如果在mail.cf文件中没有对应的设置,郡么Postfix服务器将使用默认值来启动及运行。因此只需要修改很少的几个配置参数就可以满足基本邮件服务器的要求了。
       使用postconf工具可以辅助配置过程,不带任何选项时将列出当前Postfix服务器启用的所有配置参数,若添加”-n"选项则只列出使用非默认值的配置参数。
[root@mail ~]# postconf      <==査看当前启用的所有配置
2bounce_notice_recipient = postmaster
access_map_defer_code = 450
access_map_reject_code = 554
address_verify_cache_cleanup_interval = 12h
address_verify_default_transport = $default_transport
...... //省略部分内容
[root@mail ~]# postconf -n      <==只列出使用非默认值的配置
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
html_directory = no
inet_interfaces = localhost
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
sample_directory = /usr/share/doc/postfix-2.6.6/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
unknown_local_recipient_reject_code = 550
 
为了避免配置参数过多带来的干扰,提高易读性,建议对main.cf配置文件进行适当的简化,只保留与默认配置不同的参数。
[root@mail ~]# postconf -n > tmp.file
[root@mail ~]# mv /etc/postfix/main.cf /etc/postfix/main.cf.bak
[root@mail ~]# mv tmp.file /etc/postfix/main.cf
 
3.Postfix的日志文件
Postfix邮件服务的日志文件位于/var/log/maillog,该文件中记录了本机中的邮件进出相关的消息,包括邮件服务的启动,出错,与其他SMTP服务器的会话信息等。在维护邮件服务器的过程中,经常会使用带”-f“选项的tail命令来跟踪日志变化。
[root@mail ~]# tail -f /var/log/maillog 
 
当日志内容较多时,还可以使用egrep命令进行过滤,只查看包含reject、error,fatal等较重要的记录。
[root@mail ~]# egerp '(reject|error|fatal|panic):' /var/log/maillog 
 
3. 邮件服务器的基本构建
从本节开始,将以前面编译安装的Postfix为基础,学习如何构建一个完整的电子邮件系统。在整个案例中,使用Postfix软件提供SMTP发信服务,使用Dovecot软件提供POP3/IMAP收信服务(如图所示),使用邮件客户端软件OutlooL2007测试发信,收信功能。
 
在该电子邮件系统架构中,服务器所使用的相关配置环境如下。
➣   IP 地址 : 192.168.1.10/24. 
➣   邮件域@sky.com。
➣   主机名mail.sky.com。
➣   邮件账号:使用本地系统用户。
➣   域名服务器已预先架好DNS服务器,能够提供sky.com域的解析服务,并为该域添加了到192.168.1.10的MX邮件交换记录。
接下来依次讲解Postfix、Dovecot的配置过程以及邮件客户端Outlook的使用。
 
3.1配置SMTP发信服务
在整个电子邮件系统中,Postfix基于SMTP协议提供邮件传递服务,并负责将邮件分发到用户的邮箱空间。对Postfix服务的配置主要通过修改主配置文件/etc/postfix/main.cf来进行。
在main.cf文件中,以”#“号开头的行表示注释信息,其他行表示有效设置,设置行的格式与为Shell变量赋值的形式非常类似,采用”配置参数=值“的形式,其中等号两边的空格可有可无。当某个配置参数包含多个值时,使用逗号或空格进行分隔。也允许换行进行分隔,但行首至少应有一个空格。
 
1.设置main.cf,并启动服务
[root@mail ~]# vim /etc/postfix/main.cf
...... //省略部分内容
inet_interfaces = 192.168.1.10,127.0.0.1   <==监听服务的IP地址,默认为all 
myhostname = mail.sky.com        <==邮件服务器的主机名
mydomain = sky.com          <==邮件域
myorigin = $mydomain       <==外发邮件时发件人地址中的邮件域
mydestination = $mydomain,$myhostname      <==允许投递到本地的目标邮件域
home_mailbox = Maildir/        <==设置邮件存储位置和格式
[root@mail ~]# postfix reload     <==重载配置内容
postfix/postfix-script: refreshing the Postfix mail system
 
在上述配置中,将mydestination的值设置为"$mydomain,$myhostname"表示将@sky.com和@mail.sky.com域作为本地目标域,允许投递到本地邮箱空间。各用户的邮件将被保存到宿主目录下的Maildir/文件夹中。
邮箱空间用来存放每个用户的电子邮件内容,在Postfix服务器中支持两种最常见的邮箱存储方式:Mailbox,Maildir(当指定的存储位置最后一个字符为”/“时,自动使用Maildir存储方式)。
➣   Mailbox:同一个用户的所有邮件内容存储为单个文件,通常保存在/var/spool/mail/目录下,文件名与用户名相同。Mailbox存储方式比较古老,当邮件数量较多时会降低查询和管理的效率。
➣   Maildir:使用目录结构来存储用户的邮件内客,每一个用户使用一个文件夹,每封邮件都作为一个独立的文件存放。Maildir方式的存取速度和效率要好一些,对于管理邮件内容也更加方便,大多数较新的邮件服务器都采用这种方式。
 
2. 添加邮箱账号
Postfix服务器默认使用本机中的系统用户作为邮件账号,因此使用时只需要添加Linux用户账号即可。测试时,可以添加两个邮件账号xiaoqi和lisi,并为其设置密码。
[root@mail ~]# groupadd mailusers     <==创建邮箱用户组
[root@mail ~]# useradd -g mailusers -s /sbin/nologin xiaoqi    <==新建账户xiaoqi
[root@mail ~]# passwd xiaoqi
[root@mail ~]# useradd -g mailusers -s /sbin/nologin lisi      <==新建账户lisi
[root@mail ~]# passwd lisi
#删除某个邮箱账号:
[root@mail ~]# userdel -r lisi
[root@mail ~]# rm /var/spool/mail/lisi
[root@mail ~]# rm -rf /home/lisi
 
3.SMTP发送邮件测试
将Postfix服务器交付使用之前,最好先在本机测试一下发信功能是否正常。命令行中的测试工作可以通过telnet命令进行。例如,可以连接到邮件服务器的25端口并输入相关的SMTP命令,以邮件账户xiaoqi@sky.com作为发件人,给lisi@sky.com 发送一封测试邮件。
[root@mail ~]# telnet mail.sky.com 25 <==连接到Postfix服务器
Trying 192.168.1.10...
Connected to mail.sky.com.
Escape character is '^]'.
220 mail.sky.com ESMTP Postfix
HELO mail.sky.com <==宣告客户机地址
250 mail.sky.com
MAIL FROM:xiaoqi@sky.com <==告知客户机地址
250 2.1.0 Ok
RCPT TO:lisi@sky.com <==告知发件人地址
250 2.1.5 Ok
DATA <==告知要发送邮件数据
354 End data with <CR><LF>.<CR><LF>
Subject:A Test Mail! <==指定邮件标题
Dear Lisi: <==编写邮件正文
This is a test mail by Xiaoqi.
. <==单独的点号表示正文结束
250 2.0.0 Ok: queued as 9C34440E8B
QUIT <==断开连接并退出
221 2.0.0 Bye
Connection closed by foreign host.
 
邮件发送并投递成功以后,可以到服务器中lisi用户的宿主目录下进行查看,新接收到的邮件保存在Maildir/new/目录中。
[root@mail ~]# ls -lh /home/lisi/Maildir/new/
总用量 4.0K
-rw-------. 1 lisi mailusers 434 5月  21 09:41 1432172479.Vfd00Ia04a3M869051.mail.sky.com
 
[root@mail ~]# cat /home/lisi/Maildir/new/1432172479.Vfd00Ia04a3M869051.mail.sky.com 
Return-Path: <xiaoqi@sky.com>      <==退信地址
X-Original-To: lisi@sky.com      <==来源地址
Delivered-To: lisi@sky.com      <==提交目的地址
Received: from mail.sky.com (www.sky.com [192.168.1.10])
    by mail.sky.com (Postfix) with SMTP id 9C34440E8B       <==经由哪些MTA接受
    for <lisi@sky.com>; Thu, 21 May 2015 09:39:46 +0800 (CST)     
Subject:A Test Mail!      <==邮件主题
Message-Id: <20150521014004.9C34440E8B@mail.sky.com>
Date: Thu, 21 May 2015 09:39:46 +0800 (CST)
From: xiaoqi@sky.com      <==发件人地址
 
Dear Lisi:         <==邮件内容
This is a test mail by Xiaoqi.
 
通过以上测试结果,不难发现已经能够通过Posrfix服务器发送并投递邮件了,但是还只能在服务器本机查看收到的邮件。若要使收件人能够从其他主机查收邮件,还需要进一步安装POP3或IMAP服务器以提供邮件的下载服务。
 
3.2 配置POP/IMAP收信服务
Dovecot是一个安全性较好的POP3/IMAP服务器软件,响应速度快而且扩展性好。Dovecot默认也使用Linux的系统用户并通过PAM(Pluggable Authentication Module,可插拔认证模块)机制进行身份认证,只有通过认证后才允许用户收取邮件。
从官方网站http://www.dovecot.org可以获得Dovecot的最新版本。这里以下载的源码包dovecot-2.0.12.tar.gz为例,介绍Dovecot服务器的编译安装及配置过程。
 
1. 编译安装Dovecot软件包
1)预先创建运行用户
[root@mail ~]# useradd -M -s /sbin/nologin dovecot
[root@mail ~]# useradd -M -s /sbin/nologin dovenull
 
2)源码编译安装
[root@mail ~]# yum -y install dovecot     <==推荐使用yum方式安装dovecot,然后直接修改配置文件并启动服务
 
[root@mail home]# tar zxf dovecot-2.0.12.tar.gz -C /usr/src/
[root@mail home]# cd /usr/src/dovecot-2.0.12/
[root@mail dovecot-2.0.12]# ./configure --sysconfdir=/etc --with-pam       <==指定配置文档的父目录
[root@mail dovecot-2.0.12]# make && make install
 
3)添加为系统服务dovecot 
[root@mail dovecot-2.0.12]# cp -R doc/dovecot-initd.sh /etc/init.d/dovecot
[root@mail dovecot-2.0.12]# chmod +x /etc/init.d/dovecot 
[root@mail dovecot-2.0.12]# chkconfig --add dovecot
 
2.建立配置文件,并启动服务
1)建立配置文档
 
Dovecot的配置文件位于/etc/dovecot/目录下,主配置文件为dovecot.conf,默认并没有此文件,需要参考样例目录重新创建。为了方便以后的扩展配置,建议将各种样例配置文件都复制到/etc/dovecot/目录下。
 
[root@mail dovecot-2.0.12]# cp -R /usr/local/share/doc/dovecot/example-config/* /etc/dovecot/
 
若要支持系统用户认证,还应建立相应的PAM认证文件/etc/pam.d/dovecot,具体内容请参考/etc/pam.d/目录下的其他文件,这里不再详述。
[root@mail dovecot-2.0.12]# vim /etc/pam.d/dovecot
# %PAM-1.0
auth       required     pam_nologin.so
auth       include      system-auth
account    include      system-auth
session    include      system-auth
 
2)调整主配置文件
为了降低初学难度,本章中只使用系统用户认证而并不使用SSL等安全机制。因此需要修改主配置文件dovecot.conf,将”!include conf.d/*.conf"行改为"!include/10-auth.conf",并禁用SSL机制,允许在验证时使用明文的用户名和密码、除此以外,还需要指定邮箱格式及存储位置。
[root@mail dovecot-2.0.12]# vim /etc/dovecot/dovecot.conf 
!include conf.d/*-auth.conf       <==只使用系统用户认证
ssl=no    <==禁用SSL机制
disable_plaintext_auth = no      <==允许明文的验证
mail_location = maildir:~/Maildir     <=设置邮箱格式及位置
 
3)启动dovecot服务,并确认监听状态
Dovecot默认已配置为监听POP3/IMAP邮件协议,因此启动dovecot服务后,可以查看到对TCP端口143,110的监听。
[root@mail ~]# /etc/init.d/dovecot start
Starting Dovecot.
[root@mail ~]# netstat -anpt | grep dovecot
tcp        0      0 0.0.0.0:110                 0.0.0.0:*                   LISTEN      45116/dovecot       
tcp        0      0 0.0.0.0:143                 0.0.0.0:*                   LISTEN      45116/dovecot  
[root@mail ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT     <==开放防火墙的TCP110端口
[root@mail ~]# iptables -A INPUT -p tcp --dport 443 -j ACCEPT     <==开放防火墙的TCP443端口
 
3.POP3接收邮件测试
使用telnet连接到Dovecot邮件服务器的110端口,输入POP3操作命令,以邮箱账户lisi@sky.com的身份查收邮件内容,测试过程如下所述。
[root@mail ~]# telnet mail.sky.com 110
Trying 192.168.1.10...
Connected to mail.sky.com.
Escape character is '^]'.
+OK Dovecot ready.
USER lisi     <==指定用户名
+OK
PASS qwe.123    <==输入登录密码
+OK Logged in.
LIST     <==查看邮箱列表
+OK 1 messages:
1 448
.
RETR 1        <==查收第一份邮件
+OK 448 octets
Return-Path: <xiaoqi@sky.com>
X-Original-To: lisi@sky.com
Delivered-To: lisi@sky.com
Received: from mail.sky.com (mail.sky.com [192.168.1.10])
    by mail.sky.com (Postfix) with SMTP id 03627430D5
    for <lisi@sky.com>; Thu, 21 May 2015 14:15:27 +0800 (CST)
Subject:A Test Mail!
Message-Id: <20150521061532.03627430D5@mail.sky.com>
Date: Thu, 21 May 2015 14:15:27 +0800 (CST)
From: xiaoqi@sky.com
 
Dear Lisi:
This is a test mail by Xiaoqi.
.
QUIT      <==断开连接
+OK Logging out.
Connection closed by foreign host.
 
通过以上测试结果,不难发现用户已经能够通过Dovecot服务器收取邮件。该服务器具备了SMTP发信功能,POP3/IMAP收信功能,一台简单的邮件服务器的设置就基本上大功告成了,3.3小节中将使用图形化的邮件客户端软件,进一步验证邮件服务器的发信,收信功能。
 
3.3测试发信、收信功能
虽然使用telnet命令也可以完成发信,收信的基本过程,但这种方式缺少更友好的操作界面,只能在命令行中测试使用。对于绝大多数用户来说,使用图形化的邮件客户端软件要更加方便。下面以Microsoft Office2007中的Outlook为例,继续验证邮件服务器的收发信功能。
 
1.设置邮箱账号
       使用Outlook 2007收发邮件之前必须先设置一个邮箱账号。需要设置的内容包括邮箱地址,账号名和密码,以及提供邮件服务的SMTP服务器、POP3/IMAP服务器地址、第一次启动Outlook2007软件时,会弹出配置向导,根据提示完成邮箱账号的创建,之后也可以通过菜单”工具“——”账号“设置,来添加新的账号。
       在创建账号的过程中,选择”Microsoft Exchange Pop3,IMAP或HTTP“邮件服务然后选中,手动配置服务器设置或其他服务器类型,,并指定各项具体设置、例如若要使用邮箱账号lisi@sky.com,可以参考以下账号属性(如图所示)。
 
2.发送邮件测试
在Outloo2007中,单击左上方的“新建(N)”按钮或者按快捷键Ctrl+N,将会打开新邮件编辑窗口。指定收件人,抄送(可选),邮件主题并输入邮件内容后,单击”发送“按钮即可提交给SMTP服务器进行发送。例如向xiaoqi@sky.com发送一封测试邮件,并抄送一份给自己lisi@sky.com(如图所示)。通过“邮件文件夹"——”已发送邮件“,可以看到成功提交给SMTP服务器的邮件列表。
3.接收邮件测试
在Outlook2007中,单击菜单栏下方的"发送/接收(C)”按钮,或者直接按F9功能键,将会尝试发送"发件箱"中的所有邮件,并收取现有账号的所有邮件。通过"邮件文件夹"——”收件箱“,可以看到收取的邮件列表(如图所示)。
 
在测试收信、发信的过程中,若出现失败的情况,应及时查看/var/log/maillog邮件进出日志,并根据相关信息分析、排除故障。例如,当Dovecot收信服务器不支持明文的认证时,可能导致收信失败,跟踪/var/log/maillog日志可发现”Dissconnected“记录。
[root@mail ~]# tail -f /var/log/maillog
 
 
Postfix邮件系统(二)
1. 设置SMTP发信认证
作为一台邮件服务器,发送邮件是最基本的功能,但是如果所有人都能够无条件地发送(投递)邮件则是相当危险的,很容易造成大量垃圾邮件的产生,也给服务器带来了不必要的负担。因此,有必要对用户发送邮件的过程进行认证。
 
1.1启用SMTP发信认证
       SMTP发信认证的常见形式如下:当用户通过SMTP协议向外部邮件域发送邮件时,服务器会要求用户提供用户账号和口令进行身份认证,只有成功通过身份认证的用户才被允许向外部发送邮件,否则将拒绝发信请求。
       在Postfix邮件系统中,可以使用Cyrus SASL(Cyrus Simple Authentication and Secunty Layer,Cyrus简单认证安全层)软件来实现基本的SMTP认证机制。Postfix通过调用Cyrus SASL的函数库,使用Cyrus SASL提供的认证服务saslauthd来核对系统账号和密码(如图所示) 。
使用上述SMTP认证机制取决于三个组件:Cyrus-SASL函数库,saslauthd服务、Postfix服务。下面介绍主要配置步骤。
 
1.设置Cyrus SASL函数库,并启动saslauthd服务
建立SMTP认证配置文件/usr/lib/sasl2/smtpd.conf(注意不要将文件名smtpd.conf 误写为smtp.conf)。在该配置文件中设置了使用saslauthd服务作为认证方式,配置内容可参考/usr/lib/sasl2/Sendmail.conf文件。
[root@mail ~]# vim /usr/lib/sasl2/smtpd.conf
pwcheck_method: saslauthd
[root@mail ~]# /etc/init.d/saslauthd start
正在启动 saslauthd:                                       [确定]
[root@mail ~]# chkconfig --level 35 saslauthd on
 
2.修改main.cf配置文件,添加SMTP认证配置,并重载服务
[root@mail ~]# vim /etc/postfix/main.cf
...... //省略部分内容
smtpd_sasl_auth_enable = yes      <==启用SMTP认证
smtpd_sasl_security_options = noanonymous      <==禁止匿名使川SMTP服务
mynetworks = 127.0.0.1
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
[root@mail ~]# postfix reload
postfix/postfix-script: refreshing the Postfix mail system
在上述配置参数中,SMTP认证相关的几行设置含义如下。
➣   mynetworks:用来控制可以通过本服务器外发邮件的网络地址或IP地址,设置为127.0.0.1是为了确保后面的Web邮箱系统可以正常发送邮件。
➣   smtpd_recipient_restrctions设置收件人地址过滤规则,其匹配策略是“从上至下逐条检测,有匹配即停止”,其中常用的几个值如下所述。
◆   permit_mynetworks:允许IP为mynetworks的客户使用本邮件系统发送邮件。
◆   permit_sasl_authenticated:允许通过SMTP认证的用户向外发送邮件。
◆   reject_unauth_destination当收件人地址不包括在Postfix的授权网络内时,将拒绝发送该邮件,授权网络包括由inet_interfaces,mydestinauon,relay_domain等配置参数指定的域及其子域。
启用上述SMTP认证配置以后,只有通过认证的用户才允许向外域发送邮件,否则只能够给本域内的其他用户发送邮件。例如,只有在通过认证以后,用户xiaoqi@sky.com才能够向zhaoliu@163.com等外部邮箱发送邮件,否则只能向lisi@sky.com等本域内的其他用户发送邮件。
 
1.2 验证SMTP发信认证
使用telnet命令或Outlook2007客户端软件,都可以测试SMTP发信认证。向外域发送邮件时,还需要DNS服务器,外域的邮件服务器,互联网络等支持,对方才能够成功收到邮件。但验证SMTP认证只需关注提交邮件内容到Postflx服务器的环节。因此后续过程在这里不再讨论。
 
1. 测试SMTP发信认证——telnet方式
1)验证不使用SMTP认证的情况
第10章使用telnet命令做发信测试时,并未提供用户名,密码等认证信息,这种方式表示不使用SMTP认证。若服务器要求进行SMTP认证,但客户端未使用认证则发信时将会受到限制。例如,尝试从xiaoqi@sky.com给外部邮箱zhaoliu@163.com 发送邮件时,将会收到"Relay access denied"的拒绝发送反馈。
[root@mail ~]# telnet mail.sky.com 25
Trying 192.168.1.10...
Connected to mail.sky.com.
Escape character i'^]'.
220 mail.sky.com ESMTP Postfix
HELO mail.sky.com
250 mail.sky.com
MAIL FROM:xiaoqi@sky.com
250 2.1.0 Ok
RCPT TO:zhaoliu@163.com
554 5.7.1 <zhaoliu@163.com>: Relay access denied        <==拒绝向外域发送邮件
QUIT
221 2.0.0 Bye
Connection closed by foreign host.
 
2)验证使用SMTP认证的情况
若要使用SMTP发信认证,在telnet命令中应改用“EHLO”,(而不是HELO)来宣告本机地址,并通过“AUTH LOGIN”进行登录认证,然后才能够正常发送邮件。用户名,密码字串默认使用BASE64编码的加密格式,使用openssl工具可以生成。例如以下操作可以生成用户名”xiaoqi“、密码”qwe.123“的加密字串。
[root@mail ~]# printf "xiaoqi" | openssl base64
eGlhb3Fp
[root@mail ~]# printf "qwe.123" | openssl base64
cXdlLjEyMw==
 
测试过程中,建议直接复制上述加密字串进行使用,避免出现输入错误的情况。当通过SMTP认证以后,用户再次从xiaoqi@sky.com给外部邮箱zhaoliu@163.com发送邮件时,将会成功提交给Postfix服务器。
[root@mail ~]# telnet mail.sky.com 25
Trying 192.168.1.10...
Connected to mail.sky.com.
Escape character is '^]'.
220 mail.sky.com ESMTP Postfix
EHLO mail.sky.com      <==宣告客户机地址
250-mail.sky.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN   <==表示支持SMTP认证
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH LOGIN        <==告知要进行认证登录
334 VXNlcm5hbWU6
eGlhb3Fp        <==输入加密的用户名字串
334 UGFzc3dvcmQ6
cXdlLjEyMw==      <==输入加密的密码字串
235 2.7.0 Authentication successful     <==认证成功的反馈信息
MAIL FROM:xiaoqi@sky.com      <==告知发件人
250 2.1.0 Ok
RCPT TO:zhaoliu@163.com       <==告知外域收件人地址
250 2.1.5 Ok
DATA       <==告知要发送邮件数据
354 End data with <CR><LF>.<CR><LF>
Subject:SMTP AUTH TEST       <==编写邮件内容
    This is a test mail for SMTP AUTH.
.        <==结束编写
250 2.0.0 Ok: queued as B23144309C      <==成功提交到发送队列
QUIT
221 2.0.0 Bye
Connection closed by foreign host.
 
2.测试SMTP发信认证——Outlook 2007 
 
1)验证不使用SMTP认证的情况
以第10章的Outlook 2007邮箱账号为例,默认情况下也并不使用SMTP认证,因此当使用要求SMTP认证的服务器向外域发送邮件时将会被拒绝。例如,从lisi@sky.com尝试给zhaoliu@163.com发送邮件时,会收到邮件服务器反馈的无法到达收件人的”未传递:......”邮件(如图所示)。
 
2)验证使用SMTP认证的情况
在Outlook2007中若SMTP邮件服务器要求进行认证,则应该修改邮箱属性。通过菜单“工具”——“'账户设置“找到并打开邮箱账户lisi@sky.com的属性窗口,然后打开”其他设置“——”发送服务器“,选中”我的发送服务器(SMTP)要求验证“(如图所示) 。
 
至于登录设置,一般保持默认的,使用与接收邮件服务器相同的设置即可:或者也可以选中”登录使用“,然后填写用于验证的用户名,密码。
再次以lisi@sky.com给外部邮箱zhaoliu@sky.com发送邮件,将成功通过认证并将邮件内容提交给Postfix服务器。当然如果对方邮件域或邮箱不存在,或者Pastfix服务器无法访问外域,最终会传递失败并退回给发件人,但这已经属于另外的话题了。
 
2. 构建Web邮件系统
Web 邮件系统指的是提供给用户发信、收信的网页操作界面,能够完成和 MUA软件类似的邮件管理,通讯簿等附加功能。Web邮件系统依赖于已有的收信,发信服务器。但不需要用户预先配置邮箱属性,因此使用更加方便,在Internet中应用十分广泛,比如新浪,网易,搜狐等站点都提供了通过浏览器访问邮箱空间的Web邮箱服务。
 
2.1 部署并配置Squirrelmail 
Postfix支持使用的Web邮件系统有很多种,如Openwebmail,iGENUS、Extmail、SquirrelMail等。本章将以较为简单的SquirrelMail为例。SquirrelMail是使用PHP开发的套网页程序,可以与Postfix,Dovecot很好地协作,通过Web界面提供邮件发送接受和管理操作(如图所示)。
从SquirrelMail的官方网站http://www.squirrelmail.org可以下载最新的源码包,中文语言包, 如 squirrelmail-1.4.18.Tar.gz 与 zh_CN-1.4.18-20090526.tar.gz.下面介绍 SqurrrelMail系统的安装,配置过程。
 
1. 将SquirrelMail部署到网站目录
将程序源码包,语言包释放后复制到网站目录中,其部署位置取决于访问路径,应根据实际情况确定。这里以httpd服务器为例,网站根目录对应为/var/www/html/,访问SquirrelMail系统的URL为http://www.sky.com/webmail/。
[root@mail ~]# yum -y install httpd
[root@mail ~]# service httpd restart
[root@mail home]# tar zxf squirrelmail-1.4.22.tar.gz -C /var/www/html/
[root@mail home]# tar zxf zh_CN-1.4.22-20110425.tar.gz -C /var/www/html/squirrelmail-20110425/
[root@mail home]# mv /var/www/html/squirrelmail-20110425/ /var/www/html/webmail <==yum安装的httpd网站根目录
 
[root@mail ~]# mv /var/www/html/squirrelmail-20110425/ /usr/local/httpd/htdocs/    <==源码安装的httpd网站根目录
 
2.创建数据目录、附件目录
通过浏览器访问Web邮箱时需要提交邮件内容,上传附件等相关操作,因此需要创建相应的数据目录,附件目录,并确保网站运行用户(如apache)对上述目录有写入权限。
[root@mail ~]# cd /var/www/html/webmail/
 
[root@mail home]# grep "^User" /etc/httpd/conf/httpd.conf      <==查看httpd默认的运行用户
User apache
[root@mail webmail]# mkdir -p data/ attach/    <==data:正文、attach:附件
[root@mail webmail]# chown -R apache:apache data/ attach/
 
3.创建主配置文件config.php 
SquirrelMail的主配置文件为config.php,位于子目录config/中。主配置文件通常并不存在,需要参考默认配置手动创建。适当修改配置文件设置,界面语言,收发信服务器地址,数据目录和附件目录等相关信息。
[root@mail webmail]# cp config/config_default.php config/config.php
[root@mail webmail]# vim config/config.php 
<?php
...... //省略部分内容
$domain 'sky.com';
$smtpServerAddress 'localhost';       <==SMTP服务器地址
$smtpPort = 25;                                <==SMTP服务端口
$imap_server_type = 'dovecot';         <==IMAP服务器地址
$imapPort = 143;                             <==IMAP服务端口
$data_dir = '/var/www/html/webmail/data/';       <==数据目录的位置
$attachment_dir = '/var/www/html/webmail/attach/';    <==附件目录的位置
$squirrelmail_default_language = 'zh_CN';             <==界面语言
$default_charset = 'zh_CN.UTF-8';             <==默认字符集
上述配置内容中,收发信服务器的地址端口号一般为默认,不需要修改。但数据目录,附件目录、界面语言等应根据需要进行调整。
 
4.安装LAMP平台
注,SquirrelMail的运行是基于LAMP环境的,首先我们来安装LAMP环境。

1).安装yum源

 

Retrieving http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
Preparing...        ########################################### [100%]
  package rpmforge-release-0.5.3-1.el6.rf.x86_64 is already installed #我这边已经安装好了 
 

 

2).安装LAMP环境

首先,用yum安装相关软件包

 

[root@node1 ~]# yum install -y httpd php php-mysql php-snmp php-xml php-gd mysql mysql-server gd gd-devel

 

3).设置开机自启动并启动服务

[root@node1 ~]# chkconfig httpd on
[root@node1 ~]# service httpd start
正在启动 httpd:                      [确定]
[root@node1 ~]# chkconfig mysqld on
[root@node1 ~]# service mysqld start
正在启动 mysqld:                     [确定]
 
4).开放防火墙的80端口
[root@sky html]# iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
[root@sky html]# service iptables save
[root@sky html]# service iptables restart
 

5).提供php页面并测试php环境

 

[root@node1 ~]# cd /var/www/html/
[root@node1 html]# vim index.php
<?php
    phpinfo();
?>

 

6).当看到这个页面时,就说明我们php环境安装完成,下面我们来修改httpd的主配置文件,让它支持打开php语言的网页内容。
[root@node1 ~]# vim /etc/httpd/conf/httpd.conf
DirectoryIndex index.php index.html index.html.var
[root@mail html]# service httpd restart
 
5.访问Web邮箱系统
确认Web服务已经运行,通过浏览器访问http://www.sky.com/webmail/,可以看到SquirrelMail提供的Web邮箱登录界面(如图所示)。使用正确的用户名密码进行登录,即可使用Web邮件系统。
 
2.2 使用Squirrelmail收发邮件
成功登录Squirrelmail以后,可以看到一个典型的Web邮件系统操作界面(如图所示)。通过此Web邮件系统,用户可以完成收信,发信等各种操作。
1.编写、发送电子邮件
单击上方的”撰写邮件“链接可以打开新邮件编写窗口。正确指定收件人、抄送地址,邮件主题并编写邮件内容(如图所示),然后单击”发送“按钮即提交发送。
2.收取、查阅电子邮件
刷新Web邮件系统页面,或者单击左侧的”检查新邮件'链接,可以向服务器查询,收取新的邮件。收到的邮件信息以列表的形式展现在右侧窗口中(如图所示)。
单击要查看的邮件主题,将会打开邮件内容页面,显示出邮件的发件人,抄送地址,主题,以及邮件正文(如图所示) 。
注意:SquirrelMail的中文界面使用的是汉化语言包,个别细节处的汉化并不十分完善。另外,在Web界面操作过程中偶尔会出现一些PHP警告信息,一般直接刷新页面后警告信息即会自动消失。
 
3. 其他扩展设置
为了提供更强大、更完善的电子邮件服务,用户可以为邮件服务器进行各种扩展设置。除了前面讲解的SMTP发信认证、Web邮件系统以外,还包括邮件组设置、邮件大小限制、邮箱空间限制等。
 
3.1 通过别名设置邮件组
在Postfix服务器中,邮件组功能主要通过aliase别名来实现。使用别名需要用到Postfix系统的一个重要机制——查询表。下面简要介绍查询表的含义以及别名设置的方法。
 
1.Postfix的查询表
       Postfix服务器在操作过程中经常需要做各式各样的转换与查询,如判断客户机是否来自授权网络,设置群发邮件的用户成员等,这种包含了某种对应关系的数据集合称为查询表。
       举例来说,有4个学生用户zhangsan、lisi、wangwu、zhaoliu。老师经常需要给这些学生发送相同内容的邮件,这就需要在收件人地址中逐个添加每个学生的邮件地址,过程会非常烦琐。要是为Postfix服务器设置一个映射关系,使名称student对应这四个学生用户。那么老师只要给student发送邮件,Postfix就会自动将邮件转发给这四个学生,大大简化了地址输入工作。
       由于main.cf文件的配置格式限制,逐一描述类似的所有映射记录将会导致配置文件的易读性非常差。在实际应用中,通常把这些对应关系都写人到另外一个文件——查询表中,查询表保存了关键字(key)和一组值(value)之间的对应关系。
对于邮件组来说,可以通过配置参数”alias_maps“来指定别名查询表的存放位置,如/etc/aliases的hash数据文件。
[root@mail ~]# vim /etc/postfix/main.cf
alias_maps = hash:/etc/aliases
[root@mail ~]# postfix reload
postfix/postfix-script: refreshing the Postfix mail system
 
2.设置邮件组——别名查询表
别名查询表文件一般位于/erc/aliases,需要与Postfix服务器的“alias_map”配置参数相对应。在该文件中,每一行对应一条邮件组记录,格式为“别名:地址1,地址2,地址3,......"
执行以下操作将会添加两个邮件组——studert和teacher、其中邮件组studer包括用户zhangsan、lisi、wangwu、zhaoliu。邮件组teacher包括用户vicky、tsengyia。 
[root@mail ~]# vim /etc/aliases
student:zhangsan,lisi,wangwu,zhaoliu
teacher:vicky,tsengyia
 
需要注意的是在上述别名记录中,邮件组的成员(如zhangsan,lisi等)要求是服务器中实际存在的系统用户账号,而邮件组本身(如student,teacher)只作为一个映射的别名并不需要建立同名的系统用户。
修改/etc/aliases查询表的内容以后,必须使用newaliases命令更新数据库,以便重新生成/etc/aliasesdb数据文件,Postfix系统将识别并使用/ete/aliases.db文件中的邮件组。
[root@mail ~]# newaliases
 
3.测试群发邮件
通过前两个步骤的设置以后,就可以通过邮件组地址student,teacher群发邮件了。例如,在编写新邮件时,将收件人地址设为student@sky.com,则最终该邮件组的四个成员用户都将收到此邮件。具体测试过程在这里不再赞述。
 
3. 2 邮件大小及邮箱空间限制
在邮件服务器中用户的每一封邮件都是需要占用一定磁盘空间的,而服务器的磁盘空间终归是有限的。因此,必要的时候可以对发送邮件的大小,用户的邮箱空间进行一定限制。
 
1.限制用户可发送的邮件大小
Postfix系统默认仅支持投递10MB大小的邮件,此大小指的是经过BASE64编码后的邮件大小,因此用户所提交邮件的实际限制还要更小一些。若要更改此限制,应在main.cf主配置文件中添加配置参数”message_size_limit。
执行以下操作可以将可发送的邮件大小限制为50MB。
[root@mail ~]# postconf | grep "message_size_limit"       <==査看默认的大小限制
message_size_limit = 10240000
[root@mail ~]# vim /etc/postfix/main.cf       <==更改为新的大小限制
message_size_limit = 51200000   
 
当用户提交的邮件大小超过限制时,Postfix服务器将会拒绝发送。例如,在Outook 2007客户端中会看到”message file too big"的反馈邮件,告知邮件未能传递(如图所示) 同时,在邮件服务器的maillog日志中会出现类似”warning:AFDOC93126D: queue file size limit exceeded'的警告信息。
 
2. 限制用户的邮箱空间大小
在Postfix邮件系统中,根据邮件用户的类型,邮件存储的方式不同,可以分别采取不同的方法来限制用户的邮箱空间大小。需要注意的是,所设置的邮箱空间限制应大于邮件大小限制。
➣   使用quota磁盘配额:适用于Mailbox或Maildir两种存储方式。针对使用Linux系统用户作为邮件账户的情况,建议采用这种方式。如限制xiaoqi,lisi等邮件用户在home分区最多只能使用50MB磁盘空间。
➣   配置参数mailbox_size_limit:仅适用于Mailbox存储方式,默认的限制为50MB。由于Mailbox存储方式使用不多,此配置参数也较少使用。
➣   配置参数virtual_mailbox_limit:适用于Mailbox或Maildir两种存储方式,但只针对虚拟用户(非系统用户)。此配置参数需要对Postfix安装VDA补丁以后才能发挥作用,关于虚拟用户和VDA补丁的相关知识,请自行参阅其他资料。
当用户的邮箱空间已满时,客户端将无法再向该邮箱发送,投递新的邮件。例如,在Outlook2007客户端中,会收到”maildir delivery failed“的退回邮件,告知邮件投递失败。同时,在邮件服务器的maillog日志中会出现类似”maitdir delivery failed error writing message : Disk quota exceeded“的事件记录。
 





posted @ 2015-05-27 09:12  Hello-Sky  阅读(3398)  评论(1编辑  收藏  举报