Как создать полноценный почтовый сервер на Ubuntu 18.04

Настройка собственного почтового сервера на Linux с нуля — это не совсем простая задача, во время ее выполнения каждый наверняка столкнется с парой подводных камней. Из этого туториала вы узнаете, как использовать iRedMail для быстрой настройки полнофункционального почтового сервера на Ubuntu 18.04, а так же, надеюсь, сохраните свое время.

Что такое iRedMail?

iRedMail — это скрипт оболочки, который автоматически устанавливает и настраивает все необходимые компоненты почтового сервера на вашем сервере Linux, что само-собой исключает ручную установку и настройку.

С помощью iRedMail вы можете легко создавать неограниченные почтовые ящики и неограниченные почтовые домены  через веб-интерфейс. Почтовые ящики могут храниться в базе данных MariaDB / MySQL, PostreSQL или OpenLDAP. Программное обеспечение с открытым исходным кодом, используемое в iRedMail, выглядит следующим образом:

    • Postfix SMTP server
    • Dovecot IMAP server
  • Nginx web server
  • OpenLDAP, ldapd
  • MySQL/MariaDB, PostgreSQL
  • Amavised-new
  • SpamAssassin
  • ClamAV
  • Roundcube webmail
  • SOGo Groupware
  • Fail2ban
  • mlmmj mailing list manager
  • Netdata server monitoring
  • iRedAPD Postfix policy server for greylisting

Действие 1. Покупаем доменное имя и арендуем VPS

Для настройки полноценного почтового сервера на ubuntu 18.04 нам потребуется сервер с 2ГБ ОП. Делая выбор надо помнить о том, что провайдер не должен блокировать подключения на порт 25.

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

Список регистраторов можно найти тут.


Действие 2. Настраиваем домен

Первым делом требуется создать МХ-запись в редакторе DNS у регистратора.

Введите @в поле Имя, чтобы представить основное доменное имя, а затем введите mail.your-domain.comв поле значение.


Действие 3.  Настройка имени почтового сервера

Залогиньтесь через SSH, а далее выполните:

apt update && apt upgrade -y

Установите FQDN — имя вашей системы:

hostnamectl set-hostname mail.your-domain.com

Отредактируем hosts-файл:

nano /etc/hosts
127.0.0.1 mail.your-domain.com localhost

Проверим:

hostname -f

Действие 4.  Установка крайней версии iRedMail

Всегда свежую версию можно найти на оф. сайте по кнопке *Stable*.

На момент написания статьи это -0.9.9:

wget https://bitbucket.org/zhb/iredmail/downloads/iRedMail-0.9.9.tar.bz2

Извлечем файлы из архива:

tar xvf iRedMail-0.9.9.tar.bz2

Перейдем в только что полученную папку:

cd iRedMail-0.9.9

Добавим права на исполнение и запустим скрипт:

chmod +x iRedMail.sh && bash iRedMail.sh

После выполнения вышеуказанных команд запустится мастер настройки:

  • Отвечаем «YES», на первый вопрос.
  • На следующем экране вам будет предложено выбрать путь хранения почты. Используем тот, что указан по умолчанию — поэтому просто нажмите Enter.
  • По умолчанию выбран nginx. Просто нажмите «Enter».
  • Выбираем БД для хранения почты, я остановился на Марии.
  • Укажем пароль для root пользователя.
  • Затем введите свой первый почтовый домен.
  • Задайте пароль для администратора почтового домена.
  • Оставляем по умолчанию — 4 компонента.
  • Ответьте «YES» (сейчас и в дальнейшем), когда система спросить о том продолжать ли ей.

Перезагрузим систему:

shutdown -r now

Действие 5. Установка сертификата от Let’s Encrypt

Первым делом получим необходимое ПО:

apt install software-properties-common -y
add-apt-repository ppa:certbot/certbot -y
apt install certbot -y

Затем выполним запрос:

certbot certonly --webroot --agree-tos --email your-email-address -d mail.your-domain.com -w /var/www/html/

На вопрос о том получать ли новости можно ответить отказом.

Установка сертификата в Nginx

После получения сертификата TLS, давайте сконфигурируем nginx:

nano /etc/nginx/templates/ssl.tmpl

Найдем две строки:

ssl_certificate /etc/ssl/certs/iRedMail.crt;
ssl_certificate_key /etc/ssl/private/iRedMail.key;

Поменяем путь:

ssl_certificate /etc/letsencrypt/live/mail.your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mail.your-domain.com/privkey.pem;

Сохраняем изменения. Затем проверим конфигурацию и перезапустим службу:

nginx -t

systemctl reload nginx

Открываем браузер и переходим в веб-интерфейс:

https://your-domain.com/iredadmin

теперь он должен открываться без предупреждений.

Установим TLS сертификат в Postfix and Dovecot

Отредактируем конфигурационный файл Postfix

nano /etc/postfix/main.cf

Найдем строки (начиная с 95):

smtpd_tls_key_file = /etc/ssl/private/iRedMail.key
smtpd_tls_cert_file = /etc/ssl/certs/iRedMail.crt
smtpd_tls_CAfile = /etc/ssl/certs/iRedMail.crt

Исправим путь на:

smtpd_tls_key_file = /etc/letsencrypt/live/mail.your-domain.com/privkey.pem
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.your-domain.com/cert.pem
smtpd_tls_CAfile = /etc/letsencrypt/live/mail.your-domain.com/chain.pem

Сохраним файл и перезапустим Postfix:

systemctl reload postfix

Отредактируем конфигурационный файл Dovecot:

nano /etc/dovecot/dovecot.conf

Найдем строки (начиная с 47):

ssl_cert = </etc/ssl/certs/iRedMail.crt
ssl_key = </etc/ssl/private/iRedMail.key

Заменим:

ssl_cert = </etc/letsencrypt/live/mail.your-domain.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.your-domain.com/privkey.pem

Сохраним изменения и перезапустим службу:

systemctl reload dovecot

На этом с сертификатами разобрались. В дальнейшем мы автоматизируем его продление.


Действие 6. Отправка почты

Авторизуемся в веб-интерфейсе Ireadadmin используя учетную запись postmaster. Создадим там пользователя и проверим отправку и получение почты — В меню найдите кнопку ADD- user, введите имя, пароль и нажмите кнопку «сохранить».

Теперь идем по адресу:

https://mail.your-domain.com/mail/

Авторизуемся в Roundcube используя логин\пароль только что созданного пользователя. Отправим письмо на любой доступный адрес эл. почты.

Логи ищите по адресу:

/var/log/mail.log

Действие 7. Проверка 25 порта

В случае если почта не прошла, давайте проверим а не заблокирован ли 25 порт на вашем VPS. Я писал об этом в самом начале статьи.

Выполним:

telnet gmail-smtp-in.l.google.com 25

В случае если он не заблокирован в консоли вы увидите примерно такой выхлоп:

Trying 74.125.68.26...
Connected to gmail-smtp-in.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP y22si1641751pll.208 - gsmtp

Если он заблокирован, то такой:

Trying 2607:f8b0:400e:c06::1a...
Trying 74.125.195.27...
telnet: Unable to connect to remote host: Connection timed out

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


Действие 8. Настроим почту на своем десктопе и смартфоне.

На своем ПК я пользуюсь Mozilla Thunderbird, после ввода адреса эл.почты он автоматом подтянул верные настройки. Но несмотря на это ниже я укажу настройки для варианта » в ручную».

IMAP: 
mail.your-domain.com
993
SSL/TLS

SMTP:
mail.your-domain.com
587
STARTTLS

Действие 9. Гарантируем доставку почты.

Чтобы ваши письма не помечались как спам, в популярных паблик сервисах эл. почты, вы должны установить PTRSPFDKIMи DMARCзаписи.

PTR запись

PTR-запись сопоставляет IP-адрес вашего сервера с доменным именем, в случае если это не так, вероятнее всего ваши письма будут попадать в спам.

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

dig -x IP-address-VPS +short

В ответ вы должны получать адрес вашего поддомена:

mail.your-domain.com

Если это не так, необходимо указать этот адрес в настройках DNS вашего хостиг провайдера. Нужный вам пункт имеет имя «reverse DNS» или «Обратный DNS».

SPF запись

Запись SPF (Sender Policy Framework) указывает, какие хосты или IP-адрес разрешены для отправки сообщений электронной почты от имени домена. Там должен быть указан только адрес вашего VPS.

Эта запись создается в настройках домена, в панели вашего регистратора.

Создайте там TXT-запись со следующим содержанием:

Record - TXT
Name - @
Value - v=spf1 mx ~all
TTL - 90 sec

DKIM запись

DKIM (DomainKeys Identified Mail) использует закрытый ключ для подписи исходящих сообщений, отправленных с вашего домена. Получающие SMTP-серверы проверяют эту подпись с помощью открытого ключа, который публикуется в DNS-записи DKIM.

Скрипт iRedMail автоматически создает DKIM для вашего сервера. Единственное, что осталось сделать, это создать DKIM запись.

Быстрее всего выполнить команду:

amavisd-new showkeys

Либо перейдем в папку с распакованным архивом iRedMail. Откроем файл и скопируем открытый ключ:

cd ~/iRedMail-0.9.9

nano iRedMail.tips

Выполним поиск, либо сами найдите строку:

DNS record for DKIM support:

копируем блок, который начинается на — «v=DKIM1; p=».

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

Record type - TXT
Name - dkim._domainkey
Value - v=DKIM1; p= ваш ключ....
TTL - 90 sec

Проверим, что все правильно сделали:

amavisd-new testkeys

В ответ должны получить что-то вроде этого:

TESTING#1 your-doman-name.com: dkim._domainkey.your-doman-name.com => pass

DMARC запись

DMARC запись отвечает за проверку подлинности отправителя. В настройках регистратора создадим новую запись:

DNS record - TXT
Name - _dmarc
Value - v=DMARC1; p=none; pct=100; rua=mailto:dmarc-reports@your-domain.com
TTL - 5 min

Действие 9.  Тестирование почты на предмет соответсвия всем требованиям.

После выполнения всех дейсвий, которые указаны выше перейдем на сайт https://www.mail-tester.com. Скопируем адрес эл. почты, который сгенерирует для нас, затем отправим на него письмо, после чего увидим результат оценки нашего почтового сервера.


UPD#1. Как обновить сертификат

Для обновления сертифката, который мы сгенерировали ранее выполним команду:

certbot renew

А теперь автоматизируем этот процесс:

crontab -e

@daily letsencrypt renew --quiet && systemctl reload postfix dovecot nginx

UPD#2. Как разблокировать IP-адрес

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

Посмотрим список заблокированных IP:

iptables -L -n

В случае, если надо разюлокировать:

fail2ban-client unban ip-address

 

 

Во время создания статьи использовался материал . Thank you.

(Просмотров 16 )

nordweb

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


Поделитесь записью в соц. сетях: