一、邮件服务依赖于DNS服务,所以先配置一个DNS服务器(我的地址是10.0.146.18

1.修改主机名

# hostname mail.fsy.com

# vim /etc/hostname

修改为:mail.fsy.com

2.安装bind并修改其配置文件

# yum -y install bind

# vim /etc/named.conf

去掉options中的:

listen-on port 53 { 127.0.0.1; };

 allow-query     { localhost; };

3.配置正向区域和反向区域,并测试有无语法错误

# vim /etc/named.rfc1912.zones

添加:

zone "fsy.com" IN {

        type master;

        file "fsy.com.zone";

        allow-update { none; };

        allow-transfer { none; };

};

zone "146.0.10.in-addr.arpa" IN {

        type master;

        file "10.0.146.zone";

        allow-update { none; };

        allow-transfer { none; };

};

# named-checkconf(测试有无语法错误)

4.编辑正向和反向区域文件

# cd /var/named/

# vim fsy.com.zone(编辑正向区域文件)

添加以下内容:

$TTL 86400

@       IN      SOA     ns.fsy.com. admin.fsy.com. (

                        2016092501

                        2H

                        10M

                        3D

                        1D)

                IN      NS      ns

                IN      MX      10      mail

ns              IN      A       10.0.146.18

mail            IN      A       10.0.146.18

www           IN      A       10.0.146.18

# vim 10.0.146.zone(编辑反向区域文件)

添加以下内容:

$TTL 86400

@               IN      SOA     ns.fsy.com.     admin.fsy.com. (

                                2016092501

                                2H

                                10M

                                3D

                                1D)

                IN      NS      ns.fsy.com.

18              IN      PTR     ns.fsy.com.

18              IN      PTR     mail.fsy.com.

18              IN      PTR     www.fsy.com.

5.修改区域配置文件的属组和权限,并测试有无语法错误

# chgrp named fsy.com.zone 10.0.146.zone

# chmod 640 fsy.com.zone 10.0.146.zone

# named-checkzone "fsy.com" fsy.com.zone

# named-checkzone "146.0.10.in-addr.arpa" 10.0.146.zone

6.重启DNS服务,使其开机自动启动,并测试

注意:请先更改本机的DNS服务器

# vim /etc/resolv.conf

nameserver 10.0.146.18

# service named restart

# chkconfig named on

# dig -t MX fsy.com @10.0.146.18

# dig -t A mail.fsy.com @10.0.146.18

一切正常!

二、想要实现基于mysql的虚拟用户,所以先安装mysql(这里用rpm包安装)

# yum install mysql-server mysql-devel

# service mysqld start

# chkconfig mysqld on

三、编译安装postfix,(我这里用 postfix-2.10.10.tar.gz,相关软件包可以到postfix官网下载)

注意:首先同步一下时间,取得和硬件时间一致的时间

# hwclock -s

1.解压

# tar xf postfix-2.10.10.tar.gz

# cd postfix-2.10.10

2.建立postfixpostdrop组和用户

# groupadd -g 2525 postfix

# useradd -g postfix -u 2525 -s /sbin/nologin -Mpostfix

# groupadd -g 2526 postdrop

# useradd -g postdrop -u 2526 -s /sbin/nologin -M postdrop

3.安装所需软件包

# yum -y install cyrus-sasl-devel

# yum -y install gcc

# yum install db*-devel

4.安装

#make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl  -DUSE_TLS ' 'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2  -lssl -lcrypto'

释义:

CCARGS:指明头文件位置,CCARGS=-DHAS_MYSQL 指明启用mysql的连接能

-I/usr/include/mysql 指明mysql的头文件位置

-DUSE_SASL_AUTH启用SASL认证

-I/usr/include/sasl指明SASL头文件位置

-DUSE_TLS使SMTP支持smtps协议

AUXLIBS:指明库文件位置,-L/usr/lib/mysql 指明MySQL库文件位置

-lmysqlclient指明MySQL客户端库文件

-lz压缩库文件

-lm模块库文件

-lsslssl的库文件

# make

# make install

按照以下的提示输入相关的路径([]号中的是缺省值,”]”后的是输入值,省略的表示采用默认值)

 

install_root: [/] /

tempdir: [/root/postfix-2.10.10] /root/postfix-2.10.10

config_directory: [] /etc/postfix

command_directory: [] /usr/sbin

daemon_directory: [] /usr/libexec/postfix

data_directory: [] /var/lib/postfix

html_directory: [] no

mail_owner: [] postfix

mailq_path: [] /usr/bin/mailq.postfix

manpage_directory: [] /usr/share/man

newaliases_path: []/usr/bin/newaliases.postfix

queue_directory: [] /var/spool/postfix

readme_directory: [] /usr/share/doc/postfix-2.6.6/README_FILES

sendmail_path: [] /usr/sbin/sendmail.postfix

setgid_group: [] postdrop

5、生成aliases.db文件

# newaliases

# ls /etc/aliases.db

6、修改配置文件

# cd /etc/postfix/

# vim main.cf

mynetworks = 192.168.182.0/24, 127.0.0.0/8(定义给哪些网段中继邮件)

myhostname = mail.fsy.com(定义主机名)

myorigin = $mydomain

mydomain = fsy.com

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,

ns.$mydomain

inet_interfaces = all监听的ip地址

说明:

mynetworks 参数指定你所在的网络的网络地址,postfix系统根据其值来区别用户是远程的还是本地的,如果是本地网络用户则允许其访问

myhostname 参数指定运行postfix邮件系统的主机的主机名,默认情况下,其值被设定为本地机器名;

myorigin参数用来指明发件人所在的域名,即做发件地址伪装;

mydomain 参数指定您的域名,默认情况下,postfixmyhostname的第一部分删除而作为mydomain的值;

mydestination参数指定postfix接收邮件时收件人的域名,即您的postfix系统要接收到哪个域名的邮件;

 

5.现在即可启动测试了(此处可能遇到服务无法启动,看日志)

#  service postfix restart

此时可使用本地用户测试邮件收发了

四、安装dovecot,实现收邮件

1.安装:

# yum -y install dovecot

2.修改配置文件

# vim /etc/dovecot/dovecot.conf ,修改以下内容

protocols = pop3 imap lmtp

login_trusted_networks = 0.0.0.0/0

# cd /etc/dovecot/conf.d

# vim 10-auth.conf 修改如下内容

disable_plaintext_auth = yes

# vim 10-ssl.conf修改如下内容

ssl = no

# vim 10-mail.conf修改以下内容

mail_location = mbox:~/mail:INBOX=/var/mail/%u

mbox_write_locks = fcntl

3.创建用户,并且在用户家目录下创建mail/.imap/INBOX

mkdir -p mail/.imap/INBOX

4.启动服务,并将其添加至服务列表中

# service dovecot start

# chkconfig dovecot on

5.可以测试使用了

如:# telnet mail.fsy.com 110

Trying 10.0.146.18...

Connected to mail.fsy.com.

Escape character is '^]'.

+OK Dovecot ready.

user openstack

+OK

pass 123456

+OK Logged in.

LIST

+OK 5 messages:

1 283

2 276

3 278

4 278

5 281

.

retr 2

 

五、配置SASL (此时我的系统上有一个用户hadoop,密码为:123456

1.、编辑配置文件

# vim /etc/sysconfig/saslauthd

MECH=shadow

2、启动sasl服务,并使其开机自动启动

# service saslauthd start

# chkconfig saslauthd on

saslauthd -v: 显示当前主机saslauthd服务所支持的认证机制,默认为pam

3、测试命令进行测试

# testsaslauthd -u hadoop -p 123456

4、说明基于哪种方式实现认证

# vim /usr/lib/sasl2/smtpd.conf

添加如下内容:

pwcheck_method: saslauthd

mech_list: PLAIN LOGIN

5、重启sasl服务,使其读取smtpd.conf这一配置文件

# service saslauthd restart

6、测试是否支持SASL

# postconf -a

其中出现:cyrus,表明支持SASL

7、编辑postfix的配置文件,添加以下内容

# vim /etc/postfix/main.cf

############################CYRUS-SASL############################

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 $myhostname ESMTP,Warning: Version not Available!

释义:

broken_sasl_auth_clients = yes是否启用客户端sasl验证

smtpd_recipient_restrictions=

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拒绝非本域的收件人

smtpd_sasl_auth_enable = yes启用sasl认证功能

smtpd_sasl_local_domain = $myhostname本地主机不用认证

smtpd_sasl_security_options = noanonymous不主持匿名用户

smtpd_sasl_path = smtpdsmtpd要使用sasl功能

smtpd_banner =显示欢迎信息

 

为了显示效果,修改如下

mynetworks = 127.0.0.0/8

7、重启服务,可以测试!

[root@mail ~]# service postfix restart

8、注意:用户认证需要生成需要将用户名和密码转换为base64

[root@mail ~]# echo -n "hadoop" | openssl base64

[root@mail ~]# echo -n "123456" | openssl base64

 

测试:

测试结果:

[root@mail ~]# telnet localhost 25

Trying ::1...

telnet: connect to address ::1: Connection refused

Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

220 Welcome to our mail.fsy.com ESMTP,Warning: Version not Available!

auth login

334 VXNlcm5hbWU6

aGFkb29w

334 UGFzc3dvcmQ6

MTIzNDU2

235 2.7.0 Authentication successful

mail from:hadoop@fsy.com

250 2.1.0 Ok

rcpt to:hello@aol.com

250 2.1.5 Ok

data

354 End data with <CR><LF>.<CR><LF>

hello hao are you

.

250 2.0.0 Ok: queued as 76B841FDE5

quit   

221 2.0.0 Bye

Connection closed by foreign host.