在 Ubuntu 服务器上配置邮件服务器

我在学什么,在这个地球上的步行

在 Ubuntu 服务器上配置邮件服务器

红帽停产 Centos 并让许多像我一样的人习惯了派生的路线 热氢 基于 RPM 的稳定 Linux 服务器的孤儿.

这与本教程有什么关系? 直接响应: ;Para mim tudo”;.

我被迫从 CentOS 迁移我的服务器 8 有关另一个发行版,请访问 VPSs da OVH e consequentemente reconfigurar tudo o que já estava em “;邮轮飞行; 这包括我什至写过的邮件服务器 教程. 保持传统, 根据 我会的 我正在运行配置的步骤编写教程.

最初我通知您,我将继续使用相同的软件并具有相同的使用意图. 这包括使用后缀, 多韦科特, MariaDB, 垃圾邮件刺客, ClamAV, Amavisd 新, Fail2ban, Nginx, Postfixadmin 和 RoundCube 但在 Ubuntu Server 下的 utlimas 版本中.

为什么选择乌班图浏览器?

我一直有一些关于为什么我选择Ubuntu服务器来取代CentOS的问题。. 答案在于两个前提: 合同服务的可用性和对使用的熟悉程度.

在可用的发行版中, 与 Debian, Fedora 和 Ubuntu 作为选项, 我选择使用具有LTS的 (长期支持) 由于我已经在我的开发环境中使用 Ubuntu 作为主操作系统一段时间了,所以我更倾向于使用 Ubuntu Server 20.04 至少获得高达 2025 并且可能会更保证Canonical不会像RedHat对CentOS那样停止Ubuntu。.

现在原因很清楚了,我们可以继续讨论真正重要的事情,即配置.

安装包

任何配置的开始都是安装必要的软件包及其依赖项,我在这里强调,我将使用所选发行版的官方存储库中可用的版本.

下面的命令将安装我将使用的所有软件包,并且每个需要配置的软件包都将获得解释性文本.

$ sudo apt install -y curl htop vim wget net-tools certbot postfix postfix-mysql postfix-pcre dovecot-coreamavisd-new clamdscan mariadb-server nginx php-fpm

配置的顺序很重要,因为这个想法是让服务器与某些进程一起运行,以便让某些服务使用其他服务。, 用于信息控制, 是否改进自己的执行模型. 例如: Postfix不会对消息内容的危害性进行任何控制,这将委托给专门从事此任务的软件. 另一个因素是,默认情况下,邮箱的控制将通过操作系统的用户帐户完成 (默认安装), 但是我们将使用基于数据库中表的控件,并且我们将通过使用 Web 浏览器进行配置,这使得必须事先安装数据库管理器和 Web 服务器.

配置 MariaDB

最新版本: 10.6.5
已安装版本: 10.3.32

在配置我的Web服务器期间,我为安装MariaDB而遭受了一点痛苦, 已配置且稳定,因为 apparmor 配置文件和 DBMS 之间似乎存在兼容性问题.

我必须执行以下步骤才能使MariaDB服务在启动几分钟后停止自动终止. 已采取的步骤 因此因此.

$ sudo systemctl stop apparmor.service
$ sudo update-rc.d -f apparmor remove

$ sudo apt-get remove --purge mysql-server mysql-client mysql-common mariadb-server mariadb-common
$ sudo apt-get autoremove && sudo apt-get autoclean
$ sudo apt-get install mariadb-server mariadb-common mariadb-client

$ sudo systemctl start apparmor.service
$ sudo update-rc.d apparmor defaults

安装后,可以执行两个可选步骤来提高访问数据库的安全性:.

我引用的第一个是脚本的执行 sudo /usr/bin/mysql_secure_installation.

通过运行它,您将能够更改根用户的访问密码, 删除匿名访问帐户, 删除远程以 root 身份进行身份验证的功能并删除测试数据库.

这是我使用的:

对于有关更改根用户密码的问题,我刚刚给了 Enter 而不输入密码,因为我不会使用任何类型的外部连接,并且操作系统的根用户只能通过本地 shell 访问.

Enter current password for root (enter for none): 

我通过回复删除了匿名用户 y 下面的问题.

Remove anonymous users? [Y/n] y

我禁用了用户的远程访问 响应方式 y 下一个问题. 稍后我将 ssh 配置为不允许 root 用户登录,这也将迫使我拥有一个能够远程连接并将权限本地升级到 root 的用户,然后才能连接到 MariaDB.

Disallow root login remotely? [Y/n] y

我删除了测试数据库,因为没有必要拥有它,因为它毕竟是一个生产环境. 对此我回复了 y 下面的问题:

Remove test database and access to it? [Y/n] y

最后,我允许通过回复来重新加载特权表 y 下一个问题.

Reload privilege tables now? [Y/n] y

执行这些步骤后,我还运行了命令 sudo /usr/bin/mysql_install_db --user=mysql 初始化所需的表,包括正确执行数据库的数据目录.

最后,我通过运行命令配置了服务与操作系统启动一起启动 sudo systemctl enabled mariadb 并启动服务以使用命令检查一切是否正确 sudo systemctl start mariadb.

在最后, 运行下面指示的命令以检查服务的状态应具有类似于显示的输出.

root@vps:/home/regis# systemctl status mariadb
● mariadb.service - MariaDB 10.3.32 database server
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2021-12-24 11:19:52 -03; 1 day 17h ago
       Docs: man:mysqld(8)
             https://mariadb.com/kb/en/library/systemd/
   Main PID: 773 (mysqld)
     Status: "Taking your SQL requests now..."
      Tasks: 35 (limit: 4566)
     Memory: 494.7M
     CGroup: /system.slice/mariadb.service
             └─773 /usr/sbin/mysqld

Dec 24 11:19:50 vps systemd[1]: Starting MariaDB 10.3.32 database server...
Dec 24 11:19:51 vps mysqld[773]: 2021-12-24 11:19:51 0 [Note] /usr/sbin/mysqld (mysqld 10.3.32>
Dec 24 11:19:52 vps systemd[1]: Started MariaDB 10.3.32 database server.

启动服务后,我们可以考虑MariaDB可以在后续步骤中使用.

后缀管理员

PostfixAdmin是一个PHP脚本,它使邮箱的维护更容易,更实用. 因为它是一个 PHP Web 应用程序,所以我们必须已经安装并配置了一个不属于本手册范围的 WEB 服务器. 如果您没有安装 Web 服务器, 我建议按照以下步骤操作 本出版物 其中我展示了使用 Nginx 安装的 WEB 服务器, Php-fpm, LetsEncrypt和MariaDB,只有在配置了服务器之后,您才能继续进行本手册建议的配置.

让我们运行以下命令开始安装. 此包未包含在初始配置中,因为它启动 巫师 我们将在接下来的步骤中解决.

$ sudo apt install postfixadmin

在安装过程结束时,将启动一个向导,以便我们可以配置 Postfixadmin.

配置后修复管理员屏幕截图

当您按回车键打开时 <;Yes>; 会被密码质疑访问数据库. 输入所需的密码, 选项卡导航到 <;Ok>; ,然后按回车键.

配置后修复管理员密码确认屏幕截图

在密码确认屏幕上, 重复一遍, 导航到 <;Ok> ,然后按回车键.

首先使用根用户连接到 MariaDB, 根据我们的定义,只能在本地访问.

$ sudo mysql

如果一切顺利, 您将在MariaDB shell中,并将具有类似于以下内容的输出.

usuario@host:~$ sudo mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 284405
Server version: 10.3.32-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

下一步是创建将用于存储用户的数据库和表, 盒子和各种其他设置. 您可以使用此处提到的名称作为示例或自定义它们 (明智). 此处的步骤遵循安装文件中的步骤 后修复管理员安装手册 正如您可能猜到的那样, 我们需要配置 PostfixAdmin 以继续执行任务.

让我们创建名称数据库 MyPostfixconfig.

注意: 如果您不熟悉数据库的工作原理,并且MySQL中的用户可能会遇到一些困难,如果以下任何步骤一开始不起作用, 但总的来说,这是一个非常简单易行的过程.

MariaDB [(none)]> CREATE DATABASE mypostfixconfig;
Query OK, 1 row affected (0.001 sec)

创建数据库和表之后, 我们创建一个用户, 我们设置访问密码并赋予其适当的权限. 请注意,我们将授予对创建的数据库的所有权限,因为我们将通过它继续配置.

MariaDB [(none)]> GRANT ALL PRIVILEGES ON mypostfixconfig.* TO 'mypostfixuser'@'localhost' IDENTIFIED BY '*******';
Query OK, 0 rows affected (0.000 sec)

创建用户后, 类型 exit 断开根用户的连接.

现在我们将测试创建的用户是否可以连接并查看基础. 为此,请键入 mysql -u mypostfixconfiguser, -h, localhost, -p,然后按 Enter 键. 输入在用户创建命令中设置的密码,如果一切正常,输出将如下所示.

MariaDB [(none)]> mysql -u mypostfixuser -h localhost -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 950396
Server version: 10.3.32-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

让我们显示此用户有权访问哪些数据库.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mypostfixconfig    |
+--------------------+
2 rows in set (0.001 sec)

MariaDB [(none)]>

如果输出显示我们在前面步骤中创建的基础,则意味着我们可以继续前进. 否则重复上述步骤, 最好通过更改要创建的数据库和用户名.

多韦科特

Dovecot 负责在盒子中传递 MTA 之间交换的消息,在我们的例子中将是虚拟类型的.

以下配置将导致只有使用 SSL 的用户才能连接到他们的盒子.

首先,我们将备份当前设置,以便在出现问题时可以返回原始版本.

$ sudo cp -R /etc/dovecot/conf.d /etc/dovecot/conf.d.orig

Dovecot 将存储消息 (及其所有内容) 在配置文件中定义的目录中,为了执行此操作,它必须与具有适当权限的用户一起运行;.

$ groupadd -g 5000 vmail
$ useradd -g 5000 -G mail -u 5000 -d /var/mail vmail

创建的用户将在身份验证机制中使用,然后我们将由他启动. 我将使用MariaDB来存储身份验证信息,为此将修改两个文件. 第一个配置身份验证类型,第二个将验证身份验证.

编辑文件 /文件 和取消评论 (或添加) 下面的行.

$ vim /etc/dovecot/conf.d/10-auth.conf

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

后, 编辑文件 /etc/dovecot/CONF.d/auth-sql.conf.ext 以便它包含以下行:

$ vim /etc/dovecot/conf.d/auth-sql.conf.ext


passdb {
  driver = sql
  args = /etc/dovecot/dovecot-mariadb.conf.ext
}

userdb {
  driver = sql
  args = /etc/dovecot/dovecot-mariadb.conf.ext
}

该文件 /etc/dovecot/dovecot-mariadb.conf.ext 存在于模型中配置与数据库的连接,以便Dovecot可以使用它. 它尚不存在,我们将在下一步中创建它. 注意覆盖数据库名称信息, 在创建数据库的步骤中使用的用户和密码.

$ vim /etc/dovecot/dovecot-mariadb.conf.ext

driver = mysql
connect = host=localhost dbname=mypostfixdb user=mypostfixdbuser password=**********
default_pass_scheme = SHA512-CRYPT

password_query = SELECT username as user, password, concat('/home/vmail/', maildir) as userdb_home, concat('maildir:/home/vmail/', maildir) as userdb_mail, 'vmail' as userdb_uid, 'mail' as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'

user_query = SELECT concat('maildir:/home/vmail/', maildir) as mail, CONCAT('*:messages=10000:bytes=', quota) as quota_rule FROM mailbox WHERE username = '%u' AND active = '1'

好好看看我们安装的程序的现有示例是一个很好的做法. 如果您对上述行的每个细节都感到好奇,请查看文件 /etc/dovecot/dovecot-sql.conf.ext.

后缀

正如我已经在出版物中解释的那样,这是这样做的基础, Postfix 是一个 MTA 和链接服务以交换电子邮件.

此末尾提供的最新版本的 Postfix 2021, 在撰写本文时, 是 3.6, 但在 Ubuntu 存储库中可用 3.4 这是我将使用的那个.

如果您到达此处,请评论要求继续教程. 这鼓励您继续创建内容.

留言

您的电子邮件地址将不会发布. 标记必填的字段 *

此网站使用 Akismet 减少垃圾邮件. 了解如何处理注释数据.