Настройка sendmail centos 7

Обновлено: 05.07.2024

В этом посте написано о том, как установить почтовый сервер на CentOS 7. В новой версии операционной системы произошли некоторые изменения, поэтому старая инструкция по установке Postfix требовала корректировки, которые отражены в этом посте.

Основная часть настроек по настройке Postfix не изменилась, но изменились настройки касающиеся самой операционной системы. Были упразднены старые пакеты по работе с брандмауэром, появился "systemd".
На мой взгляд произошли следующие изменения:

  1. Появился systemd - демон инициализации других демонов в Linux, пришедший на замену используемого ранее скрипта инициализации /sbin/init. Вследствие чего, за место привычного iptables имеем firewalld. Который настраивается по другому. А также управление демонами стало делаться через команду "systemctl" за место "service" и "chkconfig".
  2. Так как СУБД MySQL приобрела корпорация Oracle, сообщество решило использовать в своих дистрибутивах форк по имени MariaDB. Практически все что когда-то делалось в MySQL работает и в MariaDB. Изменилась только установка, теперь она выглядит так: yum install mariadb mariadb-server
  3. Версия Dovecot подскочила с 2.0.9 до 2.2, что повлияло на конфигурирование некоторых настроек.
  4. В остальном все осталось по старому, хотя кто имеет кучу скриптов старой системы инициализации, им видимо придется переписывать наработанное все свое добро на новый лад.

У меня в этой записке будут трудится в связке:

Кратко напишу для чего какой пакет (программа) используются:

Postfix - будет заниматься отправкой и получением писем от других почтовых серверов (MTA - Mail Transfer Agent / почтовый агент пересылки ). Он же SMTP сервер.

Dovecot - занимается доставкой почты от Postfix к почтовым клиентам (MDA - mail delivery agent / почтовый агент доставки). Он же POP3/IMAP сервер.

MySQL - в базе MySQL будут содержаться такие данные, как наш домен - company.kz, имена почтовых учетных записей, пароли и т.д.

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

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

КРАТКОЕ СОДЕРЖАНИЕ

  1. Настройка сетевого адаптера
  2. Установка MySQL и создание базы "mail"
  3. Установка и настройка Postfix
  4. Установка и настройка Dovecot
  5. Установка Postgrey
  6. Установка PostfixAdmin и Apache
  7. Настройка имени хоста
  8. Настройка фаервола firewalld
  9. Настройка PostfixAdmin
  10. Установка и настройка RoundCube Web Mail
  11. Настройка своего DNS сервера

1. Настройка сетевого адаптера

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

Здесь видно, что на компьютере три адаптера:

Первый адаптер - это специальный программный интерфейс обратной петли. Мы его использовать не будем.
Второй адаптер - это наш внешний физический интерфейс, мы должны прописать белый IP адрес в его настройки.
Третий адаптер - это внутренний интерфейс подключенный в локальную сеть, соответственно у него будет адрес из диапазона локальной сети.

Теперь давайте найдем файлы настроек сетевых адаптеров, они хранятся в каталоге /etc/sysconfig/network-scripts/, для этого введем:

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

  1. ifcfg-enp0s3, ifcfg-enp0s8 .
  2. ifcfg-p2p1, ifcfg-p7p1 .
  3. ifcfg-eth0, ifcfg-eth1 .

У нас первый вариант.

До настроек сетевых карт, обязательно отключите программу под названием NetworkManager. Это программа помогает пользователю облегчить настройки подключения к разным сетям. Но на сервере, из за этой работающей утилиты, могут возникнуть необъяснимые проблемы. Если у вас сервер, то желательно отключить NetworkManager.

Включаем сеть если она не включена:

Файл /etc/sysconfig/network-scripts/ifcfg-enp0s3, дописываем или меняем сетевые реквизиты:

Жирным шрифтом помечены изменения которые были произведены мною. Здесь дописаны такие основные параметры как:

  • IP адрес компьютера
  • указан признак статического адреса для хоста
  • маска сети
  • адрес шлюза
  • адрес DNS сервера

В моих примерах, текстовые файлы создаются и редактируются с помощью редактора vi. Кратко опишу основные операции по работе с текстом:

После открытия файла через команду vi <имя файла>, требуется активировать режим редактирования (ввода), это нужно чтобы вносить текст в файл. Активирование режима ввода осуществляется с помощью нажатия клавиши "INS". Далее редактор перейдет с режима просмотра в состояние редактирования. Потом от вас потребуется вводить новые данные в файл. В моих примерах от вас нужно будет копировать текст из инструкции в созданный файл, обычно это происходит путем нажатия "INS" - переход в режим редактирования, и далее осуществляется вставка текста из буфера обмена нажатием комбинации "SHIFT"+"INS".

По окончанию ввода текста, нажмите кнопку "ESC". Тем самым вы вернетесь в режим просмотра.

Самое главное - это сохранение файла, чтобы ваш труд не пропал. В текстовом редакторе vi данную операцию возможно осуществить двумя способами, первый вариант - нажмите и держите кнопку Shift, теперь когда кнопка Shift удержана, не отпуская ее нажмите по букве "z" - два раза. Обязательно проверьте "Caps Lock" - он должен быть выключен. Второй вариант - после выхода из режима редактирования "ESC", введите ":w!" и нажмите "ENTER".

Поиск текста в редакторе vi делается путем нажатия в режиме просмотра кнопки "/", далее вводится текст который нужно найти.

Перезапускаем демон отвечающий за сеть:

В файл /etc/resolv.conf вписываем IP адрес DNS сервера провайдера:

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

2. Установка MySQL и создание базы "mail"

Создаем почтовую базу - "mail":

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

Файл /etc/postfix/main.cf , вписываем, заменяем домен и имя хоста на свои:

Опять открываем /etc/postfix/main.cf , добавляем:

Создаем учетную запись пользователя vmail:

Для корректной работы создаем каталоги:

Отключаем SELINUX, открываем /etc/selinux/config и меняем:
Находим строку:

Приводим ее к виду

В CentOS 7 по умолчанию уже должен стоят Postfix, но если вдруг у вас другой агент доставки, понадобится поменять его:

Нажимаем цифру 2 -> ENTER

Запрещаем Postfix быть открытым релеем, открываем /etc/postfix/main.cf.

Добавляем следующий блок:

Здесь правило reject_unauth_destination - должно запрещать открытый релей через ваш сервер.

Создадим дополнительные конфигурационные файлы, которые указаны в /etc/postfix/main.cf, эти файлы отвечают за обращение к базе данных MySQL:

С помощью них Postfix будет работать с БД:

Создаем файл /etc/postfix/sql/vdomains.cf

Создаем файл /etc/postfix/sql/vmailbox.cf

Создаем файл /etc/postfix/sql/valias.cf

4. Установка и настройка Dovecot

Если не работает SASL, установите пакет cyrus-sasl:

Открываем /etc/postfix/master.cf и добавляем:

Добавим в конец файла main.cf следующие строчки:

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

Создаем файл /etc/dovecot/dovecot.conf, вставим туда следующие настройки:

Теперь создайте файл /etc/dovecot/dovecot-sql.conf

connect = host=localhost dbname=mail user=postfix password=password user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n'as mail, 1150 AS uid, 12 AS gid, concat('dirsize:storage=', quota) AS quota FROM mailbox WHERE username = '%u' AND active = '1' password_query = SELECT username as user, password, '/var/vmail/%d/%n' as userdb_home, 'maildir:/var/vmail/%d/%n' as userdb_mail, 1150 as userdb_uid, 12 asuserdb_gid FROM mailbox WHERE username = '%u' AND active = '1'

5. Установка Postgrey

Подключаем репозиторий Epel:

После установки нам нужно дописать всего 1 строчку в главный конфигурационный файл main.cf, чтобы postfix подружился со спам фильтром postgrey. Открываем файл - /etc/postfix/main.cf и делаем соответствующие изменения:

Вставленная строчка помечена жирным шрифтом.

Примечание: строчка “check_policy_service unix:/var/spool/postfix/postgrey/socket,” должна быть обязательно прописана после строчки параметра “reject_unauth_destination”, как на примере выше.

6. Установка PostfixAdmin и Apache

Установим зависимости для Postfixadmin:

Скачаем Postfixadmin и настроим его:

В этом файле находим строчки которые внизу и меняем их значение на следующие:

Ставим все службы в автозагрузку:

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

Открываем файл /etc/resolv.conf и приводим к виду:

Впишем имя хоста в /etc/sysconfig/network

А также впишем имя хоста в /etc/hosts

Еще раз проверяем файл /etc/resolv.conf

10.22.32.51 - провайдерский DNS сервер

Проверка работы DNS:

8. Настройка фаерволла

Смотрим активные зоны:

Здесь видим, что два наших интерфейса в зоне Public, где все запрещено кроме DHCP и SSH.

Адаптер enp0s8 - это внутренний адаптер, его добавим в зону Trust:

Также добавим в зону Trust локальную сеть:

Открываем порты на внешнем интерфейсе:

Здесь я открыл основные порты 25, 80, 110 и 143.

Если вы настроили TLS/SSL доступ, потребуется открыть также порты 443, 578, 993 и 995.

Внесенные настройки надо сохранить через команды

Проверка открытых сервисов:

Проверяем наши открытые порты/настройки

По умолчанию в зоне Public есть всего только два сервиса dhcp и ssh, так как это самые используемые службы. Это легко проверить введя команду:

Здесь видно что есть службы dhcpv6-client и ssh

DHCP удаляется командой:

9. Настройка PostfixAdmin

В браузере ввести адрес

В окошке "Change setup password" - забиваем свой пароль, записываем его на бумажку.
Во втором окошке появится длинная красная непонятная строчка (наш шифрованный пароль), копируем ее в буфер обмена.
Открываем файл:

Меняем, вместо "changeme", вставляем шифрованный пароль который скопировали в буфер обмена. Вот что должно получится:

Создаем учетную запись администратора, например "administrator@point.ru".

Нажимаем на кнопке "Add Admin", появится надпись:

Запоминаем адрес (логин) и пароль.
Заходим на страничку:

Создадим первый почтовый ящик, я создал "linux@point.ru".

Пришло время тестировать наш почтовый сервер.

В локальной сети находим свободный компьютер, настраиваем сетевые настройки так чтобы этот ПК видел почтовый сервер.

Настраиваем почтовый клиент Outlook или другой, указываем

Ставим галку - SMTP авторизация.

10. Установка и настройка RoundCube Web Mail

На данном этапе у нас есть удобный веб интерфейс для администратора почтового сервера, но нет веб интерфейса для пользователей. Этот досадное недоразумение решается установкой RoundCube:

Всё описание будет верным для CentOS и установленным на неё SendMail.

Буду приводить пример только для настройки подписи исходящей почты. Без проверки входящей. Потому что лучше всего принимать почту в "Яндекс.Почта для доменов" - это безопасно и бесплатно.

Установка DKIM

DKIM подпись - это самый сложный по настройке способ придания веса мэйлам. Для сравнения, чтобы настроить SPF надо прописать одну TXT запись к DNS. А для DKIM нужен примерно час возни с сервером. И то при условии, что делаешь такую процедуру каждый день и помнишь всю последовательность действий.

Эта команда загрузит и установит OpenDKIM, который будет подписывать исходящие письма.

Теперь надо сгенерировать private и public ключи для всех доменов, которым необходимо сделать подпись почты. Ключ private хранится на сервере и не доступен для просмотра из вне. Ключ public находится в DNS записи домена и виден всем. Так что принимающий от нас почту сервер всегда может посмотреть эту запись и подтвердить достоверность DKIM подписи на письме.

Создаём папку для ключей, создаём ключи и настраиваем права доступа:

Отлично! Ключи созданы. Теперь надо настроить OpenDKIM, чтобы тот подписывал письма. Обратим внимание на четыре файла:

  1. /etc/opendkim.conf – главный файл конфигурации OpenDKIM
  2. /etc/opendkim/KeyTable – список ключей, которыми можно подписывать
  3. /etc/opendkim/SigningTable – список доменов, почта с которых должна быть подписана
  4. /etc/opendkim/TrustedHosts – список серверов, которым надо доверять при подписывании или верифицировании

Придётся покопаться в каждом файле. Пойдём по порядку.

opendkim.conf

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

KeyTable /etc/opendkim/KeyTable

SigningTable refile:/etc/opendkim/SigningTable

ExternalIgnoreList refile:/etc/opendkim/TrustedHosts

InternalHosts refile:/etc/opendkim/TrustedHosts

Сохраняем изменения в файле.

KeyTable

Файл KeyTable говорит OpenDKIM где искать ключи. Каждая строка в этом файле говорит о местоположении ключа. Для одного домена вставим одну в этом файле:

Получится две строки с настройками для двух доменов. Сохраняем изменения в файле.

SigningTable

Теперь заходим в файл /etc/opendkim/SigningTable. В этом файле можно задать какие письма будут подписываться. Воспользуемся первой возможной опцией - подписываем письма, у которых в поле "От кого" находится наш домен. Для этого в файле ставим строчку:

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

TrustedHosts

Теперь необходимо отредактировать файл /etc/opendkim/TrustedHosts. Здесь ничего сложного мудрить не надо. Просто добавляем в конец файла наш домен

Или если доменов несколько, то по одному в на строчку:

Файл TrustedHosts говорит OpenDKIM каким доменам позволено использовать ключи. Заодно OpenDKIM не будет проверять DKIM подпись у этих доменов, ведь мы указали ранее этот файл в качестве исключений в опции ExternalIgnoreList. Вдобавок эти домены будут считаться внутренними доменами сервера, потому что ссылка на файл указана в опции InternalHosts. Поэтому OpenDKIM будет подписывать всю исходящую от них почту. А это именно то, что нам надо.

Убедитесь что ip адрес localhost (127.0.0.1) содержится в файле TrustedHosts. Иначе OpenDKIM вообще не будет подписывать никакую исходящую почту. Если в вашей сети несколько серверов и они отправляют мэйлы через один, то адреса этих серверов должны быть перечислены в TrustedHosts.

Не забудьте сохранить изменения в файле.

Внимание!

Все файлы настроек (KeyTable, SigningTable, TrustedHosts и т.п.) заканчиваются на пустую строку. Обязательно оставляйте пустую строку в конце перечисленных выше файлов, чтобы не было проблем с запуском OpenDKIM. Кстати, правило последней пустой строки встречается много где в Linux. Я не знаю откуда это правило пошло, но лучше всегда оставлять последнюю строчку пустой. Иначе (в некоторых случаях) не будет восприниматься содержание последней строки.

SendMail

Наконец то! Закончили настройку OpenDKIM. Но осталось сказать SendMail, чтобы подписывал почту через OpenDKIM. Для этого заходим в файл /etc/mail/sendmail.mc и добавляем в конец строчку:

Сохраняем файл. И компилируем настройки SendMail командой:

Последние приготовления сервера

Осталось запустить OpenDKIM и перезапустить SendMail, чтобы настройки вступили в силу:

service opendkim start
service sendmail restart

И попросить OpenDKIM загружаться при старте системы:

Настройка DNS

DKIM подпись исходящей почты на стороне сервера настроена. Но теперь надо опубликовать в DNS записи публичный ключ. Для этого нам понадобятся public ключи, которые были созданы ранее. Заходим в файл:

И видим там что-то вроде этого:

Заходим в настройки DNS записей нужного домена (который указан в самом конце этой строки) и создаём TXT запись с содержанием:

v=DKIM1; k=rsa; p=MIGfM_(очень много букв)_IDAQAB

Да, раз уж находимся в DNS записях домена, то можно прописать SPF запись. Делается это за пару секунд, но её наличие увеличит шансы доставки исходящей почты. Но об этом в другой статье.

Агент передачи почты. Postfix является свободным программным обеспечением, создавался как альтернатива Sendmail. Postfix 3 нужен для отправки электронной почты через SMTP, SMTPS и STARTTLS.

2. Проверка версии программы.

Первое, что нужно сделать, так это проверить версию установленной программы Postfix в нашей системе. Это легко сделать с помощью специальной команды:


CLIENT wrappermode (port smtps/465) is unimplemented instead, send to (port submission/587) with STARTTLS

3. Удаление Postfix 2 / Sendmail / sSMTP.

Следующее, что нам нужно сделать, это убедиться, что на нашем сервере нет других программ для отправки почты, если мы действительно не хотим оставить для Postfix 3 и одну (или несколько) из них. В случае, если нам этого не нужно, мы можем легко удалить их с помощью следующей команды:

Хотя удаление через yum этих программ является обязательным шагом для установки Postfix 3 предполагая, что мы хотим установить более новую версию – мы также можем выбрать команду systemctl отключить и systemctl остановить sSMTP и/или Sendmailinstead их удаления. Единственное, что здесь важно сделать, это убедиться, что ни один из них не будет запущена и запущена вообще, иначе они не позволят нашему Postfix 3 быть установленным и работать должным образом.

4. Установка репозитория Ghettoforge.

Если не установить репозиторий Ghettoforge, то мы не сможем ничего установить!


Алгоритм установки Ghettoforge содержится в статье «CentOS 7: Репозитории: Ghettoforge».

Адреса на всякий случай:

5. Установка Postfix 3.

После того, как сделали данные манипуляции, ставим Postfix 3.

Установим программу для создания формы письма mailx.

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


Проверим версию, на всякий случай, что он там поставил?


Проверим работает ли он сейчас?


Отлично! То, что нужно!

6. Настройка Postfix 3.

Создадим резервную копию файла конфигурации:

Добавляем в конец конфигурационного файла /etc/postfix/main.cf вот эти строки.

Если почтовый домен совпадает с hostname сервера, меняем параметр mydestination

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

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

Компилируем таблицы в понятный постфиксу формат:

Отправляем тестовое письмо:

Открываем лог и ждем строку:


Если это видим — значит все работает.

Задача: все уведомления от сервисов падают в локальный ящик рута /var/spool/mail/root , а требуется, чтобы они уходили на внешний почтовый ящик.

Было закрыто решеткой:

Стало открыто, без решетки:

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

8.1. Проверим что у нас скопилось на внутреннем почтовом ящике.




Далее по аналогии.

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

Теперь для очистки мусора из системы можно очистить файл /var/spool/mail/root .

Теперь отправляем почту Пользователю root:

и ждём этого письма на указанном ящике!

Еще можно отсылать всякую полезную служебную информацию.

8.2. Отправим информацию о заполненности дисков сервера:

На почту прейдет письмо вида:


8.3. Проверка открытых портов с помощью nmap.

Поставьте nmap на какой-то внешний хост и с него по cron раз в неделю запускайте проверку с отправкой результата вам на почту:

P.S. для этого требуется установить nmap дополнительно.

9. Возможные ошибки.

Если что-то пошло не так:

Необходимо доустановить в систему недостающие SASL-библиотеки:

В конфигурационном файле забыт параметр:

Надо этим пользователем зайти «руками» через браузер и прямо на первом экране поставить галочку напротив «EULA».

Если так и не удалось устранить проблему, то зайдите в логи почтового агента и изучите причину неудач.

Посмотрите, что может идти не так.

Например что-то вроде этого:

После внесения этого исправления, перезапустите сервис postfix.

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

Настраиваем sendmail (8.12.6/7/8) для виртуального почтового хостинга.

Установка sendmail

Сначала устанавливаем итз портов sendmail c поддержкой cyrus sasl (система аутентификации).

После установки sendmail мы должны изменить файл /etc/make.conf. Добавляем в него строчку

Если до этого стоял более старый sendmail, устанавливаем файл submit.cf

Для запуска sendmail будем использовать следующий сценарий (переименуем его в удобоваримый формат):

Для нормального запуска обновленной версии мы должны указать путь к ней (файл /etc/mail/mailer.conf). Это можно сделать либо при помощи команды

либо вручную, изменив файл mailer.conf:

На этом установка sendmail окончена. Осталоь столько запустить его командой

Настройка sendmail

  • freebsd.mc
  • aliases
  • access
  • local-host-names
  • virtusertable

aliases

Этот файл описывает пользовательские псевдонимы, используемые sendmail. Файл расположен в каталоге /etc/mail и представляет собой список вида

Более подробно структура файла aliases описана в aliases (5). В этот файл мы добавляем строку

access

В этом файле мы указываем, для каких IP адресов sendmail должен принимать и пересылать почту. Поскольку для эих целей мы будем использовать аутентификацию cyrus sasl, мы разрешим только отсылку с локального хоста

local-host-names

virtusertable

freebsd.mc

Теперь нам осталось только изменить конфигурацию файла freebsd.mc, чтобы sendmail научился работать с виртуальными почтовыми доменами. Здесь надо понимать, что в том случае, когда существует файл, у которого имя совпадает с названием машины (например, для машины с именем genius файл будет genius.mc), он используется вместо файла freebsd.mc

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

В строке 6 мы задаем файл с пользовательскими псевдонимами; в десятой строке - имя файла трансляции виртуальных пользователей в настоящих, а в 36-й строке - названия доменов, для которых наш сервер должен обрабатывать почту.
Также ограничим максимальный размер письма одним мегабайтом (строка 49) и запретим рассылать письмо одновременно более, чем 10 получателям (строка 48). Если есть необходимость отправки всей почты на промежуточный SMTP сервер (например, на SMTP сервер провайдера), следует раскомментировать строку 31 и вместо "your.isp.mail.server" указать IP адрес или имя SMTP сервера провайдера.

Запуск и тестирование

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

Результатом будет нечто вроде этого:

/usr/bin/m4 -D_CF_DIR_=/usr/local/share/sendmail/cf/ /usr/local/share/sendmail/cf/m4/cf.m4 genius.mc > genius.cf /usr/sbin/makemap hash virtusertable.db < virtusertable chmod 0640 virtusertable.db /usr/sbin/makemap hash access.db < access chmod 0640 access.db /usr/sbin/sendmail -bi /etc/mail/aliases: 26 aliases, longest 18 bytes, 276 bytes total chmod 0640 /etc/mail/aliases.db install -m 444 freebsd.cf /etc/mail/sendmail.cf install -m 444 freebsd.submit.cf /etc/mail/submit.cf

Теперь перезапускаем sendmail

Наличие строчки "250-AUTH DIGEST-MD5 CRAM-MD5 PLAIN LOGIN" говорит нам о том, что sendmail может аутентифицировать пользователя. Добавляем пользователя:

Вводим пароль пользователя и проверяем:

Собственно говоря, на этом настройка sendmail закончена. Теперь настраиваем The Bat! для того, чтобы можно было отправлять почту с аутентификацией:

Заходим в Ящик -> Свойства почтового ящика -> Транспорт -> Аутентификация

(!) Обратите внимание на то, что имя пользователя указано вместе с именем машины.
Выделяем чекбокс "Требовать безопасную (MD5) аутентификацию".

После отправки письма в лог-файле /var/log/maillog должны быть примерно такие записи:

Читайте также: