Проблема с написанием кондишена

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

Модератор: xM

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

Непрочитанное сообщение dikens3 » 2007-04-26 11:19:33

Спасибо, не знал что есть переменная $authenticated_id, которая устанавливается при успешной аутентификации.

Пока сделал ограничение на отправку письма:

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

# Квота на исходящее сообщение
MYSQL_MESSOUT_QUOTA     = SELECT `quota-out` FROM users WHERE username='${quote_mysql:$authenticated_id}'
DEFAULT_MESSOUT_LIMIT   = 25M

acl_check_rcpt:
.ifdef MYSQL_MESSOUT_QUOTA
# Ограничение на отправку сообщения для наших пользователей, если сообщение больше определённого размера не отправляем.
  deny    message         = Too big size of message. Outgoing message size limit = ${lookup mysql{MYSQL_MESSOUT_QUOTA}{${value}M}{DEFAULT_MESSOUT_LIMIT}}.
          authenticated   = *
          condition       = ${if > {$message_size}{${lookup mysql{MYSQL_MESSOUT_QUOTA}{${value}M}{DEFAULT_MESSOUT_LIMIT}}}}
.endif
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

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

Аватара пользователя
Abigor
старшина
Сообщения: 425
Зарегистрирован: 2006-03-02 11:13:15
Откуда: РФ. г. Иркутск
Контактная информация:

Непрочитанное сообщение Abigor » 2007-04-26 11:29:51

dikens3 писал(а):Спасибо, не знал что есть переменная $authenticated_id, которая устанавливается при успешной аутентификации.

Пока сделал ограничение на отправку письма:

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

# Квота на исходящее сообщение
MYSQL_MESSOUT_QUOTA     = SELECT `quota-out` FROM users WHERE username='${quote_mysql:$authenticated_id}'
DEFAULT_MESSOUT_LIMIT   = 25M

acl_check_rcpt:
.ifdef MYSQL_MESSOUT_QUOTA
# Ограничение на отправку сообщения для наших пользователей, если сообщение больше определённого размера не отправляем.
  deny    message         = Too big size of message. Outgoing message size limit = ${lookup mysql{MYSQL_MESSOUT_QUOTA}{${value}M}{DEFAULT_MESSOUT_LIMIT}}.
          authenticated   = *
          condition       = ${if > {$message_size}{${lookup mysql{MYSQL_MESSOUT_QUOTA}{${value}M}{DEFAULT_MESSOUT_LIMIT}}}}
.endif
я вот такой кондишен юзаю, чтоб юзвери только от своего имени слали письма

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

condition = ${if !eq{$authenticated_id}{$sender_address}{yes}{no}}

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

Непрочитанное сообщение dikens3 » 2007-04-26 11:37:25

А при этом переслать работает?
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
Abigor
старшина
Сообщения: 425
Зарегистрирован: 2006-03-02 11:13:15
Откуда: РФ. г. Иркутск
Контактная информация:

Непрочитанное сообщение Abigor » 2007-04-26 11:45:58

угу

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

Непрочитанное сообщение dikens3 » 2007-04-26 15:23:51

dikens3 писал(а):
Abigor писал(а):ну, мнин, не вижу проблем, сделать acl что юзверю можно слать письмо только на определенный список адресов если честно.
У меня есть clamav, который любит посылать уведомления от имени clamav@domain.ru

Стоит проверка:
require verify = sender

Письмо принимается(это же не по tcp/ip) и рикошетом отправляются на postmaster@domain.ru

Отсюда:
1. Создать alias clamav@domain.ru
2. Запретить для него принимать почту.
Неправильно написал. clamav посылает юзеру clamav, которого не существует. Вот и нужен алиас clamav.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
Abigor
старшина
Сообщения: 425
Зарегистрирован: 2006-03-02 11:13:15
Откуда: РФ. г. Иркутск
Контактная информация:

Непрочитанное сообщение Abigor » 2007-04-27 3:07:52

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

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

Непрочитанное сообщение dikens3 » 2007-04-27 13:09:16

вообще надо делать две проверки на размер письма, одну еще на этапе rcpt а второю на этапе data, так как если отправитель или получатель юзают esmtp то размер известен сразу, а если просто smtp то он будет известен только в data, перую я проверку сделал, а вот вторую руки не доходят, квоты на вх. и ис. письма у меня разные =)
Я сделал пока так, запихнул в основной конфиг:

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

#Устанавливаем переменную, в которой будет ограничение размера входящего сообщения.
#(Вдруг не esmtp сервер нам шлёт почту, а значит size указать не может)
warn      set acl_m1    = 10K (Или как у тебя там из базы выдирается)
И acl_check_data:

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

# Ограничения на приём сообщения , если сообщение больше определённого размера не принимаем.
  deny    message       = Too big size of message. Incoming message size limit = $acl_m1
          condition     = ${if > {$message_size}{$acl_m1}}
Тут ограничение для всех, а нужно для своих доменов. :-) Только вот !domains=+local_domains в acl_check_data не работает. Думаю как сделать. Что-нибудь наковыряю.

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

temporarily rejected after DATA: cannot test domains condition in DATA ACL
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

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

Непрочитанное сообщение dikens3 » 2007-04-27 14:44:33

Решил проблему след. образом:
configure:

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

#Устанавливаем переменную, в которой будет ограничение размера входящего сообщения.
#(Вдруг не esmtp сервер нам шлёт почту, а значит size указать не может)

warn      set acl_m1    = ${lookup mysql{MYSQL_SIZEMESS}{${value}${lookup mysql{MYSQL_IN_UNIT}{${value}}}}{DEFAULT_SIZE_LIMIT}}

# В acl_check_data: не работает проверка доменов. В переменной будет домен, если он наш, иначе пустая.
warn      set acl_m3    = ${lookup mysql{MYSQL_DOMAINS}}
acl_check_data:

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

# Ограничения на приём сообщения , если сообщение больше определённого размера не принимаем.
  deny    message       = Too big size of message. Incoming message size limit = $acl_m1
          condition     = ${if eq{domain1.ru}{$acl_m3}{yes}{no}}
          condition     = ${if > {$message_size}{$acl_m1}}

  deny    message       = Too big size of message. Incoming message size limit = $acl_m1
          condition     = ${if eq{domain2.ru}{$acl_m3}{yes}{no}}
          condition     = ${if > {$message_size}{$acl_m1}}
Осталось придумать, как запихать в одно правило, т.е. исправить на проверку 2-х доменов в одном кондишене.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
Abigor
старшина
Сообщения: 425
Зарегистрирован: 2006-03-02 11:13:15
Откуда: РФ. г. Иркутск
Контактная информация:

Непрочитанное сообщение Abigor » 2007-04-27 17:36:11

а условия or не модно юзать?

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

Непрочитанное сообщение dikens3 » 2007-04-27 17:44:11

Abigor писал(а):а условия or не модно юзать?
Покажи, я ещё не въехал в exim и его кондишены.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

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

Непрочитанное сообщение dikens3 » 2007-04-27 18:32:43

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

# Ограничения на приём сообщения , если сообщение больше определённого размера не принимаем.
  deny    message       = Too big size of message. Incoming message size limit = $acl_m1
          condition     = ${if or {{eq{domain1.ru}{$acl_m3}}{eq{domain2.ru}{$acl_m3}}}{yes}{no}}
          condition     = ${if > {$message_size}{$acl_m1}}
Сделал вобщем.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
Abigor
старшина
Сообщения: 425
Зарегистрирован: 2006-03-02 11:13:15
Откуда: РФ. г. Иркутск
Контактная информация:

Непрочитанное сообщение Abigor » 2007-04-28 7:07:02

вот все и получилось :)
:P

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

Непрочитанное сообщение dikens3 » 2007-05-02 12:21:13

Не работает condition:

configure:

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

warn
    logwrite            = :panic: "$sender_host_address" "$sender_helo_name"

# Прибиваем, если IP-Адрес хоста в HELO
  deny    message       = Your IP in HELO/EHLO - access denied.
          condition     = ${if eq{$sender_host_address}{$sender_helo_name}{yes}{no}}
mainlog:

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

2007-05-02 13:15:24 1HjAvk-000KNo-JX <= dik@mydomain.ru H=([192.168.2.4]) [192.168.2.4]:1921 P=esmtp S=836 id=115733862.20070502131416@mydomain.ru T="dsf" from <dik@birzhaplus.ru> for dik@mydomain.ru
paniclog:

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

2007-05-02 13:15:24 "192.168.2.4" "[192.168.2.4]"
Собственно смущают [ и ], поэтому наверное и несовпадают. Брал пример из статьи лиссяры.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

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

Непрочитанное сообщение dikens3 » 2007-05-02 12:39:24

Сам мудак. Проверяю через MUA, он подставляет [ и ]

Переделал:

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

# Прибиваем, если IP-Адрес хоста в HELO
  deny    message       = Your IP in HELO/EHLO - access denied.
          condition     = ${if match{$sender_helo_name}{$sender_host_address}{yes}{no}}
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

NiTr0
мл. сержант
Сообщения: 109
Зарегистрирован: 2008-08-29 0:05:24

Re:

Непрочитанное сообщение NiTr0 » 2008-08-29 1:42:25

Abigor писал(а):я вот такой кондишен юзаю, чтоб юзвери только от своего имени слали письма

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

condition = ${if !eq{$authenticated_id}{$sender_address}{yes}{no}}
Попробовал заюзать... в acl_check_rcpt добавил (поставил 1м правилом - в процессе ковыряния)

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

  deny    message       = "Invalid sender address $sender_address for $authenticated_id"
          authenticated = *
          condition = ${if !eq{$authenticated_id}{$sender_address}{yes}{no}}
Имеем в логах и в ответе строку "Invalid sender address tester@хххххх for " - т.е. $authenticated_id почему-то пустое о_0 Аналогично и с $authenticated_sender.
exim версии 4.68 (из федоры 8 x64), настраивался по этому гайду (с адаптацией к базе ящиков abills)
Ниже - поскипаный лог (вырезал адреса)

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

 1856 CRAM-MD5: user name = tester@xxxxxx
 1856           challenge = <1856.1219962939@mail.xxxxxx>
 1856           received  = 53204ed79773b0ae5de497ddc844feef
 1856           digest    = 53204ed79773b0ae5de497ddc844feef
 1856 auth_cram_md5 authenticator:
 1856   $auth1 = tester@xxxxxx
 1856   $1 = tester@xxxxxx
 1856 SMTP>> 235 Authentication succeeded
 1856 SMTP<< MAIL FROM:<tester@xxxxxx> SIZE=507
 1856 spool directory space = 165355836K inodes = 45569394 check_space = 0K inodes = 0 msg_size = 5507
 1856 SMTP>> 250 OK
 1856 SMTP<< RCPT TO:<nitr0@yyyyyy>
 1856 using ACL "acl_check_rcpt"
 1856 processing "deny"
 1856 check authenticated = *
 1856 auth_cram_md5 in "*"? yes (matched "*")
 1856 check condition = ${if !eq{$authenticated_id}{$sender_address}{yes}{no}}
 1856                 = yes
 1856 deny: condition test succeeded
 1856 SMTP>> 550 "Invalid sender address tester@xxxxxx for "
 1856 LOG: MAIN REJECT
Куда копать?

P.S. exim увидел только вчера, опыт общения с postfix больше на несколько дней - потому заранее извиняюсь за глупые вопросы :crazy:

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

Re: Проблема с написанием кондишена

Непрочитанное сообщение Alex Keda » 2008-08-29 15:25:26

а такой ящик существует? с которого отправляешь?
Убей их всех! Бог потом рассортирует...

NiTr0
мл. сержант
Сообщения: 109
Зарегистрирован: 2008-08-29 0:05:24

Re: Проблема с написанием кондишена

Непрочитанное сообщение NiTr0 » 2008-08-29 18:29:43

Естессно :) Иначе аутентификация бы не прошла.

UPD:

Нашел ошибку :) В гайде стоит

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

auth_cram_md5:
  driver = cram_md5
  public_name = CRAM-MD5
  server_secret = ${lookup mysql{SELECT `password` FROM \
                        `mailbox` WHERE `username` \
                        = '${quote_mysql:$auth1}'}{$value}fail}
  server_set_id = $auth2
хотя нужно было server_set_id = $auth1
Все работает :)