Инструменты пользователя

Инструменты сайта


установка_сервера_postfix

Электронная почта с Postfix, Dovecot и MySQL

Подготовка

В данной инсталляции, будет достигнута следующая схема:


Ну погнали. Установку будем производить на старичка Debian jessie Debian stretch, платформа установки была изменена после того как узнал дату окончания поддержки jessie. Непосредственно перед установкой почтового сервера, должна быть проведена следующая подготовка.

Настройка DNS

  • Создание A записи - mx.domain.com
  • Создание MX записи - mx.domain.com
  • PTR запись - вносится провайдером

Проверяем настройку PTR записи:

# для Unix систем 
dig -x 10.10.10.14
# для Виндузейников
nslookup -type=PTR 10.10.10.14

Проверяем настройку MX записи:

# для Unix систем 
dig domain.com mx
# для Виндузейников
nslookup -type=mx domain.com

Настройка имени

Устанавливаем имя хоста:

hostnamectl set-hostname mx.domain.com
echo "10.10.10.14 mx.domain.com" >> /etc/hosts
init 6

После перезагрузки, проверим корректно ли отображается имя

hostname
hostname -s
hostname -f
hostname -A
hostname -i
cat /etc/hostname 

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

Нужно будет установить SSL сертификат на наш почтовый сервер перед выполнением шагов настройки Dovecot. SSL-сертификат аутентифицирует идентичность почтового сервера для пользователей и шифрует передаваемые данные между почтовым клиентом пользователя и почтовым сервером. Следуйте данному руководству по установке SSL-сертификата с Certbot.

Убедимся, что брандмауэр не блокирует ни один из стандартных почтовых портов (25, 465, 587, 110, 995, 143 и 993).

Так же желательно иметь установленные утилиты:

apt-get install curl net-tools bash-completion wget lsof

Далее, устанавливаем и настраиваем postfixadmin - вэб морда, для управления postfix, который сейчас и будем настраивать

Установка необходимых пакетов

Давайте ка сюда, мне старый добрый apt.

sudo apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql mysql-server

Установщик имеет псевдографический интерфейс. Но вы не пугайтесь мои маленькие злобные консольщики, я проведу вас сквозь него. В нем есть свой шарм, все очень просто, запоминайте - немного TAB и периодически Enter




Все! Уот так уот!

Версии установленных пакетов:

  • Unordered List ItemPostfix 3.1.12
  • Dovecot 2.2.27
  • MySQL 15.1 Distrib 10.4.6-MariaDB

Посмотрим, что мы установили:

# postfix
postconf -d | grep mail_version
mail_version = 3.1.12
milter_macro_v = $mail_name $mail_version

# mysql
mysql --version
mysql  Ver 15.1 Distrib 10.4.6-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

# dovecot
 dovecot --version
2.2.27 (c0f36b0) 

База данных

Используем инструмент mysql_secure_installation для настройки дополнительных параметров безопасности.
На все вопросы отвечаем Y:

  • Remove anonymous users?
  • Disallow root login remotely?
  • Remove test database and access to it?
  • Reload privilege tables now?

Создание и наполнения базы данных

Создаем базу данных

mysqladmin -u root -p create mailserver

Заходим в БД

mysql -u root -p

Создаем пользователя MySQL и предоставьте новому пользователю права доступа к базе данных

GRANT SELECT ON mailserver.* TO 'mailuser'@'127.0.0.1' IDENTIFIED BY 'P@$$w0rd';

Сбрасываем привилегии MySQL

FLUSH PRIVILEGES;

Переключаемся на новую базу данных - mailsever:

USE mailserver;

Создаем таблицу для доменов, которые будут получать почту на нашем сервере

CREATE TABLE `virtual_domains` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

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

CREATE TABLE `virtual_users` (
  `id` int(11) NOT NULL auto_increment,
  `domain_id` int(11) NOT NULL,
  `password` varchar(106) NOT NULL,
  `email` varchar(100) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`),
  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Создайте таблицу для псевдонимов электронной почты:

CREATE TABLE `virtual_aliases` (
  `id` int(11) NOT NULL auto_increment,
  `domain_id` int(11) NOT NULL,
  `source` varchar(100) NOT NULL,
  `destination` varchar(100) NOT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Добавление данных

Теперь, когда база данных и таблицы созданы, добавьте некоторые данные в MySQL.

  1. Добавим домены в таблицу virtual_domains. Заменим значения, example.com и hostname, на нужные значения:
    INSERT INTO `mailserver`.`virtual_domains`
      (`id` ,`name`)
    VALUES
      ('1', 'example.com'),
      ('2', 'hostname.example.com'),
      ('3', 'hostname'),
      ('4', 'localhost.example.com');
  2. Добавим адреса электронной почты в таблицу virtual_users. Значение domain_id ссылается на идентификационное значение таблицы virtual_domain. Замени значения адресов электронной почты адресами, которые хотим настроить на почтовом сервере. Также, не забываем про надежные пароли.
    INSERT INTO `mailserver`.`virtual_users`
      (`id`, `domain_id`, `password` , `email`)
    VALUES
      ('1', '1', ENCRYPT('P@$$w0rd', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email1@example.com'),
      ('2', '1', ENCRYPT('P@$$w0rd', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email2@example.com');
  3. Псевдонимы электронной почты будет перенаправлять все письма с одного адреса на другой. Чтобы настроить псевдонимы электронной почты, добавим их в таблицу virtual_aliases:
    INSERT INTO `mailserver`.`virtual_aliases`
      (`id`, `domain_id`, `source`, `destination`)
    VALUES
      ('1', '1', 'alias@example.com', 'email1@example.com');
      ('2', '1', 'alias@example.com', 'email2@example.com');

Испытание

В предыдущем разделе, данные были добавлены в бд почтового сервера MySQL. Приведенные ниже шаги проверят, что данные были сохранены и могут быть извлечены.

Входим в MySQL:

mysql -u root

Проверяем содержимое таблицы virtual_domains:

 SELECT * FROM mailserver.virtual_domains;
+----+-----------------------+
| id | name                  |
+----+-----------------------+
|  1 | example.com           |
|  2 | mx.example.com        |
|  3 | mx.example.com        |
|  4 | localhost.example.com |
+----+-----------------------+

Проверяем таблицу virtual_users, хэшированные пароли длиннее, чем они отображаются ниже::

SELECT * FROM mailserver.virtual_users;
+----+-----------+-------------------------------------+--------------------+
| id | domain_id | password                            | email              |
+----+-----------+-------------------------------------+--------------------+
|  1 |         1 | $6$574ef443973a5529c20616ab7c6828f7 | email1@example.com |
|  2 |         1 | $6$030fa94bcfc6554023a9aad90a8c9ca1 | email2@example.com |
+----+-----------+-------------------------------------+--------------------+

Проверяем таблицу virtual_aliases:

SELECT * FROM mailserver.virtual_aliases;
+----+-----------+--------------------+---------------------+
| id | domain_id | source             | destination         |
+----+-----------+--------------------+---------------------+
|  1 |         1 | alias1@example.com | email1@example.com  |
|  2 |         1 | alias2@example.com | email2@example.com  |
+----+-----------+--------------------+---------------------+

Если все результаты соответствуют ожиданиям, выходим из MySQL:

exit

Postfix

Postfix — агент передачи почты (MTA — mail transfer agent). Postfix является свободным программным обеспечением, создавался как альтернатива Sendmail. Данное руководство поддерживает многие из значений конфигурации Posfix по умолчанию.

Конфигурация файла настроек

Файл /etc/postfix/main.cf является основным файлом конфигурации, используемым Postfix.

  1. Перед тем, как приступить к экзекуции, сделаем бэкап конфига:
    cp /etc/postfix/main.cf{,.bak301019}
  2. Отредактируем файл /etc/postfix/main.cf в соответствии с конфигурацией примера. Заменим вхождения example.com своим доменным именем:
    main.cf
    # See /usr/share/postfix/main.cf.dist for a commented, more complete version
     
    # Debian specific:  Specifying a file name will cause the first
    # line of that file to be used as the name.  The Debian default
    # is /etc/mailname.
    #myorigin = /etc/mailname
     
    smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
    biff = no
     
    # appending .domain is the MUA's job.
    append_dot_mydomain = no
     
    # Uncomment the next line to generate "delayed mail" warnings
    #delay_warning_time = 4h
     
    readme_directory = no
     
    # TLS parameters
    smtpd_tls_cert_file=/etc/letsencrypt/live/example.com/fullchain.pem
    smtpd_tls_key_file=/etc/letsencrypt/live/example.com/privkey.pem
    smtpd_use_tls=yes
    smtpd_tls_auth_only = yes
    smtp_tls_security_level = may
    smtpd_tls_security_level = may
    smtpd_sasl_security_options = noanonymous, noplaintext
    smtpd_sasl_tls_security_options = noanonymous
     
    # Authentication
    smtpd_sasl_type = dovecot
    smtpd_sasl_path = private/auth
    smtpd_sasl_auth_enable = yes
     
    # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
    # information on enabling SSL in the smtp client.
     
    # Restrictions
    smtpd_helo_restrictions =
            permit_mynetworks,
            permit_sasl_authenticated,
            reject_invalid_helo_hostname,
            reject_non_fqdn_helo_hostname
    smtpd_recipient_restrictions =
            permit_mynetworks,
            permit_sasl_authenticated,
            reject_non_fqdn_recipient,
            reject_unknown_recipient_domain,
            reject_unlisted_recipient,
            reject_unauth_destination
    smtpd_sender_restrictions =
            permit_mynetworks,
            permit_sasl_authenticated,
            reject_non_fqdn_sender,
            reject_unknown_sender_domain
    smtpd_relay_restrictions =
            permit_mynetworks,
            permit_sasl_authenticated,
            defer_unauth_destination
     
    # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
    # information on enabling SSL in the smtp client.
     
    myhostname = example.com
    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases
    mydomain = example.com
    myorigin = $mydomain
    mydestination = localhost
    relayhost =
    mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
    mailbox_size_limit = 0
    recipient_delimiter = +
    inet_interfaces = all
    inet_protocols = all
     
    # Handing off local delivery to Dovecot's LMTP, and telling it where to store mail
    virtual_transport = lmtp:unix:private/dovecot-lmtp
     
    # Virtual domains, users, and aliases
    virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
    virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
    virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf,
            mysql:/etc/postfix/mysql-virtual-email2email.cf
     
    # Even more Restrictions and MTA params
    disable_vrfy_command = yes
    strict_rfc821_envelopes = yes
    #smtpd_etrn_restrictions = reject
    #smtpd_reject_unlisted_sender = yes
    #smtpd_reject_unlisted_recipient = yes
    smtpd_delay_reject = yes
    smtpd_helo_required = yes
    smtp_always_send_ehlo = yes
    #smtpd_hard_error_limit = 1
    smtpd_timeout = 30s
    smtp_helo_timeout = 15s
    smtp_rcpt_timeout = 15s
    smtpd_recipient_limit = 40
    minimal_backoff_time = 180s
    maximal_backoff_time = 3h
     
    # Reply Rejection Codes
    invalid_hostname_reject_code = 550
    non_fqdn_reject_code = 550
    unknown_address_reject_code = 550
    unknown_client_reject_code = 550
    unknown_hostname_reject_code = 550
    unverified_recipient_reject_code = 550
    unverified_sender_reject_code = 550
  3. Файл main.cf декларирует расположение доменов virtual_mailbox_domains, virtual_mailbox_maps и virtual_alias_maps. Эти файлы содержат информацию о соединениях для таблиц поиска MySQL, созданных в разделе MySQL данного руководства. Postfix будет использовать эти данные для идентификации всех доменов, соответствующих почтовых ящиков и действительных пользователей.
    Создаем файл /etc/postfix/mysql-virtual-mailbox-domains.cf для доменов virtual_mailbox_domains. Заменим значение пароля паролем пользователя базы данных на свои:
    mysql-virtual-mailbox-domains.cf
    user = mailuser
    password = P@$$w0rd
    hosts = 127.0.0.1
    dbname = mailserver
    query = SELECT 1 FROM virtual_domains WHERE name='%s'
  4. Создаем файл /etc/postfix/mysql-virtual-mailbox-maps.cf и введим следующие значения:
    /etc/postfix/mysql-virtual-mailbox-maps.cf
    user = mailuser
    password = P@$$w0rd
    hosts = 127.0.0.1
    dbname = mailserver
    query = SELECT 1 FROM virtual_users WHERE email='%s'
  5. По тойже схеме создаем файл /etc/postfix/mysql-virtual-alias-maps.cf
    mysql-virtual-alias-maps.cf
    user = mailuser
    password = P@$$w0rd
    hosts = 127.0.0.1
    dbname = mailserver
    query = SELECT destination FROM virtual_aliases WHERE source='%s'
  6. Ordered List ItemИ еще создаем файл /etc/postfix/mysql-virtual-email2email.cf:
    mysql-virtual-email2email.cf
    user = mailuser
    password = P@$$w0rd
    hosts = 127.0.0.1
    dbname = mailserver
    query = SELECT email FROM virtual_users WHERE email='%s'
  7. Перезапустим Postfix
    systemctl restart postfix
  8. Команда postmap создает или запрашивает таблицы поиска Postfix, или обновляет существующие таблицы. Введем данную команду, чтобы убедиться, что Postfix может запрашивать таблицу virtual_domains. Замените example.com на имя своего домена. При успешном выполнении команда должна вернуть 1
    postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
    1
  9. Теперь прочерим, что Postfix может получить первый адрес электронной почты из таблицы MySQL virtual_users
    postmap -q email1@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
    1
  10. Ну и убедимся, что Postfix может запрашивать таблицу virtual_aliases.
    postmap -q alias2@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf
    email2@example.com

Настройки мастер-программы

Мастер-программа Postfix запускает и контролирует все процессы Postfix. В конфигурационном файле /etc/postfix/master.cf перечислены все программы и информация о том, как их запускать.

  1. Делаем резервную копию оригинального конфига
    cp /etc/postfix/master.cf{,.bak311019}
  2. Отредактируем /etc/postfix/master.cf, чтобы значения соответствовали приведенному примеру. Остальную часть файла можно остаться без изменений:
    # Postfix master process configuration file.  For details on the format
    # of the file, see the master(5) manual page (command: "man 5 master" or
    # on-line: http://www.postfix.org/master.5.html).
    #
    # Do not forget to execute "postfix reload" after editing this file.
    #
    # ==========================================================================
    # service type  private unpriv  chroot  wakeup  maxproc command + args
    #               (yes)   (yes)   (yes)    (never) (100)
    # ==========================================================================
    smtp      inet  n       -       n       -       -       smtpd
    #smtp      inet  n       -       -       -       1       postscreen
    #smtpd     pass  -       -       -       -       -       smtpd
    #dnsblog   unix  -       -       -       -       0       dnsblog
    #tlsproxy  unix  -       -       -       -       0       tlsproxy
    submission inet n       -       y      -       -       smtpd
      -o syslog_name=postfix/submission
      -o smtpd_tls_security_level=encrypt
      -o smtpd_sasl_auth_enable=yes
      -o smtpd_sasl_type=dovecot
      -o smtpd_sasl_path=private/auth
      -o smtpd_reject_unlisted_recipient=no
      -o smtpd_client_restrictions=permit_sasl_authenticated,reject
      -o milter_macro_daemon_name=ORIGINATING
    smtps     inet  n       -       -       -       -       smtpd
      -o syslog_name=postfix/smtps
      -o smtpd_tls_wrappermode=yes
      -o smtpd_sasl_auth_enable=yes
      -o smtpd_sasl_type=dovecot
      -o smtpd_sasl_path=private/auth
      -o smtpd_client_restrictions=permit_sasl_authenticated,reject
      -o milter_macro_daemon_name=ORIGINATING
      ...
  3. Ordered List ItemИзменим разрешения каталога /etc/postfix, чтобы ограничить разрешения только для его владельца и соответствующей группы:
    chmod -R o-rwx /etc/postfix
  4. Перезапускае Postfix
    systemctl restart postfix

Dovecot

Dovecot - агент доставки почты (MDA), который передает сообщения из Postfix и доставляет их в виртуальный почтовый ящик. В этом разделе настроим Dovecot на принудительное использование пользователями SSL при подключении, для того, чтобы их пароли никогда не отправлялись на сервер в виде обычного текста.

  1. Делаем копии всех оригинальных конфигураторов
    cp /etc/dovecot/dovecot.conf{,.orig}
    cp /etc/dovecot/conf.d/10-mail.conf{,.orig}
    cp /etc/dovecot/conf.d/10-auth.conf{,.orig}
    cp /etc/dovecot/dovecot-sql.conf.ext{,.orig}
    cp /etc/dovecot/conf.d/10-master.conf{,.orig}
    cp /etc/dovecot/conf.d/10-ssl.conf{,.orig}
  2. Редактируем файл /etc/dovecot/dovecot.conf. Добавляем протоколы = imap pop3 lmtp в секцию # Enable installed protocols
    dovecot.conf
    ## Dovecot configuration file
    ...
    # Enable installed protocols
    !include_try /usr/share/dovecot/protocols.d/*.protocol
    protocols = imap pop3 lmtp
    ...
    postmaster_address=postmaster at example.com
  3. Отредактируем файл /etc/dovecot/conf.d/10-mail.conf. Этот файл управляет тем, как Dovecot взаимодействует с файловой системой сервера для хранения и получения сообщений
    Изменим следующие переменные в конфигурационном файле:
    10-mail.conf
    ...
    mail_location = maildir:/var/mail/vhosts/%d/%n/
    ...
    mail_privileged_group = mail
    ...
  4. Создадим каталог /var/mail/vhosts/ и подкаталог для нашего домена. Заменим example.com своим доменным именем, Этот каталог будет служить хранилищем для почты, отправляемой на ваш домен.
    mkdir -p /var/mail/vhosts/example.com
  5. Создадим группу vmail с ID 5000. И пользователя vmail, который будет входить в группу vmail. Это будет системный пользователь, который будет читать почту с сервера.
    groupadd -g 5000 vmail
    useradd -g vmail -u 5000 vmail -d /var/mail
  6. Изменим владельца директории /var/mail, теперь она и все ее содержимое с потрохами будет принадлежать пользователю vmail
    chown -R vmail. /var/mail
  7. Отредактируем файл аутентификации пользователя, расположенный в файле /etc/dovecot/conf.d/10-auth.conf. Раскомментируем следующие переменные и замените их на значения указанные в примере:
    10-auth.conf
    ...
    disable_plaintext_auth = yes
    ...
    auth_mechanisms = plain login
    ...
    # Данные пункты открываются в зависимости от авторизации
    #!include auth-system.conf.ext
    #!include auth-master.conf.ext
    ...
    !include auth-sql.conf.ext
    ...
  8. Отредактируем файл /etc/dovecot/conf.d/auth-sql.conf.ext с данными аутентификации и хранения. Убедимся, что раздел passdb не закомментирован, раздел userdb, использующий статический драйвер, тоже закомментирован и обновляется с правильным аргументом. А раздел userdb, использующий sql драйвер закомментирован:
    auth-sql.conf.ext
    ...
    passdb {
      driver = sql
      args = /etc/dovecot/dovecot-sql.conf.ext
    }
    ...
    #userdb {
    #  driver = sql
    #  args = /etc/dovecot/dovecot-sql.conf.ext
    #}
    ...
    userdb {
      driver = static
      args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
    }
    ...
  9. Обновим файл /etc/dovecot/dovecot-sql.conf.ext с информацией о подключении к базе MySQL. Раскомментируем следующие переменные и заменим значения на выдержки из примера. Заменим dbname, user и password на собственные значения баз данных MySQL
    Переменная password_query использует адреса электронной почты, перечисленные в таблице virtual_users, в качестве имени пользователя учетной записи электронной почты.
    dovecot-sql.conf.ext
    ...
    driver = mysql
    ...
    connect = host=127.0.0.1 dbname=mailserver user=mailuser password=mailuserpass
    ...
    default_pass_scheme = SHA512-CRYPT
    ...
    password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';
    ...
  10. Изменим владельца и группу для директории /etc/dovecot/. Владелец - vmail, группа dovecot:
    chown -R vmail:dovecot /etc/dovecot
  11. Изменим права доступа к каталогу /etc/dovecot/ на рекурсивное чтение, запись и выполнение для владельца каталога:
    chmod -R o-rwx /etc/dovecot
  12. Отредактируем конфигуратор /etc/dovecot/conf.d/10-master.conf. Отключим незашифрованные IMAP и POP3 порты, установив значение на 0, а также разкомментируем переменные port и ssl для шифрованного соединения:
    10-master.conf
    ...
    service imap-login {
      inet_listener imap {
        port = 0
      }
      inet_listener imaps {
        port = 993
        ssl = yes
      }
      ...
    }
    ...
    service pop3-login {
      inet_listener pop3 {
        port = 0
      }
      inet_listener pop3s {
        port = 995
        ssl = yes
      }
    }
    ...

    Найдем в файле раздел Service lmtp и приведем его к следующей конфигурации

    10-master.conf
    ...
    service lmtp {
      unix_listener /var/spool/postfix/private/dovecot-lmtp {
        #mode = 0666i
        mode = 0600
        user = postfix
        group = postfix
      }
    ...
    }

    Найдем раздел service auth и настроим ее, как показано ниже

    10-master.conf
    ...
    service auth {
      ...
      unix_listener /var/spool/postfix/private/auth {
        mode = 0660
        user = postfix
        group = postfix
      }
     
      unix_listener auth-userdb {
        mode = 0600
        user = vmail
      }
    ...
      user = dovecot
    }
    ...

    В секции service auth-worker раскомментируем поле user и установим ему значение vmail

    10-master.conf
    ...
    service auth-worker {
      ...
      user = vmail
    }
  13. Редактируем /etc/dovecot/conf.d/10-ssl.conf. Конфиг указывает на расположения SSL сертификата и ключа нашего домена. Меняем example.com на нужное значение
    10-ssl.conf
    ...
    # SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
    ssl = required
    ...
    ssl_cert = </etc/letsencrypt/live/example.com/fullchain.pem
    ssl_key = </etc/letsencrypt/live/example.com/privkey.pem
  14. Перезагрузим голубятню, чтобы вступили в силу все изменения в конфигах:
    systemctl restart dovecot

Тестируем почту с помощью Mailutils

Поставим эти самые mailutils

apt-get install mailutils

И так этот час настал. Попробуем отправит тестового сообщения электронной почты на адрес, расположенный за пределами почтового сервера, например учетную запись Gmail. Замените адрес email1@example.com адресом электронной почты с вашего почтового сервера:

echo "Email body text" | sudo mail -s "Email subject line" recipient@gmail.com -aFrom:email1@example.com

Барабанная дробь… проверяем

Ооо Yes, ушло. И, что самое главное – пришло адресату.
Правда надо сказать, что первая отправка случилась только после пинка. После того как отравил письмо, было тихо-тихо, было слышно как в почтовом ящике голубь скребется. Полез в лог там такое:

tail -f /var/log/mail.log
postfix/master[5041]: fatal: bind 0.0.0.0 port 25: Address already in use

Исправляется данная канитель так:

killall sendmail-mta
service postfix restart

Теперь проверим как наш сервер получает пошту. Отправим тестовое письмо на наш почтовый сервер с внешнего адреса электронной почты. Проверим, что письмо было получено; заменим имя пользователя и домен, на тот которому мы отправили письмо:

 mail -f /var/mail/vhosts/example.com/email1

"/var/mail/vhosts/example.com/": 9 messages 5 new 4 unread
U   1 John Doe     Wed Jun 27 16:00  57/2788  Test email 1
U   2 John Doe     Wed Jun 27 16:02  56/2761  Test email 2
U   3 John Doe     Wed Jun 27 16:35  15/594   Test email 3
U   4 John Doe     Wed Jun 27 16:42  71/3535  Test email 4
>N   5 John Doe     Mon Jul  2 10:55  13/599   Subject of the Email
?

Настройка Email Client

Параметры настройки почтового клиента

  • Имя пользователя: полный адрес электронной почты, включая @example.com часть.
  • Пароль: Тот пароль, который был введен для адреса электронной почты в virtual_users таблице mailuser базы данных.
  • Имя сервера: имена входящих и исходящих серверов должны быть доменом, который разрешен на сервере, в нашем случае это example.com
  • SSL: для входящих и исходящих сообщений требуется аутентификация и шифрование SSL.
  • Порты: используем порт 993 для безопасного IMAP, порт 995 для безопасного POP3 и порт 587 с SSL для SMTP.

Добавление новых доменов, электронных адресов и алиасов

Для добавления новых доменов, адресов электронной почты и псевдонимов на почтовый сервер, нам необходимо обновить соответствующие таблицы MySQL.

Добавление нового домена

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

SELECT * FROM mailserver.virtual_domains;
+----+-----------------------+
| id | name                  |
+----+-----------------------+
|  1 | example.com           |
|  2 | hostname.example.com  |
|  3 | hostname              |
|  4 | localhost.example.com |
+----+-----------------------+

Добавьте новый домен в таблицу. Замените newdomain.com на желаемое доменное имя:

INSERT INTO `mailserver`.`virtual_domains`
  (`name`)
VALUES
  ('newdomain.com');

Убедитесь, что новый домен добавлен, с помощью того же запроса

SELECT * FROM mailserver.virtual_domains;

Добавление нового электронного адреса

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

SELECT * FROM mailserver.virtual_users;
+----+-----------+-------------------------------------+--------------------+
| id | domain_id | password                            | email              |
+----+-----------+-------------------------------------+--------------------+
|  1 |         1 | $6$574ef443973a5529c20616ab7c6828f7 | email1@example.com |
|  2 |         1 | $6$030fa94bcfc6554023a9aad90a8c9ca1 | email2@example.com |
+----+-----------+-------------------------------------+--------------------+
2 rows in set (0.01 sec)

Добавим еще одного пользователя – email2@example.com, в существующею таблицу

INSERT INTO `mailserver`.`virtual_users`
  (`domain_id`, `password`, `email`)
VALUES
  ('5', ENCRYPT('P@$$w0rd', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))) , 'email3@newdomain.com');

Проверим, добавлен ли голубчик

SELECT * FROM mailserver.virtual_users;

Добавление нового алиаса

Смотрим, на существующие алиасы:

SELECT * FROM mailserver.virtual_aliases;
 
+----+-----------+-------------------+--------------------+
| id | domain_id | source            | destination        |
+----+-----------+-------------------+--------------------+
|  1 |         1 | alias@example.com | email1@example.com |
+----+-----------+-------------------+--------------------+
1 row in set (0.00 sec)

Добавим новый псевдоним. Заменим alias@newdomain.com адресом, с которого следует переслать письма, и email1@gmail.com адресом, на который вы хотите переслать письмо. alias@newdomain.com существует на сервере:

INSERT INTO `mailserver`.`virtual_aliases`
  (`domain_id`, `source`, `destination`)
VALUES
  ('5', '@newdomain.com', 'myemail@gmail.com');

Ну и как всегда проверка

SELECT * FROM mailserver.virtual_aliases;

Другие статьи

Troubleshooting проблем со связкой Postfix, Dovecot, и MySQL

установка_сервера_postfix.txt · Последнее изменение: 2020/02/20 14:57 — admin