Проблема аутентификации SMTP (EXIM+Dovecot)

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Liv
рядовой
Сообщения: 39
Зарегистрирован: 2008-09-12 0:25:42

Проблема аутентификации SMTP (EXIM+Dovecot)

Непрочитанное сообщение Liv » 2009-08-24 14:46:18

Приветствую всех!
Прошу помощи! Проблема следующая:
Аутентификация SMTP работает хорошо - запрашивает пароль, правильно аутентифицирует. Но если снять галочку аутентификации, то ничего не происходит и отправка писем происходит и без запроса пароля... без аутентификации!! Т.е. если кто-то в своей мыльнице (например, TheBat!) создаст ящик такой же, как у меня, то он спокойно отправляет письма от моего имени! Получить не может, т.к. тут запрашивается пароль, а отправить - без проблем! И это не есть ГУТ!! :( Подскажите где копать, что и как настраивать?
Вот часть конфига экзима:

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

acl_smtp_connect = acl_connect
acl_smtp_mail = acl_mail
acl_smtp_notquit = acl_notquit

acl_smtp_rcpt = check_recipient
acl_smtp_data = check_message

begin acl

acl_mail:

	accept authenticated = *

	accept  condition = ${if match_ip{$sender_host_address}\
		{iplsearch;/etc/relayhosts}{1}\
		{${if eq{$sender_host_address}{127.0.0.1}{1}{0}}}}
	accept hosts = +relay_hosts

deny
    condition = ${if eq{$sender_helo_name}{}}
    message   = HELO required before MAIL



drop  
    condition = ${if match{$sender_helo_name}{$primary_hostname}}
    message   = "REJECTED - Bad HELO - Host impersonating [$sender_helo_name]"


drop 
    condition = ${if eq{[$interface_address]}{$sender_helo_name}}
    message   = "REJECTED - Interface: $interface_address is _my_ address"

drop
    condition   = ${if isip{$sender_helo_name}}
    message     = Access denied - Invalid HELO name (See RFC2821 4.1.3)

drop
    # Required because "[IPv6:<address>]" will have no .s
    condition   = ${if match{$sender_helo_name}{\N^\[\N}{no}{yes}}
    condition   = ${if match{$sender_helo_name}{\N\.\N}{no}{yes}}
    message     = Access denied - Invalid HELO name (See RFC2821 4.1.1.1)

drop
    condition   = ${if match{$sender_helo_name}{\N\.$\N}}
    message     = Access denied - Invalid HELO name (See RFC2821 4.1.1.1)
    
drop
    condition   = ${if match{$sender_helo_name}{\N\.\.\N}}
    message     = Access denied - Invalid HELO name (See RFC2821 4.1.1.1)


    accept


acl_connect:

    accept
        hosts = +trustedmailhosts

    accept
        condition = ${if match_ip{$sender_host_address}{iplsearch;/etc/trustedmailhosts}{1}{0}}


# ignore pop before smtp 
    accept
        condition = ${if match_ip{$sender_host_address}{iplsearch;/etc/relayhosts}{1}{${if eq{$sender_host_address}{127.0.0.1}{1}{0}}}}

    accept
        hosts = +relay_hosts : +backupmx_hosts

#only rate limit port 25
    accept 
        condition = ${if eq {$interface_port}{25}{no}{yes}}

    defer 
        message = The server has reached its limit for processing requests from your host.  Please try again later.
        log_message = "Host is ratelimited ($sender_rate/$sender_rate_period max:$sender_rate_limit)"
        ratelimit = 1.2 / 1h / strict / per_conn / noupdate



drop
    message = Your host is not allowed to connect to this server.
    log_message = Host is banned
    hosts = +spammeripblocks



# do not change the comment in the line below, it is required for /usr/local/cpanel/bin/check_exim_config
#acl_smtp_notquit is required for this to work (exim 4.68)
    accept

acl_notquit:

# ignore authenticated hosts
accept authenticated = *

# ignore pop before smtp 
accept  condition = ${if match_ip{$sender_host_address}{iplsearch;/etc/relayhosts}{1}{${if eq{$sender_host_address}{127.0.0.1}{1}{0}}}}
accept hosts = +relay_hosts

#only rate limit port 25
accept condition = ${if eq {$interface_port}{25}{no}{yes}}

warn condition = ${if match {$smtp_notquit_reason}{command}{yes}{no}}
    log_message = "Connection Ratelimit - $sender_fullhost because of notquit: $smtp_notquit_reason ($sender_rate/$sender_rate_period max:$sender_rate_limit)"    
    ratelimit = 1.2 / 1h / strict / per_conn

аутентификаторы:

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

begin authenticators

dovecot_plain:
    driver = dovecot
    public_name = PLAIN
    server_socket = /var/run/dovecot/auth-client
    server_set_id = $auth1
    server_condition = ${if and {{!match {$auth1}{\N[/]\N}}{eq{${if match {$auth1}{\N[+%:@]\N}{${lookup{${extract{2}{+%:@}{$auth1}}}lsearch{/etc/demodomains}{yes}}}{${lookup{$auth1}lsearch{/etc/demousers}{yes}}}}}{}}}{true}{false}}

dovecot_login:
  driver = dovecot
  public_name = LOGIN
  server_socket = /var/run/dovecot/auth-client
  server_set_id = $auth1
  server_condition = ${if and {{!match {$auth1}{\N[/]\N}}{eq{${if match {$auth1}{\N[+%:@]\N}{${lookup{${extract{2}{+%:@}{$auth1}}}lsearch{/etc/demodomains}{yes}}}{${lookup{$auth1}lsearch{/etc/demousers}{yes}}}}}{}}}{true}{false}}

Подскажите - что не так?!!

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

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

Re: Проблема аутентификации SMTP (EXIM+Dovecot)

Непрочитанное сообщение dikens3 » 2009-08-24 22:17:32

1. Привязать аутентификацию с E-Mail'ом отправителя.
2. Запретить отправку без аутентификации.

http://forum.lissyara.su/viewtopic.php?f=20&t=3577 (Проверка корректного поля from)
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Liv
рядовой
Сообщения: 39
Зарегистрирован: 2008-09-12 0:25:42

Re: Проблема аутентификации SMTP (EXIM+Dovecot)

Непрочитанное сообщение Liv » 2009-08-25 10:54:44

Благодарю за ответ!
Ещё раз перечитал всё... Скажу честно - я никак не въеду в логику конфига! А потому:
dikens3 писал(а): 1. Привязать аутентификацию с E-Mail'ом отправителя.
в каком разделе это ставить?
dikens3 писал(а): 2. Запретить отправку без аутентификации.
где это прописывать? делал в разных местах... чаще всего запрещался доступ от других серверов, например mail.ru, что как раз не допустимо...
dikens3 писал(а): http://forum.lissyara.su/viewtopic.php?f=20&t=3577 (Проверка корректного поля from)
у нас на сервере более 400 доменов - проверку таким образом не сделаешь...

Я понимаю, что чайниковские вопросы на этом форуме выглядят не очень хорошо, прошу меня извинить!..
Я просто хотел бы узнать где (в каком разделе) формируется такая диаграмма:
Изображение

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

Re: Проблема аутентификации SMTP (EXIM+Dovecot)

Непрочитанное сообщение dikens3 » 2009-08-26 0:12:55

Правило 1:
Как вы отличаете своих пользователей от чужих? Аутентификация?

Как правило в аутентификации используется либо полный E-Mail, либо его часть. А это можно использовать для проверки обратного адреса, указываемого пользователем при отправке письма.

Да и то, что вы не выкладываете (что правильно вобщем) полный конфиг вашего Exim, усложняет решение вашей проблемы.

Лично у Вас нет понимания работы протокола SMTP, и я рекомендую прочесть соответствующие RFC, после чего вы поймете как работает Exim и все станет ясно.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Liv
рядовой
Сообщения: 39
Зарегистрирован: 2008-09-12 0:25:42

Re: Проблема аутентификации SMTP (EXIM+Dovecot)

Непрочитанное сообщение Liv » 2009-08-26 0:23:11

Я ранее уже говорил, что аутентификация нормально работает и проблем не делает, если клиент у себя в мыльнице поставил галочку "Аутентификация SMTP". Вот только если он не поствил, то он не должен отправлять письма с этого ящика, т.к. он не авторизирован. Но он без проблем оправляет!!! Вот именно это как-то надо прикрыть!

Полный конфиг очень большой! он автоматом формируется при установке cPanel и я в нём полностью плаваю! :(

Liv
рядовой
Сообщения: 39
Зарегистрирован: 2008-09-12 0:25:42

Re: Проблема аутентификации SMTP (EXIM+Dovecot)

Непрочитанное сообщение Liv » 2009-08-26 0:25:52

dikens3 писал(а):Правило 1:
Лично у Вас нет понимания работы протокола SMTP, и я рекомендую прочесть соответствующие RFC, после чего вы поймете как работает Exim и все станет ясно.
Принцип SMTP я понимаю... но не могу понять логику работы самого Exim! :(

А есть где почитать эти RFC на русском?

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

Re: Проблема аутентификации SMTP (EXIM+Dovecot)

Непрочитанное сообщение dikens3 » 2009-08-26 11:50:17

Liv писал(а):Принцип SMTP я понимаю... но не могу понять логику работы самого Exim! :(
Там понимать нечего. Есть работа SMTP согласно RFC.

Т.е. когда подключается хост к твоему Exim, начинают выполняться некоторые действия. (Определяется имя хоста и т.п. настраиваемые действия)
Далее Exim работает по принципу (Если не через PIPE) обработки каждого действия.

Этап connect
Можно проверить что-то связанное с IP

Этап EHLO/HELO
Можно проверить что-то связанное с IP
Можно проверить что-то связанное с EHLO/HELO

Этап AUTH
Можно проверить что-то связанное с IP
Можно проверить что-то связанное с EHLO/HELO
Можно проверить что-то связанное с Авторизацией

Этап mail from
Можно проверить что-то связанное с IP
Можно проверить что-то связанное с EHLO/HELO
Можно проверить что-то связанное с Авторизацией
Можно проверить что-то связанное с mail from

Этап rcpt to:
Можно проверить что-то связанное с IP
Можно проверить что-то связанное с EHLO/HELO
Можно проверить что-то связанное с Авторизацией
Можно проверить что-то связанное с mail from
Можно проверить что-то связанное с rcpt to

и т.д.

Все эти секции настраиваются в твоем exim. Если настроек нет, происходит действие секции по умолчанию (Как правило accept).

Все этапы (секции):
http://www.lissyara.su/?id=1239#39.2

Действия по умолчанию:
http://www.lissyara.su/?id=1239#39.10

Если письмо прошло, тогда это означает что все этапы для него выдали accept.

А на вопрос надо ответить, иначе проблема не решаемая:
Как вы отличаете своих пользователей от чужих?
Liv писал(а):А есть где почитать эти RFC на русском?
http://forum.lissyara.su/viewtopic.php?f=20&t=3700


P.S. В общем и целом Ваши сообщения для многих (и для меня в частности) выглядят так:
У меня есть почтовый сервер на базе Exim с кучей доменов и пользователей, я нифига не понимаю как оно работает, но надо сделать что-то.
Это что-то сделать должен кто-то, но я ему ничего не скажу и не покажу.

Ну решение таких сообщений, это отсылка на документацию или подальше.
Где логи? Где предпринятые действия для решения проблемы? Что не получилось?

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

Liv
рядовой
Сообщения: 39
Зарегистрирован: 2008-09-12 0:25:42

Re: Проблема аутентификации SMTP (EXIM+Dovecot)

Непрочитанное сообщение Liv » 2009-08-26 17:20:48

Ага... вроде стало понятнее! Я сейчас попробую разжевать сам для себя (ну и другим полезно будет)...
  1. Кто-то подключается к серверу на 25 порт, например,

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

    telnet mydomain.ru 25
    
    Тут срабатывает acl_smtp_connect. Здесь можно проверить ИП и запретить подключение, при необходимости.
    dikens3 писал(а): Этап connect
    Можно проверить что-то связанное с IP
  2. Поступает запрос EHLO (или HELO... но вроде уже все почтовики поддерживают расширения mime..). Здесь срабатывает acl_smtp_helo. Здесь мы проверяем корректность EHLO.
    После чего срабатывает acl_smtp_auth. Правда, тут я малость не пойму для чего здесь аутентификация? Еще не понятно кому и от кого...
    dikens3 писал(а): Этап EHLO/HELO
    Можно проверить что-то связанное с IP
    Можно проверить что-то связанное с EHLO/HELO

    Этап AUTH
    Можно проверить что-то связанное с IP
    Можно проверить что-то связанное с EHLO/HELO
    Можно проверить что-то связанное с Авторизацией
  3. Поступает MAIL FROM: <...>. Здесь срабатывает acl_smtp_mail, где мы можем проверить:
    • наличие обратного адреса
    • лигитимность обратного адреса (если необходимо)
    • ИП отправителя (но как я думаю, лучшая проверка в момент подключения)
    • авторизация! скорее всего здесь и надо проверять, если отправитель - локальный адрес. Наверное, где-то так:

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

      accept
          condition = ${if eq{${lookup {$local_part} lsearch {${extract{5}{:}\
              {${lookup{${lookup{$domain}lsearch*{/etc/userdomains}{$value}}}\
              lsearch{/etc/passwd}{$value}}}}/etc/$domain/passwd}}}{} {false}\
              {${if exists {${extract{5}{:}{${lookup{${lookup{$domain}lsearch*{/etc/userdomains}\
              {$value}}}lsearch{/etc/passwd}{$value}}}}/etc/$domain/$local_part/.boxtrapperenable} {true} {false}}}}
          authenticated = *
      
      * честно говоря в этом утверждении я никак разобраться не могу - взято с шаблонов cPanel и должно проверять наличие отправителя в списках всех почтовых ящиках.
    dikens3 писал(а): Этап mail from
    Можно проверить что-то связанное с IP
    Можно проверить что-то связанное с EHLO/HELO
    Можно проверить что-то связанное с Авторизацией
    Можно проверить что-то связанное с mail from
  4. Затем RCPT TO: <...>. На данном этапе срабатывает acl_smtp_rcpt. Здесь много проверок, в основном связанные с релеем...
    dikens3 писал(а): Этап rcpt to:
    Можно проверить что-то связанное с IP
    Можно проверить что-то связанное с EHLO/HELO
    Можно проверить что-то связанное с Авторизацией
    Можно проверить что-то связанное с mail from
    Можно проверить что-то связанное с rcpt to
  5. далее уже DATA и acl_smtp_data. Проверки на спам и пр. :)
    dikens3 писал(а): и т.д.
dikens3 писал(а): У меня есть почтовый сервер на базе Exim с кучей доменов и пользователей, я нифига не понимаю как оно работает, но надо сделать что-то.
Да, что-то в этом роде... но я спрашивал только об одном -
...Подскажите где копать...
и вот этот порядок обработки почты как раз и дал нужное направление для "где копать"...
Если бы список ACL-ей был в нужном порядке, то вопроса, пожалуй бы, и не возникало... он меня запутал в большей степени...
В логах нет ничего, чтобы дало какую-либо подсказку, т.к. ошибок не возникало и всё работало согласно правилам. Сама ситуация была замечена случайно. А возникла она после обновления cPanel-и. Сначала мы грешили на то, что это преднамеренное искажение инсталляционного кода Exim. Но после ручного обновления из портов ничего не изменилось. Сам конфиг в cPanel гнерируется автоматически из нескольких шаблонов. Его генерация завязана на Security Update и любое изменение конфига теряется после такого обновления! - приходится править шаблоны опять!..
Кстати, для тех, кто использует cPanel: загляните в свой конфиг Exim-а и с большой долей вероятности вы в разных местах увидите такое:

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

ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 : XXX.XXX.XXX.XXX
где вместо XXX.XXX.XXX.XXX прописан совершенно левый ИП адрес, к вашему хосту никакого отношения не имеющий! Вероятно это кто-то из разработчиков cPanel, занимающийся спамом, обеспечивает себе платформу! Причём, после каждого обновления приходится удалять этот ИП адрес снова.

Liv
рядовой
Сообщения: 39
Зарегистрирован: 2008-09-12 0:25:42

Re: Проблема аутентификации SMTP (EXIM+Dovecot)

Непрочитанное сообщение Liv » 2009-08-26 18:05:47

Большая просьба к знатокам - помогите расшифровать две записи:

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

 server_condition = ${if and {{!match {$auth1}{\N[/]\N}}{eq{${if match {$auth1}{\N[+%:@]\N}{${lookup{${extract{2}{+%:@}{$auth1}}}lsearch{/etc/demodomains}{yes}}}{${lookup{$auth1}lsearch{/etc/demousers}{yes}}}}}{}}}{true}{false}}
и

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

 server_condition = ${if and {{!match {$auth1}{\N[/]\N}}{eq{${if match {$auth1}{\N[+%:@]\N}{${lookup{${extract{2}{+%:@}{$auth1}}}lsearch{/etc/demodomains}{yes}}}{${lookup{$auth1}lsearch{/etc/demousers}{yes}}}}}{}}}{true}{false}}
Они имеют непосредственное отношения к аутентификации... но почему там воткнут поиск в /etc/demodomains и /etc/demousers - никак не пойму! Указанные файлы содержат список доменов, приписаных в демо-аккаунте и авторизироваться в почте не должны никак.