码迷,mamicode.com
首页 > 系统相关 > 详细

Linux 邮件服务器 之跟我一步一步来实现一个邮件系统

时间:2015-08-21 19:42:27      阅读:314      评论:0      收藏:0      [点我收藏+]

标签:postfix   邮件服务器   dovecot   

上一篇介绍了邮件服务器的各组件功能和原理,这次来由浅的入深来一步步实现一个邮件系统。


实验环境:

操作系统CentOS release 5.11 64位
postfix-2.11.6
courier-authlib-0.64.0
cyrus-sasl-2.1.22-7.el5_8.1
cyrus-sasl-plain-2.1.22-7.el5_8.1
dovecot.x86_64 0:1.0.7-8.el5_9.1








一、安装postfix,建立基本配置

postfix安装过程(略)详细可见上一篇博文

http://tchuairen.blog.51cto.com/3848118/1684872


1、编辑配置文件" /etc/postfix/main.cf " 定义如下内容:

myhostname = mail.qupeiyin.net
myorigin = $mydomain
mydomain = qupeiyin.net
mydestination = $myhostname, localhost.$mydomain, localhost,$mydomain
mynetworks = 127.0.0.0/8,mynetworks

参数说明:

myhostname主机名,与host那么相同。
myorigin发件人地址域
mydomain  所在域
mydestination目标收件地址
mynetworks 可以被中继的客户端网段
alias_map = hash:/etc/aliases别名查找表


2、安装dovecot实现邮件接收

yum install dovecot -y

编辑配置文件 /etc/dovecot/dovecot.conf 

启用协议

protocols = imap pop3

启动dovecot服务

/etc/init.d/dovecot start

启动成功后会监听端口:imap4:143/tcp,pop3:110/tcp 以明文方式工作;


3、postfix + SASL 用户认证

saslauthd -v  显示当前主机saslauthd服务所支持的验证方式

修改验证方式

vim /etc/sysconfig/saslauthd

技术分享


启动saslauthd服务

/etc/init.d/saslauthd start

设置开机启动

chkconfig saslauthd on

测试验证机制是否可用,出现OK表示正常;

testsaslauthd -u username-p pass

0: OK "Success."


邮箱格式:

mbox:一个文件存储所有邮件

maildir:一个文件存储一封邮件,所有邮件存储在一个目录中;

#home_mailbox = Mailbox  定义邮箱格式

#home_mailbox = Maildir/

#mail_spool_directory = /var/mail   定义maildir格式邮箱文件的保存路径


4、让postfix支持sasl认证功能

编辑配置文件 /etc/postfix/main.cf 添加如下内容:

broken_sasl_auth_clients = yes
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sasl_path = smtpd
smtpd_banner = Welcome to our Server !

参数说明:

broken_sasl_auth_clients 是否要通过SASL验证客户端身份
smtpd_recipient_restrictions 定义收件人限制
smtpd_sasl_auth_enable = yes启用SASL认证功能
smtpd_sasl_local_domain = $myhostname 基于SASL认证的时候指定本地的域
smtpd_sasl_security_optionsSASL认证的安全选项,noanonymous表示不支持匿名用户
smtpd_sasl_path = smtpd指定使用SASL的服务器程序
smtpd_banner 定义登陆时候的欢迎信息


参数说明(二):

permit_mynetworks允许本地网络
permit_sasl_authenticated允许SASL验证通过的用户
reject_invalid_hostname拒绝不合法的主机名的主机来收发邮件
reject_non_fqdn_hostname拒绝不是fqdn格式主机名的主机
reject_unknown_sender_domain拒绝无法识别的发件人域
reject_non_fqdn_sender拒绝没有fqdn的发件人
reject_non_fqdn_recipient拒绝没有fqdn的收件人
reject_unknown_recipient_domain拒绝无法识别的收件人域
reject_unauth_pipelining无法验证的管道
reject_unauth_destination拒绝无法验证的目标地址


编辑配置文件/usr/lib64/sasl2/smtpd.conf 添加如下内容:

pwcheck_method:saslauthd

mech_list:PLAIN LOGIN

log_level:3

当需要调试的时候,打开log_level可以输出更为详细的信息。


5、实现postfix基于客户端的访问控制

在配置文件"/etc/postfix/main.cf"使用如下参数控制:

smtpd_client_restrictions= 
smtpd_data_restrictions= 
smtpd_helo_restrictions=  
smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination
smtpd_sender_restrictions=

参数说明:

smtpd_client_restrictions用于限定符合条件的才允许连接服务器
smtpd_data_restrictions用于限定符合条件的用户才允许发送data指令
smtpd_helo_restrictions用于限定符合条件的用户才允许发送helo指令
smtpd_recipient_restrictions用于限定符合条件的用户才允许发送rcpt to指令
smtpd_sender_restrictions用于限定符合条件的用户才允许发送mail from指令


内置限制条件:(更多参考postfix手册)

reject_unauth_destination-拒绝未经认证的目标

permit_mynetworks-该网段的主机可以被中继


访问控制文件

    /etc/postfix/access

    python@admin.com reject

    microsoft.com ok

规则编写格式:

pattern  action

邮件地址的pattern格式如下:

user@domain用于匹配指定邮件地址
domain.tld用于匹配以此域名作为邮件地址中的域名部分的所有邮件地址
user@用于匹配以此作为邮件地址中用户名部分的所有邮件地址


主机名称/地址 pattern格式如下:

ip    用于匹配特定的IP地址或网络内的所有主机

network /mask  CIDR格式,匹配指定网络内的所有主机

关于action

ok 接受其pattern匹配的邮件地址或主机名称/地址

拒绝部分:

4NN text

5NN text

    其中4NN类表示过一会重试,5NN类表示严重错误。

REJECT optional text  拒绝;text为可选信息

DEFER  optional text  拒绝;text为可选信息


自定义访问表的条件通常使用check_client_access,check_helo_access,check_sender_access,check_recipient_access 进行,他们后面通常跟上type:mapname格式的访问类型和名称。其中,check_sender_access,check_recipient_access 用来检查客户端提供的邮件地址,其访问表中可以使用完整的邮件地址,如admin@tuchao.com;也可以只使用域名,如果tuchao.com,还可以只有用户名的部分,如hadoop@。


实例演示(一):

拒绝ip:115.204.89.87  windows 客户端发送邮件

1、编辑 /etc/postfix/access 作为客户端检查控制文件,添加如下一行:

115.204.89.87 REJECT

2、将此文件转换为hash格式

postmap  /etc/postfix/access

技术分享

3、配置postfix使用此文件对客户端进行检查

编辑配置文件 vim /etc/postfix/main.cf 加入一行:

smtpd_client_restrictions = check_client_access hash:/etc/postfix/access

注:这里的hash类型就代表了.db的文件,所以这里不要写后缀。


4、让postfix重新载入配置文件

/etc/init.d/postfix reload

现在使用windows上的客户端发邮件,就会看到被拒绝了;

技术分享


实例演示(二):

拒绝所在域为 huairen.com 的发件人发送邮件。

1、编辑 /etc/postfix/access 作为客户端检查控制文件,添加如下一行:

huairen.com REJECT


2、将此文件转换为hash格式

postmap  /etc/postfix/access


3、配置postfix使用此文件对客户端进行检查

编辑配置文件 vim /etc/postfix/main.cf 加入一行:

smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/access


4、让postfix重新载入配置文件

/etc/init.d/postfix reload

修改客户端的发件人地址,我这里使用的Outlook。 文件—账户设置—找到自己的邮箱地址—更改;

技术分享

然后尝试发一封邮件出去

技术分享

可以明显看到拒绝信息,Sender address rejected:Access denied


实例演示(三):

拒绝所有邮件头部用户名为tuchao的地址发邮件

1、添加一个访问控制文件 /etc/postfix/mailhostdeny 作为客户端检查控制文件,添加如下一行:

tuchao@ REJECT


2、将此文件转换为hash格式

postmap  /etc/postfix/mailhostdeny 


3、配置postfix使用此文件对客户端进行检查

编辑配置文件 vim /etc/postfix/main.cf 加入一行:

smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/mailhostdeny,permit_mynetworks,reject_unauth_destination

注:在smtpd_recipient_restrictions配置中,必须要有两个内置参数permit_mynetworks,reject_unauth_destination,如果需要加入其他参数,这两个内置参数放到最后。


4、让postfix重新载入配置文件

/etc/init.d/postfix reload

尝试给tuchao@qupeiyin.net发送邮件

技术分享

可以看到收件人不符合要求被拒绝了


邮件别名的使用

编辑别名配置文件 /etc/aliases 加入如下两行:

a:    python 

tuchao:  1183710107@qq.com

newaliases  执行此命令用于生成别名文件的hash格式,便于查找,每次修改过aliases文件都要执行。

说明:a:表示把所有发给本地a用户的邮件,全部转发给本地的python用户,这里a用户不存在也没关系服务器能识别到别名就可以了。  把所有发给本地tuchao用户的邮件。全部转发至1183710107@qq.com。


给a用户发送邮件测试

技术分享

给tuchao用户发邮件

技术分享































本文出自 “突破舒适区” 博客,请务必保留此出处http://tchuairen.blog.51cto.com/3848118/1686875

Linux 邮件服务器 之跟我一步一步来实现一个邮件系统

标签:postfix   邮件服务器   dovecot   

原文地址:http://tchuairen.blog.51cto.com/3848118/1686875

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!