Как создать полнофункциональный почтовый сервер с помощью Postal
На этой странице
- Обновление базовой системы
- Установить Руби
- Установить Ruby Gems
- Настройка базы данных для Postal
- Настройка 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. Вы можете использовать почтовый сервер для отправки и получения электронной почты вашей организации.