Так понимаю, что спам, обычно отправляется с одноразовых ip (из диапазона провов). Так, можно запрещать, общение с такими ip-ями, для которых нет PTR в dns записи (reject_unknown_client) но это приводит к тому, что некоторые "номальные" отправители отпинываются.. пришлось убрать...
(а может стоило определенные "плохие" но "нужные" ip сделать типа trusted)Или вот: (извне) MAIL FROM:some@[192.168.0.1] - проходит :((
...принимает если укзать MAIL FROM:some@[213.24.121.145] (хотя при этом этот ip реально опущен ...)то ли сложные филтры писать? (bahs, rehexp... etc)
В общем, уважаемый All, поделитесь, пожалуйста, как бороться... (еще раз - у меня postfix)
Спасибо за внимание!
С уважением, Camb.
Postfix + amavis + spamassasinhttp://www.ordb.org/faq/#usage_postfix
http://spam.abuse.net/adminhelp/
http://mail-abuse.org/rbl/usage.htmlсоздаешь в своей зоне rbl,dnsbl,dul и тд и тп все что хочешь и
можешь заносить туда свою клиентуру и скачивать зоны с внешних free-rbl
или dnsbl серверов, пишешь нужные автоматы и пользуешь свой dns в
maps_rbl_domains
В своих картах правишь все как хочешь.PS. Без PTR я обычно почту не принимаю, разве что если приходит
официальный запрос на разрешение пропускать с такого-то mx без реверса
Извините за очень длинное письмо, но тема уж больно интересная.
---
Я сам сейчас сейчас пробую разные подходы для решения этой проблемы.
Выработать универсальные рекомендации - сложно,
поскольку специфика работы разных организаций/пользователей (а также цели, политика и т.д.) -
разные. Да и характер спама, приходящего в разные места - разный.
То что можно сделать в одном случае - не пройдёт в другом.Например, на одном полюсе такая ситуация -
есть контора, кот. использует email для деловой переписки
внутри фирмы и для общения с узким кругом партнёров -- в этом случае можно
пропускать только письма с "известных" адресов (email, IP etc.) и резать
все остальные.На другом полюсе такая --
приёмная комиссия университета или PR - отдел - они по роду
работы должны держать свои адреса "открытыми для всех" - даже в
рекламной информации может быть что-то интересное или полезное.Самый эффективный подход, ( и по моему мнению, по возможности, нужно идти
на такие жёсткие ограничения) -- это как раз определять для почтового адреса "узкий круг"
известных адресов и резать всё остальное (например, для себя, если возможно создавать "закрытые"
адреса, на которых я общаюсь с узким кругом людей и которые нигде никогда не светятся и
"публичные" (возможно, временные) адреса, которые можно сообщать новым людям, оставлять для
регистрации и т.д., и которыми можно легко пожертвовать).
Если это, по каким-то причинам не возможно, приходится использовать смешанные
стратегии борьбы со спамом:1) фильтрация по ip, доменам и т.д - статический список или динамический,
кот. будет автоматически обновляться из Internet (напр. RBL другие списки на основе DNS) --
но в моём случае это работает частично - я поддерживаю и свой статический список адресов и
шаблонов адресов и доменов, с которых регулярно приходят "левые" письма, но использовать
публичные списки спаммеров из Internet не могу, поскольку в них, как правило, "светятся" все
публичные mail - сервера типа hotmail.com, а мы получаем много писем с таких адресов.Есть вариант, который используется и у меня - поддерживать базу данных адресов,
с которых разрешено принимать почту. Если приходит сообщение с адреса, которого
нет в базе - письмо остаётся в очереди почтового сервера, а отправителю автоматичеки посылается
письмо с уникальным ключём с просьбой подтвердить отправленое письмо.
Если человек отвечает, его адрес автоматически
добавляется в базу и письмо из очереди доставляется адресату.
Если ответа нет - через некоторое время письмо просто удаляется из очереди.
Подход достаточно эффективный, основан на том, что ответа с обратного
спаммерского адреса не будет.Недостатки - в идеале каждый сам должен контроллировать свою базу разрешенных адресов
(т.е. если я - admin, мне сложно установить это незаметно и для всех - надо
учить пользователей, как с этим обращаться).
Но проблемы связаны практически только с рассылками.
Например, если я подписываюсь на список рассылки, я должен руками в базу добавить
адрес, с которого будет приходить расылка, иначе ничего не будет доходить,
т.к. ответа с подтвержением с рассылочного сайта тоже не будет.
Так что, в принципе, можно людей предупреждать, что если они на что-то
подписываются - пусть сообщают admin-у, или приходить ничего не будет.Реализовать это можно при помощи напр. tmda (http://tmda.sourceforge.net/)
или qconfirm (http://smarden.org/qconfirm/).
2) использовать всякие характерные черты спаммерских писем для его определения и блокирования -
например использовать tarpitting и т.д. (imho мало эффективно)3) использовать напр. регулярные выражения для анализа письма целиком (мало эффективно) -
лучше использовать пакет, который может обучаться/настраиваться, например на основе
нейронных сетей (к сожалению, ничего такого готового не нашёл, но читал, что люди работают,
и может быть, что-то уже и есть),
или на основе статистического анализа - алгоритм Баеса (автор идеи Paul Graham, http://www.paulgraham.com/spam.html -
стоит прочитать - очень интересно).
Я поставил такой у себя, пока в тестовом режиме, http://sourceforge.net/projects/bmf/.
Проблема с такими средствами в том, что их нужно обучать и контролировать, т.е. они после анализа
помечают письмо как спам или как не-спам и далее с ним что-то делают. Но они могут делать ошибки и
им надо указывать, что такое-то письмо, помеченное как спам, спамом не является (или наоборот),
что-бы этот пакет изменил свои настройки (обучение).
Проблема в том, что я не могу подстраивать bmf для других пользователей
т.к. не могу просматривать чужую почту,
поэтому установить такую систему на все почтовые ящики сервера сложно.
В идеале каждый должен работать с таким фильтром сам и обучать его сам -
но для этого нужно обучать пользователей, а это сложно, а иногда и не возможно.Вообще хороший обзор пакетов для борьбы со спамом и источники информации
можно найти на http://www.qmail.org/top.html#spam
> Извините за очень длинное письмо, но тема уж больно интересная.
>...Что Вы посоветуете в такой ситуации: письма приходят пользователям но с другими адресами.
Например, на gemini@savatex.kiev.ua приходят письма адресованные Director@savatex.kiev.ua, причем не только Director...
Ниже выборка сообщений из форума, в которых lavr делится своими рекомендациями по борьбе со спамом:http://www.opennet.me/openforum/vsluhforumID1/17285.html#2
http://www.opennet.me/openforum/vsluhforumID1/21911.html
http://www.opennet.me/openforum/vsluhforumID1/19124.html#1
http://www.opennet.me/openforum/vsluhforumID1/21911.html#3
http://www.opennet.me/openforum//vsluhforumID1/26405.html
http://www.opennet.me/openforum/vsluhforumID1/25976.htmlhttp://www.opennet.me/cgi-bin/opennet/ks.cgi?mask=spam+relay...
------------------------------
Несколько выборок по блокирвке спама в sendmail от lavr:http://unix1.jinr.ru/~lavr/webmail/sendmail_common.mc
DNSBL, RHSBL если 8.12.x (extended dnsbl)
или создай на основе своего DNS
Все ссылки и указания в sendmail_common.mc, там
найдешь русский проект, почитай и сделай как указано, про named-based метод вместо DNSBL тоже
по ссылкам описано как делатьмне пока хватает:
dnl ORDB Anti-Spam Database http://www.ordb.org/
dnl FEATURE('dnsbl', 'relays.ordb.org', 'Spam bloked - see http://ordb.org/')dnl
FEATURE('dnsbl', 'relays.ordb.org', 'Spam bloked - see http://ordb.org/')dnl
dnl ORBZ Anti-Spam Database http://orbz.org/sysadmin-lightside.php
FEATURE(dnsbl,'inputs.orbz.org', 'Input Spam bloked - see http://orbz.org/')dnl
dnl uncomment below for filter output mail/lavr
dnl FEATURE(dnsbl,'outputs.orbz.org', 'Output Spam bloked - see http://orbz.org/')dnl
dnl SPAMCOP - http://spamcop.net/bl.shtml
FEATURE(dnsbl,'bl.spamcop.net', 'Spam blocked - see http://spamcop.net/bl.shtml?$&{client_addr}')dnl
dnl DNSBL - http://www.dnsbl.org/ - DNSbl
FEATURE(dnsbl,'ex.dnsbl.org', 'Spam bloked - see http://www.dnsbl.org/')dnl
dnl OSIRUSOFT - http://relays.osirusoft.com/ - union anti-spam databases dnl Five in One, see below
FEATURE(dnsbl, 'relays.osirusoft.com', 'Spam bloked - see http://relays.osirusoft.com/')dnl
...
define('confMAX_HEADERS_LENGTH',16384)
define('confMAX_MIME_HEADER_LENGTH', '256/128')
define('confNO_RCPT_ACTION', 'add-to-undisclosed')
define('confPRIVACY_FLAGS', 'authwarnings,noexpn,novrfy,noetrn')
...
define('confMAX_RCPTS_PER_MESSAGE', '25') - максимальное число получателей, поставь сколько считаешь нужным, например 10
...MAX_HEADERS и MAX_MIME - чтобы в через заголовки не засирали спамом
а как на счет MTA Postfix?пока что то не попдались статьи...
спасибо за любую помощь...
>а как на счет MTA Postfix?
>пока что то не попдались статьи...http://www.opennet.me/cgi-bin/opennet/ks.cgi?mask=postfix+spam
А что делать в Sendmail 8.9.3?
Здесь такое похоже не проходит:FEATURE('rbl','relays.ordb.org')dnl
FEATURE('rbl','inputs.orbz.org')dnlВ полученном .cf-файле присутствует только последнее правило, а все предыдущие rbl'ы теряются.
Речь идет о фильтрации на стороне провайдера.1. Есть большое количество спорных хостов, которые для одного пользователя могут быть полезны, а для другого вредны. Например я без каких либо разбирательств немедленно отправляю в REJECT весь домен любую рассылку! В том числе spylog который просто разослал инфу тем кто зарегистрировал у них счетчики, дебильных менеджеров softline.ru, и т.д. Другим клиентам письма с этих адресов могут быть полезны...
Вывод: нужен ~/access
Не встречал ли кто код для .cf заставляющий сендмайла обрабатывать персональные access в home-каталоге юзверя?
То есть, получил RCPT TO, отрезольвил по virtusertable и aliases, посмотрел общий access и потом еще ~/access
Было бы очень полезно...
procmail просьба не вспоминать, письма принимаются и уничтожаются
создавая ненужный траффик :-( Отшибать надо еще при приеме заголовка.2. Замечено что на некоторых письмах подпадающих под REJECT по получателю или под user unknown - sendmail пишет в лог size=некий_размер...
Это что, посылка DATA перед RCPT TO?
Можно пофиксить что бы при попытке послать DATA перед RCPT TO тут же отфудболивало не принимая лишний траффик?
На кривые MTA мне плевать.
>1. Есть большое количество спорных хостов, которые для одного пользователя могут быть
>полезны, а для другого вредны.Мне кажется, что на самом деле принять решения гораздо проще: блокируем только если поступила жалоба на приходи инфомрации на которую пользователь явно не подписывался собственными руками, или подписался и не может отписаться, spylog к таковым отнесен быть не может. Плюс желательно подождать пока придет ответ на abuse@, если ответа нет - заносим IP (или всю подчиненную этому abuse@ сеть) в список блокировки.
>Не встречал ли кто код для .cf заставляющий сендмайла обрабатывать персональные access
>в home-каталоге юзверя?Собственными силами пишется milter фильтр смотрящий на наличие ~/.access или проще блокировать через procmail. Для экономии трафика, нужно рассматривать факт блокировки на этапе до посылки DATA, т.е. патчить sendmail.
>procmail просьба не вспоминать, письма принимаются и уничтожаются
>создавая ненужный траффик :-( Отшибать надо еще при приеме заголовка.Вот-вот, остается патчить sendmail или смотреть в сторону фильтров в postfix.
>2. Замечено что на некоторых письмах подпадающих под REJECT по получателю или
>под user unknown - sendmail пишет в лог size=некий_размер...
>Это что, посылка DATA перед RCPT TO?
>Можно пофиксить что бы при попытке послать DATA перед RCPT TO тут
>же отфудболивало не принимая лишний траффик?DATA никакой MTA без предварительного RCPT TO принимать не будет, могут просто мусора накидать или начать перебирать RCPT TO.
>DATA никакой MTA без предварительного RCPT TO принимать не будет, могут просто
>мусора накидать или начать перебирать RCPT TO.А это? Или в данном случае в лог попадает не фактическая длина тела письма, а то что было предъявлено в SIZE HELO-сессии?
Feb 28 09:37:59 people sendmail[28506]: h1S7bp6U028506: <btrade@people.dn.ua>... User unknown
Feb 28 09:38:00 people sendmail[28506]: h1S7bp6U028506: from=<galina@nd.ru>, size=158144,
class=0, nrcpts=0, proto=ESMTP, daemon=MTA, relay=[62.141.70.170]
>А это? Или в данном случае в лог попадает не фактическая
>длина тела письма, а то что было предъявлено в SIZE HELO-сессии?Приведи все сообщения с id h1S7bp6U028506, самое вероятное, что письмо было сразу нескольким локальным пользователям и один из них "User unknown". Ты уверен, что отлуп происходит до DATA ? Похоже что DATA проходит и, уже закачавшись, блокируется фильтром, в size по идее должен быть реальный размер.
[ul@ mority]# telnet themail.ru 25
Trying 195.58.55.244...
Connected to themail.ru.
Escape character is '^]'.
220 bluehosting.net ESMTP Sendmail 8.11.1/8.11.1; Wed, 5 Mar 2003 10:28:28 +0300 (MSK)
HELO test
250 bluehosting.net Hello mority [192.168.1.16], pleased to meet you
MAIL FROM: test@mail.ru
250 Ok
RCPT TO: test1234333@themail.ru
550 <test1234333@themail.ru>: User unknown
DATA
554 Error: no valid recipientsВ логах только reject, без size=, размер будет только в случае прохождения хотябы одного RCPT TO
>Приведи все сообщения с id h1S7bp6U028506, самое вероятное, что письмо было сразу нескольким локальным пользователям и один из них "User unknown".Проверил несколько случаев, две строчки как в примере, получатель один.
То есть ситуация стабильна, в одних случаях size=0, в других некое число.> Ты уверен, что отлуп происходит до DATA ? Похоже что DATA проходит и,
> уже закачавшись, блокируется фильтром, в size по идее должен
> быть реальный размер.Влез телнетом, DATA перед RCPT TO не принимает, после неверного RCPT TO
тут же об этом говорит и DATA не принимает.
Загадка...
Сниффер что ли вешать?Кстати, узрел еще одну интересную особенность...
При ответе на EHLO (протокол ESMTP) MTA в том числе говорит
250-SIZE xxx
где xxx - максимальный размер письма в байтах задефайненый в .cf
Какого спрашивается черта, писатели почтовых клиентов не пользуют эту фичу? Любимый Зе-мыш (естественно безуспешно) пытается вгоняет на релай письма в десятки метров длинной не смотря на ограничение :-(
>Влез телнетом, DATA перед RCPT TO не принимает, после неверного RCPT TO
>тут же об этом говорит и DATA не принимает.
>Загадка...
>Сниффер что ли вешать?Судя по всему это самый простой способ определить в чем кроется загвоздка.
Извиняюсь, это понты, вот как оно происходит:EHLO people.dn.ua
250-people.dn.ua Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE 3000000
250-DSN
250-ETRN
250-DELIVERBY
250 HELP
MAIL FROM:<root@localhost> SIZE=5555
250 2.1.0 <root@localhost>... Sender ok
RCPT TO: ffff@people.dn.ua
550 5.1.1 ffff@people.dn.ua... User unknown
QUIT
221 2.0.0 people.dn.ua closing connectionMar 6 23:22:36 people sendmail[96956]: h26LLkKS096956: from=<root@localhost>, size=5555,
class=0, nrcpts=0, proto=ESMTP, daemon=MTA, relay=localhost [127.0.0.1]Как я и предполагал, sendmail в этом случае пишет в лог не фактическую
длину, а задекларированную удаленным MTA в MAIL FROM
>Как я и предполагал, sendmail в этом случае пишет в лог не
>фактическую длину, а задекларированную удаленным MTA в MAIL FROMЧто я могу сказать, еще одно подтверждение, что не зря я уже 4 года как полностью избавился от sendmail на своих почтовых серврах.
Помогите правильно записать в sendmail.cf проверку темы письма!
Нужно режектить письма у которых в Subject: есть несколько пробелов подряд, но если в приведенном ниже примере xxx заменить на три пробела - sendmail отфутболивает письма содержащие в теме хотя бы один пробел :-(LOCAL_RULESETS
HSubject: $>CheckSubject
SCheckSubject
R$*xxx$* $#error $@ 5.7.1 $: "554 Antispam policy!"Появился новый спам, рассылается с разных IP-шников в разных сетях (дешевый ADSL за бугром), адрес отправителя всегда разный в формате случайный_набор_букв@реальный.домен, контактная информация содержит только телефоны (в Москве). Единственный способ опознания - в конце темы несколько пробелов подряд, и за ними несколько случайных символов.
Задолбали уже! :-(
> Помогите правильно записать в sendmail.cf проверку темы письма!Kparse_subj regex -a<SPAM> [ ]{5,}[a-zA-Z0-9]+$
HSubject: $>+CheckSubject
SCheckSubject
R$* $: $(parse_subj $1 $)
R<SPAM> $#error $@ 5.7.1 $: "554 Antispam policy!"
>>Как я и предполагал, sendmail в этом случае пишет в лог не
>>фактическую длину, а задекларированную удаленным MTA в MAIL FROM
>
>Что я могу сказать, еще одно подтверждение, что не зря я уже
>4 года как полностью избавился от sendmail на своих почтовых серврах.
>пару вопросов:
- как добавить friend domains в постфикс?
- какие rbl ты используешь?Спасибо!
sendmail 8.12.11 принимает почту от левых хостов (не перечисленных как RELAY в access), которые предъявляют мне в MAIL FROM: мой же домен!
То есть:
MAIL FROM: <мой_юзверь@мой_домен>
RCPT TO: <мой_юзверь@мой_домен>
По моему это безобразие!
Чем бы побороть?
Что то не пойму,
LOCAL_CONFIGKdsl7 regex -a@MATCH test\.people\.dn\.ua
так работает,Kdsl7 regex -a@MATCH test\.people\.dn\.ua$
а так правило не срабатывает :-(
Где грабли?
Как в данном случае правильно указать конец строки в regex($)?дальше написано
LOCAL_RULESETS
SLocal_check_relay
R$* $: < $&{client_name} >
R$* $: $(dsl7 $1 $)
R@MATCH $#error $@ 5.7.1 $: "554 test"
На сервере (slackware 9.1) установлен Postfix. На этом же сервере стоит Samba. Что нужно изменить в настройках Postfix, чтобы при поступлении нового письма он смотрел в файл, где имеется соответствие почтового адреса получателя и NetBios имени Windows-машины, и выполнялась например команда:
echo "Пришла почта" | smbclient -M "NetBios имя Windows-машины"
MTA = sendmail
в конфиге прописано:FEATURE(dnsbl, `blackholes.five-ten-sg.com',`550 I not recive SPAM!!!-1')dnl
FEATURE(dnsbl, `cbl.abuseat.org',`550 I not recive SPAM!!!-2')dnlнесколько адресов распознаются как спамерские.
подскажите, пожалуйста, как соорудить для них исключения?
т.е. чтобы сервер мог принимать от них почту несмотря на положительный результат проверки?Спасибо!
Месяц назад я попробовал новый почтовик XMail v 1.21 /все в одном флаконе, smtp, pop3, imap и т.д. http://www.xmailserver.com /.
Заработало через 5 мин. после подстройки конфига, все достаточно ясно и прозрачно. Для машины выделил несколько доменов, на которые из-за особенностей их владельцев сыпалось довольно много спама /точнее - только спам/.
Основной сервер работает с MTA sendmail и его пока трогать боязно, т.к. об XMail практически нет никаких отзывов, а которые есть, часто путают с одноименной программой под X11-unix. Так вот - спам полился широкой речкой...
Идеи, которые заложены в статье http://www.anrb.ru/linux/regex.html были реализованы уже давно, помогали конечно, но недостаточно.В xmail есть возможность обрабатывать письма на стадии соединения - делается это просто: название фильтра включается в файл filters.pre-data.tab, в котором указывается внешняя программа обработчик.
Короче, взяв в руки логи, за пару дней написал собственный фильтр-обработчик писем. За основу был взят тезис, что нормальный почтовый сервер должен иметь нормальные атрибуты.
а теперь bash и регекспы...конспективно
Фильтру на вход передаются два параметра File=$1 и RemoteAddress=$2
1. Отсекаем локальные адреса
if [ "$RemoteAddress" == "127.0.0.1" ]; then exit; fi2. Whitelist - список своих левых адресов /правые и так проходят нормально :-) /
Found=`cat /var/XMailRoot/filters/whitelist.ip|grep $RemoteAddress|wc -l|sed -e 's/ //g'`3. Определяем обратную запись
Relay=`dig -x $RemoteAddress | grep PTR |grep in-addr.arpa.| awk '{print $5}'`--- a теперь начинаем резать ---
4. Считаем минусы в имени: 2-допустимо, больше - режем...
Minuses=`echo "$Relay" | sed -e 's/[a-z A-Z 0-9 .]*//g' | wc -m|sed -e 's/ //g'`5. Считаем группы цифр: режем, ежели больше трех...
DigGroups=`echo "$Relay" | sed -e 's/[0-9]\{2,\}/+/g' -e 's/[a-z A-Z]//g' -e 's/-//g' -e 's/\.//g' -e 's/[0-9]//g' | wc -m|sed -e 's/ //g6. Скурпулезно считаем точки: у порядочного сервера больше трех не бывает.../или я не прав?/
Dots=`echo "$Relay" | sed -e 's/[0-9 a-z A-Z -]//g' | wc -m|sed -e 's/ //g'`7. И последнее, проверяем на "неприличные" слова из списка
BadWords="dsl. dslam. dial cable. ppp dhcp pool node dyn- host- host. home. dynamic try user client customer \-gw. modem dynip bbtec"Заработало практически сразу, я даже числа знаков и точек не подбирал.
Спам конечно проходит, но это уже единицы, и их можно обработать руками.
Итог работы: за 15 дней июля на сервер пришло 5557 запросов на доставку /100%/
Из них, отвергнуто без обработки 2799 /50%/ по списку "spammers.tab", составленному по логам работы этого фильтра - это так называемый рецидив;
1008 /18%/ писем сервер отверг по внешним спамерским спискам. Статистика такова: из 17 прописанных серверов реально работают только пять
list.dsbl.org 727
bl.spamcop.net 249
sbl.spamhaus.org 25
dul.ru 6
relays.ordb.org 11346 /24%/ писем сервер отверг благодаря работе фильтра. Это т.н. новые спам-письма Из них:
566 - не прописан ДНС;
442 - слишком много минусов;
241 - много точек;
73 - группы чисел;
24 - из списка слов.пример из лога для каждого случая:
2005-07-11 03:26:27 58.19.43.13 No DNS entry
2005-07-11 03:26:27 201.2.154.46 Minuses=3 201-002-154-046.osrce204.dial.brasiltelecom.net.br
2005-07-11 03:35:27 195.5.144.26 Dots =3 ppp-144-26.dialup.metrocom.ru
2005-07-11 04:03:47 200.124.28.78 DigGroups=7 cm-200.124.28.78.cableonda.net.28.124.200.in-addr.arpa.
2005-07-04 10:30:31 195.98.67.39 Bad Word uas1-pool-39.vrn.ru.Через фильтры просочилось 404 письма, из них 15х24=360 - это служебные, ежечасно отправляемые с самого сервера отчеты.
Выводы: система фильтрации "пропустила" 100%*(404-15*24)/(5557-15*24)=0,85% спам-писем, о чем честно сделала записи в логах, типа
2005-07-13 10:45:02 195.208.235.29 Pass thru... relay02.infobox.ru.Мне кажется, что данный алгоритм можно использовать и для других MTA.
Двигаемся дальше...
Классно! А как сделать такую же тему на сендмэйле? Или невозможно?
Сам недавно настраивал сендмэйл, спам валился как из ведра, подключил списки RBL, стал проверять helo (мой ип, мой хост, неправильное имя) - спаму почти не стало, но всё равно просачивается.
Вот если б еще прикрутить сюда проверку на "плохие слова", типа adsl, ppp и т.п., ну и точки бы посчитать - было б классно.
Вот же параноик!!! gw. -то чем тебе не угодило?
Определение обратной записи предлагаю заменить на
Relay=`dig -x $RemoteAddress +noquestion +noauthority +noadditional +nocomments +nostats +nocmd | grep PTR -m 1 | awk '{print $5}'`
Это избавит от двух ошибок:
1) для одного ip несколько PTR
2) когда PTR является алиасом на запись не содержащую in-addr.arpa.