Postfix和Dovecot配置Mysql虚拟用户
作者:互联网
安装:
1 |
yum install dovecot-mysql
|
新建数据库:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
CREATE DATABASE mailserver;
GRANT SELECT ON mailserver.* TO 'mailuser' @ '127.0.0.1' IDENTIFIED BY 'mailuserpass' ;
FLUSH PRIVILEGES ;
USE mailserver;
#虚拟域表
CREATE TABLE `virtual_domains` (
`id` int (11) NOT NULL auto_increment,
` name ` varchar (50) NOT NULL ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#虚拟用户表
CREATE TABLE `virtual_users` (
`id` int (11) NOT NULL auto_increment,
`domain_id` int (11) NOT NULL ,
` password ` varchar (106) NOT NULL ,
`email` varchar (100) NOT NULL ,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#虚拟用户别名
CREATE TABLE `virtual_aliases` (
`id` int (11) NOT NULL auto_increment,
`domain_id` int (11) NOT NULL ,
`source` varchar (100) NOT NULL ,
`destination` varchar (100) NOT NULL ,
PRIMARY KEY (`id`),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
添加测试数据:
INSERT INTO `mailserver`.`virtual_domains`
(` name `)
VALUES
( 'haiyun.me' );
INSERT INTO `mailserver`.`virtual_users`
(`domain_id`, ` password ` , `email`)
VALUES
( '1' , ENCRYPT( 'password' , CONCAT( '$6$' , SUBSTRING (SHA(RAND()), -16))), 'user@haiyun.me' );
INSERT INTO `mailserver`.`virtual_aliases`
(`domain_id`, `source`, `destination`)
VALUES
( '1' , 'alias@haiyun.me' , 'user@haiyun.me' );
|
Postfix添加以下配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
#使用dovecot lmtp交付虚拟域邮件,省却postfix配置用户邮件目录及权限问题
virtual_transport = lmtp:unix:private/dovecot-lmtp
#使用dovecot验证,后面dovecot配置
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
|
配置Postfix支持Mysql查询表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#虚拟域
/etc/postfix/mysql-virtual-mailbox-domains.cf
user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'
#虚拟用户
/etc/postfix/mysql-virtual-mailbox-maps.cf
user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_users WHERE email='%s'
#虚拟别名
/etc/postfix/mysql-virtual-alias-maps.cf
user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM virtual_aliases WHERE source='%s'
|
测试查询:
1 2 3 |
postmap -q haiyun.me mysql: /etc/postfix/mysql-virtual-mailbox-domains .cf
postmap -q user@haiyun.me mysql: /etc/postfix/mysql-virtual-mailbox-maps .cf
postmap -q alias @haiyun.me mysql: /etc/postfix/mysql-virtual-alias-maps .cf
|
Dovecot配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
/etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/var/mail/vhosts/%d/%n
/etc/dovecot/conf.d/10-auth.conf
auth_verbose = yes # 认证详细日志
auth_debug = yes # 认证debug
disable_plaintext_auth = no #开启明文验证
auth_mechanisms = plain login #支持验证方法
#!include auth-system.conf.ext #取消默认系统验证
!include auth-sql.conf.ext #使用mysql验证
/etc/dovecot/conf.d/auth-sql.conf.ext
#用户验证
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
#用户邮箱目录 %d为domain,%n为user
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}
/etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=127.0.0.1 dbname=mailserver user=mailuser password=mailuserpass
default_pass_scheme = SHA512-CRYPT
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';
/etc/dovecot/conf.d/10-master.conf
#lmtp服务,postfix通过lmtp交付邮件
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
#验证服务,postfix也通过此验证用户
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
unix_listener auth-userdb {
mode = 0600
user = vmail
#group =
}
user = dovecot
}
service auth-worker {
user = vmail
}
|
新建用户用以访问邮件目录数据:
1 2 |
useradd -M -u 5000 vmail -d /var/mail -s /sbin/nologin
chown -R vmail:vmail /var/mail/
|
参考:https://library.linode.com/email/postfix/postfix2.9.6-dovecot2.0.19-mysql
转自:https://www.haiyun.me/archives/953.html
标签:dovecot,etc,Postfix,Mysql,virtual,postfix,auth,mysql,Dovecot 来源: https://www.cnblogs.com/javalinux/p/15841644.html