Article ID: 114845, created on Oct 7, 2014, last review on Oct 7, 2014

  • Applies to:
  • Plesk for Linux/Unix

Симптомы

PHP-скрипты на сервере отправляют много почтовых сообщений. Как определить, на каких доменах выполняются эти скрипты, если я использую Postfix?

Решение

Примечание. Эта статья предназначена для Postfix. Если вы пользуетесь Qmail, смотрите статью
1711: PHP-скрипты на сервере отправляют большой объем почтовых сообщений. Как определить, на каких доменах выполняются эти скрипты?

Существует способ определить, из какой папки был запущен PHP-скрипт, отправляющий почтовые сообщения.

Примечание. В зависимости от вашей версии операционной системы и Parallels Plesk ваши пути могут немного отличаться от указанных ниже.

  1. Создайте скрипт /usr/sbin/sendmail.postfix-wrapper со следующим содержимым:

    Создайте файл и откройте его для редактирования:

    #touch /usr/sbin/sendmail.postfix-wrapper
    #vi /usr/sbin/sendmail.postfix-wrapper
    

    Добавьте следующее содержимое:

    #!/bin/sh
    (echo X-Additional-Header: $PWD ;cat) | tee -a /var/tmp/mail.send|/usr/sbin/sendmail.postfix-bin "$@"
    

    Обратите внимание, что этот скрипт должен состоять из двух строк, включая #!/bin/sh.

  2. Создайте файл журнала /var/tmp/mail.send и выдайте ему права a+rw. Разрешите исполнение программы-оболочки, переименуйте старую версию sendmail и привяжите ее к новой программе-оболочке. Затем выполните следующие команды:

    ~# touch /var/tmp/mail.send
    ~# chmod a+rw /var/tmp/mail.send
    ~# chmod a+x /usr/sbin/sendmail.postfix-wrapper
    ~# mv /usr/sbin/sendmail.postfix /usr/sbin/sendmail.postfix-bin
    ~# ln -s /usr/sbin/sendmail.postfix-wrapper /usr/sbin/sendmail.postfix
    
  3. Подождите час и измените sendmail обратно:

    ~# rm -f /usr/sbin/sendmail.postfix
    ~# mv /usr/sbin/sendmail.postfix-bin /usr/sbin/sendmail.postfix
    

Проверьте файл /var/tmp/mail.send. Там должны присутствовать строки, начинающиеся с X-Additional-Header: и указывающие на папки, где находятся скрипты, отправившие сообщения.

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

    ~# grep X-Additional /var/tmp/mail.send | grep `cat /etc/psa/psa.conf | grep HTTPD_VHOSTS_D | sed -e 's/HTTPD_VHOSTS_D//' `

Примечание. Если эта команда не выдала никаких результатов, значит, из папки виртуальных серверов Parallels Plesk не отправлялись сообщения с помощью функции PHP mail().

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

# zgrep -c 'sasl_method=LOGIN' /usr/local/psa/var/log/maillog*
/usr/local/psa/var/log/maillog:221000
/usr/local/psa/var/log/maillog.processed:362327
/usr/local/psa/var/log/maillog.processed.1.gz:308956

Если вы видите необычно большое количество попыток входа, скорее всего, эти учетные записи были взломаны. Эти учетные записи можно попробовать определить следующим образом:

# zgrep 'sasl_method=LOGIN' /usr/local/psa/var/log/maillog* | awk '{print $9}' | sort | uniq -c | sort -nr | head
891574 sasl_username=admin@example.com

Чтобы остановить рассылку спама, измените пароли для взломанных учетных записей и перезапустите службу Postfix.

a914db3fdc7a53ddcfd1b2db8f5a1b9c 56797cefb1efc9130f7c48a7d1db0f0c e0aff7830fa22f92062ee4db78133079 29d1e90fd304f01e6420fbe60f66f838 caea8340e2d186a540518d08602aa065

Email subscription for changes to this article
Save as PDF