使用 PostfixAdmin 设置邮件服务器

2023-11-09

Postfix Admin 是一个基于 Web 的界面,允许用户配置和管理基于 Postfix 的电子邮件服务器。使用 Postfix Admin,您可以创建和管理多个虚拟域、用户和别名。

这是该系列的第一篇文章设置和配置邮件服务器其中涵盖了创建必要的 DNS 记录,并解释了如何安装和配置 Postfix Admin、带有免费 Let’s Encrypt 证书的 Nginx、PHP 和 MySQL。

本教程是为 Ubuntu 16.04 编写的,但是经过少量修改的相同步骤应该适用于任何较新的版本Ubuntu 版本 .

先决条件#

作为学习本系列的先决条件,您将需要:

  • Ubuntu 16.04 服务器。这服务器主机名必须是 FQDN。在本系列中我们将使用mail.linuxize.com.
  • 具有 sudo 权限的用户 .

DNS设置#

您需要设置以下 DNS 记录才能使您的邮件系统正常工作:

  • 一条记录,将系统的 FQDN(主机名)指向您的邮件服务器 IPv4 地址。
mail.linuxize.com. 3600 IN A   23.45.67.89
FQDN 由两部分组成:主机名和域名。
  • MX 记录,指定哪个邮件服务器负责代表收件人的域接受电子邮件。在我们的例子中,我们希望将所有电子邮件发送至@linuxize.com接受的电子邮件地址mail.linuxize.com邮件服务器。
linuxize.com.      3600 IN MX  0 mail.linuxize.com.
  • SPF 记录,用于验证哪些邮件服务器被批准代表给定域发送电子邮件。在下面的示例中,我们正在批准域邮件服务器 (mx),如果 SPF 检查失败,结果将是软故障(~全部):
linuxize.com.      3600 IN TXT "v=spf1 mx ~all"
当然,您需要将域名和IP地址替换为您的真实域名和邮件服务器IP地址。

反向 DNS (PTR)#

反向 DNS (PTR) 是 IP 地址到域名的映射,与将域名映射到 IP 地址的 DNS 完全相反。

大多数电子邮件服务器将对尝试连接到它们的 IP 地址执行反向 DNS 查找,如果未设置 PTR 记录,则可能不会接受来自服务器的电子邮件。

在大多数情况下,可以通过托管提供商 Web 界面或联系支持团队并要求他们为您设置正确的 PTR 记录来设置 PTR 条目。

您可以使用挖掘命令找出给定 IP 地址的反向 DNS。

dig -x 23.45.67.89
23.45.67.89.in-addr.arpa domain name pointer mail.linuxize.com.

创建系统用户#

由于我们正在使用虚拟用户配置邮件服务器,因此我们需要一个系统用户,该用户将成为所有邮箱的所有者,并将由虚拟用户用来访问服务器上的电子邮件。

以下命令将创建一个新组和用户名为vmail并将用户的主目录设置为/var/mail/vmail:

sudo groupadd -g 5000 vmailsudo useradd -u 5000 -g vmail -s /usr/sbin/nologin -d /var/mail/vmail -m vmail

所有虚拟邮箱将存储在/var/mail/vmail目录。

安装 Nginx PHP 和 MySQL#

后缀管理员是一个基于 PHP 的应用程序。为了能够访问 PostfixAdmin Web 界面,我们需要安装网络服务器和PHP。

运行以下命令安装 Nginx、PHP 和所有必需的 PHP 模块:

sudo apt install nginx mysql-server php7.0-fpm php7.0-cli php7.0-imap php7.0-json php7.0-mysql php7.0-opcache php7.0-mbstring php7.0-readline

安装过程中系统会提示您创建 MySQL root 密码。

下载并配置 Postfix Admin#

在撰写本文时,3.1是 Postfix Admin 的最新稳定版本。

使用以下命令下载 Postfix Admin 存档wget命令 :

VERSION=3.1wget -q https://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-${VERSION}/postfixadmin-${VERSION}.tar.gz

下载完成后提取存档 :

tar xzf postfixadmin-${VERSION}.tar.gz

MovePostfix 管理源文件/var/www目录并创建templates_c目录(智能缓存):

sudo mv postfixadmin-${VERSION}/ /var/www/postfixadminrm -f postfixadmin-${VERSION}.tar.gzmkdir /var/www/postfixadmin/templates_c

Nginx 和 PHP-FPM 都在用户下运行www-data所以我们需要改变所有权/var/www/postfixadmin给该用户:

sudo chown -R www-data: /var/www/postfixadmin

Postfix 管理员将使用MySQL数据库存储有关用户、域和应用程序配置的信息。

登录到MySQL shell :

mysql -u root -p

创建一个新的 MySQL 用户和数据库使用以下命令:

CREATE DATABASE postfixadmin;GRANT ALL ON postfixadmin.* TO 'postfixadmin'@'localhost' IDENTIFIED BY 'P4ssvv0rD';FLUSH PRIVILEGES;
不要忘记更改密码(P4ssvv0rD)到更安全的东西。

我们将创建一个名为的新文件,而不是编辑默认的 Postfix 管理配置config.local.php这将覆盖默认的应用程序设置:

使用文本文件打开文件:

sudo nano /var/www/postfixadmin/config.local.php

粘贴以下 php 代码:

/var/www/postfixadmin/config.local.php
<?php
$CONF['configured'] = true;

$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'P4ssvv0rD';
$CONF['database_name'] = 'postfixadmin';

$CONF['default_aliases'] = array (
  'abuse'      => 'abuse@linuxize.com',
  'hostmaster' => 'hostmaster@linuxize.com',
  'postmaster' => 'postmaster@linuxize.com',
  'webmaster'  => 'webmaster@linuxize.com'
);

$CONF['fetchmail'] = 'NO';
$CONF['show_footer_text'] = 'NO';

$CONF['quota'] = 'YES';
$CONF['domain_quota'] = 'YES';
$CONF['quota_multiplier'] = '1024000';
$CONF['used_quotas'] = 'YES';
$CONF['new_quota_table'] = 'YES';

$CONF['aliases'] = '0';
$CONF['mailboxes'] = '0';
$CONF['maxquota'] = '0';
$CONF['domain_quota_default'] = '0';
?>

保存并关闭文件。

通过上面的配置,我们定义数据库类型和登录凭据。此外,我们还指定了默认别名,禁用fetchmail并启用配额。

接下来,运行以下命令来创建 Postfix 管理数据库的架构:

sudo -u www-data php /var/www/postfixadmin/upgrade.php

填充数据库后,我们可以继续使用以下命令创建我们的第一个 PostfixAdmin 超级管理员用户postfixadmin-cli tool.

该用户将拥有修改任何域或应用程序设置的管理权限。

sudo bash /var/www/postfixadmin/scripts/postfixadmin-cli admin add superadmin@linuxize.com --superadmin 1 --active 1 --password P4ssvv0rD --password2 P4ssvv0rD

输出应如下所示:

Welcome to Postfixadmin-CLI v0.2
---------------------------------------------------------------

The admin superadmin@linuxize.com has been added!

---------------------------------------------------------------
不要忘记更改密码(P4ssvv0rD)让超级管理员帐户变得更安全。

安装免费的 Let’s Encrypt SSL 证书#

我们将使用 SSL 证书访问 Postfix Admin 安装并启用 Dovecot 和 Postfix SSL/TLS 加密。

我们有一个关于如何安装 Let’s Encrypt SSL 证书。这里最重要的一点是在我们的例子中为您的服务器主机名 (FQDN) 生成 SSL 证书mail.linuxize.com.

按照上面链接的教程生成 SSL 证书后,编辑您的Nginx 服务器块如下:

/etc/nginx/sites-enabled/mail.linuxize.com.conf
server {
    listen 80;
    server_name mail.linuxize.com;

    include snippets/letsencrypt.conf;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name mail.linuxize.com;
    root /var/www;

    ssl_certificate /etc/letsencrypt/live/mail.linuxize.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mail.linuxize.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/mail.linuxize.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    location / {
       try_files $uri $uri/ /index.php;
    }

    location /postfixadmin {
       index index.php;
       try_files $uri $uri/ /postfixadmin/index.php;
    }

    location ~* \.php$ {
         fastcgi_split_path_info ^(.+?\.php)(/.*)$;
         if (!-f $document_root$fastcgi_script_name) {return 404;}
         fastcgi_pass  unix:/run/php/php7.0-fpm.sock;
         fastcgi_index index.php;
         include fastcgi_params;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

重新加载Nginx服务使更改生效:

sudo systemctl reload nginx

此时,您应该能够登录您的 Postfix Admin 安装:https://mail.linuxize.com/postfixadmin,使用本教程前面创建的超级管理员用户。

结论#

在本教程中,您已经安装了 Postfix Admin。在本系列的下一部分中,我们将继续安装和配置 Postfix 和 Dovecot。敬请关注!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PostfixAdmin 设置邮件服务器 的相关文章

  • 如何在通过代理 (Tor) 浏览时阻止 Java 预解析我的主机?

    我目前正在开发一个java应用程序 它使用在本地主机上运行的tor代理来获取显示请求者ip的脚本 我希望这项工作主要由 Tor 代理完成 以便它在最 自然 的状态下工作 我当前的代码看起来与此类似 SocketAddress TorProx
  • Django 应用程序是否可以知道用户的 Windows 域名?

    我需要制作一个简单的知识库类型应用程序以在公司内部网络中使用 为了使最终用户使用起来简单快捷 我想部分跳过所有登录 因为它只对我们信任的内部网络用户可见 并自动从用户中提取域用户名并放入它进入数据库 不希望人们浪费时间手动输入他们的名字 他
  • 具有 DNS 验证的证书陷入待验证状态

    我已将我的域转移到 Route53 并且我希望 Amazon Certificate Manager 为该域颁发证书 我按照控制台中的步骤颁发证书 确实出现了 在 Route53 中创建记录 按钮 我确实按它 它说 成功 我确实看到在 Ro
  • 对在欧盟地区运行的 Heroku 应用程序强制使用 SSL

    我正在努力为 Heroku 欧盟地区 上运行的 Rails 应用程序强制实施 SSL 连接 我已成功将证书 包括 Heroku SSL 附加组件 添加到自定义域 如果我明确声明 https com 则效果完美 但我想将所有 http 请求重
  • 如何让 Docker 容器访问主机上的 dnsmasq 本地 DNS 解析器?

    Docker 容器可能会通过多种方式对 DNS 设置感到困惑 只需在 SO 或更广泛的互联网上搜索 Docker DNS 即可了解我的意思 建议的常见解决方法之一是 将 dnsmasq 设置为主机系统上的本地 DNS 解析器 将其绑定到do
  • Java 无法从 AIX 解析 DNS 地址:UnknownHostException

    我遇到了这个奇怪的错误 在 AIX 上 如果我可以从命令行访问我的服务器 使用 ping telnet 但是如果我尝试使用 java 我会遇到 UnknownHostException 这是因为 Java 无法以某种方式 使用 DNS 但我
  • NGinx 域名重定向

    假设我有一个名为 xyz co 的网站 我还有其他具有相同前缀的域名 例如 xyz com xyz it xyz co it 现在 nginx 与端口 80 的 nginx conf 中的 server name xyz co 配合得很好
  • Docker DNS 设置

    我尝试使用自定义网络和 dos 设置创建 docker 容器 docker网络创建 driver bridge opt com docker network bridge enable ip masquerade true opt com
  • AWS Cloudfront 作为具有自定义域的 Heroku 站点的 CDN

    最近 我从 AWS Route 53 brianpatrickhummel com 购买了一个域来托管个人投资组合 该投资组合网站已启动并正在运行 使用 S3 存储桶和 Cloudfront 作为 CDN 在作品集网站上 访问者可以预览我构
  • 为什么我的 Github 托管网站响应 HTTP 302 而不是 200?

    我拥有该域名penkov id au http penkov id au 我主持一个blog http michael penkov id au blog 2014 01 02 reinventing the wheel html usin
  • 包含带重音符号的域的主要缺点是什么?

    我正在考虑获取一个包含重音字符的域 它包含 然而 我注意到只有一些公司提供它们 这些域是否存在普遍问题 或者我在使用这些域时是否会遇到某些缺点 DNS 协议仅支持 ASCII 带有重音字符的域被编码为 ASCII 使用Punycode ht
  • CakePHP 多站点(如 WPMU + 域映射)...可能吗?

    所以我刚刚开始使用 CakePHP 想知道是否可以执行以下操作 一次安装 Cake 并使用超级管理员登录 然后 管理员有权访问指定的 子站点 并能够在这些子站点上创建 编辑内容和用户 最后 能够将域名 不是子域 而是唯一域 映射到路由 所以
  • Nodejs 上使用 DNS 进行 Consul 服务发现

    TL DR 大家好 我试图从用 Express 编写的 NodeJS 前端调用 NodeJS 后端微服务 通过Consul https www consul io DNS接口 https www consul io intro gettin
  • 域名 foo.bar 指向 127.0.53.53 ——为什么?

    我今天刚刚注意到域名 foo bar 解析为 127 0 53 53 http foo bar http foo bar http whois domaintools com foo bar http whois domaintools c
  • Heroku:无法解析服务器的 DNS

    我买了一个myapp app带有 OVH 的域 我还购买了 Heroku hobby dyno 以便为我的 api 有一个安全的子域 https www server myapp app代替https www myapp heroku ap
  • Heroku 域名注册配置为雪松栈上的竹子

    我在 Cedar Stack 上运行时遇到 Heroku 的 DNS 配置问题 当我的自定义域具有正确的指向 CNAME 记录并正确配置为 Heroku 指令时 它一直认为我正在将 Cedar 堆栈路由到 Bamboo 事情是这样的 我最近
  • AWS EC2 反向 DNS (PTR) 失败

    到处寻找 找不到答案 我有域名 mydomain com root 和 www 记录指向我的主服务器 它运行我的网站 我现在使用单独的 AWS ec2 实例为我的域设置电子邮件服务器 这是在子域上运行的mail 我的 DNS 看起来像这样
  • 在 dnspython 中返回“A”DNS 记录

    我在用dnspython http www dnspython org 获取 A 记录并返回结果 给定域的 IP 地址 我有这个简单的测试 python 脚本 import dns resolver def resolveDNS domai
  • docker repo 解决映像构建期间的错误错误(检查存储库文件)

    我在构建 docker 映像时遇到问题 并尝试了不同的 DNS 选项 但似乎运气不佳 Docker版本1 9 1 构建a34a1d5 回购还活着 为了运行我使用的容器docker run dns 192 168 1 1 d ti name
  • 在 docker 构建期间设置 DNS 选项

    由于本地网络配置 我必须将 dns 和 dns search 选项添加到我的 docker run 命令中 如下所示 docker run dns XX XX 1 1 dns search companydomain t mycontain

随机推荐

  • 如何在 Linux 中设置/创建环境和 Shell 变量

    Shell 是操作系统的命令解释器 处理在命令行中输入的命令 在 Linux 中广泛使用 变量就像指向特定数据的指针 并保存可以是任何值的特定值 用户可以在 Shell 的帮助下创建 删除或分配变量 当 Shell 运行时 存在三种类型的变
  • 如何在 Ubuntu 16.04 中将 Unity 启动器移动到底部

    将 Unity 启动器移至底部 Ubuntu 16 04 还提供了将 Unity 启动器移动到底部的选项 Ubuntu 早期版本不提供此选项 但现在我们可以将 unity 启动器移动到底部或左侧 本教程将帮助您在 Ubuntu 16 04
  • 什么是 JavaScript 闭包及其示例?

    JavaScript 是一种多功能编程语言 支持多种编程范例 JavaScript 最强大的功能之一是闭包 它允许开发人员创建强大而灵活的代码 在本文中 我们将探讨什么是闭包以及它们如何工作 并提供一些示例 JavaScript 中的闭包是
  • 如何在 Ubuntu 16.04、14.04 和 LinuxMint 18 中安装 Filezilla

    文件齐拉是最流行的跨平台 开源 ftp 客户端 FileZilla 可用作 FTP FTPS 和 SFTP 客户端 具有许多功能和直观的图形用户界面 以下是 FileZilla 的一些主要功能 访问以下网址在 Linux 系统上安装和配置
  • 在 Ubuntu 中设置启动和关闭脚本

    Linux 操作系统的强大功能之一是能够通过在启动 关闭或重新启动时运行脚本来控制系统的行为 本文作为在 Ubuntu Linux 中设置这些脚本的实用指南 从自动化日常任务到初始化服务 潜在的用例几乎是无限的 让我们深入探讨如何利用此功能
  • 用于备份 SQL Server 数据库的 PowerShell 脚本

    数据库管理是任何依赖数据存储和检索的应用程序的一个关键方面 确保数据完整性和可用性至关重要 此过程中最基本的步骤之一是创建 SQL Server 数据库的定期备份 在本文中 我们将演示如何创建一个 PowerShell 脚本 该脚本可自动执
  • 如何在 MacOS 上安装 Node.js

    Node js 是一个强大的 JavaScript 运行时环境 允许您在服务器端执行 JavaScript 它广泛用于开发可扩展的 Web 应用程序 命令行工具等 在本文中 我们将介绍在 macOS 系统上安装 Node js 的过程 先决
  • 如何在 Ubuntu 和 Debian 上导入 GPG 密钥(无需 apt-key)

    最新的基于 Debian 的系统已弃用 apt key 命令 此命令用于将 GPG 签名密钥导入系统 这个命令在 Debian 10 及其衍生版本之前一直运行良好 Debian 11 及其衍生版本 如 Ubuntu 22 04 发布后 用户
  • 如何为 Node.js 应用程序设置 Apache 反向代理

    如果您的 Node js 应用程序在可访问 Internet 的服务器上运行 您将需要设置反向代理 以便外部用户可以通过 URL 例如 https example com 访问您的应用程序 即使您的 Node js 应用程序运行在专用网络上
  • 了解 Linux 进程状态的基本指南

    Linux 是世界上最流行的操作系统之一 以其效率和可靠性而备受赞誉 它是许多服务器 超级计算机和嵌入式系统的核心 Linux 的强大功能很大一部分源于它对系统进程的管理 本文提供了了解 Linux 进程状态的基本指南 并举例说明以便更好地
  • 如何在生产服务器上安全地重新启动 Apache

    要在生产服务器上安全地重新启动 Apache 建议使用 apachectl 或 httpd 工具 取决于您的系统 它提供了优雅的重新启动命令 这可确保所有当前操作在服务重新启动之前完成 验证配置文件 重新启动之前 请确保您的 Apache
  • 如何在 Ubuntu 20.04 上安装和配置 Fail2ban

    Fail2ban 是一种用于提高服务器安全性免受网络攻击的工具 它允许您根据定义的设置临时或永久阻止远程 IP 地址 它可以帮助您保护服务器和数据免受攻击者的侵害 本教程帮助您在 Ubuntu 20 04 LTS Linux 系统上安装 F
  • 什么是 SHA-512 算法?

    安全哈希算法 SHA 是将数据转换为固定长度哈希值的加密函数 可以将其视为数据的数字 指纹 SHA 512 算法是 SHA 2 安全哈希算法 2 家族的一部分 该算法由美国国家安全局 NSA 设计 并由美国国家标准与技术研究所 NIST 于
  • df 命令 – 检查 Linux 中的磁盘空间

    你使用Linux吗 如果是这样 那么您就知道它是一个功能强大的操作系统 具有大量工具和选项来帮助您管理系统 Linux 提供的最有用的工具之一是 df 命令 它允许您检查磁盘空间 在这篇博客中 我们将了解如何使用 df 命令来检查 Linu
  • Git 技巧:安全删除本地和远程分支

    使用 Git 是现代软件开发的重要组成部分 随着项目的发展 我们经常发现自己有多个分支代表不同的开发阶段 然而 维护太多分支可能会导致混乱和混乱 在本文中 我们将探讨安全有效地删除 Git 远程和本地分支的步骤 确保干净且有组织的工作流程
  • Linux Nohup 命令

    The nohup命令执行指定为其参数的另一个程序并忽略所有SIGHUP 挂断 信号 SIGHUP是当进程的控制终端关闭时发送到进程的信号 通常 当您通过 SSH 运行程序时 如果连接断开或注销 会话将终止 并且从终端执行的所有进程都将停止
  • 如何在 CentOS 7 上安装和使用 FFmpeg

    FFmpeg 是一个用于处理多媒体文件的免费开源工具集合 它包含一组共享的音频和视频库 例如libavcodec libavformat和libavutil 使用 FFmpeg 您可以在各种视频和音频格式之间进行转换 设置采样率 捕获流音频
  • 如何在 Debian 10 上安装 Python 3.8

    Python 是世界上使用最广泛的编程语言之一 凭借其简单易学的语法 Python 成为初学者和经验丰富的开发人员的热门选择 Python 是一种非常通用的编程语言 它可用于构建各种应用程序 从简单的脚本到复杂的机器学习算法 Debian
  • 如何在 Debian 9 上安装 Visual Studio Code

    视觉工作室代码是微软开发的免费开源跨平台代码编辑器 它有一个内置的调试支持 嵌入式Git控制 语法突出显示 代码完成 集成终端 代码重构和片段 可以使用扩展来扩展 Visual Studio Code 功能 本教程介绍如何使用 VS Cod
  • 使用 PostfixAdmin 设置邮件服务器

    Postfix Admin 是一个基于 Web 的界面 允许用户配置和管理基于 Postfix 的电子邮件服务器 使用 Postfix Admin 您可以创建和管理多个虚拟域 用户和别名 这是该系列的第一篇文章设置和配置邮件服务器其中涵盖了