Postfix+Dovecot+Saslauthd组合,系统用户和虚拟用户配置,demo下载


==============设置hostname====================

# vim /etc/hostname

mail.vip.usee88.com

vim /etc/hosts 添加

mail.vip.usee88.com

# reboot

==============安装telnet======================
yum -y install telnet
==================================================================
= 安装postfix/cyrus-sasl/dovecot =
==================================================================

======================安装postfix=================================
yum -y install postfix*
rpm -ql postfix|more
yum -y install openssl

postconf -d | grep mail_version
postconf -a
postconf -m

chkconfig --level 2345 postfix on

/etc/init.d/postfix restart

======================安装 cyrus-sasl===============================

rpm -qa | grep sasl

yum install cyrus-sasl*

vim /etc/sysconfig/saslauthd
---------------------------------------------------------
SOCKETDIR=/var/run/saslauthd

MECH=shadow

FLAGS=
---------------------------------------------------------
vim /etc/sasl2/smtpd.conf
---------------------------------------------------------
pwcheck_method: saslauthd
mech_list: plain login

log_level: 3
saslauthd_path:/var/run/saslauthd/mux
---------------------------------------------------------

chkconfig --level 2345 saslauthd on

systemctl restart saslauthd

# 测试
useradd tUuser && echo passtUuser | passwd --stdin tUuser

testsaslauthd -u tUuser -p 'passtUuser'

查看结果,是否success
//清理
userdel tUuser;
rm -rf /home/tUuser
rm -rf /var/spool/mail/tUuser
======================安装dovecot=================================

yum -y install dovecot dovecot-devel dovecot-mysql pam-devel

dovecot --version 查看版本

chkconfig --level 2345 dovecot on

systemctl restart dovecot

---------------------------------
systemctl status postfix
systemctl status saslauthd
systemctl status dovecot
==================================================================
= 配置postfix/cyrus-sasl/dovecot =
==================================================================

===================配置postfix===========================
---------------------------------------------------
1、 配置postfix--- main.cf
---------------------------------------------------
find / -name 'main.cf'

cp -p /etc/postfix/main.cf /etc/postfix/main.cf.bak
cp -p /etc/postfix/master.cf /etc/postfix/master.cf.bak

查看版本:如:postfix-2.10.1-9.el7.x86_64,
后面 /usr/share/doc/postfix-2.10.1 引用版本地址

--------------------------------------------------------
创建邮件专用账号,后面其他虚拟邮件账号收发邮件,均依赖该账号
注意:vmail, gid 5000, uid 5000
--------------------------------------------------------
groupadd -g 5000 vmail
useradd -g vmail -u 5000 -s /sbin/nologin vmail
mkdir -p /home/vmail/mail/.imap/INBOX/
chown -R vmail.vmail /home/vmail/
--------------------------------------------------------
rpm -qa | grep postfix


# vim /etc/postfix/main.cf
// /////////////////
// 详细配置 参阅 虚拟用户相关配置/postfix/main.cf
// /////////////////
---------------------------------------------------
2、 配置postfix--- master.cf
---------------------------------------------------
# vim /etc/postfix/master.cf

smtps inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes

添加 如下
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/dovecot-lda -f ${sender} -d ${recipient}

配置后,重启
/etc/init.d/postfix start
---------------------------------------------------
3、 数据库连接相关文件
---------------------------------------------------
// 安装数据库 省略

mysql -uroot -p123456q -e "create database postfix default character set utf8 collate utf8_bin;"
mysql -uroot -p123456q -e "grant all on postfix.* to 'postfix'@'%' identified by 'postfix';"
mysql -uroot -p123456q mysql -e "delete from user where user='';"
mysql -uroot -p123456q -e "flush privileges;"
mysql -upostfix -ppostfix
quit;

mkdir /etc/postfix/sql/
创建以下几个文件,内容详见 /postfix/sql/ 文件夹
vim /etc/postfix/sql/mysql_virtual_alias_maps.cf
vim /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf
vim /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
vim /etc/postfix/sql/mysql_virtual_domains_maps.cf
vim /etc/postfix/sql/mysql_virtual_mailbox_maps.cf
vim /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
vim /etc/postfix/sql/mysql_virtual_mailbox_limit_maps.cf
========================================================

==============配置dovecot======================

1、备份文件

cp -p /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.bak
cp -p /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.bak
cp -p /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.bak
cp -p /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.bak
cp -p /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.bak
cp -p /etc/dovecot/conf.d/10-logging.conf /etc/dovecot/conf.d/10-logging.conf.bak
cp -p /etc/dovecot/conf.d/15-lda.conf /etc/dovecot/conf.d/15-lda.conf.bak

2、 配置Dovecot--- dovecot.conf

vim /etc/dovecot/dovecot.conf

#如果不使用IPv6,请修改为

protocols = imap pop lmtp
listen = *
!include conf.d/*.conf

# 添加
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}

userdb {
driver = static
args = uid=5000 gid=5000 home=/home/vmail/%d/%n
}

# 添加 调试日志
auth_debug_passwords=yes
mail_debug=yes
auth_verbose=yes
auth_verbose_passwords=plain

3、 配置Dovecot--- 10-auth.conf

vim /etc/dovecot/conf.d/10-auth.conf

# 明文授权
disable_plaintext_auth = no
auth_mechanisms = plain login cram-md5
!include auth-system.conf.ext

4、 启用ssl认证 (启用ssl:nginx-key即可)
vim /etc/dovecot/conf.d/10-ssl.conf

ssl = yes
ssl_cert = ssl_key =
5、 配置Dovecot--- 10-mail.conf
vim /etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:/home/vmail/%d/%n/Maildir
first_valid_uid = 5000
first_valid_gid = 5000
mbox_write_locks = fcntl

6、启用dovecot的日志,如下:(注意这两个文件权限,设置777)
vim /etc/dovecot/conf.d/10-logging.conf

info_log_path = /var/log/dovecot_info.log
debug_log_path = /var/log/dovecot_dubug.log

7、 配置Dovecot--- 10-master.conf

vi /etc/dovecot/conf.d/10-master.conf

service imap-login {
inet_listener imap {
port = 143
}
}

service pop3-login {
inet_listener pop3 {
port = 110
}
}

service auth {
unix_listener auth-userdb {
mode = 0600
user = vmail
group = vmail
}

# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
}
}

8、修改15-lda.conf文件
vim /etc/dovecot/conf.d/15-lda.conf
postmaster_address = postmaster@vip.usee88.com

9、添加dovecot-sql.conf.ext文件

vim /etc/dovecot/dovecot-sql.conf.ext

driver = mysql
connect = host=localhost dbname=postfix user=postfix password=postfix
default_pass_scheme = MD5-CRYPT
password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1'
user_query = SELECT maildir, 5000 AS uid, 5000 AS gid, CONCAT('dict:storage=',floor(quota/1000),'proxy::quota') as quota FROM mailbox WHERE username = '%u' AND active='1'


# 然后启动服务
/etc/init.d/postfix restart
systemctl restart dovecot

10、调试

清空日志
echo ''>/var/log/maillog
tail -fn 20 /var/log/maillog
查看日志显示

另一个窗口逐句执行
systemctl restart saslauthd
systemctl restart dovecot
systemctl restart postfix

systemctl status saslauthd
systemctl status dovecot
systemctl status postfix

==================================================================
= postfixadmin配置 =
==================================================================

配置postfixadmi

vim path/to/postfixadmin/config.inc.php

$CONF['configured'] = true;

$CONF['default_language'] = 'cn';

$CONF['database_type'] = 'mysql';

$CONF['database_host'] = 'localhost';

$CONF['database_user'] = 'postfix';

$CONF['database_password'] = 'postfix';

$CONF['database_name'] = 'postfix';

$CONF['encrypt'] = 'dovecot:CRAM-MD5';

$CONF['dovecotpw'] = "/usr/bin/doveadm pw";

$CONF['default_aliases'] = array (
'abuse' => 'abuse@vip.usee88.com',
'hostmaster' => 'hostmaster@vip.usee88.com',
'postmaster' => 'postmaster@vip.usee88.com',
'webmaster' => 'webmaster@vip.usee88.com'
);

$CONF['footer_text'] = 'mail.usee88.com';

$CONF['footer_link'] = 'http://mail.vip.usee88.com';

$CONF['aliases'] = '1000';

$CONF['mailboxes'] = '1000';

$CONF['maxquota'] = '1000000';

$CONF['domain_quota_default'] = '1000000';

$CONF['quota'] = 'YES';

$CONF['domain_path'] = 'YES';

$CONF['domain_in_mailbox'] = 'NO';

$CONF['used_quotas'] = 'YES';

$CONF['fetchmail'] = 'YES';

$CONF['new_quota_table'] = 'YES';

修改 change-this-to-your.domain.tld => vip.usee88.com
修改 Return to change-this-to-your.domain.tld => vip.usee88.com

修改 $CONF['password_validation'] 项
'/([a-zA-Z].*){3}/' => 'password_no_characters 3',
改为
'/([a-zA-Z].*){1}/' => 'password_no_characters 1',

// 建立默认站点
==============其他相关命令======================
邮件客户端出现错误:-ERR [SYS/PERM] Permission denied

1、目录权限
chmod 0600 /var/spool/mail/*

2、用户账号密码是否错误
vim /etc/passwd

# 创建用户
useradd user_demo
#设置密码,会要求输入两次密码
passwd user_demo

cd /etc/postfix
useradd c1688; echo 123456q | passwd -- stdin c1688;
mkdir -p /home/c1688/mail/.imap/INBOX/
chown -R c1688.c1688 /home/c1688/
配置相关文件

3、查看端口是否启用
reboot
netstat -ntl // 核对 465 993,25端口是否启用

==============域名相关配置======================

主域名:demo.com
检验地址
https://www.kitterman.com/spf/validate.html

-------------一级域名发送邮件-------------------

pop3: mail.demo.com
smtp: mail.demo.com
email: test@demo.com

添加A、MX、TXT记录

记录值 记录类型 记录值
mail A mailServerIP
@ MX mail.demo.com
@ TXT v=spf1 ip4:mailServerIP a mx -all
_dmarc TXT v=DMARC1;p=quarantine;rua=mailto:admin@demo.com

-------------二级域名发送邮件-------------------

pop3: mail.vip.usee88.com
smtp: mail.vip.usee88.com
email: test@vip.usee88.com

添加A、MX、TXT记录

记录值 记录类型 记录值
mail.vip A mailServerIP
vip MX mail.vip.usee88.com
vip TXT v=spf1 ip4:mailServerIP a mx -all
_dmarc TXT v=DMARC1;p=quarantine;rua=mailto:admin@vip.usee88.com