如何在 Ubuntu 22.04 上安装和配置邮件服务器教程

ops/2025/1/11 22:33:16/

简介:

在本指南中,我们将演示如何在 Ubuntu 22.04 上安装和配置邮件服务器,因为大中型公司可以从拥有私人邮件服务器中获益匪浅。通过使用邮件服务器,可以密切监视所有电子邮件流量。此外,自定义设置的灵活性使得建立清晰且有组织的电子邮件服务成为可能。虽然有多种设置 Linux 邮件服务器的选项,但我们将特别关注 Postfix 和 Dovecot。

安装和配置步骤

第一步:设置主机名

主机名是用于标识计算机的标签,它将帮助你区分你的服务器与其他服务器。你需要为你的主机名创建一个 DNS A 记录,因为服务器主机名应该是一个 FQDN(完全限定域名)。例如,在本教程中,我们将使用 ubuntu.yourdomain.com 作为服务器主机名。随后,执行以下命令:

$ sudo hostnamectl set-hostname ubuntu.yourdomain.com

请确保将 ubuntu.yourdomain.com 替换为你自己的指向服务器 IP 地址的子域

第二步:安装依赖项

在这一步中,我们将安装 Apache Web 服务器,带有其扩展的 PHP 和MariaDB 作为数据库服务器。让我们执行以下命令:

$ sudo apt install apache2 git mariadb-server php-{xml,pear,imap,intl,common,json,curl,mbstring,mysql,gd,imagick,zip,opcache,sqlite3} libapache2-mod-php

第三步:创建系统用户

在这一步中,我们将创建一个新的系统用户,用于在服务器上存储电子邮件。让我们调用以下命令。

$ sudo useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Virtual Mail User" vmail
$ sudo mkdir -p /var/vmail
$ sudo chmod -R 770 /var/vmail
$ sudo chown -R vmail:mail /var/vmail

第四步:创建数据库

接下来,让我们创建一个数据库。默认情况下,你可以在没有密码的情况下登录到 MySQL shell。

$ sudo mysql

登录后,让我们运行这些命令。

MariaDB [(none)]> CREATE DATABASE postfixadmin;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON postfixadmin.* TO 'postfixadmin'@'localhost' IDENTIFIED BY 'M0d1fyth15';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> \\q

请务必使用强密码替换 M0d1fyth15

第五步:安装 Postfix

使用以下命令从 Ubuntu 默认存储库安装 Postfix 邮件服务器

$ sudo apt install postfix-mysql

邮件服务器相关的数据将存储在 MySQL 数据库中。一旦 postfix-mysql 包安装完成,我们需要创建几个配置文件,以便 Postfix 与数据库进行通信。

$ sudo mkdir -p /etc/postfix/sql

将密码、数据库名称和数据库用户与你在较早步骤中创建的那些匹配。

$ sudo nano /etc/postfix/sql/mysql_virtual_alias_maps.cf
user = postfixadmin
password = M0d1fyth15
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
$ sudo nano /etc/postfix/sql/mysql_virtual_domains_maps.cf
user = postfixadmin
password = M0d1fyth15
hosts = localhost
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
$ sudo nano /etc/postfix/sql/mysql_virtual_mailbox_maps.cf
user = postfixadmin
password = M0d1fyth15
hosts = localhost
dbname = postfixadmin
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
$ sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf
user = postfixadmin
password = M0d1fyth15
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
$ sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
user = postfixadmin
password = M0d1fyth15
hosts = localhost
dbname = postfixadmin
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'
$ sudo nano /etc/postfix/sql/mysql_virtual_mailbox_limit_maps.cf
user = postfixadmin
password = M0d1fyth15
hosts = localhost
dbname = postfixadmin
query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'
$ sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
user = postfixadmin
password = M0d1fyth15
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

请务必使用你在第四步中设置的密码替换 M0d1fyth15

现在,我们可以运行以下命令来编辑 postfix 的 main.cf 文件。

$ sudo postconf -e "myhostname = $(hostname -f)"
$ sudo postconf -e "mydestination = localhost"
$ sudo postconf -e "mynetworks = 127.0.0.0/8"
$ sudo postconf -e "inet_protocols = ipv4"
$ sudo postconf -e "inet_interfaces = all"
$ sudo postconf -e "smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem"
$ sudo postconf -e "smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key"
$ sudo postconf -e "smtpd_use_tls = yes"
$ sudo postconf -e "smtpd_tls_auth_only = yes"
$ sudo postconf -e "smtpd_sasl_type = dovecot"
$ sudo postconf -e "smtpd_sasl_path = private/auth"
$ sudo postconf -e "smtpd_sasl_auth_enable = yes"
$ sudo postconf -e "smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination"
$ sudo postconf -e "virtual_transport = lmtp:unix:private/lmtp"
$ sudo postconf -e "virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf"
$ sudo postconf -e "virtual_alias_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf"
$ sudo postconf -e "virtual_mailbox_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf"

完成后,我们可以继续编辑 /etc/postfix/master.cf 文件:

$ sudo nano /etc/postfix/master.cf

修改或将以下行添加到文件中。

smtp      inet  n       -       y       -       -       smtpd
#smtp      inet  n       -       y       -       1       postscreen
#smtpd     pass  -       -       y       -       -       smtpd
#dnsblog   unix  -       -       y       -       0       dnsblog
#tlsproxy  unix  -       -       y       -       0       tlsproxy
# Choose one: enable submission for loopback clients only, or for any client.
#127.0.0.1:submission inet n -   y       -       -       smtpd
submission inet n       -       y       -       -       smtpd-o syslog_name=postfix/submission-o smtpd_tls_security_level=encrypt-o smtpd_sasl_auth_enable=yes
#  -o smtpd_tls_auth_only=yes
#  -o local_header_rewrite_clients=static:all
#  -o smtpd_reject_unlisted_recipient=no
#     Instead of specifying complex smtpd_<xxx>_restrictions here,
#     specify "smtpd_<xxx>_restrictions=$mua_<xxx>_restrictions"
#     here, and specify mua_<xxx>_restrictions in main.cf (where
#     "<xxx>" is "client", "helo", "sender", "relay", or "recipient").
#  -o smtpd_client_restrictions=
#  -o smtpd_helo_restrictions=
#  -o smtpd_sender_restrictions=
#  -o smtpd_relay_restrictions=
#  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject-o smtpd_client_restrictions=permit_sasl_authenticated,reject-o milter_macro_daemon_name=ORIGINATING

第六步:安装 Dovecot

运行以下命令安装 Dovecot。

$ sudo apt install dovecot-mysql dovecot-imapd dovecot-pop3d dovecot-lmtpd

安装 Dovecot 后,我们可以继续执行以下步骤并编辑一些配置文件。

打开 /etc/dovecot/conf.d/10-auth.conf 文件

$ sudo nano /etc/dovecot/conf.d/10-auth.conf

然后,找到这行

auth_mechanisms = plain

并将该行替换为此行:

auth_mechanisms = plain login

然后,我们需要注释掉 !include auth-system.conf.ext 并取消注释行 !include auth-sql.conf.ext

它应该看起来像这样:

#!include auth-system.conf.ext
!include auth-sql.conf.ext

仍然在 10-auth.conf 文件中,我们包含了 auth-sql.conf.ext。因此,让我们编辑该文件以便执行它。

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

将以下行插入文件中:

driver = mysql
connect = host=localhost dbname=postfixadmin user=postfixadmin password=M0d1fyth15
default_pass_scheme = BLF-CRYPT
password_query = SELECT username as user, password, '/var/vmail/%d/%n' as userdb_home, 'maildir:/var/vmail/%d/%n' as userdb_mail, 150 as userdb_uid, 8 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'
user_query = SELECT '/var/vmail/%d/%u' as home, 'maildir:/var/vmail/%d/%u' as mail, 150 AS uid, 8 AS gid, concat('dirsize:storage=', quota) AS quota FROM mailbox WHERE username = '%u' AND active = '1'

请务必使用你在第四步中设置的密码替换 M0d1fyth15。保存文件并退出

接下来,打开 /etc/dovecot/conf.d/10-mail.conf 文件,并更改以下值:

$ sudo nano /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/var/vmail/%d/%n
mail_uid = vmail
mail_gid = mail
mail_privileged_group = mail
first_valid_uid = 150
last_valid_uid = 150

保存文件,然后退出。现在,让我们继续编辑其他 dovecot 配置文件。

$ sudo nano /etc/dovecot/conf.d/10-master.conf

你需要在该文件中进行一些更改。

找到 service lmtp 部分,并将其更改为以下内容:

service lmtp {unix_listener /var/spool/postfix/private/lmtp {mode = 0600user = postfixgroup = postfix}
}

找到 service auth 部分,并将其更改为:

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 部分更改为以下内容:

service auth-worker {
user = vmail
}

不要忘记保存文件然后退出。现在,是时候更正权限了。

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

第七步:安装 PostfixAdmin

在这一步中,我们将从 Github 下载 PostfixAdmin 并将其存储在 /opt 目录中。

$ sudo cd /opt
$ sudo git clone <https://github.com/postfixadmin/postfixadmin.git>
$ sudo cd /opt/postfixadmin
$ sudo bash install.sh

让我们更正权限。

$ sudo chown -R www-data: /opt/postfixadmin

添加 /etc/apache2/conf-enabled/postfixadmin.conf

$ sudo nano /etc/apache2/conf-enabled/postfixadmin.conf

将这些行插入到该文件中。

Alias /postfixadmin /opt/postfixadmin/public<Directory "/opt/postfixadmin/public">AllowOverride AllOptions +FollowSymLinksRequire all granted
</Directory>

然后,我们需要重新加载 Apache。

$ sudo systemctl reload apache2

接下来,让我们创建 config.local.php

$ sudo nano /opt/postfixadmin/config.local.php

并插入以下行

<?php
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'M0d1fyth15';
$CONF['database_name'] = 'postfixadmin';
$CONF['configured'] = true;?>

请务必使用你在第四步中设置的密码替换 M0d1fyth15

保存文件,然后从编辑器中退出。

转到 http://YOUR_IP_ADDRESS/postfixadmin/setup.php 并创建设置密码。如果你的服务器上已经有一个网站,你也可以在 http://yourdomain.com/postfixadmin/setup.php 访问 postfixadmin

两次输入你的设置密码,然后点击“Generate setup_password hash”按钮。

你将看到一行包含设置密码,你需要将其复制到 config.local.php 中,如下所示:

$CONF['setup_password'] = '$2y$10$YpUXiIQAP47pudUDz0n3leljN2ap5xBq/O1ntFmgAtU0WArEXy84y';

将该行添加到 config.local.php 文件后,你可以刷新页面以登录并创建一个超级管理员。

向下滚动以创建超级管理员帐户。要创建超级管理员,需要你先前创建的设置密码。在 admin 字段中,应填写电子邮件地址,它应如下所示:

现在已创建超级管理员,你可以使用凭据登录到 http://192.168.53.5/postfixadmin/login.php 并添加域、电子邮件地址等。

第八步:安装 Webmail

此时,你的服务器可以发送电子邮件。要接收电子邮件,请确保你域名的 DNS MX 记录指向此服务器。你可以使用你喜欢的电子邮件客户端发送电子邮件,也可以使用 Webmail。现在让我们安装 Roundcube。

$ sudo apt install roundcube

接下来,让我们编辑 /etc/apache2/conf-enabled/roundcube.conf 中的 rouncube 配置文件

$ sudo nano /etc/apache2/conf-enabled/roundcube.conf

取消注释这一行

# Alias /roundcube /var/lib/roundcube/public_html

它应该看起来像这样:

Alias /roundcube /var/lib/roundcube/public_html

保存文件,退出,然后重启 apache

$ sudo systemctl restart apache2

下一步是编辑另一个 Rouncube 配置文件,即 /etc/roundcube/config.inc.php

$ sudo nano /etc/roundcube/config.inc.php

找到这个字符串:

$config['smtp_host'] = 'localhost:587';

并将其替换为此字符串:

$config['smtp_host'] = 'tls://%n:587';

总结

现在,你可以导航到 http://YOUR_SERVER_IP_ADDRESS/roundcube 并使用你在上一步中创建的凭据登录。登录后,你可以尝试发送电子邮件。

我的博客:https://blog.ivwv.site


http://www.ppmy.cn/ops/149266.html

相关文章

Halcon在linux及ARM上的安装及c++工程化

一、HALCON下载 建议到HALCON官方下载页选择linux版本下载,压缩包名为MVTec_HALCON_Progress-18.11.0.1-linux(x64-aarch64-armv7a)-FullVersion.tar.gz。下载前需要登录HALCON帐号,如果没有请自行注册,填写一些基本信息然后激活邮件,操作方便简易。 下载许可证文件 该许…

linux相关conda操作

如果你想安装完整的 Anaconda&#xff08;而不是 Miniconda&#xff09;&#xff0c;Anaconda 是一个包含大量预安装科学计算包的发行版&#xff0c;适合数据科学和机器学习等领域。以下是详细的安装步骤和相关操作&#xff1a; 1. 安装 Anaconda 1.1 下载 Anaconda 安装脚本 …

ChatGPT如何赋能办公

课程背景&#xff1a; ChatGPT近来非常火爆&#xff0c;但多数课程偏重于理论&#xff0c;我们本次讲座将以亲身实践为例&#xff0c;分享如何快速赋能办公&#xff0c;并立刻提升生产力。 课程梗概&#xff1a; 本课程旨在探究ChatGPT在办公中的应用。通过案例分析、课堂讨…

迅为RK3568开发板篇OpenHarmony配置HDF驱动控制LED-配置创建私有配置文件

接 下 来 新 建 vendor/hihope/rk3568/hdf_config/khdf/topeet/topeet_config.hcs 文 件 &#xff0c;topeet_config.hcs 为驱动私有配置文件&#xff0c;用来填写一些驱动的默认配置信息。HDF 框架在加载驱动时&#xff0c;会获取相应的配置信息并将其保存在 HdfDeviceObject …

Python orjson ujson有什么区别?

orjson 和 ujson 都是高性能的 JSON 库&#xff0c;它们都旨在提供比 Python 标准库 json 更快的解析和序列化速度。尽管它们在性能上都有显著提升&#xff0c;但在实现细节、功能和支持的特性上还是有一些区别的。以下是 orjson 和 ujson 之间的一些主要区别&#xff1a; ### …

python+camelot库:提取pdf中的表格数据

camelot库支持将pdf中提取到的表格数据转为不同格式的文件保存。 安装&#xff1a;pip install camelot-py 运行报错处理&#xff0c;出现报错&#xff1a;from .core import TableList ImportError: cannot import name TableList from camelot.core (E:\python\lib\site-pa…

Google Chrome 去除更新 Windows

这个很烦&#xff0c;经常弹出&#xff0c;又不想更新。 1.使用组策略编辑器 此方法适用于 Windows 系统且系统为专业版及以上版本&#xff0c;家庭版系统没有组策略功能。 按下Win R键&#xff0c;打开 “运行” 对话框&#xff0c;输入gpedit.msc并回车&#xff0c;打开组策…

[0405].第05节:搭建Redis主从架构

Redis学习大纲 一、3主3从的集群配置&#xff1a; 1.1.集群规划 1.分片集群需要的节点数量较多&#xff0c;这里我们搭建一个最小的分片集群&#xff0c;包含3个master节点&#xff0c;每个master包含一个slave节点&#xff0c;结构如下&#xff1a; 2.每组是一主一从&#x…