一、邮件服务依赖于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.建立postfix和postdrop组和用户
# 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 参数指定您的域名,默认情况下,postfix将myhostname的第一部分删除而作为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、重启服务,可以测试!
[[email protected] ~]# service postfix restart
8、注意:用户认证需要生成需要将用户名和密码转换为base64
[[email protected] ~]# echo -n "hadoop" | openssl base64
[[email protected] ~]# echo -n "123456" | openssl base64
测试:
测试结果:
[[email protected] ~]# 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:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
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.