postfix 邮件服务器(发布者:唐勇)
===============================================================================
1.邮件系统的基础知识
(1)、MTA(邮件传输代理):负责邮件的发送与接收。
(2)、MDA (邮件投递代理):负责邮件的本地投递。
(3)、MUA、(邮件用户代理):负责阅读和编写邮件。
===================================================
2、邮件系统的主要协议
(1) SMTP 协议 //负责邮件的发送与接收。
特点:基于文本的命令/响应式协议
明文传输
邮件使用tcp/25端口
常用的SMTP命令:
-helo 主机名 //向服务器标记自己的身份。
-mail from:邮件地址 //标记邮件发送人地址。
-rcpt to:邮件地址 //标记邮件收件人地址。
-data 形始输入邮件的正文 以"."结束。
-ehlo 向服务器标识身份,并查看服务器的验证信息。
-very 邮件地址 检查邮件是否存在
-auth 验证方式 输入验证信息
====================================
(2)POP3 协议 //用于客户机从服务器下载邮件
特点:和SMTP协议基本相同 但端口为110.
POP3 常用命令:
-user 用户名 标识用户名
-pass 口令 标识用户口令
-uidl 数字 返回指定的邮件
-list 数字 显示指定邮件的大小
-retr 数字 显示指定邮件的内容
-dele 数字 删除指定的邮件
=====================================
(3)IMAP 协议
兼容pop3协议,默认端口为tcp/143 ,具有在线阅读的功能
===============================================
3、邮件传输的过程
4 . 邮件服务器的基本组件
(1) SMTP服务
(2)POP3/IMAP服务
(3)webmail服务
===============================================
实例:配置基于系统用户的简单邮件服务器(rpm安装方式)
1、安装与配置SMTP服务(POSTFIX)
# tar -ivh postfix.~~.rpm
2、安装完成后 在配置POSTFIX之前的所要做的准备.以anhuihexie.com 为例。
--.注册你所需要的域名,并添加MX记录指向邮件服务器.
--配置计算机名称为MX指向的名称,并在hosts文件里添加记录。
---------------------------------------------------------------------------------
3、postfix的基本设置
# 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:允许IP为mynetworks的客户使用本邮件系统寄出邮件permit_sasl_authenticated:允许通过SMTP认证的用户向外发送邮件
reject_unauth_destination:当收件人地址不包括在Postfix的授权网络内时,将拒绝发送该邮件。Postfix的授权网络包括由以下配置参数指定的域及其子域:mydestination、inet_interfaces、virtual_alias_maps、virtual_mailbox_maps、relay_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
第三、启动sasl的daemon并测试: 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== //用户名tom的BASE64编码
334 UGFzc3dvcmQ6
dGFuZ3lp//tom的密tangyi的BASE64编码
235 2.7.0 Authentication successful //表明用户通过认证
250 2.1.0 Ok
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编码有问题
表示为使用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不支持邮件的本地部分带有“@”的邮箱,以至于不能正常递交。我们采用了以下步骤来解决这个问题:
- 首先,在cyradm中创建两个邮箱,一个是邮件地址全称做邮箱名,我们称之为“地址邮箱”;一个通过将邮件地址其中的“@”换成了“~”做邮箱名,我们称之为“存储邮箱”。
- 然后,退出cyradm,在邮件分区的user目录下(这里是/var/spool/imap/user),找到刚才创建的邮箱。在文件系统中删除“地址邮箱”,并将“存储邮箱”做个符号链接,名字就是刚刚删除的“地址邮箱”。
- 最后,设置数据库中的FORWARD字段,使之将邮件投递到“存储邮箱”。
之所以这样做的原因是,通过在cyradm中创建两个邮箱,通知了Cyrus-IMAP系统中存在“地址邮箱”,删除地址邮箱,并将其作为“存储邮箱”的别名是希望通过它能访问到实际存储邮件的“存储邮箱”。(另外请注意,邮箱名称中的点实际在文件系统中是用“^”代表的)
=========imap设置完成======================================
到些 postfix基本功能具有了,再下个客户端测试下 就ok 了 !!!