В связи с использование самой стабильной версии почтового сервиса на базе iRedMail, я произведу замену вместо связки Ubuntu 18.04 Server + iRedMail 1.4.2 будет Ubuntu 22.04 Server + iRedMail 1.6.2. Так сказать все самое последнее для бесплатного использования на домашних ресурсах где мой новый домен @ekzorchik.com. Цель наработать опыт и расписать все в заметках дабы уйти от публичный почтовых сервисов на всё свое.

Моя новая схема работы домашнего почтового сервера

Шаг №1: Обновляю информацию по пакетам системы:

ekzorchik@mail:~$ sudo rm -f /var/lib/dpkg/lock-frontend/lock
ekzorchik@mail:~$ sudo rm -Rf /var/lib/apt/lists
ekzorchik@mail:~$ sudo apt-get update

Шаг №2: Текущие правила для брандмаэуера на системе Ubuntu 20.04 Server которая выступает, как wireguard сервер и обладающая белым IP-адресом и связывающая воедино локальную сеть на которой будет разворачиваться почтовый сервер:

root@ekzorchik:~# sudo firewall-cmd --info-zone=external
external (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: ssh
  ports: 8060/tcp 8070/tcp 22400/tcp 31200/udp
  protocols:
  masquerade: yes
  forward-ports: port=25:proto=tcp:toport=25:toaddr=172.33.2.14
        port=80:proto=tcp:toport=80:toaddr=172.33.2.14
        port=993:proto=tcp:toport=993:toaddr=172.33.2.14
        port=465:proto=tcp:toport=465:toaddr=172.33.2.14
        port=443:proto=tcp:toport=443:toaddr=172.33.2.14
  source-ports:
  icmp-blocks:
  rich rules:
root@ekzorchik:~#

Шаг №3: Удаляю старые правила на проброс порта которые были когда почтовый сервер был на базе связки Ubuntu 18.04 Server + iRedMail 1.4.2

sudo firewall-cmd --zone=external --remove-forward-port=port=25:proto=tcp:toport=25:toaddr=172.33.2.14 --permanent
sudo firewall-cmd --zone=external --remove-forward-port=port=80:proto=tcp:toport=80:toaddr=172.33.2.14 --permanent
sudo firewall-cmd --zone=external --remove-forward-port=port=443:proto=tcp:toport=443:toaddr=172.33.2.14 --permanent
sudo firewall-cmd --zone=external --remove-forward-port=port=465:proto=tcp:toport=465:toaddr=172.33.2.14 --permanent
sudo firewall-cmd --zone=external --remove-forward-port=port=993:proto=tcp:toport=993:toaddr=172.33.2.14 --permanent

Шаг №4: Добавляю правила проброс порта для нужд почтового сервера с учетом внутреннего IP адреса системы Ubuntu 22.04 Server:

sudo firewall-cmd --zone=external --add-forward-port=port=25:proto=tcp:toport=25:toaddr=172.33.2.15 --permanent
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=80:toaddr=172.33.2.15 --permanent
sudo firewall-cmd --zone=external --add-forward-port=port=143:proto=tcp:toport=143:toaddr=172.33.2.15 --permanent
sudo firewall-cmd --zone=external --add-forward-port=port=443:proto=tcp:toport=443:toaddr=172.33.2.15 --permanent
sudo firewall-cmd --zone=external --add-forward-port=port=465:proto=tcp:toport=465:toaddr=172.33.2.15 --permanent
sudo firewall-cmd --zone=external --add-forward-port=port=587:proto=tcp:toport=587:toaddr=172.33.2.15 --permanent
sudo firewall-cmd --zone=external --add-forward-port=port=993:proto=tcp:toport=993:toaddr=172.33.2.15 --permanent
sudo firewall-cmd --reload

Шаг №5: Изменяю имя хоста системы Ubuntu 22.04 Server:

ekzorchik@srv-us2204a:~$ sudo nano /etc/hosts
# обязательно должен быть FQDN формат
127.0.0.1 mail.polygon.local mail localhost
ekzorchik@srv-us2204a:~$ sudo nano /etc/hostname
mail.polygon.local

Шаг №6: Скачиваю версию пакета iRedMail 1.6.2 и произвожу установку:

ekzorchik@mail:~$ wget https://github.com/iredmail/iRedMail/archive/refs/tags/1.6.2.tar.gz
ekzorchik@mail:~$ ls -lh 1.6.2.tar.gz
-rw-rw-r-- 1 ekzorchik ekzorchik 240K Dec 28 08:25 1.6.2.tar.gz
ekzorchik@mail:~$ file 1.6.2.tar.gz
1.6.2.tar.gz: gzip compressed data, from Unix, original size modulo 2^32 1310720
ekzorchik@mail:~$
ekzorchik@mail:~$ tar zxf 1.6.2.tar.gz
ekzorchik@mail:~$ cd iRedMail-1.6.2/
ekzorchik@mail:~/iRedMail-1.6.2$
ekzorchik@mail:~/iRedMail-1.6.2$ chmod +x iRedMail.sh
ekzorchik@mail:~/iRedMail-1.6.2$ sudo ./iRedMail.sh
Adding component(s) 'multiverse' to all repositories.

Press [ENTER] to continue or Ctrl-c to cancel. нажимаю клавишу Enter

Adding component(s) ‘universe’ to all repositories.

Press [ENTER] to continue or Ctrl-c to cancel. нажимаю клавишу Enter

Отвечаю на вопросы мастер установки через скрипт

  • Please specify a directory (in lowercase) used to store user mailbox. Default is: /var/vmail нажимаю Next
  • Choose a web server you want to run: выбираю Nginx и нажимаю Next
  • Choose preferred backend used to store mail accounts: выбираю MariaDB (клавишей "ПРОБЕЛ" отмечаю) и нажимаю Next
  • Please specify password for MySQL administrator root on server 127.0.0.1: указываю PASSWORD
  • Please specify your first mail domain name: указываю ekzorchik.com и нажимаю Next
  • Please specify password for the mail domain administrator: (postmaster@ekzorchik.com) указываю PASSWORD и нажимаю Next
  • Компоненты для установки выбираю: Roundcubemail, iRedAdmin, netdata и нажимаю Next

********************** Review your settings *****************************

*************************************************************************

* Storage base directory: /var/vmail

* Mailboxes:

* Daily backup of SQL/LDAP databases:

* Store mail accounts in: MariaDB

* Web server: Nginx

* First mail domain name: ekzorchik.com

* Mail domain admin: postmaster@ekzorchik.com

* Additional components: Roundcubemail netdata iRedAdmin

< Question > Continue? [y|N] нажимаю клавишу «y»

и начинается процесс скачивания пакетов, установка и настройка с учетом мастера

< Question > Would you like to use firewall rules provided by iRedMail?

< Question > File: /etc/nftables.conf, with SSHD ports: 22. [Y|n] нажимаю клавишу «n»

и установка завершена

********************************************************************

* URLs of installed web applications:

*

* — Roundcube webmail: https://mail.polygon.local/mail/

* — netdata (monitor): https://mail.polygon.local/netdata/

*

* — Web admin panel (iRedAdmin): https://mail.polygon.local/iredadmin/

*

* You can login to above links with below credential:

*

* — Username: postmaster@ekzorchik.com

* — Password: PASSWORD

*

*

********************************************************************

* Congratulations, mail server setup completed successfully. Please

* read below file for more information:

*

* — /home/ekzorchik/iRedMail-1.6.2/iRedMail.tips

*

* And it’s sent to your mail account postmaster@ekzorchik.com.

*

********************* WARNING **************************************

*

* Please reboot your system to enable all mail services.

*

********************************************************************

ekzorchik@mail:~/iRedMail-1.6.2$
ekzorchik@mail:~/iRedMail-1.6.2$ cd ~/
ekzorchik@mail:~$

Шаг №7: Вношу изменения в main.cf сервиса Postfix:

ekzorchik@mail:~$ sudo nano /etc/postfix/main.cf
#myhostname = mail.polygon.local
#myorigin = mail.polygon.local
#mydomain = mail.polygon.local
myhostname = ekzorchik.com
myorigin   = mail.ekzorchik.com
mydomain   = ekzorchik.com
mynetworks = 127.0.0.1 [::1], 172.33.2.0/24
ekzorchik@mail:~$ sudo postconf
ekzorchik@mail:~$ sudo reboot

Шаг №8: Проверяю, что могу авторизоваться в Webпанели администрирования своего развернутого почтового сервиса на своих ресурсах:

запускаю браузер и обращаюсь на URL: https://mail.ekzorchik.com/iredadmin

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

Нажимаю "Дополнительные" - "Перейти на сайт mail.ekzorchik.com (небезопасно)" и меня встречает окно авторизации в Web-панель Управления вашими домена и учетными записями, авторизуюсь

  • Username: postmaster@domainname
  • Password: пароль который вы задавали при установке iredmail через скрипт инсталляции

язык я оставляю по умолчанию English (US) и нажимаю Login

Успешно выполненная установка iRedMail 1.6.2 on Ubuntu 22.04 Server

Шаг №9: Как и на установке где была связка Ubuntu 18.04 + iRedMail 1.4.2 устанавливаю SSL сертификат от Let's Encrypt:

ekzorchik@mail:~$ sudo certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
No certificates found.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ekzorchik@mail:~$
ekzorchik@mail:~$ sudo certbot certonly --webroot --agree-tos --email support@ekzorchik.ru -d mail.ekzorchik.com -w /var/www/html/
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Account registered.
Requesting a certificate for mail.ekzorchik.com

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/mail.ekzorchik.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/mail.ekzorchik.com/privkey.pem
This certificate expires on 2023-03-28.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
We were unable to subscribe you the EFF mailing list because your e-mail address appears to be invalid. You can try again later by visiting https://act.eff.org.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ekzorchik@mail:~$

Шаг №10: Чтобы полученный сертификат от Let's Encrypt обновлялся самостоятельно каждые 90 дней (по умолчанию) нужно:

ekzorchik@mail:~$ sudo crontab -e
@reboot /usr/sbin/ntpdate -s 0.pool.ntp.org > /dev/null
# iRedMail: Backup MySQL databases on 03:30 AM
30   3   *   *   *   /bin/bash /var/vmail/backup/backup_mysql.sh

# iRedAPD: Clean up expired tracking records hourly.
1   *   *   *   *   python3 /opt/iredapd/tools/cleanup_db.py >/dev/null

# iRedAPD: Convert SPF DNS record of specified domain names to IP
#          addresses/networks hourly.
2   *   *   *   *   python3 /opt/iredapd/tools/spf_to_greylist_whitelists.py >/dev/null

# iRedMail: Cleanup Amavisd database
1   2   *   *   *   python3 /opt/www/iredadmin/tools/cleanup_amavisd_db.py >/dev/null

# iRedAdmin: Clean up sql database.
1   *   *   *   *   python3 /opt/www/iredadmin/tools/cleanup_db.py >/dev/null 2>&1

# iRedAdmin: Delete mailboxes on file system which belong to removed accounts.
1   *   *   *   *   python3 /opt/www/iredadmin/tools/delete_mailboxes.py
# iRedMail: Cleanup Roundcube SQL database
2   2   *   *   *   /usr/bin/php /opt/www/roundcubemail/bin/cleandb.sh >/dev/null

# iRedMail: Cleanup Roundcube temporary files under 'temp/' directory
2   2   *   *   *   /usr/bin/php /opt/www/roundcubemail/bin/gc.sh >/dev/null
@daily letsencrypt renew --quiet && systemctl reload postfix dovecot nginx

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

ekzorchik@mail:~$ sudo 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.ekzorchik.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mail.ekzorchik.com/privkey.pem;
ekzorchik@mail:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
ekzorchik@mail:~$ sudo systemctl restart nginx

Шаг №12: Проверяем что теперь доступ в Webинтерфейс администрирования ("/iredadmin") и Webинтерфейс почтового ящика ("/mail") идет исключительно через полученный сертификат от Let's Encrypted: — ответ «Да», теперь вместо самоподписанного сертификата используется нормальный.

Шаг №13: Формирую DKIM запись и прописываю ее на DNSхостере:

ekzorchik@mail:~$ sudo amavisd-new showkeys
; key#1 2048 bits, s=dkim, d=ekzorchik.com, /var/lib/dkim/ekzorchik.com.pem
dkim._domainkey.ekzorchik.com.  3600 TXT (
  "v=DKIM1; p="
  "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvUTCtnejIcHFKolxwr8a"
  "BYilWF4u0A6JZmB0caUBxCDByUT8Wv3wfNPVZtCFp7ur+uKabmWL5uaPFoh/w9sM"
  "q9kPky2IQAwyNazrBHdLPkzOL9n9ZkPBBJ/Mxh9nS3iaKrplp3Yeb98cfvAT5XB1"
  "3fPZ3cFuyl1klEVYJWcgPVHapAwDeUZEb7ln1dPrdDV6HKrpdm3hxFkmhMXqLgJs"
  "eTLkYDtHVF2ZOVPJbf5xK2tUKM/3jA34wbVUndQAQr2/EXBoRzm0Hz/kUdkxFa8M"
  "xGufqb5xJM1VC0LUJVr6JnSsAQLxEOpJ15muWeB+DpMdER6RPbryZkg4YWtZkPti"
  "RwIDAQAB")

путем форматирования вывода выше через редактор Notepad++ получаю

v=DKIM1;
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvUTCtnejIcHFKolxwr8aBYilWF4u0A6JZmB0caUBxCDByUT8Wv3wfNPVZtCFp7ur+uKabmWL5uaPFoh/w9sMq9kPky2IQAwyNazrBHdLPkzOL9n9ZkPBBJ/Mxh9nS3iaKrplp3Yeb98cfvAT5XB13fPZ3cFuyl1klEVYJWcgPVHapAwDeUZEb7ln1dPrdDV6HKrpdm3hxFkmhMXqLgJseTLkYDtHVF2ZOVPJbf5xK2tUKM/3jA34wbVUndQAQr2/EXBoRzm0Hz/kUdkxFa8MxGufqb5xJM1VC0LUJVr6JnSsAQLxEOpJ15muWeB+DpMdER6RPbryZkg4YWtZkPtiRwIDAQAB

Не копируем CRLF

и теперь прописываю на DNS-хостинге где куплено DNS-имя:

Прописываю DKIM запись

На заметку: Также сформированную при установке DKIM запись можно взять из файла ekzorchik@mail:~$ sudo nano ~/iRedMail-1.6.2/iRedMail.tips

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

ekzorchik@mail:~$ sudo amavisd-new testkeys
TESTING#1 ekzorchik.com: dkim._domainkey.ekzorchik.com => pass
ekzorchik@mail:~$

Шаг №14: Формирую DMARC запись и прописываю ее на DNSхостере:

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

DNS record - TXT

  • Name - _dmarc
  • Value - v=DMARC1; p=none; pct=100; rua=mailto:dmarc-reports@ekzorchik.com
  • TTL - 5 min

Формирую DMARC запись

Шаг №15: Реализуем схему подключения к почтовому серверу через почтовые клиенты:

IMAP:

  • mail.ekzorchik.com
  • 993
  • SSL/TLS

SMTP:

  • mail.ekzorchik.com
  • 465
  • SSL/TLS
ekzorchik@mail:~$ sudo nano /etc/postfix/main.cf
#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.ekzorchik.com/privkey.pem
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.ekzorchik.com/cert.pem
smtpd_tls_CAfile = /etc/letsencrypt/live/mail.ekzorchik.com/chain.pem
smtpd_tls_CApath = /etc/ssl/certs
ekzorchik@mail:~$ sudo postconf
ekzorchik@mail:~$ sudo systemctl restart postfix
ekzorchik@mail:~$ sudo systemctl reload dovecot
ekzorchik@mail:~$ sudo nano /etc/postfix/master.cf
# smtps, port 465, force SSL connection.
465 inet  n       -       n       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_sasl_type=dovecot
  -o content_filter=smtp-amavis:[127.0.0.1]:10026
ekzorchik@mail:~$ sudo postconf

На заметку: исходя и портов выше которые нужны для работы почтового сервера я оставляю правила проброс порта на firewalld: 25,80,443,465,993

порты: 143,587 — убираю

sudo firewall-cmd --zone=external --remove-forward-port=port=143:proto=tcp:toport=143:toaddr=172.33.2.15 --permanent
sudo firewall-cmd --zone=external --remove-forward-port=port=587:proto=tcp:toport=587:toaddr=172.33.2.15 --permanent
sudo firewall-cmd --reload

Шаг №16: Те домены с которыми часто будет вестись переписка следует добавить в белый список:

Для этого воспользуемся заметкой "Как управлять белыми списками в iRedMail"

На заметку: Важный нюанс по данной заметке, у меня в заметках используется утилита firewalld версии 0.8.2OS: Ubuntu 20.04 где Wireguard работает в качестве сервера — все работает, как и написано в заметках моего блога), а начиная с версии 1.0

root@ekzorchik:~# dpkg -l | grep firewalld | head -n 1
ii firewalld 0.8.2-1 all dynamically managed firewall with support for network zones
root@ekzorchik:~#

по умолчанию блокируется транзитный трафик между зонами хоть и включена настройка net.ipv4.ip_forward=1, это дело не меняет. А в Ubuntu 22.04 уже устанавливается версия firewalld = 1.1.1-1ubuntu1 и все применяя к ней исходя из моих заметок получается что не работает, т.е. если Вы на Ubuntu 22.04 Server поднимаете Wireguard-сервер, в этом случае нужно разрешить прохождение трафика с помощью policy object, к примеру создав правило: client-to-inet

firewall-cmd --permanent --new-policy client-to-inet
firewall-cmd --permanent --policy client-to-inet --set-target ACCEPT
firewall-cmd --permanent --policy client-to-inet --add-ingress-zone internal
firewall-cmd --permanent --policy client-to-inet --add-egress-zone external
firewall-cmd --reload

после интернет при подключении через Wireguard с клиентской системы к Ubuntu 22.04 Server (Wireguard-сервер) начинает работать, а туннель как устанавливался так и устанавливается.

Итого, я для себя разобрал как поднять почтовый сервер на базе связки: Ubuntu 22.04 + iRedmail 1.6.2 + домашний сервер и подключение во вне через wireguard туннель, также получен сертификат от Let's Encrypt, почтовый ящик подключается через 993/tcp & 465/tcp. На этом пока заметка завершена, с уважением автор блога Олло Александра aka ekzorchik.