У меня есть сервер CentOS, на котором работает Exim, со стандартным стеком LAMP. Проблема в том, что существует процесс, который рассылает нежелательные электронные письма, и я не знаю, как определить местонахождение этого процесса. Вот что я сделал:
Я сделал tail /var/log/exim_mainlog
чтобы увидеть, что происходит. Вот некоторые из результатов:
2016-02-14 01:42:00 SMTP connection from (jabosupply.dcr103.com) [255.255.255.255]:33165 closed by QUIT
2016-02-14 01:42:00 1aUlhH-0006fx-UO => cpm147 <lstockings@site1.com> R=localuser T=local_delivery
2016-02-14 01:42:00 1aUlhH-0006fx-UO Completed
2016-02-14 01:42:03 1aUlhL-0006gS-RD <= AmeliaCruz@site2.com H=(site2.com) [255.255.255.255]:54467 P=esmtp S=25154 id=456dfg4.G880UOMSX255.255.255.255@lisalou.vegan$
2016-02-14 01:42:04 cwd=/var/spool/exim 3 args: /usr/sbin/exim -Mc 1aUlhL-0006gS-RD
2016-02-14 01:42:04 1aUlhL-0006gS-RD => cpm147 <duke@site1.com> R=localuser T=local_delivery
2016-02-14 01:42:04 1aUlhL-0006gS-RD Completed
2016-02-14 01:42:04 SMTP connection from (site2.com) [255.255.255.255]:54467 closed by QUIT
2016-02-14 01:42:05 SMTP connection from [255.255.255.255]:40445 (TCP/IP connection count = 5)
2016-02-14 01:42:05 no host name found for IP address 255.255.255.255
2016-02-14 01:42:11 SMTP connection from [255.255.255.255]:58622 (TCP/IP connection count = 6)
2016-02-14 01:42:12 1aUlhU-0006hP-C9 <= GregoryLittle@site3.com H=(site3.com) [255.255.255.255]:48668 P=esmtp S=37419 id=DV59FTL1CMF.gfjh3ufdg45q1111.6603.WE@chimail1.m$
2016-02-14 01:42:12 cwd=/var/spool/exim 3 args: /usr/sbin/exim -Mc 1aUlhU-0006hP-C9
2016-02-14 01:42:12 SMTP connection from (site3.com) [255.255.255.255]:48668 closed by QUIT
2016-02-14 01:42:12 1aUlhU-0006hP-C9 => cpm147 <duke@site1.com> R=localuser T=local_delivery
2016-02-14 01:42:12 1aUlhU-0006hP-C9 Completed
2016-02-14 01:42:17 SMTP connection from [255.255.255.255]:40445 lost
2016-02-14 01:42:17 1aUSE4-0000ZZ-Tp == erika.guerra@fresno.heald.edu R=dkim_lookuphost defer (-1): host lookup did not complete
2016-02-14 01:42:17 1aUj64-0004bS-6P Message is frozen
2016-02-14 01:42:17 1aULQ4-0002bv-Bs Unfrozen by errmsg timer
2016-02-14 01:42:18 1aULQ4-0002bv-Bs ** alisa_mckinney@site4 R=dkim_lookuphost T=dkim_remote_smtp H=smtp.secureserver.net [255.255.255.255]: SMTP error from remote mail server $
2016-02-14 01:42:18 1aULQ4-0002bv-Bs alisa_mckinney@site4: error ignored
2016-02-14 01:42:18 1aULQ4-0002bv-Bs Completed
Пробовал отключить почту для сервера через WHM - успешно, но не навсегда!
Сделано top
чтобы увидеть процессы exim`a. Их может быть от 0 до 1 примерно до 7, с пользователем root
или mailnull
. Таким образом, размещенная учетная запись пользователя не идентифицирована.
Я думаю, что где-то должен быть скрипт PERL или PHP, который запускает это. Мне нужно это идентифицировать. Может ли кто-нибудь помочь мне найти физический источник запущенного скрипта.
P.S. Мой сервер не очень загружен, и ни на одном из сайтов нет почтовых скриптов. Я думаю, что это, должно быть, ввели, поэтому я также меняю пароли. Но моя приоритетная задача - найти это.
Если мне не изменяет память, пользователи cpanel должны выполнить аутентификацию, чтобы отправлять письма. Таким образом, вы должны увидеть поле auth_id в заголовках писем. Я написал небольшой скрипт, который проверяет исходящую очередь eximʻa, находит идентификаторы, которым принадлежит более 50 писем в очереди, и удаляет их. Надеюсь, это будет вам полезно.
#!/usr/bin/perl
#Script for deleting spam mails
use strict;
use warnings;
use Net::OpenSSH;
my $host = $ARGV[0];
my $ssh2 = Net::OpenSSH->new($host,user=>'root',timeout=>600);
my @authids = $ssh2->capture("exiqgrep -i |xargs -I \~ /usr/sbin/exim -Mvh \~ |awk -F'[@ ]' '/auth_id/{print \$NF}' |sort |uniq -c |sort -nrk1");
foreach (@authids) {
my @string = split();
if($string[0] > 50) {
my $header = "count - $string[0] , offender - $string[1]\n";
my $summary = $ssh2->capture("for i in `exiqgrep -i`; do if [[ \"`/usr/sbin/exim -Mvh \$i |awk -F'[@ ]' '/auth_id/{print \$NF}'`\" == \"$string[1]\" ]]; then /usr/sbin/exim -Mvh \$i |awk '/(Subject: |To:|From:)/{print}';fi;done");
print "$summary\n";
print "count - $string[0] , offender - $string[1]\n";
print "Delete [y/n]";
my $line = <STDIN>;
chomp($line);
if($line eq "y") {
print "Prepairing to delete\n";
$ssh2->capture("for i in `exiqgrep -i`; do if [[ \"`/usr/sbin/exim -Mvh \$i |awk -F'[@ ]' '/auth_id/{print \$NF}'`\" == \"$string[1]\" ]]; then /usr/sbin/exim -Mrm \$i;fi;done") or die "remote command failed: " . $ssh2->error;
print "Deleted\n";
}
} else {
last;
}
}