5.1.4 Как определить кто шлет спам на VPS/Dedicated. Блокировка почты для отдельного сайта

Практически па всех наших серверах мы используем для отправки почты сервис под названием Exim.

Exim — это так называемый MTA (Mail Transfer Agent), агент передачи сообщений, в просторечии - почтовик или почтовый сервер, использующийся во многих операционных системах семейства UNIX.

У каждого письма, которое проходит через почтовый сервис есть свой идентификатор или по-другому уникальный номер письма. Идентификаторы сообщений в очередях Exim, представляют из себя буквенно-цифровые последовательности в верхнем и нижнем регистра, например “1TrXS1-0003SL-3h”, и используются большинством команд администрирования очереди и логгирования в Exim.

Базовые комадны для работы с Exim

Теперь рассмотрим краткий список команд SSH по управлению почтой и почтовой очередью.

Важно: Все команды нужно выполнять от root и они доступны только для VPS/Dedicated.

Вывести количество сообщений в почтовой очереди (то, что мы видим в мониторинге): exim -bpc

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

  1. exim -bp

Пример такого списка:

4h 791 1TrXgs-0004t8-0W noelle_foreman@artemida2012.kiev.ua 
bbyy@aol.com 

4h 1.8K 1TrXgu-0004tZ-5w 
noelle_foreman@artemida2012.kiev.ua 

Соответственно идентификаторы этих двух сообщений: 1TrXgs-0004t8-0W и 1TrXgu-0004tZ-5w.

Во всех представленных примерах [id] - это уникальный идентификатор нужного Вам письма. Удалить сообщение из очереди:

  1. exim -Mrm [id]

(Пример: exim -Mrm 1TrXgs-0004t8-0W, удалит из очереди сообщение с переданным идентификатором)

Просмотреть заголовки сообщений:

  1. exim -Mvh [id]

Просмотреть тело сообщений:

  1. exim -Mvb [id]

Просмотр логов сообщения:

  1. exim -Mvl [id]

Удалить все заблокированные сообщения в почтовой очереди:

$ exipick -z -i | xargs exim -Mrm

Удалить все сообщения из почтовой очереди, где домен отправителя domain:

  1. exipick -f @domain -i | xargs exim -Mrm

Удалить все сообщения из почтовой очереди, где домен получателя domain:

  1. exipick -r @domain -i | xargs exim -Mrm

Удалить все сообщения из почтовой очереди:

  1. exipick -i | xargs exim -Mrm

Если в очереди несколько сотен тысяч сообщений, быстрее будет выполнить удаление очереди командами:

  1. rm -rfv /var/spool/exim4/input/
  2. rm -rfv /var/spool/exim4/msglog/

Как определить откуда идет рассылка спама на сервере

Теперь рассмотрим как найти кто и каким образом рассылает спам на сервере и как это заблокировать?

Для этого необходимо выполнить следующую цепочку команд.

1. Вывести список сообщений в почтовой очереди с помощью команды

  1. exim -bp

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

3. Если спам идет со взломанного почтового ящика - отключить его, либо сменить пароль ящика в его свойствах в разделе Почтовые ящики.

Если спам идет с CRON-задания - удалить такое задание в разделе Планировщик Cron

Если спам отправляется сайтом - Найденный WWW-домен нужно либо заблокировать, либо заблокировать почту для этого WWW-домена. Cайт при этом будет работать - не работать будет только почта, отправленная скриптом PHPmail - для режимов работы PHP CGI и PHP Apache это делается по разному:

  • для режима php apache в общем конфиге apache2 (/etс/apache2/apache2.conf) сервера под rootнайти блок Virtualhost нужного домена и в строчке
php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f 

сменить в пути /usr/sbin/sendmail слово sendmail на sendmoil. Либо сделать таr же в разделе WWW-домены в свойствах конфига apache2. После этого нужно перезагрузить сервис apache2 чтобы изменения вступили в силу. После этого PHPmail только для этого сайта и только в режиме PHP Apache работать не будет и скрипты не смогут рассылать письма.

  • для режима PHP CGI под пользователем-владельцем сайта в файле php-bin/php.ini в строчке
sendmail_path = "/usr/sbin/sendmail -t -i -f

меняем в пути /usr/sbin/sendmail слово sendmail на sendmoil. При этом перезагружать ничего не нужно и указанная блокировка будет распространятся на ВСЕ WWW-домены данного пользователя, которые работают в режиме PHP CGI, а не на какой-то конкретный.

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

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

Если определить кто шлет спам с помощью очереди не удалось, можно воспользоватся еще несколькими командами:

  1. tail -n 1000 /var/log/nginx/access.log | grep POST

Выведет список POST-запросов всех сайтов, в которых можно определить вредоносный файл, который генерирует рассылку.

Также рассылку могут делать подключившись по SSH. Для определения взломанного пользователя воспользуйтесь командой:

  1. ps axu | grep ssh

Которая выведет все SSH-подключения к серверу. Затем наберите команду:

  1. w

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

Команда

  1. killall -u user

закроет все открытые SSH-соединения пользователя user.

Если вместо логина пользователя указаны цифры либо FTP-аккаунт пользователя, которого в Пользователях не видно, найти можно в файле /etc/group либо /etc/passwd.

Также скрипт рассылки может быть в папках tmp и var/tmp - эти папки также стоит проверить и почистить.

Еще рассылать спам можно запуская скрипты через cron. Быстро просмотреть все cron всех пользователей можно в папке /var/spool/cron/crontabs.

Также, бывает что отправителем спама указаны разные несуществующие ящики на вашем почтовом домене - это также один из методов рассылки. Для того, чтобы предотвратить появление таких писем, нужно в свойствах Почтового домена установить в поле Действие по умолчанию “Игнорировать и удалить”.

Если на сервере установлен не Exim a postfix, можно воспользоваться следующими командами.

Вывод почтовой очереди:

  1. mailq

Чистка почтовой очереди:

  1. postsuper -d ALL

Также, в панели управления ISPManager4 для работы с почтовой очередью есть возможность установить и использовать плагин, который называется Почтовая очередь. Установить плагин можно только из под root в разделе Плагины – нажмите Установить справа вверху, из списка выберите ispmque и установите его. После этого обновите панель управления и в разделе Инструменты появится новый раздел Почтовая очередь. В этом разделе можно полностью просматривать всю очередь и все записи каждого письма в очереди, а также чистить очередь и повторять отправку отдельных писем, то есть по сути все то же что и описанным выше методом по SSH.