如何在Linux中为虚拟域用户配置Postfix和Dovecot - 第2部分

在本文中,我们将介绍如何使用虚拟用户配置Postfix和Dovecot,以便在Linux服务器中通过STARTTLS发送和接收电子邮件流量。

在本系列的前一篇文章中,我们解释了如何使用phpMyAdmin安全地设置和管理邮件服务器数据库。

需求:

  1. 使用MariaDB安装Postfix邮件服务器和Dovecot - 第1部分
使用虚拟域用户配置Postfix和Dovecot

使用虚拟域用户配置Postfix和Dovecot - 第2部分

现在是时候来配置,这将使发送和接收电子邮件现实的内部程序:PostfixDovecot的 (处理传出和传入电子邮件,分别)。

配置Postfix邮件服务器

开始配置Postfix之前,这将是值得和幸福来看看它的手册在这里 ,将特别强调题为“ 新Postfix用户资料 」一节。 如果你这样做,你会发现它更容易遵循本教程。

在几句话,你应该知道,有两个配置文件Postfix的:

  1. /etc/postfix/main.cf文件 (Postfix配置参数请参考man 5 postconf有详细介绍)。
  2. /etc/postfix/master.cf(Postfix的主守护进程configuraton,见人5主进一步的细节)。

/etc/postfix/main.cf中,找到(或添加,如有必要)以下行,并确保它们符合如下所示的数值:

main.cf
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
dovecot_destination_recipient_limit = 1
message_size_limit = 4194304
readme_directory = no
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (CentOS)
smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem
smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
virtual_transport = dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

接下来的三个设置是特别重要的。 在黄色显示的文件,我们将配置Postfix的为Domains_tbl,Users_tblAlias_tbl表访问:

virtual_mailbox_domains = mysql:/etc/postfix/mariadb-vdomains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mariadb-vusers.cf
virtual_alias_maps = mysql:/etc/postfix/mariadb-valias.cf

请注意,您可以在上面选择不同的文件名,只要您确保创建它们并在其中插入以下内容即可。 在每种情况下,在第1部分与您选择的DBA用户的密码更换你的密码 ,或者你也可以使用MariaDB的根证书的用户名和密码下面。

此外,请确保您使用创建的电子邮件服务器数据库的确切相同的名称和表1中的部分

/etc/postfix/mariadb-vdomains.cf

mariadb-vdomains.cf
user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Domains_tbl WHERE DomainName='%s'

/etc/postfix/mariadb-vusers.cf

mariadb-vusers.cf
user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Users_tbl WHERE Email='%s'

/etc/postfix/mariadb-valias.cf

mariadb-valias.cf
user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT Destination FROM Alias_tbl WHERE Source='%s'

最后,不要忘了权限对这些文件更改为640:

# chmod 640 /etc/postfix/mariadb-vdomains.cf
# chmod 640 /etc/postfix/mariadb-vusers.cf
# chmod 640 /etc/postfix/mariadb-valias.cf

而所有权root用户和组Postfix

# chown root:postfix /etc/postfix/mariadb-vdomains.cf
# chown root:postfix /etc/postfix/mariadb-vusers.cf
# chown root:postfix /etc/postfix/mariadb-valias.cf

接下来,启用安全连接,我们需要确保以下设置被注释掉(或添加,如有必要) /etc/postfix/master.cf

master.cf
submission inet n       -       n       -       -       smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_reject_unlisted_recipient=no
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
pickup    unix  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
#virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache

:与开始的行缩进-o选项是至关重要的; 否则Postfix检查将返回一个错误:

检查Postfix配置

检查Postfix配置

在保存更改之前,请在文件底部添加以下行:

master.cf
dovecot   unix  -       n       n       -       -       pipe
flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}

在这一点上,必须检查Postfix是否可以访问数据库表和域帐户,我们在第一部分中创建别名。

要做到这一点,我们将使用postmap命令,一个实用程序来测试与表通信Postfix的运作过程中查找,但首先我们需要重新启动Postfix:

# systemctl postfix restart
# postmap -q linuxnewz.com mysql:/etc/postfix/mariadb-vdomains.cf
# postmap -q someotherdomain.com mysql:/etc/postfix/mariadb-vdomains.cf
# postmap -q howtoing@linuxnewz.com mysql:/etc/postfix/mariadb-vusers.cf
# postmap -q linuxsay@linuxnewz.com mysql:/etc/postfix/mariadb-vusers.cf
# postmap -q gacanepa@linuxnewz.com mysql:/etc/postfix/mariadb-vusers.cf
# postmap -q info@linuxnewz.com mysql:/etc/postfix/mariadb-valias.cf

在下面的图片我们可以看到,数据库中的现有记录中,则返回1。 否则,什么都不显示回屏幕。 在别名检查的情况下,请注意返回别名映射到的实际电子邮件帐户:

检查Postfix表通信

检查Postfix表通信

请注意,我们进行身份验证的每个电子邮件帐户设置凭据,我们只测试Postfix来检测数据库中的这些记录的能力。

因此,如果你得到比上述不同的输出,确保您使用的是mariadb-vdomains.cf,mariadb-vusers.cfmariadb-valias.cf有效的用户/密码(或任何你选择调用这些文件)。

配置Dovecot

作为一个IMAP / POP3服务器,Dovecot为用户提供了一种通过邮件用户代理 (MUA,或称客户端),如雷鸟Outlook,仅举几个例子来访问他们的邮件。

首先,让我们创建一个用户和一个组来处理电子邮件(我们需要这样做,因为我们的电子邮件帐户没有与系统用户关联)。 您可以使用另外一个UIDGID(5000我们下面将做),只要它不是在使用,是高数:

# groupadd -g 5000 vmail 
# useradd -g vmail -u 5000 vmail -d /home/vmail -m

Dovecot的设置分为多个配置文件(确保以下行取消注释和/或编辑它们以匹配下面的设置)。

/etc/dovecot/dovecot.conf

dovecot.cf
!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap pop3 lmtp
!include conf.d/*.conf
!include_try local.conf

/etc/dovecot/conf.d/10-auth.conf (只能通过SQL启用身份验证,并留下注释掉其他身份验证方法):

10-auth.conf
disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-sql.conf.ext

/etc/dovecot/conf.d/auth-sql.conf.ext (注意,我们将存储的/ home /语音邮件 ,您需要创建,如果它不存在,在里面一个名为yourdomain.com目录中的电子邮件我们的情况下,我们做的mkdir /home/vmail/linuxnewz.com来管理该域的电子邮件):

auth-sql.conf.ext
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/home/vmail/%d/%n/Maildir
}

首次收到此类帐户的电子邮件时,系统会创建用户帐户的个人收件箱。

/etc/dovecot/conf.d/10-mail.conf

10-mail.conf
mail_location = maildir:/home/vmail/%d/%n/Maildir
namespace inbox {
inbox = yes
}
mail_privileged_group = mail
mbox_write_locks = fcntl

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

10-master.conf
service imap-login {
inet_listener imap {
port = 143
}
inet_listener imaps {
}
}
service pop3-login {
inet_listener pop3 {
port = 110
}
inet_listener pop3s {
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
unix_listener auth-userdb {
mode = 0600
user = vmail
}
user = dovecot
}
service auth-worker {
user = vmail
}
service dict {
unix_listener dict {
}
}

/etc/dovecot/conf.d/10-ssl.conf (如果你正在使用由CA签名的证书计划更换证书和密钥路径):

10-ssl.conf
ssl = required
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

/etc/dovecot/dovecot-sql.conf.ext输入数据库信息,并在第1部分创建的管理用户的凭据。

重要提示 :如果您的密码包含星号(#)则需要在下面的例子表明附上连接字符串:

dovecot-sql.conf.ext
driver = mysql
connect = "host=127.0.0.1 dbname=EmailServer_db user=dba password=PassWith#Here"
default_pass_scheme = SHA512-CRYPT
password_query = SELECT Email as User, password FROM Users_tbl WHERE Email='%u';

此外,还可以对Dovecot配置日志是分开的Postfix在/etc/dovecot/conf.d/10-logging.conf

log_path = /var/log/dovecot.log

最后,确保Dovecot日志用户访问Dovecot

# chown vmail:dovecot /var/log/dovecot.log
# chmod 660 /var/log/dovecot.log

验证并修复Postifix配置,并在防火墙中启用SMTP,POP3和IMAP

如果在配置Postfix和/或Dovecot时遇到任何问题,而不是提交所有配置文件以获取帮助,您可以获得配置摘要(仅限未注释的行):

# postconf –n # Summary for /etc/postfix/main.cf
# postconf –M # Summary for /etc/postfix/master.cf
# doveconf –n # Summary of all configuration files for Dovecot

此外,请确保电子邮件收件箱都只有语音邮件可读。

# chown –R vmail:vmail /home/vmail

配置文件也应该是由语音邮件dovecot的用户读取:

# chown -R vmail:dovecot /etc/dovecot 
# chmod -R o-rwx /etc/dovecot 

最后,确保你通过防火墙启用SMTP,POP3IMAP:

# firewall-cmd --add-port=143/tcp
# firewall-cmd --add-port=143/tcp --permanent
# firewall-cmd --add-port=110/tcp
# firewall-cmd --add-port=110/tcp --permanent
# firewall-cmd --add-port=587/tcp
# firewall-cmd --add-port=587/tcp --permanent

将Thunderbird配置为Postfix的电子邮件客户端

通过防火墙确保电子邮件通信中使用的端口安全访问,是时候配置电子邮件客户端。 使用howtoing@linuxnewz.com及其相应的密码,以mail.linuxnewz.com一起为IMAP(或POP3)和SMTP服务器,我们就可以开始发送和接收电子邮件,并从该账户:

Postfix:配置Thunderbird客户端

Postfix:配置Thunderbird客户端

您可以放心地忽略显示的警告消息,因为您使用的证书不是由受信任的第三方CA签名的:

Thunderbird:添加安全异常

Thunderbird:添加安全异常

让我们撰写一个简短的测试电子邮件,然后点击发送:

撰写电子邮件Thunderbird

撰写电子邮件Thunderbird

当系统提示您接受传出服务器的自签名证书时,请如前所示确认:

Thunderbird:接受SSL证书

Thunderbird:接受SSL证书

最后,转到目标电子邮件,查看您是否收到刚刚发送的电子邮件。 如果是这样,回复一下,看看它是否被传递回源的电子邮件收件箱(否则,请参阅Postfix的日志位于/ var /日志/ maillog中或Dovecot的日志在/var/log/dovecot.log故障排除信息) :

验证Postfix和Dovecot电子邮件传递

验证Postfix和Dovecot电子邮件传递

您现在有一个工作的Postfix和Dovecot电子邮件服务器,并可以开始发送和接收电子邮件。

概要

在本文中,我们已经解释了如何配置Postfix和Dovecot来处理Linux服务器中的电子邮件流量。 如果这篇文章中指出的东西不能正常工作,请确保您抽出时间来检查的PostfixDovecot的文档。

请注意,虽然设置Postfix邮件服务器不是一个容易的任务,这是每个系统管理员的一个有益的经验。

如果通过文档会后你会发现自己仍然Postfix和/或Dovecot的挣扎,随时使用下面的评论表单给我们留言,我们会很乐意帮助你(别忘了上传到在线存储服务使用postconf并这篇文章中所述doveconf)作为检索的Postfix和Dovecot的配置。