SRV_ADMIN Telegram 4667
Если вам приходится обслуживать сайты, работающие на php, то расскажу про небольшую настройку, которая по умолчанию отключена, но в некоторых случаях её имеет смысл включить. Речь пойдёт про логирование использования функции mail(), с помощью которой можно отправлять email сообщения.

Хорошо, если веб приложение умеет использовать сторонние SMTP сервера для отправки почты, а не прямую отправку через встроенную функцию. Но это не всегда так. Другая сторона медали - если сайт или хостинг взломают, то часто начинают слать спам через php напрямую. Это самое популярное использование взломанного каким-нибудь ботом сайта через публичную уязвимость. Через него либо сразу спам начинают слать, либо ддосить кого-нибудь, реже - майнить. Майнинг сразу видно по возросшей нагрузке. А вот почту можно и не заметить.

Я обычно в таких случаях ставлю для локальной отправки postfix и слежу за его логом. Если вы с почтовыми серверами не особо знакомы, а вам нужен просто список отправленных писем, где одно письмо - одна строчка, то с логированием сдрествами php будет проще всего. К тому же этот лог в том числе покажет, какой конкретно скрипт сделал отправку, что в логе почтового сервера не увидеть, там этой информации в принципе нет.

Идём в настройки php, в файл php.ini и раскомментируем там строку:

mail.log = syslog

Можно направить вывод в какой-то текстовый файл вместо syslog, но могут возникнуть нюансы с доступом, если, к примеру, у вас используется php-fpm и для каждого сайта запускается пул под своим отдельным пользователем. Использовать syslog как единое централизованное хранилище - более универсальное решение. Но тут уже вам решать, как удобнее, в зависимости от ваших настроек. Можно и из syslog сложить все записи в отдельный файл, отфильтровав их по вхождению фразы mail().

Для этого рисуем конфиг для rsyslog в файле /etc/rsyslog.d/php-mail.conf:

:msg, contains, "mail()" /var/log/mail-php.log
& stop

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

# systemctl restart rsyslog

И перезапускаем службу php в зависимости от того, в каком виде она используется. Отдельно отмечу, что, к примеру, в Debian файл php.ini для модуля Apache, для php-fpm, для запуска консольных скриптов через cli свой. Не перепутайте, куда будете вносить правки. Либо вносите сразу во все. Лучше создать отдельный файл, вместо правки общего. То есть для php-fpm кладём настройку примерно сюда: /etc/php/8.2/fpm/conf.d/mail-log.conf.

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

<?php
$to = "[email protected]";
$subject = "Привет от PHP!";
$message = "Это тестовое письмо, отправленное через PHP скрипт.";
mail($to, $subject, $message);
?>

Запускаем скрипт:

# php mail.php

В файле /var/log/mail-php.log наблюдаем запись:

2025-06-09T00:07:09.607068+03:00 debian12-vm php: mail() on [/root/mail.php:5]: To: [email protected] -- Headers: -- Subject: Привет от PHP!

Видим скрипт /root/mail.php и конкретную строку 5, где сработала функция mail(). Это может очень пригодится при отладке неправомерных отправлений с сервера.

Не забудьте настроить ротацию этого файла, если будете хранить лог в отдельном файле. Добавьте примерно такой конфиг для logrotate в файле /etc/logrotate.d/mail-php:

/var/log/mail-php.log {
rotate 30
daily
missingok
notifempty
compress
olddir /var/log/old
}

Я обычно складываю все старые логи в отдельную директорию. Не забудьте её создать, если скопируете этот конфиг. Если будете логировать не по дням, а по размеру файла, то не забудьте настроить запуск logrotate чаще, чем раз в сутки. И так же туда надо будет добавить вместо daily дополнительные параметры:

size=50M
dateext
dateformat -%Y-%m-%d_%H-%s

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#webserver #php



tgoop.com/srv_admin/4667
Create:
Last Update:

Если вам приходится обслуживать сайты, работающие на php, то расскажу про небольшую настройку, которая по умолчанию отключена, но в некоторых случаях её имеет смысл включить. Речь пойдёт про логирование использования функции mail(), с помощью которой можно отправлять email сообщения.

Хорошо, если веб приложение умеет использовать сторонние SMTP сервера для отправки почты, а не прямую отправку через встроенную функцию. Но это не всегда так. Другая сторона медали - если сайт или хостинг взломают, то часто начинают слать спам через php напрямую. Это самое популярное использование взломанного каким-нибудь ботом сайта через публичную уязвимость. Через него либо сразу спам начинают слать, либо ддосить кого-нибудь, реже - майнить. Майнинг сразу видно по возросшей нагрузке. А вот почту можно и не заметить.

Я обычно в таких случаях ставлю для локальной отправки postfix и слежу за его логом. Если вы с почтовыми серверами не особо знакомы, а вам нужен просто список отправленных писем, где одно письмо - одна строчка, то с логированием сдрествами php будет проще всего. К тому же этот лог в том числе покажет, какой конкретно скрипт сделал отправку, что в логе почтового сервера не увидеть, там этой информации в принципе нет.

Идём в настройки php, в файл php.ini и раскомментируем там строку:

mail.log = syslog

Можно направить вывод в какой-то текстовый файл вместо syslog, но могут возникнуть нюансы с доступом, если, к примеру, у вас используется php-fpm и для каждого сайта запускается пул под своим отдельным пользователем. Использовать syslog как единое централизованное хранилище - более универсальное решение. Но тут уже вам решать, как удобнее, в зависимости от ваших настроек. Можно и из syslog сложить все записи в отдельный файл, отфильтровав их по вхождению фразы mail().

Для этого рисуем конфиг для rsyslog в файле /etc/rsyslog.d/php-mail.conf:

:msg, contains, "mail()" /var/log/mail-php.log
& stop

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

# systemctl restart rsyslog

И перезапускаем службу php в зависимости от того, в каком виде она используется. Отдельно отмечу, что, к примеру, в Debian файл php.ini для модуля Apache, для php-fpm, для запуска консольных скриптов через cli свой. Не перепутайте, куда будете вносить правки. Либо вносите сразу во все. Лучше создать отдельный файл, вместо правки общего. То есть для php-fpm кладём настройку примерно сюда: /etc/php/8.2/fpm/conf.d/mail-log.conf.

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

<?php
$to = "[email protected]";
$subject = "Привет от PHP!";
$message = "Это тестовое письмо, отправленное через PHP скрипт.";
mail($to, $subject, $message);
?>

Запускаем скрипт:

# php mail.php

В файле /var/log/mail-php.log наблюдаем запись:

2025-06-09T00:07:09.607068+03:00 debian12-vm php: mail() on [/root/mail.php:5]: To: [email protected] -- Headers: -- Subject: Привет от PHP!

Видим скрипт /root/mail.php и конкретную строку 5, где сработала функция mail(). Это может очень пригодится при отладке неправомерных отправлений с сервера.

Не забудьте настроить ротацию этого файла, если будете хранить лог в отдельном файле. Добавьте примерно такой конфиг для logrotate в файле /etc/logrotate.d/mail-php:

/var/log/mail-php.log {
rotate 30
daily
missingok
notifempty
compress
olddir /var/log/old
}

Я обычно складываю все старые логи в отдельную директорию. Не забудьте её создать, если скопируете этот конфиг. Если будете логировать не по дням, а по размеру файла, то не забудьте настроить запуск logrotate чаще, чем раз в сутки. И так же туда надо будет добавить вместо daily дополнительные параметры:

size=50M
dateext
dateformat -%Y-%m-%d_%H-%s

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#webserver #php

BY ServerAdmin.ru




Share with your friend now:
tgoop.com/srv_admin/4667

View MORE
Open in Telegram


Telegram News

Date: |

How to Create a Private or Public Channel on Telegram? Today, we will address Telegram channels and how to use them for maximum benefit. The initiatives announced by Perekopsky include monitoring the content in groups. According to the executive, posts identified as lacking context or as containing false information will be flagged as a potential source of disinformation. The content is then forwarded to Telegram's fact-checking channels for analysis and subsequent publication of verified information. There have been several contributions to the group with members posting voice notes of screaming, yelling, groaning, and wailing in different rhythms and pitches. Calling out the “degenerate” community or the crypto obsessives that engage in high-risk trading, Co-founder of NFT renting protocol Rentable World emiliano.eth shared this group on his Twitter. He wrote: “hey degen, are you stressed? Just let it out all out. Voice only tg channel for screaming”. “[The defendant] could not shift his criminal liability,” Hui said.
from us


Telegram ServerAdmin.ru
FROM American