Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Linux и FreeBSD » Программное обеспечение Linux и FreeBSD » spamassassin - пустые письма

Ответить
Настройки темы
spamassassin - пустые письма

Пользователь


Сообщения: 112
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: zelo
Дата: 17-02-2009
Описание: уточнение
Здравствуйте!
После внедрения фильтра 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);
}
Подозреваю что проблема в скрипте, поделитесь пожалуйста любой мыслью, очень нада.....

Отправлено: 09:24, 13-02-2009

 

Пользователь


Сообщения: 112
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 15:31, 17-02-2009 | #2



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

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


Новый участник


Сообщения: 43
Благодарности: 6

Профиль | Отправить PM | Цитировать


а зачем такие сложности, вот же простой howto как связать postfix и SA (spamassassin) : http://www.xnote.com/howto/postfix-spamassassin.html

без всяких усложнений типа localhost:10027

Отправлено: 17:18, 17-02-2009 | #3


Пользователь


Сообщения: 112
Благодарности: 0

Профиль | Отправить PM | Цитировать


Да, я пробовал это, но при такой связке:
Код: Выделить весь код
#!/bin/bash
/usr/local/bin/spamc | /usr/sbin/sendmail -i "$@"
exit $?
...sendmail пересылает письмо снова на постфикс и оно циклится, плюс ко всему, в постфиксе настроены пранспорты, которых sendmail не знает, в частности одним из них является локальный сервис антивируса ClamSMTPd, который принимает почту на 127.0.0.1:10025. Может этого можно избежать? Не знаю как....

Последний раз редактировалось zelo, 18-02-2009 в 11:11. Причина: уточнение


Отправлено: 11:08, 18-02-2009 | #4


Новый участник


Сообщения: 43
Благодарности: 6

Профиль | Отправить PM | Цитировать


ну тогда я бы делал через mailscanner, то есть схема получилась бы такая - postfix отдает на mailscanner, он пропускает через clamd и SA, и возвращает postfix'у. howto на данную тему можно на google найти.

Отправлено: 14:21, 18-02-2009 | #5


Пользователь


Сообщения: 112
Благодарности: 0

Профиль | Отправить PM | Цитировать


Нашёл причину резки писем!
Письма резались если поле получателей содержит больше одного адресата.

Обычно, если получатель один, то скрипт вызывался вот с такими параметрами:
Код: Выделить весь код
"localhost:10027" "spamfilter" "outbox@hotbox.com" "inbox@domain.ru" "/usr/local/bin/spamc"
А если получателей два и более, то с такими:
Код: Выделить весь код
"localhost:10027" "spamfilter" "outbox@domain.ru" "inbox1@domain.ru" "inbox2@domain.ru" "/usr/local/bin/spamc"
В этом случае параметр "inbox2@domain.ru" замещал параметр "/usr/local/bin/spamc" и происходило то о чём я говорил в самом начале...

Друзья! Помогите доработать скрипт!

Отправлено: 10:28, 19-02-2009 | #6


Пользователь


Сообщения: 112
Благодарности: 0

Профиль | Отправить PM | Цитировать


Решено!
Изменил скрипт до такого вида:
Код: Выделить весь код
#!/usr/bin/perl -w
use strict;
use Net::SMTP;
my $host = &sall_ch(shift(@ARGV), '"');
my $ehlo = &sall_ch(shift(@ARGV), '"');

my $spamc       = &sall_ch(shift(@ARGV), '"');
my $mail_from   = &sall_ch(shift(@ARGV), '"');
my $rcpt_to     = &sall_ch(shift(@ARGV), '"');
my $rcpt_to01     = &sall_ch(shift(@ARGV), '"');
my $rcpt_to02     = &sall_ch(shift(@ARGV), '"');
my $rcpt_to03     = &sall_ch(shift(@ARGV), '"');
my $rcpt_to04     = &sall_ch(shift(@ARGV), '"');
my $rcpt_to05     = &sall_ch(shift(@ARGV), '"');
my $rcpt_to06     = &sall_ch(shift(@ARGV), '"');
my $rcpt_to07     = &sall_ch(shift(@ARGV), '"');
my $rcpt_to08     = &sall_ch(shift(@ARGV), '"');
my $rcpt_to09     = &sall_ch(shift(@ARGV), '"');
my $rcpt_to10     = &sall_ch(shift(@ARGV), '"');
my $rcpt_to11     = &sall_ch(shift(@ARGV), '"');
my $rcpt_to12     = &sall_ch(shift(@ARGV), '"');
my $rcpt_to13     = &sall_ch(shift(@ARGV), '"');
my $rcpt_to14     = &sall_ch(shift(@ARGV), '"');
my $rcpt_to15     = &sall_ch(shift(@ARGV), '"');
my $rcpt_to16     = &sall_ch(shift(@ARGV), '"');
my $rcpt_to17     = &sall_ch(shift(@ARGV), '"');
my $rcpt_to18     = &sall_ch(shift(@ARGV), '"');
my $rcpt_to19     = &sall_ch(shift(@ARGV), '"');
my $rcpt_to00     = &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->to($rcpt_to01);
$smtp->to($rcpt_to02);
$smtp->to($rcpt_to03);
$smtp->to($rcpt_to04);
$smtp->to($rcpt_to05);
$smtp->to($rcpt_to06);
$smtp->to($rcpt_to07);
$smtp->to($rcpt_to08);
$smtp->to($rcpt_to09);
$smtp->to($rcpt_to10);
$smtp->to($rcpt_to11);
$smtp->to($rcpt_to12);
$smtp->to($rcpt_to13);
$smtp->to($rcpt_to14);
$smtp->to($rcpt_to15);
$smtp->to($rcpt_to16);
$smtp->to($rcpt_to17);
$smtp->to($rcpt_to18);
$smtp->to($rcpt_to19);
$smtp->to($rcpt_to00);

$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);
}
....смешное конечно решение, но пойдёт :-D

Отправлено: 17:36, 19-02-2009 | #7



Компьютерный форум OSzone.net » Linux и FreeBSD » Программное обеспечение Linux и FreeBSD » spamassassin - пустые письма

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Фильтрация спама в связке Spamassassin + Qmail + Debian Unspammer Программное обеспечение Linux и FreeBSD 1 23-10-2008 19:17
spamassassin прикрутить к postfix zelo Программное обеспечение Linux и FreeBSD 1 18-09-2008 13:01
Spamassassin - сразу удалять письма Napasick Общий по Linux 1 02-07-2008 15:37
FreeBSD 6.2-RELEASE и квест по установке Spamassassin Negativ Программное обеспечение Linux и FreeBSD 2 13-05-2008 15:28
spamassassin не обучается zelo Общий по FreeBSD 1 14-09-2007 14:20




 
Переход