[mdk-re] Re: SPAM ((

Mikhail Zabaluev =?iso-8859-1?q?mhz_=CE=C1_alt-linux=2Eorg?=
Вт Ноя 27 01:40:11 MSK 2001


Hello Alexey,

On Mon, Nov 26, 2001 at 03:30:42PM -0800, Alexey Verin wrote:
>
> >>       Мне надо на сервере что нить против spam'a прикрутить. Может кто
> >>       нить поделиться готовыми решениями.     ?
> 
> MZ> Где прикрутить -- на почтовом сервере или на клиенте?
>   написал же на сервере )

Извините, не выспался :) Вот вам зачатки antispam-howto. Комментарии
приветствуются, я хочу сделать из этого недетскую статью.


В postfix есть возможность сверять IP-адреса с DNS-базой блокировщиков
спама типа RBL. Ищите "rbl" в документации Postfix.

На одном из серверов, где у меня есть адрес, почтовый сервер exim
настроен так, что выставляет специальный заголовок в сообщениях,
которые приходят с "засвеченных" в RBL хостов. Пользователь волен
фильтровать сообщения по своему усмотрению. Я изредка делаю grep по
'^(From|Subject):' над папкой, куда у меня сваливаются такие сообщения,
и вижу там только спам. Работает хреновина :)

Но это не спасает от "свежих" спаммеров. Заявляю сразу, молчаливую
фильтрацию я не считаю решением: это не уменьшает объем рассылаемого
спама, а расходы провайдеров на траффик ложатся угадайте на чьи шеи?..
Для активной борьбы у меня есть скрипты, которые по поступившему на
вход сообщению генерируют отчет и отсылают по адресам, указанным в
командной строке. Этими скриптами удобно пользоваться в
Mutt. См. приложенные spam-notify и relay-notify (они отличаются
только текстом сообщений, мне было лень делать один настраиваемый
скрипт :)).

Жалобы нужно слать на адрес провайдера, услугами которого
пользуется спаммер. Вычислить провайдера не так-то просто. Для этого
нельзя пользоваться полем "From:" (или "From" из SMTP-конверта). Нужно
заглянуть в полные заголовки сообщения и найти там поле "Received:",
которое поставил сервер входящей почты вашего провайдера (его имя
стоит после слова "by"). Анализировать нужно адрес, откуда сообщение
было получено (после слова "from"). Если доменного имени нет, или их
указано два, и/или одно получено из строки helo, нужно использовать
истинное имя, которое можно узнать с помощью reverse DNS lookup,
например, командой "dig -x <IP-адрес>" (пакет bind-utils). Иногда DNS
не помогает (на всякий случай можно еще посмотреть подсеть класса С),
но провайдера можно узнать с помощью whois на соответствующем
регистраторе (напр. для Кореи -- whois.krnic.net, для Китая и
остальной Ю.-В. Азии -- whois.apnic.net).  Иногда полезно запустить
traceroute до данного адреса и посмотреть на последние узлы в
цепочке. Узнав доменное имя провайдера, например, bigbuckisp.net,
можно предположить, что адрес для "жалоб и предложений" есть
abuse на bigbuckisp.net. Либо воспользоваться сервисом abuse.net, на
котором есть база таких адресов: "fwhois
bigbuckisp.net на whois.abuse.net". Либо поручить работу самому
abuse.net, отправив жалобу на bigbuckisp.net на abuse.net -- робот будет
пробовать все известные ему адреса и стандартный postmaster, потом
вверх по доменной/провайдерской иерархии, пока не сдастся. Есть другой
автомат-жалобщик, совмещенный с блокировщиком, на spamcop.net.
Говорят, хороший, но лично я от него не добился положительного
результата в те несколько раз, когда пробовал им пользоваться.

Если адрес оператора не реагирует на продолжающиеся протесты с вашей
стороны, но и не отражает сообщения по причине "адресат выбыл/умер/в
списках не значится/ушла на базу", можно взять их измором: настроить
на сервере .procmailrc, чтобы сообщения от спамера, пришедшие через
этого провайдера (тут важно не перебрать с широтой охвата фильтра),
отправлялись на адрес оператора с добавленными комментариями на тему
"что делать". Скрипт по имени spam-forward прилагается.  Можете
представить, что вызывает большее желание решать проблему: письма
живого юзера, который покричит-побранится, да и отстанет, или
неумолимое "automatically generated spam alert" ;) Даже если на том
конце все уходит в /dev/null, польза будет: вы фактически
отфильтровываете спам.

Наконец, можно настрочить кляузу в один из сервисов блокировки спама.
Для оповещения RBL требуется оформлять доклад по строгим правилам
(см. http://www.mail-abuse.org), собирать улики и подшивать к делу
свою переписку с провайдерами. Непросто, но им ведь не хочется
париться в судах и проигрывать дела.

-- 
Stay tuned,
  MhZ                                     JID: mookid на jabber.org
___________
The number of arguments is unimportant unless some of them are correct.
		-- Ralph Hartley
----------- следующая часть -----------
#!/bin/bash
#
# Forwards spam with a complain to one or more destinations supplied
# in the command line.
#

if [ $# == 0 ]; then
	echo "Usage: $0 addr ..." >&2
	exit 1
fi

msgfile="$(mktemp -t spam-notify.XXXXXX)"

# Put the beginning of the message into the temporary file
head -c 8k >"$msgfile"

# Ditch the rest of the message
cat >/dev/null

subject="SPAM ALERT [$(formail -c -x From: < "$msgfile"): $(formail -c -x Subject: < "$msgfile")]"

mutt -s "$subject" -a "$msgfile" "$@" <<EOF
Hello,

I received an unsolicited email message from a host that appears as
belonging to your network. I never requested or subscribed to such
deliveries, and I don't want them to bother me again. A part of the
abusive message, including email headers, is attached herein. I hope
this will provide enough information for you to take steps that
will prevent further abuse.
Thank you for your time.

With best regards,
  Mikhail.
EOF

rm -f "$msgfile"
----------- следующая часть -----------
#!/bin/bash
#
# Forwards spam with a complain to one or more destinations supplied
# in the command line.
#

if [ $# == 0 ]; then
	echo "Usage: $0 addr ..." >&2
	exit 1
fi

msgfile="$(mktemp -t spam-notify.XXXXXX)"

# Put the beginning of the message into the temporary file
head -c 8k >"$msgfile"

# Ditch the rest of the message
cat >/dev/null

subject="RELAY ALERT [$(formail -c -x From: < "$msgfile"): $(formail -c -x Subject: < "$msgfile")]"

mutt -s "$subject" -a "$msgfile" "$@" <<EOF
Hello,

I received an unsolicited message from what appears to be a host in
your network. This host is probably misconfigured to have an open
email relay.  Here I attach the message, including email headers. I
hope this will provide enough information for you to take steps that
will prevent further abuse.  Thank you for your time.

With best regards,
  Mikhail.
EOF

rm -f "$msgfile"
----------- следующая часть -----------
#!/bin/bash
#
# Procmail helper to bounce spam messages.
#
# Usage in procmail:
#
# :0
# * ^From .*\.spammer\.com
# * ^Received: .*\.provider\.net
# | spam-forward -s '[SPAM ALERT] Oops, they did it again' \
#      postmaster на provider.net
#

[ "$SENDMAIL" = "" ] && SENDMAIL=/usr/sbin/sendmail
[ "$SENDMAILFLAGS" = "" ] && SENDMAILFLAGS=-oi

subject='[SPAM ALERT]'
while getopts s: opt; do
    subject="$OPTARG"
done

shift $(( $OPTIND - 1 ))

dest="$*"
if [ -z "$dest" ]; then
    echo "Usage: $0 [-s subject] recipient ... <message" >&2
    exit 1
fi

to_line="${*/%/,}"
to_line="${to_line%,}"

(   cat <<EOF
From: $LOGNAME
To: $to_line
Subject: $subject
X-BeenThere: $LOGNAME@$HOST
Precedence: bulk
MIME-Version: 1.0
Content-Type: text/plain
Content-Transfer-Encoding: 8bit

Hello,

This is an automatically generated spam alert.
Feel free to contact me if you have any issues related to this.
The (partial) listing of the message that triggered it
is included below.


EOF
    head -c 8k
    cat >/dev/null
) | $SENDMAIL $SENDMAILFLAGS $dest


Подробная информация о списке рассылки community