Запрет от relay_from_hosts при mail from +local_domains

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение BlitzKrieg » 2010-05-19 20:58:39

ЧОт никак не придумаю...
Как запретить отсылку писем для relay_from_hosts при использовании ими в MAIL FROM: адреса с доменом, который не обслуживается этим сервером.
Подскажите пожалуйста?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение BlitzKrieg » 2010-05-19 21:50:35

Чот я думал думал... и толи я ничо не понял толи такая формулировка не корректна... толи я думал плохо

Код: Выделить всё

domainlist local_domains = ${lookup mysql{SELECT `domain` FROM `domain` WHERE `domain`='${domain}' AND `active`='1'}}

Если скажем в базе унас лежит домен our.ru
Тогда:

Ведь если письмо отправляется с адреса mail@remote.ru mail@our.ru то +local_domains в данном случае будет содержать our.ru

Но если письмо будет отправляться с mail@our.ru на mail@remote.ru to +local_domains будет содержать ммм а ничего в ней не будет. Что какбэ не корректно.
Правильнее вроде

Код: Выделить всё

domainlist local_domains = ${lookup mysql{SELECT `domain` FROM `domain` WHERE `active`='1'}}
ТАким образом список +local_domains всегда будет содержать наш домен.
Я ошибаюсь?

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение hizel » 2010-05-19 22:02:25

ошибаетесь
предлагаю вам помедитировать над строкой из документации:
Когда выполняется ACL для команды RCPT, переменная “$domain” содержит домен адреса получателя.
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение dikens3 » 2010-05-19 22:10:56

Код: Выделить всё

deny hosts = +relay_from_hosts
     sender_domains = domain1.ru : domain2.ru  и т.д.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение BlitzKrieg » 2010-05-19 22:18:53

hizel писал(а):ошибаетесь
предлагаю вам помедитировать над строкой из документации:
Когда выполняется ACL для команды RCPT, переменная “$domain” содержит домен адреса получателя.
Именно эта строка и навела меня на мысль о корректности данной записи списка.
Так я вам о том и говорю что после команды рцпт в ацл эта переменная будет содрежать домен получателя, а следовательно +local_domains будет содержать наш домен только в том случае если $domain будет содержать наш домен.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение BlitzKrieg » 2010-05-19 22:38:23

Код: Выделить всё

begin acl
acl_check_rcpt:
  accept  hosts = :
  
  deny    message       = Restricted characters in address
            domains       = +local_domains
            local_parts   = ^[.] : ^.*[@%!/|]
  deny    message       = Restricted characters in address
          domains       = !+local_domains
          local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./

  deny    hosts         = +relay_from_hosts
            domains       = !local_domains

Код: Выделить всё

processing "deny"
check hosts = +relay_from_hosts
cached yes match for +relay_from_hosts
cached lookup data = NULL
host in "+relay_from_hosts"? yes (matched "+relay_from_hosts" - cached)
check domains = !local_domains
our.ru in "!local_domains"? yes (end of list)
deny: condition test succeeded
SMTP>> 550 Administrative prohibition
LOG: MAIN REJECT
  H=(ONE) [192.168.0.20] F=<pop@mail.ru> rejected RCPT blitzkrieg@our.ru
SMTP<< DATA

Код: Выделить всё

mysql> select domain from domain;
+----------+
| domain   |
+----------+
| ALL      |
| our.ru |
+----------+
3 rows in set (0.00 sec)


BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение BlitzKrieg » 2010-05-19 22:59:41

Не пойму в чем дело, помогите разобраться.

Код: Выделить всё

router# cat /log
>>> host in hosts_connection_nolog? no (option unset)
LOG: [79368] SMTP connection from [192.168.0.20]
>>> host in host_lookup? yes (matched "*")
>>> looking up host name for 192.168.0.20
>>> IP address lookup yielded localhost
>>> gethostbyname looked up these IP addresses:
>>>   name=localhost address=127.0.0.1
>>> checking addresses for localhost
>>>   127.0.0.1
>>> no IP address for localhost matched 192.168.0.20
>>> 192.168.0.20 does not match any IP address for localhost
>>> host in host_reject_connection? no (option unset)
>>> gethostbyname looked up these IP addresses:
>>>   name=localhost address=127.0.0.1
>>> host in "localhost:192.168.0.0/24"? yes (matched "192.168.0.0/24")
>>> host in sender_unqualified_hosts? yes (matched "+relay_from_hosts")
>>> host in recipient_unqualified_hosts? yes (matched "+relay_from_hosts" - cached)
>>> host in helo_verify_hosts? no (option unset)
>>> host in helo_try_verify_hosts? no (option unset)
>>> host in helo_accept_junk_hosts? no (option unset)

**** SMTP testing session as if from host 192.168.0.20
**** but without any ident (RFC 1413) callback.
**** This is not for real!

220 mail2.our.ru, ESMTP EXIM
>>> SYS in helo_lookup_domains? no (end of list)
>>> using ACL "acl_check_rcpt"
>>> processing "accept"
>>> check hosts = :
>>> host in ":"? no (end of list)
>>> accept: condition test failed
>>> processing "deny"
>>> check domains = +local_domains
>>> our.ru in "our.ru"? yes (matched "our.ru")
>>> our.ru in "+local_domains"? yes (matched "+local_domains")
>>> check local_parts = ^[.] : ^.*[@%!/|]
>>> blitzkrieg in "^[.] : ^.*[@%!/|]"? no (end of list)
>>> deny: condition test failed
>>> processing "deny"
>>> check domains = !+local_domains
>>> our.ru in "our.ru"? yes (matched "our.ru")
>>> our.ru in "!+local_domains"? no (matched "!+local_domains")
>>> deny: condition test failed
>>> processing "deny"
>>> check hosts = !+relay_from_hosts
>>> host in "!+relay_from_hosts"? no (matched "!+relay_from_hosts" - cached)
>>> deny: condition test failed
>>> processing "deny"
>>> check hosts = +relay_from_hosts
>>> host in "+relay_from_hosts"? yes (matched "+relay_from_hosts" - cached)
>>> check !verify = sender
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>> routing pop@mail.ru
>>> mail.ru in ""? no (end of list)
>>> mail.ru in "! +local_domains"? yes (end of list)
>>> calling dnslookup router
>>> 94.100.176.20 in "0.0.0.0 : 127.0.0.0/8"? no (end of list)
>>> routed by dnslookup router
>>> ----------- end verify ------------
>>> deny: condition test failed
>>> processing "deny"
>>> check hosts = !+relay_from_hosts
>>> host in "!+relay_from_hosts"? no (matched "!+relay_from_hosts" - cached)
>>> deny: condition test failed
>>> processing "deny"
>>> check hosts = +relay_from_hosts
>>> host in "+relay_from_hosts"? yes (matched "+relay_from_hosts" - cached)
>>> check domains = !local_domains
>>> our.ru in "!local_domains"? yes (end of list)
>>> deny: condition test succeeded
LOG: [79368] H=(SYS) [192.168.0.20] F=<pop@mail.ru> rejected RCPT blitzkrieg@our.ru
LOG: [79368] SMTP protocol error in "DATA" H=(SYS) [192.168.0.20] valid RCPT command must precede DATA
LOG: [79368] SMTP syntax error in "Subject: test" H=(SYS) [192.168.0.20] unrecognized command
LOG: [79368] SMTP syntax error in "." H=(SYS) [192.168.0.20] unrecognized command
LOG: [79368] H=(SYS) [192.168.0.20] incomplete transaction (QUIT) from <pop@mail.ru>
LOG: [79368] SMTP connection from (SYS) [192.168.0.20] closed by QUIT
250 mail2.our.ru Hello SYS [192.168.0.20]
250 OK
550 Administrative prohibition
503-All RCPT commands were rejected with this error:
503-Administrative prohibition
503 valid RCPT command must precede DATA
500 unrecognized command
500 unrecognized command
221 mail2.our.ru closing connection
Это часть конфига

Код: Выделить всё

begin acl


acl_check_rcpt:


  accept  hosts = :


  deny    message       = Restricted characters in address
          domains       = +local_domains
          local_parts   = ^[.] : ^.*[@%!/|]

  deny    message       = Restricted characters in address
          domains       = !+local_domains
          local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./

  deny    message       = Relay not permitted
          hosts         = !+relay_from_hosts
          condition     = ${if !eq {$domain}{${lookup mysql{MY_DOMAIN_LIST}{$value}{0}}}{yes}{no}}

  deny    hosts         = +relay_from_hosts
          !verify       = sender

  deny
          hosts         = !+relay_from_hosts
          !verify       = recipient

  deny    hosts         = +relay_from_hosts
          domains       = !local_domains

Вот что меня смущает:

Код: Выделить всё

>>> processing "deny"
>>> check domains = !+local_domains
>>> our.ru in "our.ru"? yes (matched "our.ru")
>>> our.ru in "!+local_domains"? no (matched "!+local_domains")
>>> deny: condition test failed
а потом фигаксь

Код: Выделить всё

>>> processing "deny"
>>> check hosts = +relay_from_hosts
>>> host in "+relay_from_hosts"? yes (matched "+relay_from_hosts" - cached)
>>> check domains = !local_domains
>>> our.ru in "!local_domains"? yes (end of list)
>>> deny: condition test succeeded

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение BlitzKrieg » 2010-05-19 23:11:03

Да я так и делал, да все опять упирается в этот запрос который +local_domains а домены ручками перечислять не катит.
dikens3 писал(а):

Код: Выделить всё

deny hosts = +relay_from_hosts
     sender_domains = domain1.ru : domain2.ru  и т.д.
Но ведь при правильном списке +local_domains можно будет сделать так кошерненько.
deny hosts = +relay_from_hosts
sender_domains = !+local_domains

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение BlitzKrieg » 2010-05-19 23:15:48

Ну объясните почему сначала домен our.ru не попадает в список !+local_domains а потом попадает в него?


BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение BlitzKrieg » 2010-05-20 1:16:47

Вот так будет корректнее и правильнее вроде

domainlist local_domains = ${tr{${lookup mysql {SELECT domain FROM domain} } } {"\n"} {:}}

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение dikens3 » 2010-05-20 8:32:52

если доменов немного лучше список делать всегда. Я через sg делаю. Тогда и sender_domains нормально работает.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение BlitzKrieg » 2010-05-20 8:50:37

Ну проще просто. Я и говорю что в той формулировке не оч. корректно это работает, точнее работает мож и корректно но идеологически неправильно ведь local_domains это просто список доменов, а в случае указанного в первом посте запроса это список из 1 домена да и то не всегда.
Второй запрос верный, но там разделителей нет. Хотя странно, я вроде для массовой рассылки использовался просто запрос без разделителей и это работает. А тут нет.
А что такое sg :-)
Вот последний local_domains будет содержать как раз то, что нужно как раз в той, что нужно форме.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение BlitzKrieg » 2010-05-20 9:38:35

Вобщем всем, кто использует списки доменов в бд рекомендую пользоваться именно такой формулировкой запроса, ибо предложенная в статьях многоуважаемого не корректна. Т.е. как таковая не является списком вообще.
Поэтому данное правило работать не будет, хотя и является корректным с точки зрения разработчиков.

Код: Выделить всё

deny hosts = +relay_from_hosts
        sender_domains = !+local_domains

domainlist local_domains = ${tr{${lookup mysql {SELECT domain FROM domain} } } {"\n"} {:}}
При использовании такого листа все корректно обрабатывается.

Т.е. я не говорю, что первоначальня формулировка не работает, я лишь утверждаю, что она не является тем, чем должна являться. Опять таки, из-за некорректности она усложняла понимание:-)
Последний раз редактировалось Alex Keda 2010-05-20 13:48:37, всего редактировалось 1 раз.
Причина: Товарищщи, цените чужое время, юзайте кнопочку [code]...

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение BlitzKrieg » 2010-05-20 9:45:28

Да это же естественно касается листа relay_to_domains который кстати говоря в случае если сервер обслуживает только локальные домены вообще нужно оставить пустым и не использовать дабы не етить свой моск лишний раз ненужными парвилами.
Ну и как посоветовал hizel Больше медитировать, что кстати ему тоже не помешает :-)
И спасибо dikens3 :-) :drinks:

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение hizel » 2010-05-20 10:22:46

как-то нагромождено, так красивее мыслю:

Код: Выделить всё

domainlist local_domains = ${lookup mysql{select concat(domain,' : ') from domain}}
BlitzKrieg писал(а): Ну и как посоветовал hizel Больше медитировать, что кстати ему тоже не помешает :-)

у меня каждый пинок exim - медитация ~8-)
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение BlitzKrieg » 2010-05-20 11:57:05

Не знаю как экзим, а я к завершающим : отношусь не очень :-)

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение hizel » 2010-05-20 12:12:35

ваше отношение тут не существенно ;]

http://www.lissyara.su/doc/exim/4.62/th ... file/#6.20
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение BlitzKrieg » 2010-05-20 13:47:01

Не знаю где у вас ТУТ, а у нас ТУТ сущесвтенно :-)

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение hizel » 2010-05-20 13:52:17

для Ъ:
Пустые элементы в конце списков всегда игнорируются.
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение BlitzKrieg » 2010-05-20 14:56:50

Я к тому, что некошерно это, даже несмотря на игнорирование экзимом.
Помимо правильности/неправильности есть еще личные приципы. Вот все лепят where domain = $domain и это работает, но это усложняет понимание механизмов работы и идет в разрез с принципами :-)

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение dikens3 » 2010-05-21 8:28:04

А что такое sg :-)
Почти тоже,что и tr. Принцип тот же.
Вот все лепят where domain = $domain и это работает, но это усложняет понимание механизмов работы и идет в разрез с принципами :-)
Согласен.

Аналогичную проблему я уже проходил когда-то.
http://forum.lissyara.su/viewtopic.php? ... er_domains
Хочу сделать ограничение на объём отправляемого сообщения для наших пользователей.

Код: Выделить всё

# Ограничение на отправку сообщения для наших пользователей, если сообщение больше определённого размера не отправляем.
  deny    message       = 10K for $sender_address_domain $sender_address
          sender_domains = mydomain1.ru : mydomain2.ru
          condition     = ${if > {$message_size}{10K}}
Так работает :-)

Код: Выделить всё

  deny    message       = 10K for $sender_address_domain $sender_address
          sender_domains = +local_domains
          condition     = ${if > {$message_size}{10K}}
А так нет. Вот я не въеду, а почему собственно?
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение hizel » 2010-05-21 9:03:40

я щитаю, нужно побольше работы переносить на БД у экзима и так работы выше крыши
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запрет от relay_from_hosts при mail from +local_domains

Непрочитанное сообщение BlitzKrieg » 2010-05-21 9:58:40

Подозреваю, что какой-нибудь acl без вызова mysql выполняется быстрее чем с ним :-) Проверка домена отсылателя на принадлежность к локальным в случае использования mysql и списка в конфиге какбэ сама намекае кто чем должен занимацо :-D