网站搜索

如何安全地设置 Postfix 邮件服务器和 Dovecot 以及数据库 (MariaDB) - 第 1 部分


在这个三篇文章系列中,我们将讨论如何在CentOS 7机器中设置具有防病毒和垃圾邮件保护功能的Postfix邮件服务器。请注意,这些说明也适用于其他发行版,例如 RHEL/FedoraDebian/Ubuntu

我们的计划包括将电子邮件帐户和别名存储在 MariaDB 数据库中,这是为了我们的方便,将通过 phpMyAdmin 进行管理。

如果您选择不安装 phpMyAdmin,或者正在使用仅 CLI 服务器,我们还将提供等效的代码来创建将在本系列中使用的数据库表。

由于保持邮件服务器正常运行是通常分配给系统管理员和工程师的基本任务之一,因此我们还将提供一些技巧,以便在生产环境中有效运行此关键服务。

在 DNS 中为域创建 A 和 MX 记录

在继续之前,必须满足一些先决条件:

1.您需要通过域名注册商注册一个有效的域名。在本系列中,我们将使用通过 GoDaddy 注册的 www.linuxnewz.com

2. 该域名必须指向您的 VPS 或云托管提供商的外部 IP。如果您自行托管邮件服务器,则可以使用 FreeDNS 提供的服务(需要注册)。

无论如何,您还必须为您的域设置 AMX 记录(您可以在 Google 的此常见问题解答中了解有关 MX 记录的更多信息)。

添加后,您可以使用 MxToolboxViewDNS 等在线工具查找它们,以确保它们设置正确。

重要:请注意,可能需要一段时间(1-2 天)才能传播 DNS 记录并且您的域可用。同时,您可以通过 IP 地址访问您的 VPS 来执行以下任务。

3. 配置您的 VPS 的FQDN完全限定域名):

hostnamectl set-hostname yourhostname

设置系统主机名,然后按如下方式编辑 /etc/hosts(替换 AAA.BBB.CCC.DDDyourhostname >yourdomain 与您的服务器的公共 IP、您的主机名和您的注册域):

AAA.BBB.CCC.DDD yourhostname.yourdomain.com       yourhostname

其中 yourhostname 是之前使用 hostnamectl 命令设置的系统主机名。

安装所需软件包

4. 要安装所需的软件包,例如 Apache、Postfix、Dovecot、MariaDB、PhpMyAdmin、SpamAssassin、ClamAV 等,您需要启用 EPEL 存储库:

yum install epel-release

5.完成上述步骤后,安装必要的软件包:

在基于 CentOS 的系统中:

yum update && yum install httpd httpd-devel postfix dovecot dovecot-mysql spamassassin clamav clamav-scanner clamav-scanner-systemd clamav-data clamav-update mariadb mariadb-server php phpMyAdmin

在 Debian 及其衍生版本中:

aptitude update && aptitude install apache2 postfix dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql spamassassin clamav clamav-daemon clamav-base mariadb-client mariadb-server php5 phpMyAdmin

6.启动并启用网络和数据库服务器:

在基于 CentOS 的系统中:

systemctl enable httpd mariadb
systemctl start httpd mariadb

在 Debian 及其衍生版本中:

systemctl enable apache2 mariadb
systemctl start apache2 mariadb

当安装完成并且上述服务启用并运行时,我们将首先设置数据库和表来存储有关 Postfix 邮件帐户的信息。

创建 Postfix 邮件帐户数据库

为简单起见,我们将使用 phpMyAdmin,这是一个旨在通过 Web 界面处理 MySQL/MariaDB 数据库管理的工具,以创建和管理电子邮件数据库。

然而,为了登录并使用这个工具,我们需要按照以下步骤操作:

7. 启用 MariaDB 帐户(您可以通过从命令行运行 mysql_secure_installation 实用程序、为用户 root 分配密码以及设置该工具建议的默认设置,除了“禁止远程 root 登录?”:

或者以其他方式创建一个新的数据库用户:

MariaDB [(none)]> CREATE USER 'dba'@'localhost' IDENTIFIED BY 'YourPasswordHere';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON * . * TO 'dba'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;

使用证书保护 Apache

8.由于我们将使用网络应用程序来管理电子邮件服务器数据库,因此我们需要采取必要的预防措施来保护与服务器的连接。否则,我们的 phpMyAdmin 凭据将以纯文本形式通过网络传输。

要在服务器中设置传输层安全性 (TLS),请按照 RHCE 系列第 8 部分中概述的步骤操作:通过 TLS 实施 HTTPS在继续操作之前,请先使用 Apache 的网络安全服务 (NSS)。

注意:如果您无权访问服务器控制台,则需要找到另一种方法来在密钥创建过程中生成必要的熵。在这种情况下,您可能需要考虑安装rng-tools并运行rngd -r /dev/urandom

配置和保护 PhpMyAdmin

9./etc/httpd/conf.d/phpMyAdmin.conf (CentOS) 或 /etc/phpmyadmin/apache 中。在confDebian及其衍生版本)中,找到所有出现的以下行并确保它们指向您服务器的公共IP:

Require ip AAA.BBB.CCC.DDD
Allow from AAA.BBB.CCC.DDD

此外,禁用默认别名并创建一个新别名来访问您的 phpMyAdmin 登录页面。这将有助于保护网站免受以 www.yourdomain.com/phpmyadminwww.yourdomain.com/phpMyAdmin 为目标的机器人和外部攻击者的攻击。

#Alias /phpMyAdmin /usr/share/phpMyAdmin
#Alias /phpmyadmin /usr/share/phpMyAdmin
Alias /managedb /usr/share/phpMyAdmin

另外,在 中添加以下行:

Require all granted

为域创建 Apache VirtualHost

10. 确保您的域已添加到启用的网站中。创建 /etc/httpd/sites-available/linuxnewz.com.conf (CentOS) 或 /etc/apache2/sites-available/linuxnewz.com (Debian) 包含以下内容(确保 DocumentRootsites-availablesites-enabled > 目录存在):

<VirtualHost *:80>
    ServerName www.linuxnewz.com
    ServerAlias linuxnewz.com
    DocumentRoot /var/www/linuxnewz.com/public_html
    ErrorLog /var/www/linuxnewz.com/error.log
    CustomLog /var/www/linuxnewz.com/requests.log combined
    Options Indexes FollowSymLinks
</VirtualHost>

和符号链接:

在 CentOS 上:
ln -s /etc/httpd/sites-available/linuxnewz.com.conf /etc/httpd/sites-enabled/linuxnewz.com.conf
在 Debian 上:
a2ensite linuxnewz.com

你就完成了。

设置 Postfix 电子邮件数据库

11. 现在您可以在 https://www.yourdomain.com/managementb 打开您的 phpMyAdmin 界面(请注意,managementb< 是我们之前为 phpMyAdmin 数据目录设置的别名)。

如果暂时不起作用(这可能是由于传播延迟或缺少 DNS 记录配置造成的),您可以尝试使用服务器的公共 IP 地址而不是 www.yourdomain.com

无论如何,登录 phpMyAdmin 后您将看到以下界面。点击左侧的新建

输入数据库的名称(在本例中为EmailServer_db,无需选择排序规则),然后单击创建

12. 在下一个屏幕上,为第一个表选择一个名称(我们将在其中存储该邮件服务器将管理的域)。

请注意,即使在本系列中我们仅管理一个域,您也可以稍后添加更多域)以及您想要的域数量,然后单击开始。系统将提示您命名并配置这两个字段,您可以按照下图所示安全地继续操作:

当您在Index下为DomainId选择PRIMARY时,接受默认值并单击Go

或者,您可以单击预览 SQL 以查看底层代码:

CREATE TABLE `EmailServer_db`.`Domains_tbl` ( `DomainId` INT NOT NULL AUTO_INCREMENT , `DomainName` VARCHAR(50) NOT NULL , PRIMARY KEY (`DomainId`)) ENGINE = InnoDB;

准备好后,点击保存确认更改。然后,您可以单击 EmailServer_db 下的新建继续创建表:

13. 现在按照以下步骤创建其余的表。单击SQL选项卡并为每个数据库对象输入指定的代码。

请注意,在本例中,我们选择使用 SQL 查询创建表,因为必须在不同表之间建立关系:

用户表

CREATE TABLE `Users_tbl` ( 
    `UserId` INT NOT NULL AUTO_INCREMENT,  
    `DomainId` INT NOT NULL,  
    `password` VARCHAR(100) NOT NULL,  
    `Email` VARCHAR(100) NOT NULL,  
    PRIMARY KEY (`UserId`),  
    UNIQUE KEY `Email` (`Email`),  
    FOREIGN KEY (DomainId) REFERENCES Domains_tbl(DomainId) ON DELETE CASCADE 
) ENGINE = InnoDB; 

您应该收到一条确认消息(如果没有,phpMyAdmin 将提示语法错误):

别名_tbl

CREATE TABLE `Alias_tbl` (
    `AliasId` INT NOT NULL AUTO_INCREMENT, 
    `DomainId` INT NOT NULL, 
    `Source` varchar(100) NOT NULL, 
    `Destination` varchar(100) NOT NULL, 
    PRIMARY KEY (`AliasId`), 
    FOREIGN KEY (DomainId) REFERENCES Domains_tbl(DomainId) ON DELETE CASCADE
) ENGINE = InnoDB;

(单击底部的开始继续创建表)。

到目前为止,您应该具有以下数据库结构:

这意味着您已准备好开始在下一部分中添加一些记录。

创建 Postfix 域、用户和别名

14.我们现在将向三个表中插入以下记录。 [email [email  的密码以及 INSERT INTO Users_tbl 语句将被加密。

另请注意,发送到[email 的电子邮件将被重定向到[email 

INSERT INTO Domains_tbl (DomainName) VALUES ('linuxnewz.com');  
INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('PasswordForFirstEmailAccount', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email ');  
INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('PasswordForSecondEmailAccount', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email ');  
INSERT INTO Alias_tbl (DomainId, Source, Destination) VALUES (1, '[email ', '[email ');

添加了域、两个用户帐户和电子邮件别名后,我们准备好在本系列的下一篇文章中继续设置我们的电子邮件服务器,其中我们将配置 DovecotPostfix

概括

在本文中,我们列出了在 CentOS 7 VPS 中安装 Postfix 电子邮件服务器所需的软件包,并解释了如何使用 phpMyAdmin 管理底层数据库。

在接下来的两篇文章中,我们将回顾这两个程序的配置,这两个程序将负责我们域的电子邮件分发(第 2 部分),并向您展示如何添加针对垃圾邮件和病毒的保护( >第 3 部分)用于您的服务器。

在此之前,如果您有任何问题或意见,请随时使用下面的表格与我们联系。