Задача: Хочу рассмотреть, как на купленную VPS (OS: Ubuntu 22.04 Server) от AdminVPS и доменное имя развернуть собственный почтовый сервер на базе iRedMail, на момент составления данной заметки версия 1.6.3, т.е. у меня не собственные мощности, а покупные, но я уже имею WAN-IP статический который мне выдается при покупке (за него я не плачу). Постараюсь ничего не упустить и также покажу с чем столкнулся и чего впредь больше делать не буду (или буду внимательнее). Также преследуемая цель уйти от Yandex — почта для домена в пользу своего.

Предварительные действия:

  • Куплено доменное имя ekzorchikdom.ru за 179руб в год
  • Куплена VPS система (CPU 1, RAM = 2Gb, HDD = 30Gb NVMe)

В качестве дистрибутива установки я придерживаюсь только использование Ubuntu систем, точнее LTS релизов.

Установку iRedMail будем производить на Ubuntu систему

Шаг №1: Получаю на почту данные на подключение к купленной VPS:

На заметку: в поддержку AdminVPS нужно написать чтобы прописали у себя PTR запись для WAN-IP и имени хоста mail.ekzorchikdom.ru — это нужно чтобы почта ходила.

Шаг №2: Изменяю имя хоста на купленной VPS системе:

ekzorchik@srv-site2a:~$ sudo nano /etc/hostname
mail
ekzorchik@srv-site2a:~$ sudo nano /etc/hosts
# Generated by SolusVM
127.0.0.1       localhost localhost.localdomain
::1     localhost localhost.localdomain
45.128.204.144  mail.ekzorchikdom.ru mail

Шаг №3: Обновляю информацию по установленным пакетам и в рамках текущего релиза Ubuntu 22.04 LTS:

ekzorchik@srv-site2a:~$ sudo nano /etc/update-manager/release-upgrades
[DEFAULT]
Prompt=never
ekzorchik@srv-site2a:~$ sudo rm -Rf /var/lib/apt/lists
ekzorchik@srv-site2a:~$ sudo apt-get update && sudo apt-get upgrade -y
ekzorchik@mail:~$ sudo reboot
ekzorchik@mail:~$ uname -a && lsb_release -a
Linux mail 5.15.0-73-generic #80-Ubuntu SMP Mon May 15 15:18:26 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.2 LTS
Release:        22.04
Codename:       jammy
ekzorchik@mail:~$

Шаг №4: Настраиваю SSH сервис для удаленного взаимодействия с купленной VPS системой, для администрирования: (я использую авторизацию только через SSH-ключи если что)

SSH ключ (публичный и приватный) создаю через PuttyGen на Windows системе, т.к. с работы я взаимодействую с нее со всеми, Вы же на свое усмотрение делаете как Вам удобно.

ekzorchik@mail:~$ sudo nano /etc/ssh/sshd_config
Include /etc/ssh/sshd_config.d/*.conf
Port 33222
PermitRootLogin no
PubkeyAuthentication yes
AuthorizedKeysFile /etc/ssh/authorized_keys
PasswordAuthentication yes
PermitEmptyPasswords no
KbdInteractiveAuthentication no
UsePAM yes
X11Forwarding yes
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem       sftp    /usr/lib/openssh/sftp-server
AllowGroups sshauth
ekzorchik@mail:~$ sudo service ssh restart

Шаг №5: Скачиваю пакет iRedMail самой последней версии на момент написания заметки, а именно 1.6.3 и устанавливаю в систему:

На заметку: Проверьте перед установкой, что у Вас ID=2000 в файле /etc/password не используется, т.к. под этим ID в процессе установке iRedMail создается учетная запись vmail, я с этим столкнулся, так как после того как получил данные для подключения к VPS создал вручную пользователя:

sudo useradd -m -p password -s /bin/bash -u 2000  -U ekzorchik

и долго не мог понять почему не стартует служба dovecot доступ через Web-интерфейс (не внимательный был)

ekzorchik@mail:~$ wget https://github.com/iredmail/iRedMail/archive/refs/tags/1.6.3.tar.gz
ekzorchik@mail:~$ tar zxf 1.6.3.tar.gz
ekzorchik@mail:~$ cd iRedMail-1.6.3/
ekzorchik@mail:~/iRedMail-1.6.3$ chmod +x iRedMail.sh
ekzorchik@mail:~/iRedMail-1.6.3$ 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"
Welcome and thanks for your use: нажимаю Yes
Please specify a directory (in lowercase) used to store user mailboxes. Default is: /var/vmail нажимаю Enter
Choose a web server you want to run: выбираю Nginx и нажимаю Enter
Choose preferred backend used to store mail accounts: выбираю MariaDB клавишей "ПРОБЕЛ" и нажимаю Enter
Please specify password for MySQL administrator root on server 127.0.0.1: указываю 712mbddr@ и нажимаю Enter
Please specify your first mail domain name: указываю ekzorchikdom.ru и нажимаю Enter
Please specify password for the mail domain administrator: (postmaster@ekzorchikdom.ru): password и нажимаю Enter
Optional components: отмечаю только Roundcubemail, SOGo, netdata, iRedAdmin и нажимаю Enter
< Question > Continue? [y|N] нажимаю клавишу "y" и нажимаю Enter
< Question > Would you like to use firewall rules provided by iRedMail?
< Question > File: /etc/nftables.conf, with SSHD ports: 33222. [Y|n] нажимаю клавишу "n" и нажимаю Enter
ekzorchik@mail:~/iRedMail-1.6.3$ sudo reboot

См. все настройки установленного iRedMail:

ekzorchik@mail:~$ cat ~/iRedMail-1.6.3/iRedMail.tips
Admin of domain ekzorchikdom.ru:

    * Account: postmaster@ekzorchikdom.ru
    * Password: password

    You can login to iRedAdmin with this account, login name is full email address.

First mail user:
    * Username: postmaster@ekzorchikdom.ru
    * Password: password
    * SMTP/IMAP auth type: login
    * Connection security: STARTTLS or SSL/TLS

    You can login to webmail with this account, login name is full email address.

* Enabled services:  rsyslog postfix mysql nginx php8.1-fpm dovecot clamav-daemon amavis clamav-freshclam sogo memcached cron nftables


SSL cert keys (size: 4096):
    - /etc/ssl/certs/iRedMail.crt
    - /etc/ssl/private/iRedMail.key

Mail Storage:
    - Mailboxes: /var/vmail/vmail1
    - Mailbox indexes:
    - Global sieve filters: /var/vmail/sieve
    - Backup scripts and backup copies: /var/vmail/backup

MySQL:
    * Root user: root, Password: "712mbddr@" (without quotes)
    * Bind account (read-only):
        - Username: vmail, Password: AONLCdD83Hh4RUyG1m5pbirMHXvVHpcn
    * Vmail admin account (read-write):
        - Username: vmailadmin, Password: zmY48WFwDgyuEN3mW2zwFIc0I3q7fPkB
    * Config file: /etc/mysql/my.cnf
    * RC script: /etc/init.d/mysql

Virtual Users:
    - /home/ekzorchik/iRedMail-1.6.3/samples/iredmail/iredmail.mysql
    - /home/ekzorchik/iRedMail-1.6.3/runtime/*.sql

Backup MySQL database:
    * Script: /var/vmail/backup/backup_mysql.sh
    * See also:
        # crontab -l -u root

Postfix:
    * Configuration files:
        - /etc/postfix
        - /etc/postfix/aliases
        - /etc/postfix/main.cf
        - /etc/postfix/master.cf

    * SQL/LDAP lookup config files:
        - /etc/postfix/mysql

Dovecot:
    * Configuration files:
        - /etc/dovecot/dovecot.conf
        - /etc/dovecot/dovecot-ldap.conf (For OpenLDAP backend)
        - /etc/dovecot/dovecot-mysql.conf (For MySQL backend)
        - /etc/dovecot/dovecot-pgsql.conf (For PostgreSQL backend)
        - /etc/dovecot/dovecot-used-quota.conf (For real-time quota usage)
        - /etc/dovecot/dovecot-share-folder.conf (For IMAP sharing folder)
    * Syslog config file:
        - /etc/rsyslog.d/1-iredmail-dovecot.conf (present if rsyslog >= 8.x)
    * RC script: /etc/init.d/dovecot
    * Log files:
        - /var/log/dovecot/dovecot.log
        - /var/log/dovecot/sieve.log
        - /var/log/dovecot/lmtp.log
        - /var/log/dovecot/lda.log (present if rsyslog >= 8.x)
        - /var/log/dovecot/imap.log (present if rsyslog >= 8.x)
        - /var/log/dovecot/pop3.log (present if rsyslog >= 8.x)
        - /var/log/dovecot/sieve.log (present if rsyslog >= 8.x)
    * See also:
        - /var/vmail/sieve/dovecot.sieve
        - Logrotate config file: /etc/logrotate.d/dovecot

Nginx:
    * Configuration files:
        - /etc/nginx/nginx.conf
        - /etc/nginx/sites-available/00-default.conf
        - /etc/nginx/sites-available/00-default-ssl.conf
    * Directories:
        - /etc/nginx
        - /var/www/html
    * See also:
        - /var/www/html/index.html

php-fpm:
    * Configuration files: /etc/php/8.1/fpm/pool.d/www.conf

PHP:
    * PHP config file for Nginx:
    * Disabled functions: posix_uname,eval,pcntl_wexitstatus,posix_getpwuid,xmlrpc_entity_decode,pcntl_wifstopped,pcntl_wifexited,pcntl_wifsignaled,phpAds_XmlRpc,pcntl_strerror,ftp_exec,pcntl_wtermsig,mysql_pconnect,proc_nice,pcntl_sigtimedwait,posix_kill,pcntl_sigprocmask,fput,phpinfo,system,phpAds_remoteInfo,ftp_login,inject_code,posix_mkfifo,highlight_file,escapeshellcmd,show_source,pcntl_wifcontinued,fp,pcntl_alarm,pcntl_wait,ini_alter,posix_setpgid,parse_ini_file,ftp_raw,pcntl_waitpid,pcntl_getpriority,ftp_connect,pcntl_signal_dispatch,pcntl_wstopsig,ini_restore,ftp_put,passthru,proc_terminate,posix_setsid,pcntl_signal,pcntl_setpriority,phpAds_xmlrpcEncode,pcntl_exec,ftp_nb_fput,ftp_get,phpAds_xmlrpcDecode,pcntl_sigwaitinfo,shell_exec,pcntl_get_last_error,ftp_rawlist,pcntl_fork,posix_setuid

ClamAV:
    * Configuration files:
        - /etc/clamav/clamd.conf
        - /etc/clamav/freshclam.conf
        - /etc/logrotate.d/clamav
    * RC scripts:
            + /etc/init.d/clamav-daemon
            + /etc/init.d/clamav-freshclam

Amavisd-new:
    * Configuration files:
        - /etc/amavis/conf.d/50-user
        - /etc/postfix/master.cf
        - /etc/postfix/main.cf
    * RC script:
        - /etc/init.d/amavis
    * SQL Database:
        - Database name: amavisd
        - Database user: amavisd
        - Database password: GSaB14IsuCten8S07r9BkXq7EvcQYvtB

DNS record for DKIM support:

; key#1 2048 bits, s=dkim, d=ekzorchikdom.ru, /var/lib/dkim/ekzorchikdom.ru.pem
dkim._domainkey.ekzorchikdom.ru.        3600 TXT (
  "v=DKIM1; p="
  "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArzgQ9cjqJtBiiDgKCVmJ"
  "TlWfbzS0ecey5CVUcSSyrG0dbeopjNJ+JZMfKIh35K8cHEOm/vY2/WF3Gzwos0zX"
  "/gMqqsR4PXHihFid4MenYDsXqdtwaKbCZiO9VBQVUaItcSYU2qRI8k47d8xOvMYU"
  "sH1yX7NInOJgB2F30aXela9ExS5zt3AsYiT+urGDuLI+1MzMIFvMOIBXtilYSrLj"
  "AM2LI/Od7kEvoFjAcCwYvRzPOidh/pkX504NaOhojRpnEEl7FlwTM6Up21C/ngdt"
  "6zphfHxogNINwthqMguVAlClq+wtx3oKxNkChwbHxkJ0xfvCSUT8790VToIRPvlM"
  "3wIDAQAB")
SpamAssassin:
    * Configuration files and rules:
        - /etc/mail/spamassassin
        - /etc/mail/spamassassin/local.cf

iRedAPD - Postfix Policy Server:
    * Version: 5.3
    * Listen address: 127.0.0.1, port: 7777
    * SQL database account:
        - Database name: iredapd
        - Username: iredapd
        - Password: 3v6AzPMtVFIUAKmY0oc6f8MGBudNBpst
    * Configuration file:
        - /opt/iredapd/settings.py
    * Related files:
        - /opt/iRedAPD-5.3
        - /opt/iredapd (symbol link to /opt/iRedAPD-5.3

iRedAdmin - official web-based admin panel:
    * Version: 2.3
    * Root directory: /opt/www/iRedAdmin-2.3
    * Config file: /opt/www/iRedAdmin-2.3/settings.py
    * Web access:
        - URL: https://mail.ekzorchikdom.ru/iredadmin/
        - Username: postmaster@ekzorchikdom.ru
        - Password: password
    * SQL database:
        - Database name: iredadmin
        - Username: iredadmin
        - Password: biAHnoo81W5eWmyDqCzQYunMIyXwu6kP

Roundcube webmail: /opt/www/roundcubemail-1.6.1
    * Config file: /opt/www/roundcubemail-1.6.1/config
    * Web access:
        - URL: http://mail.ekzorchikdom.ru/mail/ (will be redirected to https:// site)
        - URL: https://mail.ekzorchikdom.ru/mail/ (secure connection)
        - Username: postmaster@ekzorchikdom.ru
        - Password: password
    * SQL database account:
        - Database name: roundcubemail
        - Username: roundcube
        - Password: 4VLmVLv1c6et53PzzikRsoLJYbg1zSap
    * Cron job:
        - Command: "crontab -l -u root"

SOGo Groupware:
    * Web access: httpS://mail.ekzorchikdom.ru/SOGo/
    * Main config file: /etc/sogo/sogo.conf
    * Nginx template file: /etc/nginx/templates/sogo.tmpl
    * Database:
        - Database name: sogo
        - Database user: sogo
        - Database password: YkrAR5Ad1lraOYDzYkVxDF6zGpyNnoUH
    * SOGo sieve account (Warning: it's a Dovecot Master User):
        - file: /etc/sogo/sieve.cred
        - username: sogo_sieve_master@not-exist.com
        - password: 7GJYa44JcK1hVm2wVuEXt2emfjFJlCs1
    * See also:
        - cron job of system user: sogo

netdata (monitor):
    - Config files:
        - All config files: /opt/netdata/etc/netdata
        - Main config file: /opt/netdata/etc/netdata/netdata.conf
        - Modified modular config files:
            - /opt/netdata/etc/netdata/go.d
            - /opt/netdata/etc/netdata/python.d
    - HTTP auth file (if you need a new account to access netdata, please
      update this file with command like 'htpasswd' or edit manually):
        - /etc/nginx/netdata.users
    - Log directory: /opt/netdata/var/log/netdata
    - SQL:
        - Username: netdata
        - Password: 0hdbsUkGBgQ4$Mobpxkw8AUrKaC07e5W
        - NOTE: No database required by netdata.

ekzorchik@mail:~$

Шаг №6: Проверяю, что службы подняты: dovecot, postfix:

ekzorchik@mail:~$ sudo systemctl status dovecot | head -n5
● dovecot.service - Dovecot IMAP/POP3 email server
     Loaded: loaded (/lib/systemd/system/dovecot.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2023-06-23 08:56:58 UTC; 2min 55s ago
       Docs: man:dovecot(1)
             https://doc.dovecot.org/
ekzorchik@mail:~$ sudo systemctl status postfix | head -n5
● postfix.service - Postfix Mail Transport Agent
     Loaded: loaded (/lib/systemd/system/postfix.service; enabled; vendor preset: enabled)
     Active: active (exited) since Fri 2023-06-23 08:57:28 UTC; 2min 32s ago
       Docs: man:postfix(1)
    Process: 1912 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
ekzorchik@mail:~$

Шаг №7: Открываю Webинтерфейс администрирования:

* Web access:

- URL: https://mail.ekzorchikdom.ru/iredadmin/

- Username: postmaster@ekzorchikdom.ru

- Password: password

Браузер Google Chrome: URL: https://mail.ekzorchikdom.ru/iredadmin/ - Дополнительные - Перейти на сайт mail.ekzorchikdom.ru (небезопасно)

Авторизуюсь с Административными учетными данными:

  • Username: postmaster@ekzorchikdom.ru
  • Password: password

Авторизуюсь с Административными учетными данными:

и нажимаю Login

Вижу привычный Web-интерфейс Администрирования своим почтовым сервером

Вижу привычный Web-интерфейс Администрирования своим почтовым сервером

Шаг №8: Создаю пользователя alektest@ekzorchikdom.ru:

  • Pass: password

Шаг №9: Пробую зайти в Webинтерфейс почтового ящика alektest:

https://mail.ekzorchikdom.ru/mail/

Авторизуюсь в почтовом ящике пользователя

и нажимаю "Войти"

успешно

Минимализм почтового ящика пользователя

Шаг №10: Пробую отправить из Webинтерфейса ящика alektest письмо

Пробую отправить из Web-интерфейса ящика alektest письмо

и нажимаю "Отправить"

Шаг №11: Проверяю ящик support@ekzorchik.com и вижу письмо

Проверяю ящик support@ekzorchik.com и вижу письмо

инициирую ответ на него

инициирую ответ на него

и нажимаю "Отправить"

Шаг №12: Проверяю ящик alektest@ekzorchikdom.ru

письма нет, смотрю логи

Jun 23 09:16:15 mail postfix/smtpd[2811]: NOQUEUE: reject: RCPT from mail.ekzorchik.com[2.57.186.62]: 451 4.7.1 <alektest@ekzorchikdom.ru>: Recipient address rejected: Intentional policy rejection, please try again later; from=<support@ekzorchik.com> to=<alektest@ekzorchikdom.ru> proto=ESMTP helo=<ekzorchik.com>
Jun 23 09:16:15 mail postfix/smtpd[2811]: using backwards-compatible default setting smtpd_relay_before_recipient_restrictions=no to reject recipient "alektest@ekzorchikdom.ru" from client "mail.ekzorchik.com[2.57.186.62]"
Jun 23 09:16:15 mail postfix/smtpd[2811]: disconnect from mail.ekzorchik.com[2.57.186.62] ehlo=2 starttls=1 mail=1 rcpt=0/1 data=0/1 rset=1 quit=1 commands=6/8

отключаю плагин Greylist

ekzorchik@mail:~$ sudo nano /opt/iredapd/settings.py
# Enabled plugins.
#plugins = ["reject_null_sender", "wblist_rdns", "reject_sender_login_mismatch", "greylisting", "throttle", "amavisd_wblist", "sql_alias_access_policy", "sql_ml_access_policy"]
plugins = ["reject_null_sender", "wblist_rdns", "reject_sender_login_mismatch", "throttle", "amavisd_wblist", "sql_alias_access_policy", "sql_ml_access_policy"]
ekzorchik@mail:~$ sudo systemctl restart iredapd.service

и после письмо успешно пришло

и после письмо успешно пришло (Плагин Greylist отключил)

Шаг №13: Устанавливаю SSL сертификат от Let's Encrypt, чтобы взаимодействие через Web проходило только через https и с "замочком":

ekzorchik@mail:~$ sudo apt-get install -y certbot
ekzorchik@mail:~$ sudo certbot certonly --webroot --agree-tos --email support@ekzorchik.com -d mail.ekzorchikdom.ru -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.ekzorchikdom.ru

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/mail.ekzorchikdom.ru/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/mail.ekzorchikdom.ru/privkey.pem
This certificate expires on 2023-09-21.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

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

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

sudo crontab -e
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.LsX4s3/crontab installed on Fri Jun 23 09:32:24 2023)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
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
# iRedMail: Backup SOGo data databases on 04:01AM
1   4   *   *   *   /bin/bash /var/vmail/backup/backup_sogo.sh

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

Шаг №15: После получения сертификата 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.ekzorchikdom.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mail.ekzorchikdom.ru/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.service

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

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

либо через команду sudo amavisd-new showkeys либо смотрим в cat ~/iRedMail-1.6.3/iRedMail.tips

ekzorchik@mail:~$ sudo amavisd-new showkeys
; key#1 2048 bits, s=dkim, d=ekzorchikdom.ru, /var/lib/dkim/ekzorchikdom.ru.pem
dkim._domainkey.ekzorchikdom.ru.        3600 TXT (
  "v=DKIM1; p="
  "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArzgQ9cjqJtBiiDgKCVmJ"
  "TlWfbzS0ecey5CVUcSSyrG0dbeopjNJ+JZMfKIh35K8cHEOm/vY2/WF3Gzwos0zX"
  "/gMqqsR4PXHihFid4MenYDsXqdtwaKbCZiO9VBQVUaItcSYU2qRI8k47d8xOvMYU"
  "sH1yX7NInOJgB2F30aXela9ExS5zt3AsYiT+urGDuLI+1MzMIFvMOIBXtilYSrLj"
  "AM2LI/Od7kEvoFjAcCwYvRzPOidh/pkX504NaOhojRpnEEl7FlwTM6Up21C/ngdt"
  "6zphfHxogNINwthqMguVAlClq+wtx3oKxNkChwbHxkJ0xfvCSUT8790VToIRPvlM"
  "3wIDAQAB")

ekzorchik@mail:~$

Т.к у меня VPS куплена в AdminVPS, то в личном кабинете создаю TXT запись:

и нажимаю "Войти" - Домены - DNS хостинг — в текущем домене нажимаю "Редактировать" — Нажимаю "Добавить запись"

  • Имя записи: dkim._domainkey.
  • Тип: TXT
  • TTL: 3600
  • Значение: вставляю после форматирования

v=DKIM1; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArzgQ9cjqJtBiiDgKCVmJTlWfbzS0ecey5CVUcSSyrG0dbeopjNJ+JZMfKIh35K8cHEOm/vY2/WF3Gzwos0zX/gMqqsR4PXHihFid4MenYDsXqdtwaKbCZiO9VBQVUaItcSYU2qRI8k47d8xOvMYUsH1yX7NInOJgB2F30aXela9ExS5zt3AsYiT+urGDuLI+1MzMIFvMOIBXtilYSrLjAM2LI/Od7kEvoFjAcCwYvRzPOidh/pkX504NaOhojRpnEEl7FlwTM6Up21C/ngdt6zphfHxogNINwthqMguVAlClq+wtx3oKxNkChwbHxkJ0xfvCSUT8790VToIRPvlM3wIDAQAB

Добавляю запись DKIM в DNS

после нажимаю "Добавить запись", "Сохранить изменения".

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

ekzorchik@mail:~$ sudo amavisd-new testkeys
TESTING#1 ekzorchikdom.ru: dkim._domainkey.ekzorchikdom.ru => invalid (public key: not available)
ekzorchik@mail:~$ sudo amavisd-new testkeys
TESTING#1 ekzorchikdom.ru: dkim._domainkey.ekzorchikdom.ru => pass
ekzorchik@mail:~$

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

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

Т.к у меня VPS куплена в AdminVPS, то в личном кабинете создаю TXT запись:

и нажимаю "Войти" - Домены - DNS хостинг — в текущем домене нажимаю "Редактировать" — Нажимаю "Добавить запись"

  • Имя записи: dkim._domainkey.
  • Тип: TXT
  • TTL: 3600
  • Значение:  v=DMARC1; p=none; pct=100; rua=mailto:dmarc-reports@ekzorchik.com

после нажимаю "Добавить запись", "Сохранить изменения".

Шаг №19: Реализуем схему подключения к почтовому серверу через почтовые клиенты, как на домене @ekzorchik.com:

IMAP:

  • ekzorchik.com
  • 993
  • SSL/TLS

SMTP:

  • 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.ekzorchikdom.ru/privkey.pem
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.ekzorchikdom.ru/cert.pem
smtpd_tls_CAfile = /etc/letsencrypt/live/mail.ekzorchikdom.ru/chain.pem
smtpd_tls_CApath = /etc/ssl/certs
ekzorchik@mail:~$ sudo nano /etc/postfix/master.cf
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
ekzorchik@mail:~$ sudo systemctl restart postfix

Шаг №20: Закрываю порты надстройкой над iptables - firewalld:

ekzorchik@mail:~$ sudo apt-get install net-tools -y
ekzorchik@mail:~$ apt-cache show firewalld | grep Version
Version: 1.1.1-1ubuntu1
ekzorchik@mail:~$ sudo apt-get install -y firewalld
ekzorchik@mail:~$ sudo ufw disable
Firewall stopped and disabled on system startup
ekzorchik@mail:~$ sudo systemctl enable firewalld
ekzorchik@mail:~$ sudo systemctl start firewalld
ekzorchik@mail:~$ ip r | awk '{print $5}' | head -n1
eth0
ekzorchik@mail:~$ sudo firewall-cmd --zone=public --change-interface=eth0 --permanent
success
ekzorchik@mail:~$ sudo firewall-cmd --add-port=25/tcp --permanent
success
ekzorchik@mail:~$ sudo firewall-cmd --add-port=80/tcp --permanent
success
ekzorchik@mail:~$ sudo firewall-cmd --add-port=993/tcp --permanent
success
ekzorchik@mail:~$ sudo firewall-cmd --add-port=465/tcp --permanent
success
ekzorchik@mail:~$ sudo firewall-cmd --add-port=443/tcp --permanent
success
ekzorchik@mail:~$ sudo firewall-cmd --add-port=33222/tcp --permanent
success
ekzorchik@mail:~$ sudo firewall-cmd --zone=public --remove-service=ssh --permanent
success
ekzorchik@mail:~$ sudo firewall-cmd --reload
success
ekzorchik@mail:~$
ekzorchik@mail:~$ sudo firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client
  ports: 25/tcp 80/tcp 993/tcp 465/tcp 443/tcp 33222/tcp
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
ekzorchik@mail:~$

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

Итого: Почтовый сервер на VPS успешно развернут, личный почтовый сервер — процесс не сложен, ну это когда все уже разобрано от и до и написана на основе задачи заметка. Теперь нужно рассмотреть, как прикрутить антивирусную защиту, об этом будет отдельная заметка.

А пока собственно все, с уважением автор блога Олло Александр aka ekzorchik.