Проверка авторизации в acl_check_rcpt

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
ElDeRone
рядовой
Сообщения: 37
Зарегистрирован: 2008-07-03 14:49:05

Проверка авторизации в acl_check_rcpt

Непрочитанное сообщение ElDeRone » 2016-01-20 17:54:47

Задача: требовать аутентификацию для пользователей, посылающих письма с существующих ящиков из локальных доменов не из локальных сетей.
в acl_check_rcpt:

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

deny !authenticated = *
      domains = +local_domains
      !hosts = +relay_from_hosts
вроде бы работает, но при этом режет письма из доменов указанных в relay_to_domains

как починить? как сделать правильно?

Хостинговая компания 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/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Проверка авторизации в acl_check_rcpt

Непрочитанное сообщение Alex Keda » 2016-01-24 16:29:58

с положением восклицательных знаков, внимательней
Убей их всех! Бог потом рассортирует...

ElDeRone
рядовой
Сообщения: 37
Зарегистрирован: 2008-07-03 14:49:05

Проверка авторизации в acl_check_rcpt

Непрочитанное сообщение ElDeRone » 2016-01-25 12:39:24

если я правильно все понимаю, код читается так:

запретить всем неавторизованным
из локальных доменов
не из разрешенных сетей

Отправлено спустя 1 минуту 39 секунд:
там между строками И или ИЛИ?

Отправлено спустя 8 минут 54 секунды:
но все равно непонятно, как эта acl'ка влияет на relay_to_domains?

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Проверка авторизации в acl_check_rcpt

Непрочитанное сообщение xM » 2016-01-25 15:04:31

ElDeRone писал(а): там между строками И или ИЛИ?
И. Только учтите что у вас там два НЕ ещё :-)

Отправлено спустя 7 минут 50 секунд:
Вообще, есть require если именно надо требовать. В принципе, реализовать можно и логикой accept / deny
IT voodoo blog https://kostikov.co

ElDeRone
рядовой
Сообщения: 37
Зарегистрирован: 2008-07-03 14:49:05

Проверка авторизации в acl_check_rcpt

Непрочитанное сообщение ElDeRone » 2016-01-26 9:46:54

То есть первый воскл. знак распространяется на все подстроки в том числе?

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

require authenticated = *
      domains = +local_domains
      !hosts = +relay_from_hosts
а такая конструкция не запретит сторонним почтовикам присылать мне письма без авторизации?

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Проверка авторизации в acl_check_rcpt

Непрочитанное сообщение xM » 2016-01-26 9:58:16

Отрицание только на конкретную строку действует.
Это правило у вас даст передаст управление следующему для аутентифицированных пользователей локальных доменов не из локальных сетей. В противном случае будет deny.
В этой связи если вы будет использовать именно такое правило, надо тщательно выбирать место, куда его вставлять исходя из логики вашей конфигурации.
IT voodoo blog https://kostikov.co

ElDeRone
рядовой
Сообщения: 37
Зарегистрирован: 2008-07-03 14:49:05

Проверка авторизации в acl_check_rcpt

Непрочитанное сообщение ElDeRone » 2016-01-26 10:05:30

xM писал(а): Это правило у вас даст передаст управление следующему для аутентифицированных пользователей локальных доменов не из локальных сетей. В противном случае будет deny.
в противном случае это для всех остальных?
то есть таки нелокальные домены не смогут присылать мне письма?

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Проверка авторизации в acl_check_rcpt

Непрочитанное сообщение xM » 2016-01-26 10:09:17

Смотря где поставить, я ж говорю.

Отправлено спустя 1 минуту :
Require дает accept при совпадении всех условий и deny в противном случае
IT voodoo blog https://kostikov.co

ElDeRone
рядовой
Сообщения: 37
Зарегистрирован: 2008-07-03 14:49:05

Проверка авторизации в acl_check_rcpt

Непрочитанное сообщение ElDeRone » 2016-01-26 10:15:26

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

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   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./


  accept  local_parts   = postmaster
          domains       = +local_domains


#  require verify        = sender

#  deny !authenticated = *
#       domains = +local_domains
#       !hosts = +relay_from_hosts

  accept  hosts         = +relay_from_hosts
          control       = submission

  accept  authenticated = *
          control       = submission/sender_retain

  require message = relay not permitted
          domains = +local_domains : +relay_to_domains

  require verify = recipient

  deny
    message = sender envelope address $sender_address is locally blacklisted here. If you think this is wrong, get in touch with postmaster
    !acl = acl_local_deny_exceptions
    senders = ${if exists{CONFDIR/local_sender_blacklist}\
                   {CONFDIR/local_sender_blacklist}\
                   {}}

  accept
    domains = +relay_to_domains
    endpass
    verify = recipient

  
  accept                                                     
    dnslists = zen.spamhaus.org
    message = Your IP address ($sender_host_address) is blacklisted by Spamhaus\n\(http://www.spamhaus.org/query/bl?ip=$sender_host_address)\n\$dnslist_text
    set acl_m1 = "spam@domain.com"

  accept
наверное вот эту часть

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

  accept
    domains = +relay_to_domains
    endpass
    verify = recipient
надо поставить выше того правила...

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Проверка авторизации в acl_check_rcpt

Непрочитанное сообщение xM » 2016-01-26 12:25:35

Ох, трудно сказать. Надо видеть конфиг.
Но, вообще, приём relay_to_domains надо делать до, конечно.

Отправлено спустя 5 минут 14 секунд:
Лично я с аутентифицированными разбираюсь сразу после проверки синтаксиса HELO и MAIL TO
# --- local domain spoofing control
...
deny authenticated = *
condition = ${if !match_domain{$sender_address_domain}{+local_domains}}
!senders = :
message = Sending from foreign domain denied
delay = 5s

# --- limit user activity
deny authenticated = *
ratelimit = 100 / 1h / strict / $authenticated_id

# --- accept authenticated users
accept authenticated = *
control = dkim_disable_verify

# --- accept authenticated users only for local domains
deny message = Authentication need to relay
!hosts = +relay_from_hosts
sender_domains = !+ghs_domains : +local_domains
...
+ghs_domains - это у меня один домен частично хостится на Google.
Можете модифицировать под ваши потребности.

Отправлено спустя 15 минут 26 секунд:
xM писал(а): Require дает accept при совпадении всех условий и deny в противном случае
Вру. Не accept, передает проверку следующему правилу, конечно.
IT voodoo blog https://kostikov.co

ElDeRone
рядовой
Сообщения: 37
Зарегистрирован: 2008-07-03 14:49:05

Проверка авторизации в acl_check_rcpt

Непрочитанное сообщение ElDeRone » 2016-03-10 18:47:45

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

deny !authenticated = *
        condition = ${if match_domain{$sender_address_domain}{+local_domains}}
        domains = +local_domains
        !hosts = +relay_from_hosts
вот так вроде работает
проверил четыре варианта неавторизованных:
1. с левого айпишника с нашего домена на наш домен - зарубило, ок
2. с левого айпишника с ненашего домена на наш домен - пропустило, ок
3. с разрешенного айпишника с ненашего домена на наш домен - пропустило, ок
4. с разрешенного айпишника с нашего домена на наш домен - пропустило, ок

какие еще могут быть варианты? может упустил чего...