如何使用邮政创建一个完全精选的邮件服务器

2021-06-15 11:06:54 浏览数 (1)

邮政是一个免费的开源邮件服务器,用于发送和接收电子邮件。 它是用Ruby和JavaScript编写的。 您可以轻松地在自己的服务器上安装邮政。 它还可以帮助您提供减少垃圾邮件所需的正确DNS信息。 邮政被许多机构用来每天发送和接收邮件。

在本教程中,我们将在Ubuntu 17.04上安装邮政服务器。

条件

  • 最小Ubuntu 17.04服务器。 推荐8 GB RAM。
  • 根权限 本指南以root用户身份编写,如果以sudo用户身份登录,请运行sudo -i 。
  • 指向您的服务器的域名。

更新基本系统

在安装任何软件包之前,建议您使用以下命令更新软件包和存储库。

apt update && apt -y upgrade

shutdown -r now

更新系统后,继续安装Ruby。

安装Ruby

Postal是用Ruby编写的,因此需要在系统上安装Ruby 2.3或更高版本。 在本教程中,我们将使用RVM安装最新版本的Ruby。 运行以下命令在服务器上添加RVM的GPG密钥。

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

现在使用以下命令安装RVM。

curl -sSL https://get.rvm.io | bash -s stable

要立即使用RVM,您需要运行以下命令。

source /etc/profile.d/rvm.sh

现在使用以下命令获取Ruby列表。

rvm list known

您将看到以下输出:

代码语言:javascript复制
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.6]
[ruby-]2.3[.3]
[ruby-]2.4[.0]
ruby-head

现在使用以下命令在列表中安装最新版本的Ruby。

rvm install 2.4

使用以下命令使用Ruby版本。

rvm use 2.4

您可以使用以下命令验证Ruby的版本。

ruby -v

如果Ruby安装成功,您应该会看到以下输出。

代码语言:javascript复制
root@ubuntu:~# ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]

安装RubyGem

要在服务器上运行Postel,您需要在服务器上安装bundler和procodile 。 bundler是Ruby gem应用程序的依赖管理器。 procodile是Ruby应用程序的流程管理工具。 使用以下命令安装两个应用程序。

gem install bundler

gem install procodile

安装MariaDB数据库服务器

MariaDB是MySQL数据库服务器的一个分支。 MySQL是用于以表格格式存储数据的关系数据库管理系统软件。 要在服务器上安装MariaDB,请运行:

apt -y install mariadb-client mariadb-server libmysqlclient-dev

运行以下命令启动MariaDB并使其在引导时启动。

systemctl start mariadb

systemctl enable mariadb

现在运行以下命令来保护您的MariaDB安装。

mysql_secure_installation

上述命令将运行一个脚本来保护新鲜的MariaDB安装。 该脚本将要求现有的root用户密码,我们刚刚安装了MariaDB,root密码未设置,只需按Enter继续。

该脚本会询问您是否要为您的MariaDB安装设置root密码,然后选择y并为安装设置一个强密码。 大部分问题是不言自明的,你应该回答所有问题的答案。

邮政安装数据库

要创建一个Postal的数据库,我们需要先登录到MySQL命令行。 运行以下命令相同。

mysql -u root -p

上述命令将登录到root用户的MySQL shell,它将提示输入root用户的密码。 提供登录密码。现在运行以下查询为您的邮政安装创建一个新的数据库。

CREATE DATABASE postal CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;

上述查询将创建一个名为邮政的新数据库。 请确保在每个查询结尾使用分号,因为查询始终以分号结尾。

现在通过您创建的数据库为数据库用户提供所有权限。 运行以下命令。

代码语言:javascript复制
GRANT ALL ON `postal`.* TO `postal`@`127.0.0.1` IDENTIFIED BY "StrongPassword";

用强大而安全的密码替换StrongPassword 。

数据库将自动由邮政编写,但为此,我们需要为邮政用户提供适当的权限。 运行以下命令为以邮递开始的所有用户提供特权。

代码语言:javascript复制
GRANT ALL PRIVILEGES ON `postal-%` . * to `postal`@`127.0.0.1`  IDENTIFIED BY "StrongPassword";

现在运行以下命令立即对数据库权限应用更改。

FLUSH PRIVILEGES;

使用以下命令退出MySQL提示符。

EXIT;

安装RabbitMQ

RabbitMQ是用Erlang语言编写的,在本教程中我们将安装最新版本的Erlang到服务器中。 使用以下命令安装Erlang。

apt -y install erlang

通过运行导入GPG密钥:

curl -sL https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -

现在通过运行以下命令添加RabbitMQ存储库:

add-apt-repository 'deb http://www.rabbitmq.com/debian/ testing main'

通过运行以下命令更新存储库索引。

apt update

现在您可以通过运行以下命令来安装RabbitMQ。

apt -y install rabbitmq-server

RabbitMQ现已安装在您的系统上。

安装RabbitMQ

您可以通过运行以下命令启动RabbitMQ服务器进程。

systemctl start rabbitmq-server

要在引导时自动启动RabbitMQ,请运行以下命令。

systemctl enable rabbitmq-server

现在运行以下命令在RabbitMQ服务器中为Postal创建虚拟主机。

rabbitmqctl add_vhost /postal

现在通过运行以下命令为Postal添加一个RabbitMQ用户。

rabbitmqctl add_user postal StrongPassword

替换StrongPassword是非常强的密码。

现在将RabbitMQ虚拟主机的适当权限设置为RabbitMQ用户。

rabbitmqctl set_permissions -p /postal postal ".*" ".*" ".*"

安装Git和Node.js

Git将用于检索安装程序包和几个依赖关系。 运行以下命令在系统上安装Git。

apt -y install git

您可以使用以下命令检查版本,检查Git是否安装成功。

git --version

你应该得到以下输出。

代码语言:javascript复制
root@ubuntu:~# git --version
git version 2.11.0

Node.js将用于编译JavaScript库。 使用以下命令安装软件。

apt -y install nodejs

您可以通过运行以下命令来检查Node.js是否已成功安装。

nodejs -v

你应该得到以下输出。

代码语言:javascript复制
root@ubuntu:~# nodejs -v
v4.7.2

现在我们已经准备好所有的依赖项,可以安装邮政。

安装邮政

邮政应作为自己的隔离用户运行。 运行以下命令创建新用户。

useradd -r -m -d /opt/postal -s /bin/bash postal

上述命令将创建一个用户名为postal的新用户,并将主目录设置为/ opt / postal 。

允许Ruby通过运行以下命令来监听特权端口。

setcap 'cap_net_bind_service= ep' /usr/local/rvm/rubies/ruby-2.4.0/bin/ruby

现在一切都准备好了,请下载最新的邮件档案,并使用以下命令将邮件解压缩为邮政用户。

wget https://postal.atech.media/packages/stable/latest.tgz -O - | sudo -u postal tar zxpv -C /opt/postal

现在通过运行以下命令创建一个符号链接到Postal二进制文件。

ln -s /opt/postal/bin/postal /usr/bin/postal

现在您可以从任何目录与您的邮政服务器进行互动。 对于运行下一个命令,您需要以邮政用户身份登录到shell。

su - postal

现在,您将需要安装运行应用程序所需的所有ruby依赖项。

postal bundle /opt/postal/vendor/bundle

一旦安装了依赖项,您将需要生成默认的配置文件。

postal initialize-config

上述命令将为您的邮政安装生成必需的配置,包括各种密钥和证书。 这也将生成默认的postal.yml配置文件。 你应该得到以下输出。

代码语言:javascript复制
postal@ubuntu:~$ postal initialize-config
Created example config file at /opt/postal/config/postal.yml
Created new private key for Let's Encrypt
Created new signing key for DKIM & HTTP requests
Created new private key for default fast server TLS connections
Created new self signed certificate for default fast server TLS connections

现在您需要在postal.yml配置中配置几个选项。

nano /opt/postal/config/postal.yml

找到以下行:

代码语言:javascript复制
web:
  # The host that the management interface will be available on
  host: postal.example.com

将主机名更改为实际的域名。 此外,找到以下几行。

代码语言:javascript复制
main_db:
  # Specify the connection details for your MySQL database
  host: 127.0.0.1
  username: postal
  password: p0stalpassw0rd
  database: postal

message_db:
  # Specify the connection details for your MySQL server that will be house the
  # message databases for mail servers.
  host: 127.0.0.1
  username: postal
  password: p0stalpassw0rd
  prefix: postal

根据您创建的数据库更改用户名,密码和数据库名称。 此外,找到以下行:

代码语言:javascript复制
rabbitmq:
  # Specify the connection details for your RabbitMQ server.
  host: 127.0.0.1
  username: postal
  password: StrongPassword
  vhost: /postal

根据vhost和RabbitMQ创建的用户更改上述配置。 接下来,找到DNS配置。

代码语言:javascript复制
dns:
  # Specifies the DNS record that you have configured. Refer to the documentation at
  # https://github.com/atech/postal/wiki/Domains-&-DNS-Configuration for further
  # information about these.
  mx_records:
    - mx.postal.example.com
  smtp_server_hostname: postal.example.com
  spf_include: spf.postal.example.com
  return_path: rp.postal.example.com
  route_domain: routes.postal.example.com
  track_domain: track.postal.example.com

使用您希望与邮件服务器一起使用的实际域更改上述域。

保存文件并退出编辑器。 现在,通过运行以下命令初始化数据库和其他资源:

postal initialize

通过运行以下命令创建邮政管理员用户。

postal make-user

上述命令将要求您提供电子邮件地址,用户名和密码。 上述命令将生成以下输出。

代码语言:javascript复制
postal@ubuntu:~$ postal make-user
Postal User Creator
Enter the information required to create a new Postal user.
This tool is usually only used to create your initial admin user.

E-Mail Address      : me@liptanbiswas.com
First Name          : Liptan
Last Name           : Biswas
Initial Password:   : **************

User has been created with e-mail address me@liptanbiswas.com

Postal的命令行设置现已完成,您可以使用以下命令启动服务器。

postal start

要检查服务是否正确启动,请运行以下命令。

postal status

你应该得到以下输出。

代码语言:javascript复制
postal@ubuntu:~$ postal status
Procodile Version   1.0.17
Application Root    /opt/postal
Supervisor PID      5319
Started             2017-07-21 07:26:19  0000

|| web
|| Quantity            1
|| Command             bundle exec puma -C config/puma.rb
|| Respawning          5 every 3600 seconds
|| Restart mode        usr1
|| Log path            none specified
|| Address/Port        none
|| => web.1            Running      07:26        pid:5325     respawns:0      port:-        tag:-

|| worker
|| Quantity            1
|| Command             bundle exec ruby script/worker.rb
|| Respawning          5 every 3600 seconds
|| Restart mode        start-term
|| Log path            none specified
|| Address/Port        none
|| => worker.1         Running      07:26        pid:5327     respawns:0      port:-        tag:-

|| cron
|| Quantity            1
|| Command             bundle exec rake postal:cron
|| Respawning          5 every 3600 seconds
|| Restart mode        term-start
|| Log path            none specified
|| Address/Port        none
|| => cron.1           Running      07:26        pid:5329     respawns:0      port:-        tag:-

|| smtp
|| Quantity            1
|| Command             bundle exec rake postal:smtp_server
|| Respawning          5 every 3600 seconds
|| Restart mode        usr1
|| Log path            none specified
|| Address/Port        none
|| => smtp.1           Running      07:26        pid:5332     respawns:0      port:-        tag:-

|| requeuer
|| Quantity            1
|| Command             bundle exec rake postal:requeuer
|| Respawning          5 every 3600 seconds
|| Restart mode        term-start
|| Log path            none specified
|| Address/Port        none
|| => requeuer.1       Running      07:26        pid:5334     respawns:0      port:-        tag:-

要停止邮政,您可以随时运行以下命令。

postal stop

配置Nginx作为反向代理

出于安全考虑,Postal Web界面和API应该位于任何生产Web服务器(如Apache或Nginx)的后面。 在本教程中,我们将安装和配置Nginx作为反向代理。

通过运行以下命令安装Nginx Web服务器。

apt -y install nginx

建议使用SSL访问Nginx。 您可以使用自签名证书或者让我们加密免费的SSL证书或商业证书。 在本教程中,我们将使用我们加密免费的SSL。

安装我们通过运行以下命令来加密客户端也称为certbot。

apt -y install certbot

一旦安装完成,请运行以下命令从“加密证书颁发机构”获取证书。 确保域名指向您的服务器,因为certbot将在提供证书之前检查域名权限。 用您的实际域名替换mail.example.com 。

certbot certonly --standalone -d mail.example.com

生成证书后,它们将存储在/etc/letsencrypt/live/mail.example.com中 。

我们加密SSL在90天内到期,因此建议您为证书设置自动续订。 运行以下命令打开crontab文件。

crontab -e

在crontab文件中输入以下行。

30 1 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log

上述cron工作将在上午1:30每周一自动运行,如果您的证书到期,则会自动续订。

现在通过运行以下命令为您的网站创建一个新的服务器块。

nano /etc/nginx/conf.d/mail.example.com.conf

使用以下内容填充文件。

代码语言:javascript复制
server {
    listen [::]:80;
    listen 0.0.0.0:80;
    server_name mail.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen [::]:443 ssl;
    listen 0.0.0.0:443 ssl;
    root /opt/postal/public;
    server_name mail.example.com;
    ssl_certificate      /etc/letsencrypt/live/mail.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/mail.example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
    ssl_prefer_server_ciphers on;
    ssl_ciphers EECDH ECDSA AESGCM:EECDH aRSA AESGCM:EECDH ECDSA SHA512:EECDH ECDSA SHA384:EECDH ECDSA SHA256:ECDH AESGCM:ECDH AES256:DH AESGCM:DH AES256:RSA AESGCM:!aNULL:!eNULL:!LOW:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;

    location / {
       client_max_body_size 50M;
       try_files $uri $uri/index.html $uri.html @puma;
    }

    location /assets {
       add_header Cache-Control max-age=3600;
    }

    location @puma {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_pass http://127.0.0.1:5000;
    }
}

保存文件并退出编辑器。 现在通过运行重新启动nginx web服务器。

systemctl restart nginx

要启动nginx在引导时自动启动,请运行以下命令。

systemctl enable nginx

您现在可以通过您最喜爱的网络浏览器浏览以下网站访问邮政。

https://mail.example.com

配置邮政

浏览上述网站后,您将看到以下界面。

输入您之前创建的用户的电子邮件地址和密码。 登录后,系统将要求您创建一个新的组织。

提供组织的名称。 您可以选择使用自动生成的短名称,也可以自己指定一个。 用SMTP服务器进行身份验证时,使用短名称作为用户名。 它应该只包含字母,数字和连字符。

创建组织后,系统将要求您创建一个新的邮件服务器。

提供电子邮件服务器的名称,短名称和模式。 在实时模式下,所有电子邮件都会正常发送和传送,但在开发模式下,只能在网页界面中看到。

添加邮件服务器后,您将需要在邮件服务器中添加新的域。 单击“ 域”选项卡并创建一个新的域名。

添加域名后,您需要配置域名的DNS。 您将需要为SPF和DKIM添加两个TXT记录。 您还需要添加CNAME记录和MX记录以返回路径和邮件传递。 配置DNS后,单击检查我的记录是否正确按钮验证DNS配置。

现在,您将需要创建SMTP凭据来发送和接收电子邮件。

选择类型为SMTP或API。 提供SMTP凭据的名称,选择您希望处理电子邮件地址的方式。

完成后,您可以回到概览选项卡,您将看到发送或接收电子邮件地址所需的信息。

结论

在本教程中,我们使用Ubuntu 17.04上的邮件成功设置了一个功能齐全的邮件服务器。 您可以使用邮件服务器发送和接收组织的电子邮件。

0 人点赞