CentOS 7使用PostfixDovecot及MariaDB搭建邮箱服务器
Posted PhiloChou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS 7使用PostfixDovecot及MariaDB搭建邮箱服务器相关的知识,希望对你有一定的参考价值。
1. 安装软件
1.1 更新yum源
yum update
1.2 排除默认Postfix源
CentOS 7主源中自带的Postfix版本并不支持MariaDB;所以,我们将从CentOS Plus源中进行安装。在此之前,我们在[base]
和[updates]
源中过滤掉Postfix,防止版本更新时,被不支持MariaDB的Postfix覆盖。
文件:/etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
exclude=postfix
#released updates
[updates]
name=CentOS-$releasever - Updates
exclude=postfix
1.3 安装必须的软件
yum --enablerepo=centosplus install postfix
yum install dovecot mariadb-server dovecot-mysql
以上安装了Postfix、Dovecot及MariaDB
下面,我们配置MariaDB数据库
2. 设置MariaDB
2.1 让MariaDB随系统启动
systemctl enable mariadb.service
/bin/systemctl start mariadb.service
2.2 初始化MariaDB
执行mysql_secure_installation
命令进行初始化。在初始化过程中,建议我们修改MariaDB的root密码、移除匿名账号、禁止root远端登录及移除测试数据库,最后会重新加载权限表。
mysql_secure_installation
2.3 打开MariaDB控制台
mysql -u root -p
2.4 创建邮箱服务数据库mail
CREATE DATABASE mail;
USE mail;
2.5 创建邮箱管理员账号mail_admin
创建后,我们为他分配mail
数据库的读写权限。
注意:将下面语句中的
mail_admin_password
替换为您自己的强密码
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'mail_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost.localdomain' IDENTIFIED BY 'mail_admin_password';
FLUSH PRIVILEGES;
2.6 创建虚拟域(virtual domains)表:
CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain)
);
2.7 创建邮件转发(mail forwarding)表
CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source)
);
2.8 创建用户(users)表
CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
PRIMARY KEY (email)
);
2.9 创建邮件传输(transports)表
CREATE TABLE transport (
domain varchar(128) NOT NULL default '',
transport varchar(128) NOT NULL default '',
UNIQUE KEY domain (domain)
);
2.10 退出MariaDB控制台
quit
2.11 绑定MariaDB到本机(127.0.0.1)
文件:/etc/my.cnf
[mysqld]
bind-address=127.0.0.1
2.12 重启数据库
/bin/systemctl restart mariadb.service
3. 配置Postfix并关联MariaDB
注意:下面的过程中,请将
mail_admin_password
替换为您在上面的操作中所设置的密码。
3.1 创建虚拟域配置文件
文件:/etc/postfix/mysql-virtual_domains.cf
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT domain AS virtual FROM domains WHERE domain='%s'
hosts = 127.0.0.1
3.2 创建虚拟转发配置文件
文件:/etc/postfix/mysql-virtual_forwardings.cf
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1
3.3 创建虚拟邮箱配置文件
文件:/etc/postfix/mysql-virtual_mailboxes.cf
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'
hosts = 127.0.0.1
3.4 创建虚拟邮箱映射文件
文件:/etc/postfix/mysql-virtual_email2email.cf
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT email FROM users WHERE email='%s'
hosts = 127.0.0.1
3.5 修改以上各配置文件的权限
chmod o= /etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cf
3.6 创建系统用户及组,用来处理邮件。并建立虚拟邮箱的存放路径
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m
3.7 完成剩余的Postfix配置。
注意:用自己的主机名替换下面的
server.example.com
postconf -e 'myhostname = server.example.com'
postconf -e 'mydestination = localhost, localhost.localdomain'
postconf -e 'mynetworks = 127.0.0.0/8'
postconf -e 'inet_interfaces = all'
postconf -e 'message_size_limit = 30720000'
postconf -e 'virtual_alias_domains ='
postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'
postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'
postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'
postconf -e 'virtual_mailbox_base = /home/vmail'
postconf -e 'virtual_uid_maps = static:5000'
postconf -e 'virtual_gid_maps = static:5000'
postconf -e 'smtpd_sasl_type = dovecot'
postconf -e 'smtpd_sasl_path = private/auth'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_authenticated_header = yes'
postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination' postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem'
postconf -e 'smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem'
postconf -e 'virtual_create_maildirsize = yes'
postconf -e 'virtual_maildir_extended = yes'
postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'
postconf -e 'virtual_transport = dovecot'
postconf -e 'dovecot_destination_recipient_limit = 1'
3.8 编辑/etc/postfix/master.cf
文件,在文件底部添加Dovecot服务
文件:/etc/postfix/master.cf
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f $sender -d $recipient
3.9 配置Postfix随系统启动
systemctl enable postfix.service
/bin/systemctl start postfix.service
至此我们完成了Postfix的全部配置
4. 配置Dovecot
4.1 备份/etc/dovecot/dovecot.conf
文件
mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup
4.2 新建配置文件
文件:/etc/dovecot/dovecot.conf
注意:替换第37行的
example.com
为您自己的域
protocols = imap pop3
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/home/vmail/%d/%n/Maildir
ssl_cert_file = /etc/pki/dovecot/certs/dovecot.pem
ssl_key_file = /etc/pki/dovecot/private/dovecot.pem
namespace
type = private
separator = .
prefix = INBOX.
inbox = yes
service auth
unix_listener auth-master
mode = 0600
user = vmail
unix_listener /var/spool/postfix/private/auth
mode = 0666
user = postfix
group = postfix
user = root
service auth-worker
user = root
protocol lda
log_path = /home/vmail/dovecot-deliver.log
auth_socket_path = /var/run/dovecot/auth-master
postmaster_address = postmaster@example.com
protocol pop3
pop3_uidl_format = %08Xu%08Xv
passdb
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
userdb
driver = static
args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
4.3 Dovecot与MariaDB关联
我们需要创建/etc/dovecot/dovecot-sql.conf.ext
文件,并加入如下内容:
注意:替换
mail_admin_password
文件:/etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect =
host=127.0.0.1
dbname=mail
user=mail_admin
password=mail_admin_password
default_pass_scheme = CRYPT
password_query = SELECT email as user, password FROM users WHERE email='%u';
4.4 修改以上配置文件的权限
chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext
chmod o= /etc/dovecot/dovecot-sql.conf.ext
4.5 配置Dovecot随系统启动
systemctl enable dovecot.service
/bin/systemctl start dovecot.service
4.6 检查Dovecot的启动日志是否正常
文件:/var/log/maillog
Mar 18 17:10:26 localhost postfix/postfix-script[3274]: starting the Postfix mail system Mar 18 17:10:26 localhost postfix/master[3276]: daemon started -- version 2.10.1, configuration /etc/postfix Mar 18 17:12:28 localhost dovecot: master: Dovecot v2.2.10 starting up for imap, pop3 (core dumps disabled)
4.7 使用telnet
工具测试POP3
yum install telnet
telnet localhost pop3
4.8 终端应该会出现如下提示
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
4.9 输入quit
退出控制台。
quit
至此,我们完成了Dovecot配置。下一步,我们要确保别名是否正常配置。
5. 配置邮箱别名
5.1 编辑文件/etc/aliases
,确保postmaster
和root
按照您的信息进行配置:
文件:/etc/aliases
postmaster: root
root: postmaster@example.com
5.2 编辑别名,并重启Postfix
newaliases
/bin/systemctl restart postfix.service
至此,我们完成了别名配置。下一步,我们来测试Postfix是否正常。
6. 测试Postfix
6.1 测试Postfix的SMTP-AUTH和TLS
telnet localhost 25
6.2 保持连接,并输入如下命令
ehlo localhost
6.3 您将会看到类似信息
250-hostname.example.com
250-PIPELINING
250-SIZE 30720000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN
250-AUTH=PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
6.4 输入quit
退出测试。下一步,我们创建数据库用来管理域及用户。
7 创建测试域及用户
注意:开始继续前,请先作好域名的DNS及MX相关设置。
在下面的例子中,我们假设使用”example.com”这个域,并创建”sales@example.com”邮箱
7.1 打开MariaDB控制台
mysql -u root -p
7.2 切换到mail
数据库,创建域及用户
注意:下面的
password
请用强密码
USE mail;
INSERT INTO domains (domain) VALUES ('example.com');
INSERT INTO users (email, password) VALUES ('sales@example.com', ENCRYPT('password'));
quit
7.3 使用mailx
小工具发送测试邮件
yum install mailx
mailx sales@example.com
使用Ctrl+D
完成消息。Cc:
一栏我们可以留空。执行完后,我们的邮件系统会自动创建一个新的域和邮箱用户。
8. 检查日志
上面的发送测试完成后,我们需要检查一下日志,看看邮件是否可以正常送达。
8.1 检查/var/log/maillog
。我们应该会看到类似的内容:
文件:/var/log/maillog
Mar 18 17:18:47 localhost postfix/cleanup[3427]: B624062FA: message-id=<20150318171847.B624062FA@example.com>
Mar 18 17:18:47 localhost postfix/qmgr[3410]: B624062FA: from=<root@example.com>, size=515, nrcpt=1 (queue active)
Mar 18 17:18:47 localhost postfix/pipe[3435]: B624062FA: to=<sales@example.com>, relay=dovecot, delay=0.14, delays=0.04/0.01/0/0.09, dsn=2.0.0, $
Mar 18 17:18:47 localhost postfix/qmgr[3410]: B624062FA: removed
8.2 检查Dovecot日志
文件:/home/vmail/dovecot-deliver.log
deliver(<sales@example.com>): 2011-01-21 20:03:19 Info: msgid=<<20110121200319.E1D148908@hostname.example.com>>: saved mail to INBOX
下面,我们使用邮箱客户端进行测试。
9. 测试邮箱客户端
9.1 测试sales@example.com
的邮箱
cd /home/vmail/example.com/sales/Maildir
find
如果系统禁用了root账户,可能导致无法进入vmail目录。
可以使用su root
临时提升权限
9.2 我们可以看到如下信息:
.
./dovecot-uidlist
./cur
./new
./new/1285609582.P6115Q0M368794.li172-137
./dovecot.index
./dovecot.index.log
./tmp
9.3 使用linux下的邮箱客户端mutt
进行测试
yum install mutt
mutt -f .
如果被问到是否需要创建root邮箱,可以随意回答
9.4 查看收件箱中的邮件
如果在收件箱中看到邮件,说明Postfix、Dovecot、和MySQL都已经配置成功了!输入q
退出mutt
10. 更多内容
下面是一些官方的文档。
参考:Email with Postfix, Dovecot and MariaDB on CentOS 7 - Linode Guides & Tutorials
以上是关于CentOS 7使用PostfixDovecot及MariaDB搭建邮箱服务器的主要内容,如果未能解决你的问题,请参考以下文章