在 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 这是我将使用的那个.
如果您到达此处,请评论要求继续教程. 这鼓励您继续创建内容.