zelo
13-02-2009, 09:24
Здравствуйте!
После внедрения фильтра spamassassin на smtp сервере postfix, появилась особенность - стали приходить пустые письма. Вот пример:
Return-Path: <favoritesa387@visitlanka.com>
Received: from Win-Relay ([10.0.0.3])
by mserv.mydomain.local
for admin@mydomain.ru;
Fri, 13 Feb 2009 02:54:28 +0300
Received: from relay.mydomain.ru ([10.0.0.21])
by Win-Relay (NAVIEG 2.1 bld 63) with SMTP id M2009021302555904113
for <admin@mydomain.ru>; Fri, 13 Feb 2009 02:55:59 +0300
Received: from spamfilter (localhost [127.0.0.1])
by localhost (Postfix) with ESMTP id 0491B4B815
for <admin@mydomain.ru>; Fri, 13 Feb 2009 02:54:28 +0300 (MSK)
Message-Id: <20090212235428.0491B4B815@relay.mydomain.ru>
Date: Fri, 13 Feb 2009 02:54:28 +0300 (MSK)
From: favoritesa387@visitlanka.com
Как видите письмо состоит лишь из поля отправителя.
Подозреваю что вной всему послужил скрипт обеспечивающий связку postfix + spamassassin, ниже описание связки:
# cat /usr/local/etc/postfix/master.cf
...
smtp inet n - n - - smtpd -o content_filter=spamfilter
...
localhost:10027 inet n - n - 33 smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o mynetworks=127.0.0.0/8
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o myhostname=localhost
spamfilter unix - n n - 33 pipe flags=R user=spamd argv=/usr/local/bin/spamcс localhost:10027" "spamfilter" "${sender}" "${recipient}" "/usr/local/bin/spamc"
А это скрипт связки, который принимает письмо от postfix через pipe и возвращает их ему же по протоколу SMTP на порт 10027.
# cat /usr/local/bin/spamcc
#!/usr/bin/perl -w
use strict;
use Net::SMTP;
my $host = &sall_ch(shift(@ARGV), '"');
my $ehlo = &sall_ch(shift(@ARGV), '"');
my $mail_from = &sall_ch(shift(@ARGV), '"');
my $rcpt_to = &sall_ch(shift(@ARGV), '"');
my $spamc = &sall_ch(shift(@ARGV), '"');
if (!defined($host)||!defined($ehlo)||!defined($mail_from)||!defined($rcpt_to)) {
die("use $0 <host> <ehlo> <mail_from> <rcpt_to> [cmd]\n");
}
if (defined($spamc)) {
open(CF, "$spamc |") or undef($spamc);
}
my $smtp = Net::SMTP->new($host);
$smtp->hello($ehlo);
$smtp->mail($mail_from);
$smtp->to($rcpt_to);
$smtp->data();
if (defined($spamc)) {
while(<CF>) {
next if (/^delivered\-to\:/i);
$smtp->datasend($_);
}
}
else {
while(<>) {
next if (/^delivered\-to\:/i);
$smtp->datasend($_);
}
}
$smtp->dataend();
close(CF) if defined($spamc);
$smtp->quit;
exit 0;
############################################################
sub sall_ch($$) {
my($string, $chars) = (shift(), shift());
return(undef) unless defined($string);
$string =~ s/^[\Q$chars\E]+//;
$string =~ s/[\Q$chars\E]+$//;
return($string);
}
Подозреваю что проблема в скрипте, поделитесь пожалуйста любой мыслью, очень нада.....
После внедрения фильтра spamassassin на smtp сервере postfix, появилась особенность - стали приходить пустые письма. Вот пример:
Return-Path: <favoritesa387@visitlanka.com>
Received: from Win-Relay ([10.0.0.3])
by mserv.mydomain.local
for admin@mydomain.ru;
Fri, 13 Feb 2009 02:54:28 +0300
Received: from relay.mydomain.ru ([10.0.0.21])
by Win-Relay (NAVIEG 2.1 bld 63) with SMTP id M2009021302555904113
for <admin@mydomain.ru>; Fri, 13 Feb 2009 02:55:59 +0300
Received: from spamfilter (localhost [127.0.0.1])
by localhost (Postfix) with ESMTP id 0491B4B815
for <admin@mydomain.ru>; Fri, 13 Feb 2009 02:54:28 +0300 (MSK)
Message-Id: <20090212235428.0491B4B815@relay.mydomain.ru>
Date: Fri, 13 Feb 2009 02:54:28 +0300 (MSK)
From: favoritesa387@visitlanka.com
Как видите письмо состоит лишь из поля отправителя.
Подозреваю что вной всему послужил скрипт обеспечивающий связку postfix + spamassassin, ниже описание связки:
# cat /usr/local/etc/postfix/master.cf
...
smtp inet n - n - - smtpd -o content_filter=spamfilter
...
localhost:10027 inet n - n - 33 smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o mynetworks=127.0.0.0/8
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o myhostname=localhost
spamfilter unix - n n - 33 pipe flags=R user=spamd argv=/usr/local/bin/spamcс localhost:10027" "spamfilter" "${sender}" "${recipient}" "/usr/local/bin/spamc"
А это скрипт связки, который принимает письмо от postfix через pipe и возвращает их ему же по протоколу SMTP на порт 10027.
# cat /usr/local/bin/spamcc
#!/usr/bin/perl -w
use strict;
use Net::SMTP;
my $host = &sall_ch(shift(@ARGV), '"');
my $ehlo = &sall_ch(shift(@ARGV), '"');
my $mail_from = &sall_ch(shift(@ARGV), '"');
my $rcpt_to = &sall_ch(shift(@ARGV), '"');
my $spamc = &sall_ch(shift(@ARGV), '"');
if (!defined($host)||!defined($ehlo)||!defined($mail_from)||!defined($rcpt_to)) {
die("use $0 <host> <ehlo> <mail_from> <rcpt_to> [cmd]\n");
}
if (defined($spamc)) {
open(CF, "$spamc |") or undef($spamc);
}
my $smtp = Net::SMTP->new($host);
$smtp->hello($ehlo);
$smtp->mail($mail_from);
$smtp->to($rcpt_to);
$smtp->data();
if (defined($spamc)) {
while(<CF>) {
next if (/^delivered\-to\:/i);
$smtp->datasend($_);
}
}
else {
while(<>) {
next if (/^delivered\-to\:/i);
$smtp->datasend($_);
}
}
$smtp->dataend();
close(CF) if defined($spamc);
$smtp->quit;
exit 0;
############################################################
sub sall_ch($$) {
my($string, $chars) = (shift(), shift());
return(undef) unless defined($string);
$string =~ s/^[\Q$chars\E]+//;
$string =~ s/[\Q$chars\E]+$//;
return($string);
}
Подозреваю что проблема в скрипте, поделитесь пожалуйста любой мыслью, очень нада.....