在CentOS 7中设置Postfix邮件服务器
在这个3系列文章中 ,我们将讨论如何建立与防病毒和垃圾邮件保护Postfix邮件服务器在CentOS 7箱。 请注意,这些说明也适用于其他的发行版,例如RHEL / Fedora和于 Debian / Ubuntu。
我们的计划包括在存储电子邮件帐户和别名,在MariaDB的数据库,这是我们的方便,将通过phpMyAdmin的管理。
如果您选择不安装phpMyAdmin的 ,或者正在处理的仅CLI的服务器,我们也将提供等效的代码来创建将在本系列中使用的数据库表。
由于保持邮件服务器启动和运行是通常分配给系统管理员和工程师的基本任务之一,我们还将提供一些提示,在生产环境中有效地运行此关键服务。
在DNS中为域创建A和MX记录
在继续进行之前,必须满足一些先决条件:
1.您需要通过域名注册机构注册的有效域名。 在这个系列中,我们将使用www.linuxnewz.com
,它是通过GoDaddy的注册。
2.这类域必须指向你的VPS或云托管服务提供商的外部IP。 如果你是自托管你的邮件服务器,您可以使用所提供的服务FreeDNS (需要注册)。
在任何情况下,你必须建立A
与MX
记录为您的域,以及(您可以了解更多关于MX记录此FAQ从谷歌)。
添加完毕后,你可以看看他们使用在线工具,如MxToolbox或ViewDNS,以确保它们设置正确。
重要提示 :请注意,这可能需要一段时间(1-2天),直到DNS记录传播和你的域名。 同时,您可以通过其IP地址访问您的VPS以执行下面指定的任务。
3.配置您的VPS的FQDN( 完全限定域名 ):
# hostnamectl set-hostname yourhostname
设置系统主机名,然后编辑/ etc / hosts文件如下(更换一个aaa.bbb.ccc.ddd,yourhostname,并与您的服务器的公网IP,主机名,和你注册的域名YOURDOMAIN):
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登录?”:
禁用MySQL根登录
或创建新的数据库用户:
MariaDB [(none)]> CREATE USER 'dba'@'localhost' IDENTIFIED BY 'YourPasswordHere'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON * . * TO 'dba'@'localhost'; MariaDB [(none)]> FLUSH PRIVILEGES;
创建新数据库用户
使用证书保护Apache
8.由于我们将使用Web应用程序来管理电子邮件服务器的数据库,我们需要采取必要的预防措施,保护与服务器的连接。 否则,我们的phpMyAdmin的凭据将通过线路明文旅行。
要设置在您的服务器传输层安全 (TLS),请在RHCE系列8部分列出的步骤: 使用网络安全服务(NSS)通过TLS HTTPS实现为Apache,然后再继续。
注意 :如果您没有访问服务器的控制台,你需要找到另一种方式来生成密钥创建过程中必要的熵。 在这种情况下,你可能要考虑安装RNG-工具和运行rngd -r的/ dev / urandom的 。
配置和安全PhpMyAdmin
9.在/etc/httpd/conf.d/phpMyAdmin.conf(CentOS的 )或/etc/phpmyadmin/apache.conf(Debian和衍生物),找到以下行的所有事件,并确保它们指向公网IP的服务器:
Require ip AAA.BBB.CCC.DDD Allow from AAA.BBB.CCC.DDD
此外,禁用默认别名并创建一个新的别名以访问您的phpMyAdmin登录页面。 这将有助于确保对谁针对www.yourdomain.com/phpmyadmin或www.yourdomain.com/phpMyAdmin机器人和外部攻击者的网站。
#Alias /phpMyAdmin /usr/share/phpMyAdmin #Alias /phpmyadmin /usr/share/phpMyAdmin Alias /managedb /usr/share/phpMyAdmin
此外,里面添加以下行<IfModule mod_authz_core.c>
Require all granted
安全PhpMyAdmin
为域创建Apache VirtualHost
10.确保您的域名添加到允许的网站。 创建/etc/httpd/sites-available/linuxnewz.com.conf(CentOS的 )或/etc/apache2/sites-available/linuxnewz.com(Debian的 )具有以下内容(确保DocumentRoot的, 网站可用 ,而网站-启用目录存在):
<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.现在你可以打开你的phpMyAdmin界面https://www.yourdomain.com/managedb
(注意managedb就是我们之前设置的phpMyAdmin的数据目录的别名)。
如果不工作暂时可以尝试使用服务器的公网IP地址,而不是www.yourdomain.com(这可以通过在传播或缺乏DNS记录配置的延迟引起的):
PhpMyAdmin登录
无论如何,在您登录到phpMyAdmin之后,您将看到以下界面。 左侧部分单击新建 :
在PhpMyAdmin中创建新数据库
输入数据库的名称(在这种情况下EmailServer_db,没必要选择整理),然后单击Create:
输入数据库名称
12.在下一屏幕上,选择一个名字第一个表(在那里我们将存储此邮件服务器将管理的域。
请注意,即使在这个系列中,我们将只管理一个域,可在以后添加更多),你想让它域的数量,然后单击Go。 系统将提示您命名和配置这两个字段,您可以按照以下图像中的指示安全地进行操作:
创建数据库表
当您选择主 索引下域ID,接受默认值,然后点击开始 :
添加数据库索引
或者,您可以点击预览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查询创建表,因为必须在不同的表之间建立关系:
Users_tbl
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;
创建Postfix用户表
你应该得到一个确认消息(如果没有,phpMyAdmin会提示语法错误):
MySQL确认
Alias_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.现在,我们将插入以下记录到三个表。 对于youcl@linuxnewz.com和linuxsay@linuxnewz.com的密码将被加密,INSERT INTO Users_tbl声明。
另外,请注意,发送至info@linuxnewz.com的邮件将被重定向到youcl@linuxnewz.com:
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))), 'youcl@linuxnewz.com'); INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('PasswordForSecondEmailAccount', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'linuxsay@linuxnewz.com'); INSERT INTO Alias_tbl (DomainId, Source, Destination) VALUES (1, 'info@linuxnewz.com', 'youcl@linuxnewz.com');
已经增加了我们的域名,两个用户帐户和电子邮件别名,我们准备继续这个系列中,我们将配置Dovecot和Postfix的下一篇文章中建立我们的邮件服务器。
概要
在本文中,我们列出了在CentOS 7 VPS中安装Postfix电子邮件服务器所需的软件包,并解释了如何使用phpMyAdmin管理基础数据库。
在接下来的两篇文章中,我们将回顾这两个程序,将采取我们的域( 第2部分 )的电子邮件分发的关怀和告诉你如何为你的服务器添加对垃圾邮件和病毒( 第三部分 )保护的配置。
在此之前,如果您有任何问题或意见,请随时使用下面的表单与我们联系。