当前位置: 首页 > article >正文

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

简介:

在本指南中,我们将演示如何在 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 = 0600
    user = postfix
    group = 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 All
        Options +FollowSymLinks
        Require 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.kler.cn/a/488108.html

相关文章:

  • ubuntu20下编译linux1.0 (part1)
  • 备忘录记事工具 四款好用的电脑备忘录记事本分享
  • 国产信创实践(国能磐石服务器操作系统CEOS +东方通TongHttpServer)
  • 【Go学习】-02-1-标准库:fmt、os、time
  • nginx-灰度发布策略(基于cookie)
  • 加速物联网HMI革命,基于TouchGFX的高效GUI显示方案
  • 华晨宇新专辑《量变临界点》上线 开启自我觉知的音乐旅程
  • 灵活运用事务回滚,快捷处理多张数据表格
  • 14_Redis事务
  • 初学者关于对机器学习的理解
  • Go语言的循环实现
  • 基于 SpringBoot线上考试系统的设计与实现
  • java.lang.OutOfMemoryError: PermGen space报错处理
  • Autodl安装tensorflow2.10.0记录
  • Linux基本指令(1)
  • 【数据库】三、SQL语言
  • [IoT]物联网(IoT)网络的安全性
  • 量子技术的发展
  • ubuntu编译龙蜥6.6内核源码
  • Swin Transformer模型详解(附pytorch实现)
  • AAAI2023《Controllable Image Captioning via Prompting》
  • 小程序与内嵌网页的数据通信
  • 数据集-目标检测系列- 石榴 检测数据集 pomegranate >> DataBall
  • docker 安装 fastdfs
  • hive迁移后修复分区慢,怎么办?
  • 学前端 4 个月想进中厂,该怎么做?