Настройка собственного почтового сервера на 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.
Гарантируем доставку почты.
Чтобы ваши письма не помечались как спам, в популярных паблик сервисах эл. почты, вы должны установить PTRSPF, DKIMи 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