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

Обновлено: 03.07.2024

Вроде бы и задача не самая новая. И статей в гугле воз и маленькая тележка. Но почему то у меня ушла почти неделя на все эксперименты и топтания по всевозможным граблям.

Итак, задача: Сервер CentOS 7, установлен комплект LEMP, установлен сервер Zabbix 2.4.6. Нужно настроить отправку уведомлений админам на почту.

Оговорка — CentOS ставился по методу «секс и еще раз секс» — minimal installations. Ввиду этого некоторые пакеты «должные быть из коробки» не работают, ибо их никто еще не поставил.

После курения ряда мануалов стало понятно, что для отправки почты нам надо, как минимум, почтовую прокладку умеющую SMTP с авторизацией и скрипт для Zabbix.

В качестве почтового клиента используем ssmtp.


Затем в /etc/ssmtp/ssmtp.conf


Дальше была попытка выставить ssmtp в качестве подмены для sendmail и использовать команду mail (пакет mailx) для отправки почты, но письма, хоть и приходили, были не удобочитаемыми (текст приходил не в поле текста, а как бинарное вложение).

В итоге пришлось поставить mutt, в качестве замены mail.


Смотри где у нас домашний каталог пользователя zabbix:


Затем создаем файл настроек mutt в домашнем каталоге zabbix


Теперь надо написать скрипт для отправки почты и положить его в /usr/lib/zabbix/alertscripts. Имя скрипта пусть будет: send_mail.sh:


Теперь настройка самого zabbix. В Web-интерфейсе: Администрирование — Способы оповещений — Email

Тип: Скрипт
Имя скрипта: send_mail.sh
Активировано: Да (cheked)

Проверяем конфиг zabbix (/etc/zabbix/zabbix_server.conf)


Перезапускаем zabbix сервер:


И вот, если мы, в нарушение всех гайдлайнов, отключили SELinux, у нас все работает и оповещения ходят.

Однако, при включенном SELinux писем не было и нет. Переходим к дрессировке SELinux. Для ускорения дальнейшей настройки удобно завести какой-нибудь триггер, которому мы сможем легко и часто менять состояние (я не заморачивался и использовал перезагрузку сервера с zabbix, т.к. на этой виртуалке у меня никаких других нагрузок пока не было). Для выполнения настройки SELinux понадобится всего 4 действия, но их придется повторить столько раз сколько потребуется в вашей системе (у меня на это ушло 5 или 6 итераций).

Для личного «удобства» я собирал разрешающие правила не в один файл модуля SELinux, а в отдельный файл для каждой итерации, чтобы потом можно было внимательнее рассмотреть их содержимое. Поэтому имя модуля использовалось по схеме ZabSeModuleN, где N в конце имени файла — номер итерации, в итоге получается группа файлов ZabSeModule1.te, ZabSeModule1.mod, ZabSeModule1.pp, ZabSeModule2.te, ZabSeModule2.mod, ZabSeModule2.pp и т.д.

• ausearch -m avc -ts today
Если вывод отличается от — выполняем действия ниже.
• cat /var/log/audit/audit.log | audit2allow -m ZabSeModuleN > ZabSeModuleN.te
• checkmodule -M -m -o ZabSeModuleN.mod ZabSeModuleN.te
• semodule_package -o ZabSeModuleN.pp -m ZabSeModuleN.mod
• semodule -i ZabSeModuleN.pp
• rm /var/log/audit/audit.log
• reboot

Перезагрузка только метод вызвать сработку триггера «Zabbix server restarted»

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

Возможность отправлять извещения по электронной почте очень важна в управлении сервером: это не только упрощает работу, но и позволяет своевременно узнать о сбое или атаке.

Данное руководство поможет настроить отправку извещений по электронной почте на виртуальном выделенном сервере CentOS и повысить его защиту.

Основные понятия электронной почты

Почтовые клиенты

Почтовый клиент – это приложение, с помощью которого пользователи или другие приложения могут обмениваться электронной почтой. Они зависят от MTA. Популярными клиентами являются Microsoft Outlook, Mozilla Thunderbird или онлайн-клиент Gmail.

Протокол SMTP

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

В данном руководстве используется Heirloom mailx, почтовый агент от Berkeley Mail. Он предлагает дополнительную поддержку некоторых протоколов, среди которых IMAP, POP3 и SMTP.

Примечание: На форумах и сайтах вы можете встретить похожее приложение под названием nail. Эти приложения действительно очень похожи. Чтобы выполнить любую команду nail в mailx, нужно просто заменить в команде nail на mail или mailx. Также можно создать символьную ссылку на приложение mailx.

Установка mailx

Для начала нужно обновить систему.

Примечание: В среде производства рекомендуется пропустить обновление системы, так как это повлияет на работу приложений.

Чтобы установить mailx, используйте команду:

$ yum install -y mailx

Что такое символьные ссылки и как их создавать

Символьная ссылка (symlink) – это файл, который содержит ссылку на другой существующий в системе файл.

Например, чтобы вместо команды mail выполнялась команда mailx, нужно ввести.

$ ln -s /bin/mailx /bin/email

Настройка ретрансляции SMTP-сервера

Чтобы настроить SMTP-сервер для использования mailx, отредактируйте файл /etc/mail.rc, в котором хранятся настройки приложений.

Примечание: Не забудьте отредактировать код, указав ваши данные.

Чтобы закрыть и сохранить файл, нажмите CTRL+X и Y.

Примечание: Также вы можете использовать сервер Gmail или профессиональные серверы, например MANDRILL. С помощью таких серверов можно бесплатно отправлять большое количество электронных писем.

Отправка электронных писем с помощью команд mail и mailx

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

Вот краткий список доступных опций Heirloom mailx:

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

echo "Your message" | mail -s "Message Subject" email@address

echo "Message" | mail -s "Subject" -a /loc/to/attachment.txt email@address

echo | mail -s "Subject" -r from@address -q /loc/to/body.txt email@address

Полную документацию Heirloom mailx можно найти здесь.

Мониторинг портов и сокетов

Более подробную информацию о мониторинге портов и сокетов можно найти в этой статье. Просто создайте в Linux Socket Monitor задачу, которая будет запускать команду mailx, чтобы сообщить о новом открытом порте/сокете.

Мониторинг с помощью сценариев Bash

В случае особой необходимости (например для мониторинга использования памяти, дискового пространства, авторизации и т.п.) можно использовать один из тысячи доступных сценариев bash.

Сценарии bash (сценарии оболочки) – это небольшие приложения, предназначенные для выполнения быстрых задач. Их просто создавать, потому их часто используют в своей работе системные администраторы.

Выбрав сценарий для выполнения необходимой задачи, создайте пустой файл и сохраните в нём исполняемый код сценария.

Например, вам нужно получать уведомления в случае если дисковое пространство подходит к концу.

Для этого найдите в интернете сценарий от Linux Jornal. Перейдите по ссылке и вы получите доступ к коду.

Создайте новый файл:

Скопируйте и вставьте в него сценарий:

Чтобы закрыть и сохранить файл, нажмите CTRL+X и Y.

Теперь у вас есть сценарий monitor_disk_space.sh. Сделайте этот файл исполняемым.

$ chmod +x monitor_disk_space.sh

Запустите этот файл:

Затем настройте планировщик cron для автоматического регулярного запуска сценария.

Примечание: Больше о работе с cron можно узнать в этой статье.

Создайте пустой файл:

Скопируйте и вставьте следующий код:

Отредактируйте код согласно вашим требованиям и сохраните его (CTRL+X и Y).

Подготовка

Для начала устанавливаем утилиту для отправки почты. В противном случае мы увидим ошибку mail: command not found.

В Debian / Ubuntu:

apt-get install mailutils

В CentOS / Red Hat:

yum install mailx

Синтаксис

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

Примеры использования командной строки для email-отправки

1. Отправка письма с вложением

Для разных типов дистрибутива Linux команды могут отличаться.

а) для CentOS / Red Hat:

* где /var/log/maillog и /var/log/maillog2 — файлы, которые будут прикреплены к письму. Обратите внимание, что обе команды отличаются по регистру опции a и A — все зависит от версии и сборки Linux (в каких-то нужно использовать маленькую, в каких-то — большую). Также обратите внимание, что в примере для Ubuntu мы отправим 2 файла — для этого просто добавляем к команде еще одну опцию прикрепления файла.

2. Несколько получателей

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

3. Отправка с копией

4. Указать отправителя

В CentOS / Red Hat:

В Debian / Ubuntu:

5. Отправка через другой SMTP сервер

а) Для Ubuntu / Debian:

б) Для CentOS / Red Hat:

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

При возникновении проблем, можно воспользоваться программой mutt. Сначала поставим ее.

а) если используем CentOS / Red Hat:

yum install mutt

б) если используем Ubuntu / Debian:

apt-get install mutt

Теперь можно пользоваться. Синтаксис:

Примеры использования Mutt

* где /var/log/maillog — файл, который будет прикреплен к письму.

2. Указать отправителя:

3. Отправка через другой сервер.

Для начала, открываем файл с конфигурацией Mutt:

Также можно добавить при необходимости:

set smtp_user = user
set smtp_pass = password
set ssl_verify_host = no
set ssl_verify_dates = no
set ssl_starttls = no
set ssl_force_tls = no

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


Основы email

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

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

В обработке почты участники могут иметь разные роли:

Процесс передачи электронной почты

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


Решения для почтовых серверов

В Linux доступны различные решения для почтовых серверов. В прошлом почтовый сервис Sendmail был самым распространенным почтовым сервером Linux. Он был сложным, и использовал синтаксис, который было трудно понять. Хоть это было и сложно, Sendmail стал стандартом для обработки почты в Linux. Postfix был разработан для совместимости с Sendmail, но проще в настройке.

Postfix используется в качестве почтового сервиса. Postfix состоит из различных процессов, каждый из которых решает конкретные задачи. Процессы управляются главной службой Postfix, которая читает файл конфигурации /etc/postfix/master.cf, чтобы узнать, какие службы используются для конкретных задач. Такой подход делает Postfix модульным и подключаемым; при необходимости легко заменить один конкретный сервис другим сервисом.

Некоторые примеры процессов Postfix перечислены в таблице 1, а в листинге 1 приведено частичное содержимое файла конфигурации /etc/postfix/master.cf.

Листинг 1.Частичное перечисление файла конфигурации /etc/postfix/master.cf

Конфигурирование Postfix

Чтобы настроить Postfix, вам нужно изменить соответствующие параметры.

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

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

При работе с параметрами Postfix рекомендуется использовать команду postconf. Файл /etc/postfix/main.cf может содержать много строк, в результате чего параметры легко пропустить. Использование команды postconf позволяет избежать ошибок.

Для начала вы можете использовать команду postconf без каких-либо опций, которая показывает список всех действующих на данный момент настроек (включая настройки по умолчанию, не видимые в main.cf). grep позволяет вам легко найти аргумент, который вам нужно изменить.

Если после команды postconf следует имя определенного параметра, этот конкретный параметр будет показан. Чтобы изменить параметры postconf, вы можете использовать опцию -e, за которой следует параметр и его предполагаемое значение. Используйте, например, postconf -e 'inet_protocols = ipv4', чтобы установить значение параметра inet_protocols в ipv4. В листинге 2 показан частичный вывод команды postconf.

Понимание основных параметров

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

Первый параметр, который нужно рассмотреть, это inet_interfaces. По умолчанию он в режиме loopback only. В этом нет ничего плохого, если ваш почтовый сервер должен отправлять только исходящую почту (что обычно имеет место, если Postfix работает на компьютере с ролью нулевого клиента), но если вы хотите настроить свой сервер для приема электронной почты, вы должны указать IP-адрес или адреса, которые будет прослушивать ваш процесс Postfix, к примеру inet_interfaces = 10.0.0.1, localhost.

Параметр inet_protocols важен, если вы настраиваете свою собственную тестовую среду. По умолчанию Postfix использует IPv6. Это означает, что поиск DNS для имен хостов которые используются (например, relayhost) также выполняются через IPv6. Если у вас есть DNS-сервер, который не был настроен для IPv6, доставка электронной почты не удастся. Простым решением этой проблемы является использование только IPv4. Для этого обязательно установите inet_protocols = ipv4. Если ваш почтовый сервер используется в среде, где DNS доступен и настроен для обработки IPv4, а также трафика IPv6, вам не нужно изменять этот параметр.

Хотя использование этого параметра повышает безопасность вашего сервера, он не облегчает работу мобильных пользователей. Пользователи, которые будут подключаться к неизвестным сетям WiFi, должны будут использовать почтовый сервер, который предоставляется в этой конкретной сети WiFi, потому что ваш почтовый сервер их отклонит. Если вы хотите использовать этот параметр для усиления безопасности, вы можете рассмотреть возможность использования VPN, который гарантирует, что пользователи всегда будут подключаться из знакомых сетей.


Настройка Postfix для пересылки почты

Чтобы настроить параметры почтового сервера, которые вы хотите использовать, вы можете либо отредактировать содержимое /etc/postfix/main.cf напрямую, либо использовать команду postconf. Если используется без каких-либо аргументов, команда postconf выводит список всех (816 шт.) параметров конфигурации, которые использует Postfix. Если вы используете grep, вы легко найдете параметр, который необходимо изменить. Вы также можете использовать postconf для изменения настроек, используя параметр -e, за которым следует настройка, которую вы хотите изменить. Упражнение 1 показывает, как это сделать.

Упражнение 1.Изменение параметров Postfix с помощью postconf

  1. На сервере server1 войдите под рутом и введите postconf. Вы увидите длинный список всех настроек Postfix.
  2. Введите postconf myorigin. Команда покажет текущее значение настройки myorigin.
  3. Введите postconf mydomain, чтобы проверить текущее значение параметра mydomain.
  4. Введите postconf -e 'myorigin = $mydomain', чтобы изменить значение параметра myorigin.
  5. Повторите команду postconf myorigin. Обратите внимание, что пока ничего не изменилось.
  6. Введите postfix check. Команда проверяет содержимое файла /etc/postfix/main.cf и предупреждает, если с ним что-то не так (всегда хороший выбор перед началом использования новой конфигурации).
  7. Перезагрузите Postfix systemctl reload postfix и повторите шаг 5. Вы увидите, что настройка была изменена.
  8. Введите postconf -n. Команда покажет все параметры с параметром, который отличается от значения по умолчанию.
man 5 postconf для полного обзора и объяснения всех 816 параметров Postfix.

Упражнение 2. Настройка нулевого клиента Postfix.

Для выполнения этого упражнения вам необходимо использовать службы DNS.

1. Войдите под рутом на server1.

2. Убедитесь, что вы можете резолвить server2, используя host server2.

7. Отключите IPv6, используя postconf -e 'inet_protocols = ipv4'.

9. Введите systemctl reload postfix, чтобы перезапустить сервер Postfix на сервере server1.

11. На server2 введите firewall-cmd --add-service smtp --permanent, а затем firewall-cmd --reload, чтобы добавить службу SMTP в файрвол.

Проверка конфигурации

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

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

Легко найти примеры конфигурации для всех конфигураций Postfix, Многие примеры хранятся в файлах /usr/share/doc/postfix-<версия>/README. Например, если вы выполните команду grep null для этих файлов, вы найдете всю конфигурацию, необходимую для настройки конфигурации нулевого клиента.

Упражнение 3.

1. На server2 введите firewall-cmd --remove-service smtp --permanent, а затем firewall-cmd --reload.

Подведём итоги

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