Насколько правильно использовать следующий набор правил для отлова bad HELO ?SLocal_check_mail
R$* $:$1 $| <$&{auth_authen}>
R$* $| <$+> $:$1
R$* $| <$*> $:$1 $| <[$&{client_addr}]>[$&s]
R$* $| <$=w>[$*] $:$1
R$* $| <[0]>[$*] $:$1
R$* $| <[$-.$-.$-.$-]>[$*] $:$1 $| <$( access $2.$3.$4.$5 $:[$2.$3.$4] $)>[$6]
R$* $| <RELAY>[$*] $:$1
R$* $| <[$-.$-.$-]>[$*] $:$1 $| <$( access $2.$3.$4 $:[$2.$3] $)>[$5]
R$* $| <RELAY>[$*] $:$1
R$* $| <[$-.$-]>[$*] $:$1 $| <$( access $2.$3 $:[$2] $)>[$4]
R$* $| <RELAY>[$*] $:$1
R$* $| <[$-]>[$*] $:$1 $| <$( access $2 $:[$2] $)>[$3]
R$* $| <RELAY>[$*] $:$1
R$* $| <[$*]> $=w $#error $@5.7.1 $:"550 Access denied - bogus HELO " $&s
R$* $| <[$*]> [$=w] $#error $@5.7.1 $:"550 Access denied - bogus HELO " $&s
R$* $| <[$*]> [$+.$+] $:$1
R$* $| <[$*]> [$*] $#error $@5.7.1 $:"550 Access denied - bogus HELO " $&s
неужели ни у кого нет мнения ?
Уточни вопрос.
Правильно ли написаны правила или корректно ли блокировать badHELO именно таким образом?Похоже, ты использовал правила Neil W Rickert, добавив проверку на access?
>Уточни вопрос.
>Правильно ли написаны правила или корректно ли блокировать badHELO именно таким образом?
Правильность я протестировал (sendmail -bt и т.д.). Ошибки были, но я их сразу исправлял. На форуме я привел окончательный вариант. Если кто-нибудь потестит набор правил, я буду только рад.
да и...корректно ли блокировать bad HELO именно так ?
>
>Похоже, ты использовал правила Neil W Rickert, добавив проверку на access?
совершенно верно (в 10-ку). Т.к. класс $=R в ходе проверок всегда оказывается пустым (хотя в o'reilly - sendmail, 3rd edition написано "The class $=R holds as its list of values the host and domain names that sendmail should allow mail to be relayed to. This $=R class should not be used directly because it could change without notice in future versions of sendmail."), я решил использовать access.
> Если кто-нибудь потестит набор правил, я буду только рад.
Я использую почти такой же набор, только без проверки access:
исторически так сложилось, что использую для разрешения релея только relay-domains. Хотя в книге и не рекомендуется его использовать, но, согласись :),выгода есть: одно правило на проверку $=R или несколько правил на проверку access...
И везде, где встречаются правила на блокировку плохого helo, они выглядят приблизительно так же (обычно попроще). У тебя, можно сказать, полный набор исключений предусмотрен.>да и...корректно ли блокировать bad HELO именно так ?
Ну, по крайней мере, когда Neil W Ricket опубликовал свои правила на sendmail-овской конфе, замечаний со стороны Claus Assman и др. гуру не было :)>Т.к. класс $=R в ходе проверок всегда оказывается
>пустым (хотя в o'reilly - sendmail, 3rd edition написано "The class
>$=R holds as its list of values the host and domain
>names that sendmail should allow mail to be relayed to. This
>$=R class should not be used directly because it could change
>without notice in future versions of sendmail."), я решил использовать access.
Этот класс у тебя потому пустой, что ты не используешь файл relay-domains.
Он у тебя либо отсутствует, либо пустой.Если ты не против, я добавлю твои правила сюда - http://www.anrb.ru/linux/sendm.html#3.5
>> Если кто-нибудь потестит набор правил, я буду только рад.
>Я использую почти такой же набор, только без проверки access:
>исторически так сложилось, что использую для разрешения релея только relay-domains. Хотя в
>книге и не рекомендуется его использовать, но, согласись :),выгода есть: одно
>правило на проверку $=R или несколько правил на проверку access...
>И везде, где встречаются правила на блокировку плохого helo, они выглядят приблизительно
>так же (обычно попроще). У тебя, можно сказать, полный набор исключений
>предусмотрен.
Набор не полный т.к. допускает задание ip адреса, и предпоследнее правило его пропустит. Я тут сделал небольшое изменение по этому поводу.
Согласно rfc 1425 формат команды EHLO такой ehlo-cmd ::= "EHLO" SP domain CR LF (SP - пробел)
аналогично HELO.
Согласно rfc 821:
"...HELLO (HELO)
This command is used to identify the sender-SMTP to the
receiver-SMTP. The argument field contains the host name of
the sender-SMTP. ..."
Значит мы можем фильтровать по некорректному домену который выступает в качестве domain в команде HELO/EHLO
берем http://ftp.ics.uci.edu/pub/websoft/wwwstat/country-codes.txt потом awk '{print $1}' > /etc/mail/top-level-domain
в sendmail.cf добавляем класс F{bh}/etc/mail/top-level-domain и меняем строчку, из выше приведенных правил, R$* $| <[$*]> [$+.$+] $:$1
на R$* $| <[$*]> [$+.$={bh}] $:$1
вроде все...
>>да и...корректно ли блокировать bad HELO именно так ?
>Ну, по крайней мере, когда Neil W Ricket опубликовал свои правила на
>sendmail-овской конфе, замечаний со стороны Claus Assman и др. гуру не
>было :)
значить у меня есть "алиби" :)
>>Т.к. класс $=R в ходе проверок всегда оказывается
>>пустым (хотя в o'reilly - sendmail, 3rd edition написано "The class
>>$=R holds as its list of values the host and domain
>>names that sendmail should allow mail to be relayed to. This
>>$=R class should not be used directly because it could change
>>without notice in future versions of sendmail."), я решил использовать access.
>Этот класс у тебя потому пустой, что ты не используешь файл relay-domains.
>
>Он у тебя либо отсутствует, либо пустой.
ты прав
>Если ты не против, я добавлю твои правила сюда - http://www.anrb.ru/linux/sendm.html#3.5
не вопрос, добавляй.
>Набор не полный т.к. допускает задание ip адреса, и предпоследнее правило его пропустит.
Но ведь ip-адреса допустимы: например, маленькая конторка, почтовик есть, а домена нет, тогда он в HELO представится своим ip. Или не так?
>Значит мы можем фильтровать по некорректному домену который выступает в качестве domain
>в команде HELO/EHLO
>берем http://ftp.ics.uci.edu/pub/websoft/wwwstat/country-codes.txt потом awk '{print $1}' > /etc/mail/top-level-domain
>в sendmail.cf добавляем класс F{bh}/etc/mail/top-level-domain и меняем строчку, из выше приведенных правил, R$* $| <[$*]> [$+.$+] $:$1
>на R$* $| <[$*]> [$+.$={bh}] $:$1
>вроде все...
Дааа, нет предела совершенству :)
>>Набор не полный т.к. допускает задание ip адреса, и предпоследнее правило его пропустит.
>Но ведь ip-адреса допустимы: например, маленькая конторка, почтовик есть, а домена нет,
>тогда он в HELO представится своим ip. Или не так?
нет, тогда в HELO будет хост-имя (не FQDN). Вот это я и проглядел :( Нужно еще добавить одну строчку перед R$* $| <[$*]> [$+.$={bh}] $:$1
R$* $| <[$*]> [$+] $:$1
тогда полностью правила будут такими:
SLocal_check_mail
R$* $:$1 $| <$&{auth_authen}>
R$* $| <$+> $:$1
R$* $| <$*> $:$1 $| <[$&{client_addr}]>[$&s]
R$* $| <$=w>[$*] $:$1
R$* $| <[0]>[$*] $:$1
R$* $| <[$-.$-.$-.$-]>[$*] $:$1 $| <$( access $2.$3.$4.$5 $:[$2.$3.$4] $)>[$6]
R$* $| <RELAY>[$*] $:$1
R$* $| <[$-.$-.$-]>[$*] $:$1 $| <$( access $2.$3.$4 $:[$2.$3] $)>[$5]
R$* $| <RELAY>[$*] $:$1
R$* $| <[$-.$-]>[$*] $:$1 $| <$( access $2.$3 $:[$2] $)>[$4]
R$* $| <RELAY>[$*] $:$1
R$* $| <[$-]>[$*] $:$1 $| <$( access $2 $:[$2] $)>[$3]
R$* $| <RELAY>[$*] $:$1
R$* $| <[$*]> $=w $#error $@5.7.1 $:"550 Access denied - bogus HELO " $&s
R$* $| <[$*]> [$=w] $#error $@5.7.1 $:"550 Access denied - bogus HELO " $&s
R$* $| <[$*]> [$+] $:$1
R$* $| <[$*]> [$+.$={bh}] $:$1
R$* $| <[$*]> [$*] $#error $@5.7.1 $:"550 Access denied - bogus HELO " $&s
теперь главное чтобы имена клиентских машин не совпадали с коротким именем
почтового сервера, иначе 5 правило снизу их не пропустит :)
Теперь насчет ip в HELO. В том же rfc не написано ничего про ip в HELO, значит мы можем фильтровать. У меня было масса случаев когда спамеры подставляли в HELO ip адрес моего почтового сервера...
>Если ты не против, я добавлю твои правила сюда - http://www.anrb.ru/linux/sendm.html#3.5Сколько всеого полезного по этой ссылке о Sendmail...
Спасибо автору этой странички! за такой хороший ресурс
>>Если ты не против, я добавлю твои правила сюда - http://www.anrb.ru/linux/sendm.html#3.5
>
>Сколько всеого полезного по этой ссылке о Sendmail...
>Спасибо автору этой странички! за такой хороший ресурс
Да, ресурс отличный...все в одном месте. Автору респект. :)
Новый релиззз. :)# for bad-HELO
F{bh}/etc/mail/top-level-domain
Kipadr regex -aFOUND [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}SLocal_check_mail
R$* $:$1 $| <$&{auth_authen}>
R$* $| <$+> $:$1
R$* $| <$*> $:$1 $| <[$&{client_addr}]>[$&s]
R$* $| <$=w>[$*] $:$1
R$* $| <[0]>[$*] $:$1
R$* $| <[$-.$-.$-.$-]>[$*] $:$1 $| <$( access $2.$3.$4.$5 $:[$2.$3.$4] $)>[$6]
R$* $| <RELAY>[$*] $:$1
R$* $| <[$-.$-.$-]>[$*] $:$1 $| <$( access $2.$3.$4 $:[$2.$3] $)>[$5]
R$* $| <RELAY>[$*] $:$1
R$* $| <[$-.$-]>[$*] $:$1 $| <$( access $2.$3 $:[$2] $)>[$4]
R$* $| <RELAY>[$*] $:$1
R$* $| <[$-]>[$*] $:$1 $| <$( access $2 $:[$2] $)>[$3]
R$* $| <RELAY>[$*] $:$1
R$* $| <[$*]> $=w $#error $@5.7.1 $:"550 Access denied - bogus HELO " $&s
R$* $| <[$*]> [$=w] $#error $@5.7.1 $:"550 Access denied - bogus HELO " $&s
R$* $| <[$*]> [[127.$-.$-.$-]] $#error $@5.7.1 $:"550 Access denied - bogus HELO " $&s
R$* $| <[$*]> [[10.$-.$-.$-]] $#error $@5.7.1 $:"550 Access denied - bogus HELO " $&s
R$* $| <[$*]> [[172.$-.$-.$-]] $#error $@5.7.1 $:"550 Access denied - bogus HELO " $&s
R$* $| <[$*]> [[192.168.$-.$-]] $#error $@5.7.1 $:"550 Access denied - bogus HELO " $&s
R$* $| <[$*]> [[$+]] $:$1 $| <[$2]> [[ $( ipadr $3 $) ]]
R$* $| <[$*]> [[FOUND]] $:$1
R$* $| <[$*]> [$+.$={bh}] $:$1
R$* $| <[$*]> [$*] $#error $@5.7.1 $:"550 Access denied - bogus HELO " $&s