Вопрос или проблема
У меня есть веб-сервер, который я использую для размещения ряда сайтов. Я единственный, кто имеет доступ для входа и выполнения каких-либо действий. Мы используем ssmtp для отправки случайных электронных писем из PHP-скриптов. Недавно ssmtp начал отправлять новое письмо каждую минуту. Я пытался остановить apache и перезагружал сервер. Я не могу найти никаких указаний на то, откуда приходят эти письма или даже кому они отправляются. Похоже, здесь завелся бот, но у меня есть много автоматизированных вещей на веб-сервере, поэтому я думаю, что это скорее всего что-то, что я сам вызвал. Но я не могу найти дополнительную информацию, чтобы понять, что здесь происходит.
Я пытался закомментировать все в revaliases, но это не помогло. Я смог остановить отправку писем, закомментировав мой пароль в ssmtp.conf, и теперь журнал ошибок заполняется каждую минуту. Согласно mail.log, пользователь, который это вызывает, – www-data, пользователь без домашней папки, которого использует PHP. Я пытался отключить apache, и письма продолжают отправляться, так что это, похоже, не связано с какими-либо скриптами PHP, которые работают слишком много.
tail /var/log/mail.log:
Feb 13 19:35:38 Adam sSMTP[3419]: Отправлено письмо от root@Adam (221 gator40.hostgator.com закрывает соединение) uid=33 username=www-data outbytes=2214
Feb 13 19:36:02 Adam sSMTP[3434]: Отправлено письмо от root@Adam (221 gator40.hostgator.com закрывает соединение) uid=33 username=www-data outbytes=1608
Feb 13 19:37:03 Adam sSMTP[3484]: Отправлено письмо от root@Adam (221 gator40.hostgator.com закрывает соединение) uid=33 username=www-data outbytes=1608
Feb 13 19:38:02 Adam sSMTP[3536]: Отправлено письмо от root@Adam (221 gator40.hostgator.com закрывает соединение) uid=33 username=www-data outbytes=1608
Feb 13 19:39:02 Adam sSMTP[3662]: Отправлено письмо от root@Adam (221 gator40.hostgator.com закрывает соединение) uid=33 username=www-data outbytes=1608
Feb 13 19:40:02 Adam sSMTP[3729]: Отправлено письмо от root@Adam (221 gator40.hostgator.com закрывает соединение) uid=33 username=www-data outbytes=2214
редактирование: После написания вышеизложенного я подумал, что apache не нужно запускать для работы cron с PHP. Я отключил cron, и письма прекратились. Я дополнительно сузил это до конкретного скрипта, который я написал некоторое время назад. Как и в большинстве случаев, это моя ошибка.
Но я все еще думаю, что этот вопрос имеет значение и может помочь другим. Это было бы очень полезно и для меня. Как мы можем получить более полезную информацию от ssmtp, чтобы выяснить, куда отправляется электронное письмо или какова его тема или текст? Я предполагаю, что ответ может быть в виде какого-то хака, где вы заменяете оригинальную программу ssmtp на какой-то обертку, которая ведет журнал фактических команд, отправляемых ей. Я знаю, что есть более новые поддерживаемые программы.
Почти наверняка это не Apache, который запускает отправку почты, а PHP-FPM, служба быстрого режима, которая фактически размещает ваш PHP-инстанс; вы можете попробовать остановить его и посмотреть, прекратится ли отправка почты. Изменение вашего пароля не изменило кэшированную копию PHP-FPM, поэтому, если дело в этом, вероятно, перезапуск PHP-FPM также даст ему новый пароль, и отправка почты возобновится.
Почти всегда почта, отправляемая на root на локальной машине, является диагностической какой-либо проблемы; иногда это диагностика того, что почта не может быть отправлена. У большинства людей будет настроено перенаправление для захвата вещей, отправляемых от root, в аккаунт, который они могут проверить. Я не знаю, как Hostgator все настроено — это общий сервер Hostgator, не так ли? — но вы можете попробовать проверить, каково содержание этой почты, возможно, это что-то, что вы можете исправить.
Ответ или решение
Когда возникают проблемы с отправкой электронной почты с помощью sSMTP на веб-сервере, первым шагом является тщательная диагностика ситуации для выявления корня проблемы. В представленном сценарии обозначена проблема: sSMTP периодически отправляет письма без видимых причин, несмотря на усилия по отключению различных служб. Разберем этот вопрос подробно.
Теория
sSMTP — это простая программа для отправки почты, предназначенная для замены sendmail на машинах, где нет необходимости в полноценном почтовом сервере. Она перенаправляет почту на внешний SMTP-сервер. Когда sSMTP неожиданно начинает отправлять почту с высокой частотой, это свидетельствует о проблемах в конфигурации системы, возможно, с расписанием задач или скриптах, отсылающих письма.
Основные причины таких проблем могут включать:
- Ошибочные или бесконечные циклы в скриптах: Некорректные скрипты могут случайно запускать отправку писем чаще, чем предусмотрено.
- Расписания cron: Если cron-задание выполняется слишком часто без должного контроля, оно может инициировать отправку писем через sSMTP.
- Неавторизованные изменения или вредоносное ПО: Хотя в данном случае указано, что доступ к серверу ограничен, не стоит полностью исключать возможность нарушения безопасности.
Пример
В данном случае, после отключения Apache проблема не решилась, что указывает на то, что источником проблемы не являлись PHP-скрипты, работающие через Apache. Однако отключение cron выявило конкретный скрипт, ставший источником некорректной активности. Этот пример демонстрирует, как система планировщика задач (cron) может служить источником частой отправки почты, даже когда веб-сервер не активен.
Применение
Чтобы более эффективно отслеживать источник и причину частой отправки почты через sSMTP, стоит рассмотреть следующие шаги:
-
Логирование и отладка: sSMTP изначально не предоставляет подробных средств для диагностики, однако можно создать обёртку, которая будет выполнять дополнительные задачи логирования перед тем, как вызывается sSMTP. Это позволит записывать тело, тему и получателей писем.
-
Проверка cron-заданий: Убедитесь, что все cron-задания конфигурированы правильно и не обновлялись случайно. Перепроверьте скрипты, которые выполняются через cron на наличие ошибок в логике.
-
Анализ логов: Как можно видеть из логов, имя пользователя, под которым выполняются задачи, — www-data. Это дает основание полагать, что отправка инициируется именно с веб-интерфейса или PHP-скриптов. Задумайтесь о необходимости усиления логирования в sSMTP, чтобы каждая отправка письма фиксировала подробности о исходящих данных.
-
Переход на более продвинутый инструмент: Рассмотрите возможность использования более функциональных приложений для отправки почты, например, Postfix, который предлагает обширные механизмы логирования и диагностики.
-
Безопасность: Проверьте целостность системы на наличие вредоносного ПО, проведите аудит безопасности, чтобы исключить возможность компрометации.
-
Уведомления и мониторинг: Используйте мониторинговые инструменты и системы уведомлений для отслеживания аномальной активности и получения уведомлений в реальном времени.
Итоговая стратегия должна заключаться в постепенном и детальном анализе всех компонентов системы, которые могут влиять на процессы отправки почты. Это поможет не только устранить текущую проблему, но и предотвратить возникновение подобных ситуаций в будущем.