Термины по теме: Postfix, POP3, SMTP, IMAP, MariaDB, CentOS, PostfixAdmin, Dovecot, Roundcube

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

  • Почтовая система на базе Postfix;
  • Поддержка виртуальных доменов;
  • Хранение почты на сервере;
  • Подключение к почтовым ящикам по POP3 и IMAP (Dovecot);
  • Поддержка шифрования;
  • Хранение части настроек в MariaDB;
  • Защита от СПАМа и вирусов;
  • Доступ к почте с помощью веб-интерфейса (Roundcube);
  • Возможность управление почтовыми ящиками с помощью PostfixAdmin.

1. Преднастройка системы

Напоминаю, данная инструкция написана под систему Linux CentOS версии 7.

Общие настройки

Задаем правильное имя серверу — это важный шаг, так как большинство антиспам систем выполняют проверки, обращаясь к серверу по имени в ожидании ответа.


* необходимо указать FQDN-имя, которое будет доступно из глобальной сети. В данном примере указано relay.dmosk.ru.

После вводим такую команду:

Устанавливаем служебные пакеты (они понадобятся в процессе настройки сервера):

ntpdate для возможности синхронизировать время на сервере; wget — клиент для загрузки файлов.

Задаем временную зону (в данном примере московское время):

Синхронизируем время:

Обновляем систему:

Настройка безопасности

Заранее открываем порты на брандмауэре с помощью firewalld:

* где мы откроем следующие порты:

  • 25 — стандартный SMTP через STARTTLS;
  • 80 — HTTP для порталов Postfixadmin и Roundcube;
  • 110 — стандартный POP3 через STARTTLS;
  • 143 — стандартный IMAP через STARTTLS;
  • 443 — защищенный HTTPS для порталов Postfixadmin и Roundcube;
  • 465 — защищенный SMTP через SSL/TLS;
  • 587 — защищенный SMTP через STARTTLS;
  • 993 — защищенный IMAP через SSL/TLS;
  • 995 — защищенный POP3 через SSL/TLS.

В CentOS также может использоваться утилита iptables — в таком случае команды будут следующие:

После сохраняем правила любым из описанных способов.

2. Настройка веб-сервера: NGINX + PHP + MariaDB

Система управления PostfixAdmin работает как веб-приложение, разработанное на PHP, а информацию хранит в базе данных. В нашем примере будет использоваться веб-сервер на NGINX, а база данных — MariaDB.

Установка NGINX

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

Устанавливаем nginx:

Разрешаем автозапуск сервиса и запускаем его:

Проверяем работоспособность веб-сервера, обратившись к нему в браузере по IP-адресу. Если видим заголовок «Welcome to nginx!», NGINX настроен верно.

Приветствие NGINX — все настроено верно

PHP + PHP-FPM + NGINX

Устанавливаем php и php-fpm:

Настраиваем NGINX:

* где /usr/share/nginx/html — каталог для размещения портала управления Postfix.

Настраиваем PHP-FPM:

* здесь мы поменяли строку 127.0.0.1:9000.

Запускаем сервисы:

* если в процессе перезапуска nginx выскочит ошибка nginx: [emerg] a duplicate default server, необходимо найти настройку виртуального домена, в которой также указана опция default_server — опцию нужно убрать. Или можно самостоятельно настроить другой виртуальный домен.


Для проверки, создаем индексный файл в директории сайта со следующим содержимым:

Открываем сайт в браузере по его IP-адресу. На открывшейся странице мы должны увидеть подробную информацию по php:

phpinfo

MariaDB

Устанавливаем сервер баз данных следующей командой:

Включаем автозапуск сервиса и запускаем его:

Задаем пароль для пользователя sql root:

3. Установка и настройка PostfixAdmin

Устанавливаем репозиторий epel:

Устанавливаем дополнительные компоненты для PHP:

Для применения установленных пакетов, перезапускаем обработчик скриптов:

Скачиваем PostfixAdmin:

В директории сайтов nginx создаем каталог для postfixadmin и распаковываем в него архив:

Создаем каталог templates_c внутри папки портала (без него не запустится установка):

Задаем права на каталог:

* несмотря на то, что мы используем веб-сервер nginx, php-fpm по умолчанию, запускается от пользователя apache.

Создаем базу данных postfix и учетную запись в mariadb:

* где postfix — имя базы.


* где postfix — имя учетной записи; postfix123 — пароль; localhost разрешает подключение только с локального сервера.

Выходим из командной оболочки MariaDB:

Создаем конфигурационный файл postfixadmin:

* в предыдущих версиях использовался файл config.inc.php. В новых версиях его не рекомендуется править, а использовать config.local.php, который переопределяет настройки.

И редактируем следующее:

* где configured говорит приложению, что администратор закончил его конфигурирование; default_language — используемый язык по умолчанию; database_password — пароль для базы данных, который мы задали на предыдущем шаге; emailcheck_resolve_domain — задает необходимость проверки домена при создании ящиков и псевдонимов.

Запускаем браузер и вводим адрес http://<IP-адрес сервера>/postfixadmin/public/setup.php

Начнется процесс проверки конфигурации и установки портала PostfixAdmin. После ее окончания вводим дважды пароль и генерируем хэш:

Вводим дважды пароль после установки PostfixAdmin

После перезагрузки страницы копируем хэш:


Так выглядит хэш PostfixAdmin

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

И добавляем строчку:

* где '7a8e14…c26' — скопированный хэш.

После, на той же странице, где показан хэш, добавляем суперпользователя PostfixAdmin:

Создаем суперпользователя PostfixAdmin

* где Setup password — пароль, который мы ввели на предыдущей странице; Пароль — новый пароль для создаваемой учетной записи.

В итоге мы увидим следующее:

Мы создали суперпользователя для управления Postfix

И переходим в браузере на страницу http://<IP-адрес сервера>/postfixadmin/public/

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

Готово.

4. Настройка Postfix

По умолчанию, Postfix уже установлен в CentOS 7. Но если встретится сервер без него, выполним установку простой командой:


Создаем учетную запись, от которой мы будем работать с каталогом виртуальных почтовых ящиков:

* сначала мы создаем группу vmail и guid 1024, после — пользователя vmail с uid 1024 и домашней директорией /home/mail. Обратите внимание, что в некоторых системах идентификатор группы и пользователя 1024 может быть занят. В таком случае необходимо создать другой, а в данной инструкции ниже заменить все 1024 на альтернативный.

Теперь открываем на редактирование конфигурационный файл почтового сервера:

И редактируем следующие строки:

* данная настройка указывает, какой домен подставлять отправителю, если он не указан в заголовке FROM.

* указываем, для каких доменов принимаем входящую почту.

* указываем, откуда брать список локальных пользователей.

* разрешаем отправлять сообщения локальному серверу.

* указываем, откуда брать список алиасов.

* необходимо убедиться, что postfix будет слушать на всех необходимых интерфейсах, в данном случае, на всех.

Если имя сервера отличается от имени, по которому сервер будет зарегистрирован в DNS, задаем опцию:

Теперь в конец конфигурационного файла допишем следующее:

* где:

  • virtual_mailbox_base — базовый путь хранения почтовых ящиков в системе UNIX.

  • virtual_alias_maps — формат и путь хранения алиасов для виртуальных пользователей.
  • virtual_mailbox_domains — формат и путь хранения доменов виртуальных пользователей.
  • virtual_mailbox_maps — формат и путь хранения почтовых ящиков для виртуальных пользователей.
  • virtual_minimum_uid — с какого номера присваивать идентификаторы пользователям.
  • virtual_uid_maps — идентификатор пользователя, от которого записываются сообщения.
  • virtual_gid_maps — идентификатор группы, от которой записываются сообщения.
  • virtual_transport — задает доставщика сообщений.
  • dovecot_destination_recipient_limit — передача сообщений от Postfix в Dovecot выполняется по заданному количеству (в нашем примере, по 1 шт.).
  • smtpd_sasl_auth_enable — разрешает sasl аутентификацию.
  • smtpd_sasl_exceptions_networks — исключение сетей от использования шифрования.
  • smtpd_sasl_security_options — дополнительные опции настройки sasl.
  • broken_sasl_auth_clients — эту опцию прописываем для клиентов MS Outlook.

  • smtpd_sasl_type — указывает тип аутентификации.
  • smtpd_sasl_path — путь до временных файлов обмена информацией с Dovecot. Указывается либо абсолютный путь, либо относительный queue_directory.
  • smtpd_tls_cert_file — полный путь до публичного сертификата.
  • smtpd_tls_key_file — полный путь до приватного сертификата.
  • smtpd_use_tls — указывает клиентам на наличие поддержки TLS.
  • smtpd_tls_auth_only — использовать только TLS.
  • smtpd_helo_required — требовать начинать сессию с приветствия.

Создаем файл с настройками обращения к базе с алиасами:

* где user и password — логин и пароль для подключения к MySQL; hosts — имя сервера баз данных (в нашем случае, локальный сервер); dbname — имя базы данных; query — шаблон запроса к данным.

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

И файл с почтовыми ящиками:

Открываем файл master.cf и дописываем в самый конец:

* необходимо убедиться, что в содержимом файла нет других раскомментированных опций для submission, smtps и dovecot (по умолчанию, их нет). В данном случае, мы настроили работу postfix на портах 25, 465 и 587.

Перезапустим postfix:

5. Настройка Dovecot


Устанавливаем Dovecot с компонентом для работы с СУБД:

Настраиваем способ хранения сообщений:

* в данном примере сообщения будут храниться в продвинутом формате maildir в каталоге /home/mail/<почтовый домен>/<логин пользователя>. 

Настраиваем слушателя для аутентификации:

* обращаем внимание, что /var/spool/postfix/private/auth — это тот же private/auth, который был прописан нами в postfix.

Настраиваем аутентификацию в Dovecot:

* в данном случае мы просто комментируем обычную аутентификацию и снимаем комментарий для использования sql-аутентификации.

Настраиваем использование шифрования:

* ssl = required укажет dovecot требовать от клиентов использования шифрования; ssl_cert — путь до открытого сертификата (также нами указывался в postfix); ssl_key — путь к закрытому ключу.

Настроим автоматическое создание каталогов при первом подключении пользователя к ящику:


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

* в данном примере мы указали на файл, в котором будут находиться настройки для получения пользователей и паролей из базы данных. Данная настройка является настройкой по умолчанию и, в большинстве случаев, ее не нужно менять без необходимости указать свой путь.

Создаем файл с настройками работы с mysql:

И, напоследок, настраиваем интерфейс, на котором будет слушать dovecot:

* по умолчанию, dovecot слушает также на ipv6 (listen = *, ::). Если на сервере не используется 6-я версия протокола TCP/IP, в логах dovecot появятся ошибки:
master: Error: service(imap-login): listen(::, 143) failed: Address family not supported by protocol
master: Error: service(imap-login): listen(::, 993) failed: Address family not supported by protocol

Генерируем сертификаты безопасности

Создаем каталог, в котором разместим сертификаты:

И сгенерируем их следующей командой:

* сертификат сгенерирован на 1461 день, ключи subj могут быть произвольными, CN необходимо указать в соответствии с именем сервера, по которому мы будем подключаться к почте.
* если мы хотим использовать сертификат, который будет проходить все проверки безопасности, его нужно купить или запросить у Let's Encrypt.

Запускаем dovecot:

6. Создаем первый почтовый ящик и проверяем работу сервера

В браузере вводим в адресной строке путь до Postfixadmin — http://<IP-адрес сервера>/postfixadmin/public/.

Вводим логин и пароль от административной учетной записи, которую мы создали на шаге 3. Перед нами появится страница управления учетными записями.

Переходим в Список доменовНовый домен:

Создаем новый домен в Postfixadmin

Заполняем формы и нажимаем по Добавить домен:

Данные домена

Теперь переходим в ОбзорСоздать ящик:

Создаем новый почтовый ящик через Postfixadmin

Вводим данные нового пользователя и нажимаем по Создать ящик:

Заполняем данные для создания нового ящика

Теперь можно подключиться к серверу с помощью любой почтовой программы, например, Mozilla Thunderbird.

Параметры для подключения:

  • Сервер: имя сервера или его IP-адрес (не желательно, так как сертификат выдается по доменному имени).
  • IMAP: 143 STARTTLS или 993 SSL/TLS
  • POP3: 110 STARTTLS или 995 SSL/TLS
  • SMTP: 25 STARTTLS или 465 SSL/TLS или 587 STARTTLS

* для корректной работы сервера на портах 993, 995, 465 (SSL/TLS) необходим правильный сертификат (для нашего домена и выпущенный доверенным центром сертификации).

7. Устанавливаем и настраиваем Roundcube Webmail

На официальном сайте заходим на страницу загрузки Roundcube. Смотрим ссылку на последнюю стабильную версию продукта (LTS):

Скачиваем стабильную версию Roundcube

Используем ссылку, чтобы загрузить архив программы:

Создаем каталог, где будут размещаться файлы портала:

И распаковываем скачанный архив:

Копируем шаблон конфига:

И открываем его на редактирование:

* первую строку мы редактируем, а вторую добавляем. В первой строке roundcube:roundcube123 — логин и пароль для доступа к базе данных; localhost — сервер базы данных; roundcubemail — имя базы данных. Вторая строка разрешает установку портала.

Также дописываем в конфигурационный файл следующее:

* мы создаем папки по умолчанию, если их нет. Без данной настройки, если не создавались папки другим клиентом, веб-клиент будет выдавать ошибки при пересещении писем, например, при их удалении.

Задаем владельца apache на папку портала:

Создаем в MariaDB базу для roundcubemail:

И загружаем в созданную базу данные:

Устанавливаем компоненты, необходимые для работы Roundcube:

Настроим php:

* в данном примере мы задаем московское время.

Перезагружаем php-fpm:

Теперь открываем браузер и переходим по адресу http://<IP-адрес сервера>/webmail/installer/. В самом низу нажимаем по кнопке Next. Если кнопка будет неактивна, проверяем, что нет ошибок (NOT OK).

На следующей странице проверяем, что все пункты находятся в состоянии OK. Установка выполнена.

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

Запрещаем установку портала:

После удаляем папку с установочными скриптами:

И заходим в браузере по адресу http://<IP-адрес сервера>/webmail/.

8. Защищаемся от вирусов

Установка и настройка ClamAV

Устанавливаем антивирус:

Добавляем в postfix:

* где content_filter указывает на приложение, которое будет сканировать сообщения; receive_override_options позволяет увидеть оригинальные email адреса писем с вирусами.

Теперь редактируем master.cf:

Дописываем следующее:

Конфигурируем clamsmtpd:

* где ClamAddress указываем на путь к сокетному файлу — он должен совпадать с путем к LocalSocket в конфигурационном файле для clamscan;

Редактируем конфигурационный файл для clamscan:

* где #Example — закомментированная Example, которая не позволит запустить сканер, пока ее не удалить или закомментировать; LocalSocket — путь до сокетного файла для взаимодействия с clamsmtp; User — пользователь, от которого будет запускаться clamd.

Обновляем антивирусную базу:

Теперь разрешаем запуск антивируса:

Запускаем clamscan:

* запуск может занять некоторое время.

И после запускаем clamsmtpd:

И также перезапускаем postfix:

Настройка обновлений антивируса

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

* в данном примере, каждый день в 03:15 будет запускаться процесс обновления clamav.

Проверка

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

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Письмо не должно дойти, а в логе должны увидет строку:

9. Боремся со СПАМом

Проверка контента с помощью Spamassassin

Устанавливаем spamassassin

Редактируем master.cf:

Для smtp добавляем опцию фильтра: 

И добавить сам фильтр:

spamassassin — добавляемый фильтр; /usr/bin/spamc — путь до исполняемого файла спамассасина; spamd — учетная запись, от которой запучкается spamassassin.

Создаем учетную запись spamd:

Обновляем spamassassin:

Разрешаем его запуск и стартуем сервис:

Перезапускаем postfix:

Для автоматического обновления добавим в cron следующее:

* обновление будет происходить каждый день в 03:30.

Для проверки работы контентного антиспама, отправляем письмо со следующим содержимым:

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

В итоге должно прийти письмо с меткой в теме [SPAM], а в логах мы увидим:

Мы настроили антиспам фильтр для smtp-соединения. В основном, он будет отрабатывать для входящей почты. Если нам необходимо также проверять исходящую почту, в master.cf добавляем content_filter для smtps и submission:

Перезапускаем postfix:

Антиспам средствами Postfix

В MTA Postfix встроен свой механизм проверки заголовков входящих сообщений. Правила размещаются в 6 секций, обработка которых выполняется в следующем порядке:

client -> helo -> sender -> relay -> recipient -> data

И так, для настройки антиспама в конфигурационный файл main.cf добавляем:

* это более или менее мягкие правила. Их можно использовать первое время, пока тестируем сервер.

Для усиления защиты добавляем:

* где:

  • reject_unknown_client_hostname — проверяет наличие PRT-записи отправителя и наличие рабочей А-записи в соответствие PTR.
  • reject_invalid_helo_hostname — проверяет синтаксис HELO-приветствия.
  • reject_non_fqdn_helo_hostname — требует правильного FQDN-имени во время HELO-приветствия.
  • reject_unknown_helo_hostname — запрещает представляться именами, для которых нет А-записи или MX.
  • reject_rbl_client — проверяет наличие отправителя в черных списках.

После внесения всех правок, необходима перезагрузка Postfix:

10. Отправка почты наружу

Для отправки почты на другие почтовые серверы необходимо правильно сконфигурировать сервер, чтобы письма не попадали в СПАМ. Чтобы это сделать, выполняем инструкции ниже.

Настройки DNS для сервера

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

1. rDNS. Обратная зона используется для проверки соответствия имени сервера в приветствии с именем, которое возвращает NS сервер при запросе по PTR-записи.

И так, для создания записи в обратной зоне, необходимо написать письмо Интернет провайдеру, к сети которого подключен сервер или хостеру, если почтовый сервер настроен на VPS. IP-адрес нашего сервера должен вести на имя, которым приветствуется наш postfix — можно посмотреть командой:

Если мы получим пустой ответ, то вводим:

2. А-запись. Также необходимо, чтобы имя сервера, которым представляется почтовый сервер разрешалось в IP-адрес.

Для этого заходим в консоль управления зоной нашего домена и создаем запись типа А для сопоставления имени сервера с IP-адресом, на котором слушает запросы данный сервер.

Настройки DNS для домена

Для каждого домена, для которого будем отправлять почту создаем записи:

  1. SPF.
  2. DMARC.

Настройка DKIM

DKIM настраивается на сервере, а для каждого домена создается специальная запись в DNS. Подробнее в инструкции Настройка DKIM + Postfix.

Итак, Postfix установлен. Все настройки этого почтового сервера хранятся в /etc/postfix. В этом каталоге Вас в первую очередь должен интересовать основной файл конфигурации, называющийся main.cf.

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

Третьего собственно не дано. В настройках Postfix есть три основных группы параметров:

Как «правильный» почтовый сервер, Postfix занимается обработкой почты для указанных в конфигурации доменов. Так вот, каждый домен может обрабатываться ровно одним из указанных способов, то есть либо как конечный домен для почты, либо как домен для пересылки, либо как виртуальный домен.

Стандартная локальная доставка основана на системе авторизации и учёта пользователей вашей системы, что значительно уменьшает её гибкость, поэтому смысла её использовать обычно нет. Вместо этого следует использовать механизм «виртуальных доменов» для доставки почты в локальные почтовые ящики. Однако рассмотреть параметры, отвечающие за локальную доставку, всё же надо, ибо на них много что завязано.

Итак, откройте файл /etc/postfix/main.cf в вашем любимом текстовом редакторе. Записи этого файла имеют вид

параметр = значение

Комментарии можно добавлять, поставив в начало строки символ #. Кстати, сразу хочу сказать, что параметры, имеющие несколько значений, можно записывать одним из следующих способов:

параметр = значение1 значение2 значение3
параметр = значение1, значение2, значение3
параметр =  значение1  значение2  значение3
параметр =  значение1,  значение2,  значение3

В третьем и четвёртом случае не забудьте про пробел в начале каждой строчки с параметром. В данном примере, рассмотрим конфигурирование по способу №3.

Кстати, после того, как вы задали значение какого-либо параметра, вы можете его использовать для задания значений другим параметрам. Вам просто нужно указать имя параметра с символом $ вначале в том месте, куда вы хотите подставить его значение. Например вот так:

mydomain = example.com mydestination = mail.$mydomain

Теперь немного конкретики.

Программная обработка входящих писем в Postfix

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Adblock
detector