使用PostfixAdmin设置邮件服务器
Postfix Admin是一个基于Web的界面,允许用户配置和管理基于Postfix的电子邮件服务器。
使用Postfix Admin,我们可以创建和管理多个虚拟域,用户和别名。
这是设置和配置邮件服务器系列文章中的第一篇,介绍创建必要的DNS记录,并说明如何安装和配置Postfix Admin,带有免费的Let's Encrypt证书的Nginx,PHP和MySQL。
本教程是为Ubuntu 16.04编写的,但是对任何较新版本的Ubuntu都可以进行相同的步骤,但稍加修改即可。
准备工作
作为遵循此系列的前提条件,我们将需要:
- Ubuntu 16.04服务器。服务器主机名必须是FQDN。
在本系列中,我们将使用'mail.theitroad.com'。
- 具有sudo特权的用户。
DNS设置
我们需要设置以下DNS记录才能使邮件系统正常工作:
- 一条记录,用于将系统的FQDN(主机名)指向邮件服务器的IPv4地址。
mail.theitroad.com. 3600 IN A 23.45.67.89
FQDN由两部分组成,主机名和域名。
- MX记录,用于指定哪个邮件服务器负责代表收件人的域接受电子邮件。在我们的案例中,我们希望发送到“ @ theitroad.com”电子邮件地址的所有电子邮件都被“ mail.theitroad.com”邮件服务器接受。
theitroad.com. 3600 IN MX 0 mail.theitroad.com.
- SPF记录,用于验证哪些邮件服务器被允许代表给定域发送电子邮件。在下面的示例中,我们正在批准域邮件服务器(mx),如果SPF检查失败,则结果将是软故障(~all):
theitroad.com. 3600 IN TXT "v=spf1 mx ~all"
当然,我们需要用真实域名和邮件服务器IP地址替换域名和IP地址。
反向DNS(PTR)
反向DNS(PTR)是IP地址到域名的映射,与DNS恰好相反,DNS会将域名映射到IP地址。
大多数电子邮件服务器将在尝试连接到它们的IP地址上执行反向DNS查找,如果未设置PTR记录,则可能不接受来自服务器的电子邮件。
在大多数情况下,可以通过主机提供商的Web界面或者联系支持团队并要求他们为我们设置正确的PTR记录来设置PTR条目。
我们可以使用dig命令找出给定IP地址的反向DNS。
dig -x 23.45.67.89
23.45.67.89.in-addr.arpa domain name pointer mail.theitroad.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
Postfix Admin是一个基于PHP的应用程序。
为了能够访问PostfixAdmin Web界面,我们需要安装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根密码。
下载并配置Postfix管理员
在撰写本文时,“ 3.1”是Postfix Admin的最新稳定版本。
使用以下wget命令下载Postfix Admin归档文件:
VERSION=3.1wget -q https://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-${VERSION}/postfixadmin-${VERSION}.tar.gz
下载完成后,解压缩存档文件:
tar xzf postfixadmin-${VERSION}.tar.gz
将Postfix Admin源文件移动到“/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 Admin将使用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 Admin配置,我们将创建一个名为“ 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' => '[email protected]', 'hostmaster' => '[email protected]', 'postmaster' => '[email protected]', 'webmaster' => '[email protected]' ); $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 Admin数据库创建架构:
sudo -u www-data php /var/www/postfixadmin/upgrade.php
填充数据库后,我们可以继续使用“ postfixadmin-cli”工具创建第一个PostfixAdmin超级管理员用户。
该用户将具有管理权限,可以修改任何域或者应用程序设置。
sudo bash /var/www/postfixadmin/scripts/postfixadmin-cli admin add [email protected] --superadmin 1 --active 1 --password P4ssvv0rD --password2 P4ssvv0rD
输出应如下所示:
Welcome to Postfixadmin-CLI v0.2 -------------------------------------------------------------- The admin [email protected] has been added! --------------------------------------------------------------
不要忘记将超级管理员帐户的密码('P4ssvv0rD')更改为更安全的密码。
安装免费的“Let’s Encrypt SSL证书”
我们将使用SSL证书来访问我们的Postfix Admin安装并启用Dovecot和Postfix SSL/TLS加密。
我们提供了有关如何安装Let's Encrypt SSL证书的教程。
这里最重要的一点是在我们的案例'mail.theitroad.com'中为服务器主机名(FQDN)生成SSL证书。
按照上面的链接生成SSL证书后,请按如下所示编辑Nginx服务器块:
/etc/nginx/sites-enabled/mail.theitroad.com.conf
server { listen 80; server_name mail.theitroad.com; include snippets/letsencrypt.conf; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name mail.theitroad.com; root /var/www; ssl_certificate /etc/letsencrypt/live/mail.theitroad.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mail.theitroad.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/mail.theitroad.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
此时,我们应该可以使用本教程前面创建的超级管理员用户通过“ https://mail.theitroad.com/postfixadmin”登录到Postfix Admin安装。