Postfix邮件传输代理(MTA)是一种高性能的开源电子邮件服务器系统。本指南将帮助您在CentOS 7 Linode上运行Postfix,使用Dovecot进行IMAP / POP3服务,并使用MariaDB(MySQL的替代品)来存储虚拟域和用户的信息。
在使用本指南之前,请确保您已按照入门指南进行操作并设置主机名。还要确保iptables 防火墙没有阻止任何标准邮件端口(25,465,587,110,995,143和993)。如果使用不同形式的防火墙,请确认它没有阻止任何所需的端口。
注意:本指南中的步骤需要root权限。请务必以root身份或使用
sudo
前缀运行以下步骤。有关权限的更多信息,请参阅我们的用户和组指南。
[base]
和[updates]
存储库添加排除项,以防止它被没有MariaDB支持的更新覆盖:
修改/etc/yum.repos.d/CentOS-Base.repo,内容如下:
[base]
name=CentOS-$releasever - Base
exclude=postfix
# released updates 发布更新
[updates]
name=CentOS-$releasever - Updates
exclude=postfix接下来,设置MariaDB数据库以处理虚拟域和用户。
mysql_secure_installation
。您将有机会更改MariaDB root密码,删除匿名用户帐户,禁用localhost之外的root登录,删除测试数据库以及重新加载权限表。建议您对这些选项回答“yes”:
mysql_secure_installationmail_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;/etc/my.cnf
将MariaDB绑定到localhost(127.0.0.1),并将以下内容添加到文件(/etc/my.cnf)的[mysqld]
部分:
修改/etc/my.cnf,内容如下:
bind-address=127.0.0.1
这是Postfix能够与数据库服务器通信所必需的。如果您将MariaDB设置为侦听另一个IP地址(例如内部IP),则需要127.0.0.1
在Postfix配置步骤中替换此IP地址。这是不建议在可公开访问的IP地址,运行MariaDB的。接下来,执行其他Postfix配置以设置与数据库的通信。
注意对于接下来的四个步骤,请替换之前输入
mail_admin_password
的mail_admin
密码。
/etc/postfix/mysql-virtual_domains.cf
:
# /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/etc/postfix/mysql-virtual_forwardings.cf
:
# /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/etc/postfix/mysql-virtual_mailboxes.cf
:
# /etc/postfix/mysql-virtual_mailboxes.cf1 2 3 4 5
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/etc/postfix/mysql-virtual_email2email.cf
:
# /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.1server.example.com
使用Linode的完全限定域名替换。如果您计划使用自己的SSL证书和密钥,请/etc/pki/dovecot/private/dovecot.pem
使用相应的路径替换:
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'/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}submission
和开头的两行和smtps
从-o
每行开始的行。该/etc/postfix/master.cf
文件的第一部分应类似于以下内容:
# /etc/postfix/master.cf
#
# Postfix master process configuration file. For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
# Do not forget to execute "postfix reload" after editing this file.
#==================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# #==================================================
#服务 类型 私有 命令
smtp inet n - - - - smtpd #注意:这行没有注释
#smtp inet n - - - 1 postscreen
#smtpd pass - - - - - smtpd
#dnsblog unix - - - - 0 dnsblog
#tlsproxy unix - - - - 0 tlsproxy
submission inet n - - - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
smtps inet n - - - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING这样就完成了Postfix的配置。
/etc/dovecot/dovecot.conf
:
mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backupdovecot.conf
文件中。example.com
在第37行替换系统的域名,在第5行和第6行替换您的ssl密钥和证书(如果有):
# /etc/dovecot/dovecot.conf
protocols = imap pop3
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/home/vmail/%d/%n/Maildir
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </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
}/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';dovecot
组中的用户访问该文件来限制对文件的访问,同时拒绝访问其他用户:
chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext
chmod o= /etc/dovecot/dovecot-sql.conf.ext/var/log/maillog
以确保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)quit(按Esc可返回到命令行)
返回shell。这样就完成了Dovecot的配置。接下来,您将确保正确配置别名。/etc/aliases
,确保为您的组织正确设置postmaster
和root
指令:
# / etc / aliases 内容如下
postmaster: root
root: postmaster@example.com这样就完成了别名配置。接下来,测试Postfix以确保它正常运行。
quit
可以终止Postfix连接。接下来,使用域和电子邮件用户填充MariaDB数据库。
注意在继续之前,通过添加指向邮件服务器的完全限定域名的MX记录,修改您希望处理电子邮件的任何域的DNS记录。如果您希望处理电子邮件的域已存在MX记录,请删除它们或将它们设置为比邮件服务器更高的优先级。较小的优先级数字表示邮件传递的优先级较高,“0”是最高优先级。
在以下示例中,MariaDB shell用于添加对“example.com”域的支持,该域将具有名为“sales”的电子邮件帐户。
mail
数据库,添加对您的域的支持,并创建一个电子邮件帐户。请务必使用您选择的电子邮件和强密码替换example.com
您的域名:sales@example.compassword
USE mail;
INSERT INTO domains (domain) VALUES ('example.com');
INSERT INTO users (email, password) VALUES ('sales@example.com', ENCRYPT('password'));
quitCtrl+D
完成消息。这样就完成了新域和电子邮件用户的配置。注意:考虑到在单个邮件系统上托管大量虚拟域的可能性,电子邮件地址的用户名部分(即在
@
签名之前)不足以对邮件服务器进行身份验证。当电子邮件用户向服务器进行身份验证时,他们必须向其电子邮件客户端提供上面创建的完整电子邮件地址作为其用户
发送测试邮件后,检查邮件日志以确保邮件已发送。
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
/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现在,您可以测试以查看电子邮件服务器的用户将在其电子邮件客户端中看到的内容。
sales@example.com
邮箱,请导航到邮箱目录/home/vmail/example.com/sales/Maildir
并敲如下命令:
findyum install mutt
,然后运行:
mutt -f .
系统可能会提示您创建根邮箱。这不是必需的。q
。
有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。