在CentOS 8上使用Postfix,Dovecot,MySQL,RoundCube设置邮件服务器

这是续集。
请从下面的链接下载并以PDF格式支持本文。

theロード下载PDF指南

关门
这是续集。


前言

要设置一个完全简单的邮件服务器,本指南将Postfix用作SMTP服务器,Dovecot提供POP / IMAP功能,并将RoundCube作为Webmail程序或客户端来帮助用户从他们喜欢的Web中获得帮助。允许您检查和接收电子邮件。浏览器。

为了弄清楚所有的行话,让我们知道我们使用的组件是什么。

鸽舍: Dovecot是用于Linux / UNIX类系统的开源IMAP和POP3电子邮件服务器,主要在编写时考虑了安全性。后缀: Postfix是一个免费的开源邮件传输代理(MTA),可以通过Internet在服务器之间路由和传递电子邮件。Roundcube: 邮件传递到您的邮箱后,大多数用户都需要一个易于使用的界面来阅读它。 Roundcube做得很好。它是基于浏览器的多语言IMAP客户端,具有类似于应用程序的用户界面。它提供了您希望从电子邮件客户端获得的所有内容,包括MIME支持,地址簿,文件夹操作,邮件搜索,拼写检查等。

在生产环境中使用的前提条件

要将服务器用于生产,您需要:

  • 需要完全限定的域名(FQDN)
  • 在公用域名服务器上为您的域创建A和MX记录。这些记录应指向服务器的公共IP。

现在我们在同一个页面上,是时候将所有这些放在一起进行工作了。

步骤1:更新并设置主机名

这将从最新的软件包开始,以确保应用了所有先前的补丁,并从安全现代的系统开始。

sudo dnf update
sudo hostnamectl set-hostname mail.example.com

步骤2:安装postfix,Apache,PHP

需要邮件传输代理处理来自邮件服务器的邮件发送和接收。幸运的是,postfix很好。要安装后缀,请运行以下命令。

sudo dnf install postfix postfix-mysql httpd vim policycoreutils-python-utils epel-release -y

Roundcube使用PHP在浏览器中呈现页面,因此您需要安装PHP。请按照以下指南中的说明进行安装。

如何在CentOS 8 / RHEL 8上安装PHP 7.4

安装PHP之后,按如下所示添加其他PHP软件包:

sudo dnf install -y php-common php-json php-xml php-mbstring php-mysql

步骤3:配置后缀

接下来,让我们配置Postfix以接收和发送来自服务器的邮件。其配置文件位于/ etc / postfix。

配置主配置文件

sudo vim /etc/postfix/master.cf

取消注释文件中的以下行。确保以-o开头的行保持缩进。

submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt   ## Comment this out if you have no SSL(not recommended)
  -o smtpd_tls_auth_only=yes            ## Comment this out if you have no SSL(not recommended)
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATINGmixed
  -o smtpd_reject_unlisted_recipient=no

在文件底部添加以下与鸽舍相关的设置。

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

稍后,您将安装和配置dovecot。

进行上述更改后,保存文件。

打开main.cf文件

/etc/postfix/main.cf文件具有Postfix安装的主要配置选项。

sudo vim /etc/postfix/main.cf

进行以下更改:

配置主机名

取消对myhostname行的注释,并将host.domain.tld替换为服务器的主机名。

myhostname = mail.example.com

配置域

将域添加到mydomain行,如下所示:

mydomain = example.com   ## Input your unique domain here

取消注释或添加以下行,使其不以#号开头。

myorigin = $myhostname
inet_interfaces = all
inet_interfaces = localhost
inet_protocols = all
mydestination = $myhostname, localhost.$mydomain, localhost
smtpd_recipient_restrictions = permit_mynetworks
home_mailbox = Maildir/

将以下配置行添加到文件末尾。您已经注意到,其他配置与SSL相关。如果您有SSL文件,请将其复制到适当的位置,然后如图所示添加它。

append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
dovecot_destination_recipient_limit = 1
message_size_limit = 4194304
smtpd_tls_key_file = /etc/postfix/ssl/yourkey.key           ##SSL Key
smtpd_tls_cert_file = /etc/postfix/ssl/yourcertificate.crt  ##SSL Cert
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_security_level=may
virtual_transport = dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

还添加以下设置,以允许访问Postfix创建并存储在其数据库中的帐户相关数据。

virtual_mailbox_domains = mysql:/etc/postfix/database-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/database-users.cf
virtual_alias_maps = mysql:/etc/postfix/database-alias.cf

让我们将数据库配置添加到这些特定文件中,如下所示。请注意,数据库和表将在本指南的下一步中创建。

允许Postfix从数据库访问域

$ sudo vim /etc/postfix/database-domains.cf

user = postfix_admin
password = StrongPassword
hosts = 127.0.0.1
dbname = postfix_accounts
query = SELECT 1 FROM domains_table WHERE DomainName='%s'

允许Postfix从数据库访问用户帐户

$ sudo vim /etc/postfix/database-users.cf

user = postfix_admin
password = StrongPassword
hosts = 127.0.0.1
dbname = postfix_accounts
query = SELECT 1 FROM accounts_table WHERE DomainName='%s'

允许Postfix访问数据库中的邮件别名

$ sudo vim /etc/postfix/database-alias.cf

user = postfix_admin
password = StrongPassword
hosts = 127.0.0.1
dbname = postfix_accounts
query = SELECT Destination FROM alias_table WHERE Source='%s'

更改上面创建的文件的所有权和权限

更改这些文件的权限

sudo chmod 640 /etc/postfix/database-domains.cf
sudo chmod 640 /etc/postfix/database-users.cf
sudo chmod 640 /etc/postfix/database-alias.cf

以及此类文件的所有权

sudo chown root:postfix /etc/postfix/database-domains.cf
sudo chown root:postfix /etc/postfix/database-users.cf
sudo chown root:postfix /etc/postfix/database-alias.cf

现在我们进行了新的更改,我们需要重新启动Postfix以加载新的配置。

sudo systemctl restart postfix

步骤4:安装和配置MySQL

Roundcube需要数据库来存储和检索重要数据。根据本指南安装MariaDB。

如何在CentOS 8 / RHEL 8上安装MariaDB 10.4

安装MariaDB后,通过为Roundcube安装创建MariaDB用户名和数据库来继续配置。它还会创建Postfix Mail帐户数据库。使用以下命令登录到MariaDB客户端。

mysql -u root -p

输入root密码并创建Postfix Mail帐户的数据库,如下所示

create database postfix_accounts;

创建一个对您刚创建的邮件帐户数据库具有完全权限的用户。

grant all on postfix_accounts.* to [email protected] identified by 'StrongPassword';
flush privileges;

在数据库中创建一个表,该表将包含服务器上托管的域。

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

在数据库中创建一个表来保存用户帐户

CREATE TABLE `postfix_accounts`.`accounts_table` ( 
    `AccountId` INT NOT NULL AUTO_INCREMENT,  
    `DomainId` INT NOT NULL,  
    `password` VARCHAR(300) NOT NULL,  
    `Email` VARCHAR(100) NOT NULL,  
    PRIMARY KEY (`AccountId`),  
    UNIQUE KEY `Email` (`Email`),  
    FOREIGN KEY (DomainId) REFERENCES domains_table(DomainId) ON DELETE CASCADE 
) ENGINE = InnoDB;

在数据库中创建一个表来保存电子邮件别名数据。

别名基本上允许发送到一个帐户的电子邮件到达您的邮件服务器,然后重定向到另一个帐户。例如,如果您想要一切 [email protected] 电子邮件发送 [email protected],创建一个实现该功能的别名。

CREATE TABLE `postfix_accounts`.`alias_table` (
    `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_table(DomainId) ON DELETE CASCADE
) ENGINE = InnoDB;

将记录添加到您在Postfix Mail Accounts数据库中创建的表中。

然后添加域,一些帐户和别名。

INSERT INTO `postfix_accounts`.`domains_table` (DomainName) VALUES ('example.com');  
INSERT INTO `postfix_accounts`.`accounts_table` (DomainId, password, Email) VALUES (1, ENCRYPT('Password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email protected]');  
INSERT INTO `postfix_accounts`.`accounts_table` (DomainId, password, Email) VALUES (1, ENCRYPT('Password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email protected]');  
INSERT INTO `postfix_accounts`.`alias_table` (DomainId, Source, Destination) VALUES (1, '[email protected]', '[email protected]');

然后注销数据库并继续下一步。

quit;

您可以使用任何喜欢的名称和密码(强):

postfix_admin用户和postfix_accounts数据库名称

创建Roundcube数据库以供以后安装,如下所示。

create database roundcube;

创建一个对您创建的数据库具有完全权限的用户。

grant all on roundcube.* to [email protected] identified by 'StrongPassword';
flush privileges;

您可以使用任何喜欢的名称和密码(强):

roundcube_admin用户和roundcube数据库名称。

在步骤4中执行的Posfix配置测试

现在已经建立了数据库,让我们测试用Postfix完成的配置是否有效

sudo postmap -q example.com mysql:/etc/postfix/database-domains.cf
sudo postmap -q [email protected] mysql:/etc/postfix/database-users.cf
sudo postmap -q [email protected] mysql:/etc/postfix/database-users.cf
sudo postmap -q [email protected] mysql:/etc/postfix/database-alias.cf

步骤5:安装和配置Dovecot

如前所述,Dovecot是适用于Linux / UNIX类系统的开源IMAP和POP3电子邮件服务器。这些协议允许邮件用户从服务器检索到本地邮件客户端的邮件,或从服务器删除邮件。如下安装Dovecot:

sudo dnf install dovecot dovecot-mysql -y

成功安装后,添加将在系统上处理邮件的用户和组。

sudo groupadd -g 6000 vmail 
sudo useradd -g vmail -u 6000 vmail -d /home/vmail -m

Dovecot有几个配置文件。逐步编辑它们,以便准确捕获所有配置。

打开dovecot主配置文件,并确保下面的行中没有#登录

$ sudo vim /etc/dovecot/dovecot.conf

!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文件,并确保以下各行中没有注释。 #!您可以看到默认情况下启用了include auth-system.conf.ext。 !!注释掉,只保留启用auth-sql.conf.ext。

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

然后,您需要将配置添加到上面启用的文件中。它是/etc/dovecot/conf.d/auth-sql.conf.ext。

这些是一些特殊的变量

  • %U –用户名
  • N个用户所占的百分比 [email protected],如果没有域,则与%u相同
  • %D –域部分 [email protected],如果没有域则为空
  • %H –主目录

从以下设置可以看到,将电子邮件保存到/ home / vmail /。

$ sudo vim /etc/dovecot/conf.d/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
}

创建/ home / vmail /目录

sudo mkdir /home/vmail/example.com

让我们将为后缀配置的数据库的详细信息添加到上述文件的“ args”中包含的文件中

$ sudo vim /etc/dovecot/dovecot-sql.conf.ext

driver = mysql
connect = "host=127.0.0.1 dbname=postfix_accounts user=postfix_admin password=StrongPassword"
default_pass_scheme = SHA512-CRYPT
password_query = SELECT Email as User, password FROM accounts_table WHERE Email='%u';

接下来,配置邮箱位置和名称空间。

打开此文件/etc/dovecot/conf.d/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,进行以下更改并保存。

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 {
  }
}

vmail用户负责在服务器上处理邮件。因此,用户需要访问电子邮件位置。向vmail用户授予所需的权限,如下所示:

sudo chown –R vmail:vmail /home/vmail

向vmail和dovecot用户授予读取配置文件的权限。

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

步骤6:安装和配置Roundcube

接下来,我们访问基于Web的客户端,以便用户可以查看电子邮件。 Roundcube的最新稳定版本是 官方网页

VER="1.4.3"
wget https://github.com/roundcube/roundcubemail/releases/download/$VER/roundcubemail-$VER-complete.tar.gz

解压缩下载的文件并重命名结果目录

tar xvzf roundcubemail-$VER-complete.tar.gz
mv roundcubemail-$VER roundcube

现在,将新目录移动到Apache的文档根目录,将其所有权更改为apache,然后重新启动Apache Web服务器。

sudo mv roundcube /var/www/html/
sudo chown -R apache:apache /var/www/html/
sudo systemctl restart httpd

修复SELinux上下文问题

sudo semanage fcontext -a -t httpd_sys_script_exec_t '/var/www/html(/.*)?'
sudo restorecon -R -v /var/www/html/

在您喜欢的浏览器中加载Roundcube并完成安装

打开浏览器并输入以下URL

http:// IP / FQDN / roundcube /安装程序

请按照以下屏幕截图完成Roundcube设置

确保所有PHP检查都可以。

向下滚动到下一个“如果一切正常。

在CentOS 8上使用Postfix,Dovecot,MySQL,RoundCube设置邮件服务器

在下一页数据库设置输入您先前创建的Roundcube数据库的详细信息。然后根据需要将其他配置添加到页面,滚动到底部,然后单击“创建配置”。

在CentOS 8上使用Postfix,Dovecot,MySQL,RoundCube设置邮件服务器在CentOS 8上使用Postfix,Dovecot,MySQL,RoundCube设置邮件服务器

在“创建配置”部分中找到并单击“创建配置”,您将看到与以下页面相似的页面,该页面要求您下载并传输配置文件或手动创建它。选择一个舒适的。

在CentOS 8上使用Postfix,Dovecot,MySQL,RoundCube设置邮件服务器

如果您下载了文件,请将其传输到服务器,然后将其复制到说明中指定的目录中。然后单击继续。

sudo cp config.inc.php /var/www/html/roundcube/config/
sudo chown apache:apache /var/www/html/roundcube/config/config.inc.php

编辑配置文件以包括SMTP主机,端口和登录方法。

$ sudo vim /var/www/html/roundcube/config/config.inc.php

$config['default_host'] = 'localhost';  ## If SSL is confgured, use: $config['default_host'] = 'ssl//mail.example.com';
$config['support_url'] = '';
$config['defautl_port'] = 143;
$config['smtp_server'] = 'localhost';   ## If SSL is confgured, use: $config['smtp_server'] = 'tls//mail.example.com'; 
$config['smtp_port'] = 587;
$config['smtp_user'] = '%u';
$config['smtp_pass'] = '%p';
$config['smtp_auth_type'] = 'LOGIN';
$config['debug_level'] = 1;
$config['smtp_debug'] = true;
$config['plugins'] = array('virtuser_query');                                                                    
$config['virtuser_query'] = "SELECT Email FROM postfix_accounts.accounts_table WHERE Email = '%u'"; ## Enables Roundcube to use authentication for virtual users for outgoing mail

在CentOS 8上使用Postfix,Dovecot,MySQL,RoundCube设置邮件服务器

至此,一切都会好起来的。在页面底部,您将看到一个标语,建议您在成功设置Roundcube之后删除整个安装程序目录。

在CentOS 8上使用Postfix,Dovecot,MySQL,RoundCube设置邮件服务器

步骤7:在防火墙中打开所有必需的端口

如果防火墙正在运行,请允许以下端口

  • HTTP:80
  • HTTPS:443
  • SMTP:25
  • POP3:110
  • IMAP:143
  • SMTP安全:465
  • MSA:587
  • IMAP安全:993
  • POP3安全:995
sudo firewall-cmd --permanent --add-port={80,443,25,110,143,465,587,993,995}/tcp
sudo firewall-cmd --reload

步骤8:测试邮件服务器

一切就绪并准备就绪后,我们将测试是否可以发送和接收电子邮件。

加载浏览器并输入https:// IP-or-FQDN / roundcube

输入您之前设置的电子邮件帐户及其相应的密码。

在CentOS 8上使用Postfix,Dovecot,MySQL,RoundCube设置邮件服务器

登录后,测试是否可以从本地域和外部发送和接收邮件,以及是否满足要求。

在CentOS 8上使用Postfix,Dovecot,MySQL,RoundCube设置邮件服务器在CentOS 8上使用Postfix,Dovecot,MySQL,RoundCube设置邮件服务器

结论

设置简单的邮件服务器与本指南一样简单。如果您在云中正确配置了有效的FQDN和Mail Exchange记录,则可以与所需的任何人收发邮件。暂时感谢您的光临。下面列出了其他指南供您考虑。

在Debian 10(Buster)上安装和设置iRedMail邮件服务器

如何将域和用户帐户添加到iRedMail邮件服务器

让我们加密SSL证书保护iRedMail服务器

如何在CentOS 7上安装iRedMail邮件服务器

这是续集。
请从下面的链接下载并以PDF格式支持本文。

theロード下载PDF指南

关门
这是续集。


Sidebar