专栏首页使用CentOS 7上的Postfix,Dovecot和MariaDB发送电子邮件

使用CentOS 7上的Postfix,Dovecot和MariaDB发送电子邮件

Postfix邮件传输代理(MTA)是一种高性能的开源电子邮件服务器系统。本指南将帮助您在CentOS 7 Linode上运行Postfix,使用Dovecot进行IMAP / POP3服务,并使用MariaDB(MySQL的替代品)来存储虚拟域和用户的信息。

在使用本指南之前,请确保您已按照入门指南进行操作并设置主机名。还要确保iptables 防火墙没有阻止任何标准邮件端口(25,465,587,110,995,143和993)。如果使用不同形式的防火墙,请确认它没有阻止任何所需的端口。

注意:本指南中的步骤需要root权限。请务必以root身份或使用sudo前缀运行以下步骤。有关权限的更多信息,请参阅我们的用户和组指南。

安装必需的软件包

  1. 安装或更新任何未完成的包: yum update
  2. CentOS主存储库中包含的Postfix版本不包含对MariaDB的支持; 因此,您需要从CentOS Plus存储库安装Postfix。在执行此操作之前,请为Postfix程序包[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
  3. 安装所需的包: yum --enablerepo=centosplus install postfix yum install dovecot mariadb-server dovecot-mysql 这将安装Postfix邮件服务器,MariaDB数据库服务器,Dovecot IMAP和POP守护程序,以及一些提供与身份验证相关的服务的支持包。

接下来,设置MariaDB数据库以处理虚拟域和用户。

为虚拟域和用户设置MariaDB

  1. 将MariaDB配置为在启动时启动,然后启动MariaDB: systemctl enable mariadb.service systemctl start mariadb.service
  2. 运行mysql_secure_installation。您将有机会更改MariaDB root密码,删除匿名用户帐户,禁用localhost之外的root登录,删除测试数据库以及重新加载权限表。建议您对这些选项回答“yes”: mysql_secure_installation
  3. 启动MariaDB shell: mysql -u root -p
  4. 为您的邮件服务器创建一个数据库并切换到它: CREATE DATABASE mail; USE mail;
  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;
  6. 创建虚拟域表: CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );
  7. 创建一个表来处理邮件转发: CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );
  8. 创建users表: CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );
  9. 创建transport表: CREATE TABLE transport ( domain varchar(128) NOT NULL default '', transport varchar(128) NOT NULL default '', UNIQUE KEY domain (domain) );
  10. 退出MariaDB shell: quit
  11. 通过编辑/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的。
  12. 重启数据库服务器: systemctl restart mariadb.service

接下来,执行其他Postfix配置以设置与数据库的通信。

配置Postfix以使用MariaDB

注意对于接下来的四个步骤,请替换之前输入mail_admin_passwordmail_admin密码。

  1. 为Postfix创建一个名为的虚拟域配置文件/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
  2. 为Postfix创建一个名为的虚拟转发文件/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
  3. 为Postfix创建一个名为的虚拟邮箱配置文件/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
  4. 为Postfix创建一个名为的虚拟电子邮件映射文件/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.1
  5. 为这些配置文件设置适当的权限和所有权: chmod o= /etc/postfix/mysql-virtual_*.cf chgrp postfix /etc/postfix/mysql-virtual_*.cf
  6. 为邮件处理创建用户和组。所有虚拟邮箱都将存储在此用户的主目录下: groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /home/vmail -m
  7. 完成Postfix配置所需的其余步骤。请务必server.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'
  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}
  9. 取消注释以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
  10. 配置Postfix以在启动时启动并首次启动服务: systemctl enable postfix.service systemctl start postfix.service

这样就完成了Postfix的配置。

配置Dovecot

  1. 备份/etc/dovecot/dovecot.conf: mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup
  2. 将以下内容复制到now-empty dovecot.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 }
  3. 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. 通过更改权限以允许dovecot组中的用户访问该文件来限制对文件的访问,同时拒绝访问其他用户: chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext chmod o= /etc/dovecot/dovecot-sql.conf.ext
  5. 配置Dovecot在开机时启动,并启动它: systemctl enable dovecot.service systemctl start dovecot.service
  6. 现在检查/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)
  7. 测试您的POP3服务器以确保它正常运行: yum install telnet telnet localhost pop3
  8. 终端应输出类似于以下内容的结果: Trying 127.0.0.1... Connected to localhost.localdomain. Escape character is '^]'. +OK Dovecot ready.
  9. 输入命令quit(按Esc可返回到命令行)返回shell。这样就完成了Dovecot的配置。接下来,您将确保正确配置别名。

配置邮件别名

  1. 编辑文件/etc/aliases,确保为您的组织正确设置postmasterroot指令: # / etc / aliases 内容如下 postmaster: root root: postmaster@example.com
  2. 更新别名 并重新启动Postfix: newaliases systemctl restart postfix.service

这样就完成了别名配置。接下来,测试Postfix以确保它正常运行。

测试Postfix

  1. 测试SMTP-AUTH和TLS的Postfix: telnet localhost 25
  2. 仍然连接时,发出以下命令: ehlo localhost
  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
  4. 敲命令quit可以终止Postfix连接。

接下来,使用域和电子邮件用户填充MariaDB数据库。

设置和测试域和用户

注意在继续之前,通过添加指向邮件服务器的完全限定域名的MX记录,修改您希望处理电子邮件的任何域的DNS记录。如果您希望处理电子邮件的域已存在MX记录,请删除它们或将它们设置为比邮件服务器更高的优先级。较小的优先级数字表示邮件传递的优先级较高,“0”是最高优先级。

在以下示例中,MariaDB shell用于添加对“example.com”域的支持,该域将具有名为“sales”的电子邮件帐户。

  1. 登录MariaDB shell: mysql -u root -p
  2. 切换到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')); quit
  3. 在访问任何新创建的电子邮件帐户之前,需要发送测试邮件以创建该用户的邮箱: yum install mailx mailx sales@example.com 按Ctrl+D完成消息。这样就完成了新域和电子邮件用户的配置。

注意:考虑到在单个邮件系统上托管大量虚拟域的可能性,电子邮件地址的用户名部分(即在@签名之前)不足以对邮件服务器进行身份验证。当电子邮件用户向服务器进行身份验证时,他们必须向其电子邮件客户端提供上面创建的完整电子邮件地址作为其用户

检查您的日志

发送测试邮件后,检查邮件日志以确保邮件已发送。

  1. 检查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
  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

现在,您可以测试以查看电子邮件服务器的用户将在其电子邮件客户端中看到的内容。

测试邮箱

  1. 要测试sales@example.com邮箱,请导航到邮箱目录/home/vmail/example.com/sales/Maildir并敲如下命令: find
  2. 您应该看到类似于以下内容的输出: . ./dovecot-uidlist ./cur ./new ./new/1285609582.P6115Q0M368794.li172-137 ./dovecot.index ./dovecot.index.log ./tmp
  3. 使用邮件客户端测试邮箱。对于此测试,建议使用mutt。如果默认情况下未安装,请安装yum install mutt,然后运行: mutt -f . 系统可能会提示您创建根邮箱。这不是必需的。
  4. 如果收件箱中有电子邮件,则已成功配置Postfix,Dovecot和MySQL!退出mutt按q

更多信息

有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。

本文的版权归 大大刺猬 所有,如需转载请联系作者。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python 优化办公(excel)

    使用pyinstaller: pyinstaller -F 你的.py文件 -i 你的ico图标(logo)

    大大刺猬
  • python 连接 ORACLE

    参考连接:https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html#ora...

    大大刺猬
  • 常见的Linux发行版本(Centos,redhat,Oracle Linux),常见源(YUM,NPM,PIP),常用软件

    写在前面:本文所提供的下载地址以官方的为主,各大平台的为辅.根据安全性和自己网速选择

    大大刺猬
  • 在CentOS 6上使用Postfix,Dovecot和MySQL发送电子邮件

    Postfix 邮件传输代理(MTA)是一种高性能的开源电子邮件服务器系统。本指南将帮助你在CentOS 6 Linode上运行 Postfix,使用 Dove...

    FesonX
  • 如何在 Debian 下配置邮件服务器

    本教程将讨论如何在Debian(或Ubuntu)配置一个可工作的邮件服务器。我们知道在邮件服务器使用的主要协议有SMTP、POP和IMAP。在本教程中,SMTP...

    Debian社区
  • linux命令基础(3)

    6、复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符; :%s/^[[:space:]]...

    py3study
  • Java 8 新特性(一)lambda表达式

    Java 9 好像也快出了,不过我连Java 8的新特性都还没认真研究过,所以这几篇文章就是来介绍Java 8的新特性的。首先,第一个重要的特性就是传说中的la...

    乐百川
  • Python 拓展之特殊函数

    今天给大家介绍几个比较特殊的函数,他们具有函数式编程的特点,有人将它们视为 Python 可进行 “函数式编程” 的见证,至于什么是函数式编程,不是本篇文章的重...

    Rocky0429
  • 腾讯WeTest移动测试沙龙邀请【第三期】——性能测试深圳专场邀您参与!

                     测试开发者的共同关注! 性能测试深圳专场 ? 8月27日下午14:30~17:30 ? 深圳 腾讯大厦 您将收获 1、...

    WeTest质量开放平台团队
  • 腾讯WeTest移动测试沙龙邀请【第三期】——性能测试深圳专场邀您参与!

                     测试开发者的共同关注! 性能测试深圳专场 ? 8月27日下午14:30~17:30 ? 深圳 腾讯大厦 您将收获 1、 ...

    WeTest质量开放平台团队

扫码关注云+社区

领取腾讯云代金券