Поиск по сайту:

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


На этой странице

  1. Обновление базовой системы
  2. Установить Руби
    1. Установить Ruby Gems

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

    1. Настройка RabbitMQ

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

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

    Предпосылка

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

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

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

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

    Как только ваша система будет обновлена, перейдите к установке 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 успешно установлен.

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

    Установить рубиновые драгоценные камни

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

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

    :~# git --version
    git version 2.11.0
    

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

    apt -y install nodejs

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

    nodejs -v

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

    :~# nodejs -v
    v4.7.2
    

    Теперь, когда у нас есть все готовые зависимости, вы можете установить 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

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

    su - postal

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

    postal bundle /opt/postal/vendor/bundle

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

    postal initialize-config

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

    :~$ 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 make-user

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

    :~$ 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      : 
    First Name          : Liptan
    Last Name           : Biswas
    Initial Password:   : **************
    
    User has been created with e-mail address 
    

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

    postal start

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

    postal status

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

    :~$ 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

    Для доступа к Nginx рекомендуется использовать SSL. Вы можете использовать самозаверяющий сертификат, бесплатный 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 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

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

    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

    Настройка почты

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


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

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


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


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


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

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

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

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

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

    Заключение

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

Статьи по данной тематике: