postfix  邮件服务器(发布者:唐勇)
===============================================================================
1.邮件系统的基础知识
1)、MTA(邮件传输代理):负责邮件的发送与接收。
2)、MDA (邮件投递代理):负责邮件的本地投递。
3)、MUA、(邮件用户代理):负责阅读和编写邮件。
===================================================
2、邮件系统的主要协议
1 SMTP 协议     //负责邮件的发送与接收。
特点:基于文本的命令/响应式协议
            明文传输
            邮件使用tcp/25端口
常用的SMTP命令:
-helo   主机名    //向服务器标记自己的身份。
-mail  from:邮件地址    //标记邮件发送人地址。
-rcpt  to:邮件地址     //标记邮件收件人地址。
-data       形始输入邮件的正文   "."结束。
-ehlo      向服务器标识身份,并查看服务器的验证信息。
-very     邮件地址 检查邮件是否存在
-auth   验证方式      输入验证信息
====================================
2POP3  协议     //用于客户机从服务器下载邮件
特点:和SMTP协议基本相同   但端口为110.
POP3 常用命令:
-user  用户名     标识用户名
-pass  口令       标识用户口令
-uidl     数字      返回指定的邮件
-list    数字       显示指定邮件的大小
-retr  数字        显示指定邮件的内容
-dele  数字     删除指定的邮件
=====================================
3IMAP 协议
兼容pop3协议,默认端口为tcp/143 ,具有在线阅读的功能
===============================================
 
3、邮件传输的过程
 

 
 
4 . 邮件服务器的基本组件
1 SMTP服务
2POP3/IMAP服务
3webmail服务
===============================================
实例:配置基于系统用户的简单邮件服务器(rpm安装方式)
1、安装与配置SMTP服务(POSTFIX
# tar -ivh  postfix.~~.rpm
2、安装完成后 在配置POSTFIX之前的所要做的准备.anhuihexie.com 为例。
--.注册你所需要的域名,并添加MX记录指向邮件服务器.
--配置计算机名称为MX指向的名称,并在hosts文件里添加记录。
---------------------------------------------------------------------------------
3postfix的基本设置
# vi /etc/postfix/main.cf
基本配置(黑色为配置文件默认设置)
==============================================
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
===========================================
mail_owner = postfix                                 
用户
myhostname = mail.anhuihexie.com   
主机名
mydomain = anhuihexie.com                  
区域名
myorigin = $myhostname                       
区域名或主机名
inet_interfaces = all                                 
监听接口
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain   
设置邮件服务器接受指定区域的文件
==============================基本设置======================
unknown_local_recipient_reject_code = 550

smtpd_sasl_auth_enable=yes            
启用SMTP认证
smtpd_sasl_security_options=noanonymous        
禁止匿名登录
broken_sasl_auth_clients=yes    
设置是否支持早期的客户端
mynetworks=127.0.0.1         控制可以通过本服务器外发邮件的网络地址或IP地址,设为127.0.0.1是为了确保Webmail系统可正常发送邮件
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
注:permit_mynetworks:允许IPmynetworks的客户使用本邮件系统寄出邮件permit_sasl_authenticated:允许通过SMTP认证的用户向外发送邮件
reject_unauth_destination:当收件人地址不包括在Postfix的授权网络内时,将拒绝发送该邮件。Postfix的授权网络包括由以下配置参数指定的域及其子域:mydestinationinet_interfacesvirtual_alias_mapsvirtual_mailbox_mapsrelay_domian
   以上是设置SMTP实现邮件认证
========================SMTP 认证设置====================
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/          
邮件存储格式
mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp
debug_peer_level = 2
debugger_command =
     PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
     xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.3.3/samples
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
注:基本设置 我们只有设置上面配置文件里红色部分
====================================================================
 
 
4、配置SMTP认证实现邮件转发
       首先 安装 cyrus-sasl......rpm    cyrus-sasl-plain     cyrus-sasl-md5  (rpm安装方式)
 
第一   配置CYRUL-SASL        
            vi   /usr/lib/sasl2/smtpd.conf
                      pwcheck_method:saslauthed      //设置口令验证方法。
第二 
             vi /etc/sysconfig/saslauthd
                              MECH=shadow
第三、启动sasldaemon并测试: service saslauthd start  
# /usr/sbin/testsaslauthd -u
帐号 -p '密码'

0: OK "Success." =>
帐号验证成功了
配置postfix支持认证sasl    ,在上方我已做设置  ok 
重启postfix服务器
===============================================
到些设置完成=============
接下来我们来测试
telnet 邮件服务器的25号端口,并且用EHLO宣告客户机的地址,如果出现“250-AUTH PLAIN LOGIN”表明支持认证 (记住这里是EHLO而不是“HELO”)

telnet进行发信测试
1)由于采用了认证,则要输入加了密的用户名和密码,加密字符串的编码格式为base64
2)用printf “用户名” | openssl base64 获得用户名的加密字符串
printf “密码” | openssl base64 获得密码的加密字符串
如获得tom的用户名及其密码tangyi的加密字符串
printf “tom” |openssl base64 得到加密字符串 dG9t
printf “tangyi″ |openssl base64
得到加密字符串dGFuZ3lp
telnet mail.anhuihexie.com 25
Trying 192.168.63.53…
Connected to mail.anhuihexie.com (192.168.63.53).
Escape character is ‘^]’.
220 mail.anhuihexie.com ESMTP Postfix
ehlo localhost //宣告客户机主机地址
250-mail.anhuihexie.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN //表明支持认证
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
auth login //用认证的方式登入
334 VXNlcm5hbWU6
dG9t== //用户名tomBASE64编码
334 UGFzc3dvcmQ6
dGFuZ3lp//tom的密tangyiBASE64编码
235 2.7.0 Authentication successful //表明用户通过认证
mail from:tom@anhuihexie.com
250 2.1.0 Ok
rcpt to:hfsimply@163.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
this is mail to
.
250 2.0.0 Ok: queued as 7BD911BCF43
quit
221 2.0.0 Bye
Connection closed by foreign host.
 

 我打开我的163邮箱……

 

 这是我的163邮箱所收到的邮件……说明测试成功  ok 

========================================================

3)其他知识点
出现535 5.7.8 Error: authentication failed: another step is needed in authentication
表示输入的BASE64编码有问题
出现554 5.7.1 <hfsimply@163.com>: Relay access denied
表示为使用SMTP验证时发信失败

(5)配置pop/imap服务

    1.rpm 安装imap

       rpm -ivh  cyrus-imapd...rpm

       rpm -ivh  cyrus-imapd-utils...rpm

       rpm -ivh  cyrus-imapd-perl...rpm

     2.修改cyrus-imapd的配置文件/etc/imapd.conf

              configdirectory: /var/lib/imap
              partition-default: /var/spool/imap
              admins: cyrus
              sievedir: /var/lib/imap/sieve
              sendmail: /usr/sbin/sendmail
              hashimapspool: true
              sasl_pwcheck_method: saslauthd 
  注:默认不用做更改

       3.启动服务 service cyrus-imapd start

==========================IMAP服务用户======================


        现在创建邮箱。

  使用cyradm来创建和删除邮箱,它是Cyrus-IMAP自己带的交互式管理界面,现在的版本是用Perl写的。你也可以直接调用 Cyrus::IMAP::Admin模块创建自己的CGI或脚本来做邮箱管理,可以参考Cyrus::IMAP::Shell模块的程序。

 

  对于非虚拟域邮箱,只需要创建同用户名相同的邮箱(邮件的本地部分)。

  对于虚拟域邮箱,为了将虚拟域用户区别开来,我们希望使用用户的邮件全称来做它的邮箱名(其POP3/IMAP的登录名和邮箱名是一样的),但是虽然 Cyrus-IMAP允许你创建带有“@”的邮箱,但是Cyrus-IMAP的deliver不支持邮件的本地部分带有“@”的邮箱,以至于不能正常递交。我们采用了以下步骤来解决这个问题:

  1. 首先,在cyradm中创建两个邮箱,一个是邮件地址全称做邮箱名,我们称之为“地址邮箱”;一个通过将邮件地址其中的“@”换成了“~”做邮箱名,我们称之为“存储邮箱”。
  2. 然后,退出cyradm,在邮件分区的user目录下(这里是/var/spool/imap/user),找到刚才创建的邮箱。在文件系统中删除“地址邮箱”,并将“存储邮箱”做个符号链接,名字就是刚刚删除的“地址邮箱”。
  3. 最后,设置数据库中的FORWARD字段,使之将邮件投递到“存储邮箱”。

  之所以这样做的原因是,通过在cyradm中创建两个邮箱,通知了Cyrus-IMAP系统中存在“地址邮箱”,删除地址邮箱,并将其作为“存储邮箱”的别名是希望通过它能访问到实际存储邮件的“存储邮箱”。(另外请注意,邮箱名称中的点实际在文件系统中是用“^”代表的)

 
=========imap设置完成======================================

到些 postfix基本功能具有了,再下个客户端测试下  就ok 了 !!! 

 

=============================基本邮件服务器搭建完成==========================