Почтовый сервер · 12 min read · Nov 06, 2025

Как создать полнофункциональный почтовый сервер с помощью Postal

Postal — это бесплатный и открытый полноценный почтовый сервер для отправки и получения электронных писем. Он написан на Ruby и JavaScript. Вы можете легко установить Postal на своем собственном сервере. Он также помогает предоставить правильную информацию DNS, необходимую для снижения спама. Postal используется многими организациями для ежедневной отправки и получения почты.

В этом руководстве мы установим почтовый сервер Postal на Ubuntu 17.04.

Предварительные условия

  • Минимальный сервер Ubuntu 17.04. Рекомендуется 8 ГБ ОЗУ.
  • Привилегии root. Это руководство написано от имени пользователя root, если вы вошли как пользователь sudo, выполните sudo -i.
  • доменное имя, указывающее на ваш сервер.

Обновление базовой системы

Перед установкой любого пакета рекомендуется обновить пакеты и репозиторий с помощью следующей команды.

apt update && apt -y upgrade
shutdown -r now

После обновления вашей системы продолжайте установку Ruby.

Установка Ruby

Postal написан на Ruby, поэтому необходимо установить Ruby 2.3 или выше на вашу систему. В этом руководстве мы установим последнюю версию Ruby с помощью RVM. Выполните следующую команду, чтобы добавить GPG-ключ RVM на ваш сервер.

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

Вы увидите следующий вывод:

# 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 установлен успешно.

root@ubuntu:~# ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]

Установка Ruby Gems

Чтобы запустить Postal на вашем сервере, вам нужно будет установить 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, чтобы продолжить.

Скрипт спросит, хотите ли вы установить пароль root для вашей установки MariaDB, выберите y и установите надежный пароль для установки. Большинство вопросов являются самоочевидными, и вы должны ответить да или y на все вопросы.

Настройка базы данных для Postal

Чтобы создать базу данных для Postal, нам нужно будет сначала войти в командную строку MySQL. Выполните следующую команду для этого.

mysql -u root -p

Вышеуказанная команда войдет в оболочку MySQL от имени пользователя root, она запросит пароль пользователя root. Укажите пароль для входа. Теперь выполните следующий запрос, чтобы создать новую базу данных для вашей установки Postal.

CREATE DATABASE postal CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;

Вышеуказанный запрос создаст новую базу данных с именем postal. Убедитесь, что вы используете точку с запятой в конце каждого запроса, так как запрос всегда заканчивается точкой с запятой.

Теперь предоставьте все привилегии вашему пользователю базы данных на созданную вами базу данных. Выполните следующую команду.

GRANT ALL ON `postal`.* TO `postal`@`127.0.0.1` IDENTIFIED BY "StrongPassword";

Замените StrongPassword на очень надежный и безопасный пароль.

База данных будет автоматически записана Postal, но для этого нам нужно будет предоставить соответствующие разрешения пользователям Postal. Выполните следующую команду, чтобы предоставить привилегии всем пользователям, начинающимся с postal-.

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

Теперь выполните следующую команду, чтобы создать виртуальный хост для Postal на сервере RabbitMQ.

rabbitmqctl add_vhost /postal

Теперь добавьте пользователя RabbitMQ для Postal, выполнив следующую команду.

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

Вы должны получить следующий вывод.

root@ubuntu:~# git --version
git version 2.11.0

Node.js будет использоваться для компиляции библиотеки JavaScript. Установите программное обеспечение с помощью следующей команды.

apt -y install nodejs

Вы можете проверить, установлен ли Node.js успешно, выполнив следующую команду.

nodejs -v

Вы должны получить следующий вывод.

root@ubuntu:~# nodejs -v
v4.7.2

Теперь, когда у нас есть все зависимости, вы можете установить Postal.

Установка Postal

Postal должен работать как свой собственный изолированный пользователь. Выполните следующую команду, чтобы создать нового пользователя.

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

Теперь, когда все готово, загрузите последнюю архивную версию Postal и извлеките архив от имени пользователя Postal с помощью следующей команды.

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

Теперь вы можете взаимодействовать с вашим сервером Postal из любого каталога. Для выполнения следующих команд вам нужно будет войти в оболочку как пользователь postal.

su - postal

Теперь вам нужно будет установить все зависимости Ruby, необходимые для запуска приложения.

postal bundle /opt/postal/vendor/bundle

После установки зависимостей вам нужно будет сгенерировать файлы конфигурации по умолчанию.

postal initialize-config

Вышеуказанная команда сгенерирует необходимую конфигурацию для вашей установки Postal, включая различные ключи и сертификаты. Это также создаст файл конфигурации postal.yml по умолчанию. Вы должны получить следующий вывод.

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

Найдите следующую строку:

web:
  # The host that the management interface will be available on
  host: postal.example.com

Измените имя хоста на ваше фактическое доменное имя. Далее найдите следующие строки.

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

Измените имя пользователя, пароль и имя базы данных в соответствии с созданной вами базой данных. Далее найдите эти строки:

rabbitmq:
  # Specify the connection details for your RabbitMQ server.
  host: 127.0.0.1
  username: postal
  password: StrongPassword
  vhost: /postal

Измените вышеуказанную конфигурацию в соответствии с vhost и пользователем, созданными для RabbitMQ. Далее найдите настройки DNS.

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, выполнив следующую команду.

postal make-user

Вышеуказанная команда запросит у вас адрес электронной почты, имя пользователя и пароль. Вышеуказанная команда сгенерирует следующий вывод.

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      : [email protected]
First Name          : Liptan
Last Name           : Biswas
Initial Password:   : **************

User has been created with e-mail address [email protected]

Настройка Postal через командную строку теперь завершена, вы можете запустить сервер, выполнив следующую команду.

postal start

Чтобы проверить, правильно ли запущены службы, выполните следующую команду.

postal status

Вы должны получить следующий вывод.

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, вы всегда можете выполнить следующую команду.

postal stop

Настройка Nginx как обратного прокси

По соображениям безопасности веб-интерфейс и API Postal должны находиться за любым производственным веб-сервером, таким как Apache или Nginx. В этом руководстве мы установим и настроим Nginx как обратный прокси.

Установите веб-сервер Nginx, выполнив следующую команду.

apt -y install nginx

Рекомендуется использовать SSL для доступа к Nginx. Вы можете использовать либо самоподписанный сертификат, либо бесплатный SSL-сертификат Let’s Encrypt, либо коммерческий сертификат. В этом руководстве мы будем использовать бесплатный SSL-сертификат Let’s Encrypt.

Установите клиент Let’s Encrypt, также известный как certbot, выполнив следующую команду.

apt -y install certbot

После завершения установки выполните следующую команду, чтобы получить сертификаты от удостоверяющего центра Let’s Encrypt. Убедитесь, что доменное имя указывает на ваш сервер, так как certbot проверит полномочия домена перед предоставлением сертификатов. Замените mail.example.com на ваше фактическое доменное имя.

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

После генерации сертификатов они будут храниться в /etc/letsencrypt/live/mail.example.com.

Сертификаты Let’s Encrypt истекают через 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

Заполните файл следующим содержимым.

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, выполнив.

systemctl restart nginx

Чтобы включить nginx для автоматического запуска при загрузке, выполните следующую команду.

systemctl enable nginx

Теперь вы можете получить доступ к Postal, перейдя по следующему веб-сайту через ваш любимый веб-браузер.

https://mail.example.com

Настройка Postal

После того как вы перейдете на указанный выше сайт, вы увидите следующий интерфейс.

Вход в Postal

Введите адрес электронной почты и пароль пользователя, которого вы создали ранее. После входа в систему вам будет предложено создать новую организацию.

Добавить организацию в Postal

Укажите название организации. Вы можете выбрать автоматически сгенерированное короткое имя или указать его самостоятельно. Короткие имена используются в качестве имени пользователя при аутентификации на SMTP-сервере. Они должны содержать только буквы, цифры и дефисы.

Введите название организации

После создания организации вам будет предложено создать новый почтовый сервер.

Добавить почтовый сервер

Укажите имя, короткое имя и режим почтового сервера. В режиме Live все электронные письма маршрутизируются и доставляются нормально, но в режиме разработки они видны только в веб-интерфейсе.

Создать новый почтовый сервер

После добавления почтового сервера вам нужно будет добавить новый домен в почтовый сервер. Нажмите на вкладку Domains и создайте новое доменное имя.

Добавить домен

После добавления доменного имени вам нужно будет настроить DNS для домена. Вам нужно будет добавить две TXT-записи для SPF и DKIM. Вам также нужно будет добавить запись CNAME и MX для обратного пути и доставки почты. После настройки DNS нажмите кнопку Проверить, правильны ли мои записи для проверки конфигурации DNS.

Настроить MX-запись

Теперь вам нужно будет создать учетные данные SMTP для отправки и получения электронных писем.

SMTP детали

Выберите тип как SMTP или API. Укажите имя для учетных данных SMTP, выберите, как вы хотите обрабатывать адрес электронной почты.

После завершения вы можете вернуться на вкладку Обзор, и вы увидите информацию, необходимую для отправки или получения адреса электронной почты.

Отправка электронной почты с помощью Postal

Заключение

В этом руководстве мы успешно настроили полнофункциональный почтовый сервер с помощью Postal на Ubuntu 17.04. Вы можете использовать почтовый сервер для отправки и получения электронных писем вашей организации.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.