Авторизация Exim

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
sansa
ефрейтор
Сообщения: 66
Зарегистрирован: 2009-10-05 13:02:02
Откуда: Сергиев Посад

Re: Авторизация Exim

Непрочитанное сообщение sansa » 2009-10-21 17:43:54

Добрый день
Подскажите пожалуйста по авторизации:
Связка Exim+Dovecot
Базу данных - не хочу. 30 пользователей, один домен, 2 релея (удаленные офисы) - не тот случай. До сего для все учетки почты были пользователями с /bin/nologin. Решил уйти от этого, так как для добавления учетки нужно создать пользователя, потом exim_add_user, что бы отправлять мог... Ну и не по фэн-шую это.
Решено вот что:
И экзим и dovecot берут учетки из одного файла. За основу взят файл авторизации dovecot такого вида (/etc/exim/users):

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

user:{PLAIN}password
Dovecot поднялся на ура... Пока правда только в plain авторизации, но MD5 - дело не сложное
Проверяем локальный ли пользователь:

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

localuser:
  driver = accept
  condition = ${lookup{$local_part}lsearch{/etc/exim/users}}
Пришла пора авторизации exim'a. Помучавшись, с отрезанием {PLAIN} (долбаные скобки), файл был приведен к следующему виду:

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

user:{PLAIN}password:password
Все равно что-то не выходит у меня:

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

PLAIN:
  driver                     = plaintext
  server_set_id              = $auth2
  server_prompts             = :
  server_condition = " ${if and {{!eq{$2}{}}{!eq{$3}{}} {eq{$3}{${extract{2}{:} \
     {${lookup{$2}lsearch{/etc/exim/users}{$value}{*:*}}}}}}}{1}{0}}"
Не проходит регистрацию - и все!
exim -bd -q30m -d+all
показыват, что возвращается 1 в конце, но следом - авторизация неудачная, и переход к LOGIN авторизации.

Может кто-нить подсказать где грабли?
SASL авторизацию прошу не предлагать. Exim из бинарников не поддерживает (грит нету метода dovecot), а пересобирать нет желания.
Самый феншуй - настроить авторизацию 1:1 с dovecot (без лишнего повтора пароля)
Здравствуйте, я ваш патологоанатом.

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

Аватара пользователя
sansa
ефрейтор
Сообщения: 66
Зарегистрирован: 2009-10-05 13:02:02
Откуда: Сергиев Посад

Re: Авторизация Exim

Непрочитанное сообщение sansa » 2009-10-21 18:10:07

Все, проблема решена.
Ошибка: лишний пробел после кавычки:
sansa писал(а):server_condition = " ${if and {{!eq{$2}{}}{!eq{$3}{}} {eq{$3}{${extract{2}{:} \
{${lookup{$2}lsearch{/etc/exim/users}{$value}{*:*}}}}}}}{1}{0}}"
Но остался вопрос - как использовать файл только с одним полем пароля?
Здравствуйте, я ваш патологоанатом.

Aleks778
проходил мимо

Трабл при дампе в mySql

Непрочитанное сообщение Aleks778 » 2009-11-23 16:01:22

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

USE mysql;
INSERT INTO `user` (`Host`, `User`, `Password`)
VALUES ('localhost','exim',password('exim'));
INSERT INTO `db` (`Host`, `Db`, `User`, `Select_priv`)
VALUES ('localhost','exim','exim','Y');
FLUSH PRIVILEGES;
GRANT USAGE ON exim.* TO exim@localhost;
GRANT SELECT, INSERT, DELETE, UPDATE ON exim.* TO exim@localhost;
CREATE DATABASE `exim`;
USE `exim`;
ответ такой:

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

ERROR 1062 (23000) at line 2: Duplicate entry 'localhost-exim' for key 'PRIMARY'
MySql 5.1.40

Помогите плиз - чайник я )))

Как жаль что еще не появилась статья, полностью обновленая под современные условия. Я имею ввиду FreeBSD 7.2 + Exim 4.69 + Clamav + SpamAssasin + MySQL 5 + (какой-нить POP3 SSL) + какая-нить удобная веб-морда для пользователей к почте + PostFixAdmin + Apache22 ... По кускам из разных статей пытаюсь собрать - ни черта не получается, ошибка на ошибке у меня лезет.

Aleks778
проходил мимо

сорри

Непрочитанное сообщение Aleks778 » 2009-11-23 17:02:52

разобрался - видимо уже добавлял эти строки в таблицу - удалил руками, перезалил заново - пока ок. продолжаю "мучения" :-)

lepis
ефрейтор
Сообщения: 58
Зарегистрирован: 2007-11-16 10:26:20
Откуда: Кубань
Контактная информация:

Re: Авторизация Exim

Непрочитанное сообщение lepis » 2009-12-07 12:11:11

Добрый день!

Настроил по статье "Связка exim и dovecot с веб интерфейсом postfixadmin". Все работает нормально. Но вот от некоторых хостов приходит вот такая фигня:

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

Dec  7 11:14:22 lepis exim[84123]: H=(serval.artezio.ru) [194.87.13.181] I=[93.157.185.142]:25 F=<> rejected RCPT <lepis@lepis.net.ru>: "ю ЙЮЙНЦН HELO ОСЯРНЕ?! мЕ ОН RFC..."
Эта абракадабра расшифровывается как "А какого HELO пустое?! Не по RFC..."

попытался понять конфиги, но не нашел. Не подскажете, что можно сделать, чтобы мой helo не был пуст?

Заранее спасибо :)

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

Re: Авторизация Exim

Непрочитанное сообщение dikens3 » 2009-12-07 21:19:38

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

lepis
ефрейтор
Сообщения: 58
Зарегистрирован: 2007-11-16 10:26:20
Откуда: Кубань
Контактная информация:

Re: Авторизация Exim

Непрочитанное сообщение lepis » 2009-12-08 1:07:15

Без проблем, создам... Только в эту тему я пришел по ссылке со статьи :unknown:

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

Re: Авторизация Exim

Непрочитанное сообщение Alex Keda » 2009-12-08 10:09:17

да-да.
это я всем подгадил, налепив ссылок в статьях на темы где эти статьи упоминаются )))
Убей их всех! Бог потом рассортирует...

Аватара пользователя
vaskocuturilo
мл. сержант
Сообщения: 147
Зарегистрирован: 2009-09-21 9:06:43
Откуда: Архангельск
Контактная информация:

Re: Авторизация Exim

Непрочитанное сообщение vaskocuturilo » 2010-12-17 9:54:22

Здравствуйте всем...
С недавнего времени начал замечать что летает спам по 25 порту ... стал разби раться и натолкнулся на такую вещь, что отправка по 25 порту у меня проходит без авторизации ..любой желающйи может послеть через меня почту по 25 порут будьто по внешнему адресу или по локальному
приводу пример моего конфига Exim-а ...что я не так сделал - посдкажите плиз .. заранее благодарен!

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


primary_hostname = mydomain

hide mysql_servers = localhost/exim/exim/exim

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

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

hostlist relay_from_hosts = localhost 
#: 127.0.0.0/8 : 192.168.0.0/24

daemon_smtp_ports =25

qualify_domain = mydomain.ru
qualify_recipient = mydomain.ru

allow_domain_literals = false

exim_user = mailnull
exim_group = mail
never_users = root:daemon:bin

rfc1413_hosts = *
rfc1413_query_timeout = 0s

sender_unqualified_hosts = +relay_from_hosts
recipient_unqualified_hosts = +relay_from_hosts

ignore_bounce_errors_after = 30m
timeout_frozen_after = 3d

freeze_tell = postmaster@mydomain.ru
helo_accept_junk_hosts = 192.168.0.0/24

auto_thaw = 1h
smtp_banner = "SMTP"
smtp_accept_max = 100
smtp_accept_max_per_connection = 5
smtp_connect_backlog = 50
smtp_accept_max_per_host = 2
split_spool_directory = true
remote_max_parallel = 15
return_size_limit = 70k
message_size_limit = 20M
helo_allow_chars = _
smtp_enforce_sync = true

log_file_path = /var/log/exim/%s-%D.log
log_selector = \
    +all_parents \
    +connection_reject \
    +incoming_interface \
    +lost_incoming_connection \
    +received_sender \
    +received_recipients \
    +smtp_confirmation \
    +smtp_syntax_error \
    +smtp_protocol_error \
    -queue_run
syslog_timestamp = no

acl_smtp_helo = acl_check_helo
acl_smtp_connect = acl_check_connect
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_mime = acl_check_mime


begin acl
 

acl_check_helo:

 accept hosts = 192.168.0.0/24 : 127.0.0.1
  accept hosts = wildlsearch;/usr/local/etc/exim/white-hosts

  deny message = {helo} HELO/EHLO require by SMTP RFC
  condition = ${if eq{$sender_helo_name}{}{yes}{no}}

  deny message = {helo} Invalid HELO/EHLO data
  condition = ${if match {$sender_helo_name}{\N^-?[0-9]+$\N}{yes}{no}}

  deny message = {helo} HELO/EHLO should not be the ip-address
  condition = ${if match {$sender_helo_name}{\N^(\d+\.){3}\d+$\N}{yes}{no}}

  deny message = {helo} Spam blocking
  condition = ${lookup {$sender_helo_name}wildlsearch{/usr/local/etc/exim/spam-hosts}{yes}{no}} 

  accept

acl_check_connect:

  accept hosts = wildlsearch;/usr/local/etc/exim/white-hosts

  deny message = {connect} Spam blocking
  hosts = !192.168.0.0/24 : !127.0.0.1 : \
  wildlsearch;/usr/local/etc/exim/spam-hosts

  deny message = {connect} This ip-address in our blacklist
  hosts = net32-lsearch;/usr/local/etc/exim/net.blocked

  deny message = {connect} This ip-address in our blacklist
  hosts = net24-lsearch;/usr/local/etc/exim/net.blocked

  deny message = {connect} This ip-address in our blacklist
  hosts = net16-lsearch;/usr/local/etc/exim/net.blocked

  accept

acl_check_rcpt:

  accept  hosts = :

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

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

  accept  authenticated = *

  deny    condition     = ${if eq{$sender_address}{}{yes}{no}}
	  hosts         = !127.0.0.1 : !localhost : *
          message       = {rcpt} Where sender of this mail?!

  deny    condition     = ${if match{$sender_address}{\N^\s+$\N}{yes}{no}}
          hosts         = !127.0.0.1 : !localhost : *
          message       = {rcpt} Where sender of this mail?!

  accept condition = ${lookup {$sender_address}wildlsearch{/usr/local/etc/exim/white-address}{yes}{no}}

  deny message = {helo} Spam blocking
  condition = ${lookup {$sender_address}wildlsearch{/usr/local/etc/exim/spam-address}{yes}{no}} 

  deny    condition     = ${if match{${lc:$sender_host_name}}{adsl|dialup|pool|peer|dhcp|dynamic|ppp}{yes}{no}}
          message       = {rcpt} Your hostname is bad (adsl, poll, ppp & etc).

  deny    dnslists      = dul.ru
          message       = {rcpt} You in blacklist - $dnslist_domain \n $dnslist_text

  # ъБДЕТЦЛБ. (ЬФП ФБЛПК НЕФПД ВПТШВЩ УП УРБНПН,
  # ПУОПЧБООЩК ОБ РТЙОГЙРЕ ЕЗП ТБУУЩМЛЙ) оБ ЬФПН ТХВБЕФУС
  # РПЮФЙ ЧЕУШ УРБН. еДЙОУФЧЕООП - НЕФПД ОЕРТЙНЕОЙН ОБ 
  # ТЕБМШОП ЪБЗТХЦЕООЩИ MTA - Ф.Л. Ч ТЕЪХМШФБФЕ ЕНХ
  # РТЙИПДЙФУС ДЕТЦБФШ НОПЗП ПФЛТЩФЩИ УПЕДЙОЕОЙК.
  warn
          # УФБЧЙН ДЕЖПМФПЧХА ЪБДЕТЦЛХ Ч 20 УЕЛХОД
          set acl_m0    = 30s
  warn
          # УФБЧЙН ЪБДЕТЦЛХ Ч 0 УЕЛХОД УЧПЙН ИПУФБН Й 
          # ДТХЦЕУФЧЕООЩН УЕФСН (УПУЕДОСС ЛПОФПТБ :))
          hosts         = +relay_from_hosts:194.186.101.202/32:194.186.101.203/32
          set acl_m0    = 0s
  warn
          # РЙЫЕН Ч МПЗЙ ЪБДЕТЦЛХ (ЕУМЙ ПОП ЧБН ОБДП)
          logwrite      = "Delay $acl_m0 for $sender_host_name [$sender_host_address] with HELO=$sender_helo_name. Mail from $sender_address to $local_part@$domain."
          delay         = $acl_m0

  # рТПЧЕТЛБ РПМХЮБФЕМС Ч МПЛБМШОЩИ ДПНЕОБИ.
  # еУМЙ ОЕ РТПИПДЙФ, ФП РТПЧЕТСЕФУС УМЕДХАЭЙК ACL,
  # Й ЕУМЙ ОЕРТПЫЈМ Й ФБН - deny
  accept  domains       = +local_domains
          endpass
          message       = "In my mailserver not stored this user"
          verify        = recipient

  # рТПЧЕТСЕН РПМХЮБФЕМС Ч ТЕМЕКОЩИ ДПНЕОБИ
  # пРСФШ-ФБЛЙ ЕУМЙ ОЕ РТПИПДЙФ -> УМЕДХАЭЙК ACL,
  # Й ЕУМЙ ОЕРТПЫЈМ Й ФБН - deny
  accept  domains       = +relay_to_domains
          endpass
          message       = "Main server not know how relay to this address"
          verify        = recipient

  # тБЪТЕЫБЕН РПЮФХ ПФ ДПНЕОПЧ Ч УРЙУЛЕ relay_from_hosts
  accept  hosts         = +relay_from_hosts

  # еУМЙ ОЕРПДПЫМП ОЙ ПДОП РТБЧЙМП - СЧОП ЙЭХФ ПФЛТЩФЩК ТЕМЕК.
  deny    message       = {rcpt} Get out! At us NOT Open Relay!


acl_check_mime:

  # рТПЙЪПДЙН ДЕЛПДЙТПЧБОЙЕ mime УППВЭЕОЙК. рПМЕЪОП ДМС ДБМШОЕКЫЕК РТПЧЕТЛЙ ОБ ЧЙТХУЩ
  warn    decode        = default
  
  # нПЦОП ПЮЕОШ ВЩУФТП ПФУЕСФШ УППВЭЕОЙС, РТПУФП ЪБРТЕФЙЧ ОЕЛПФПТЩЕ mime
  # ЧМПЦЕОЙС, ЮБЭЕ ЧУЕЗП УПДЕТЦБЭЙЕ ЧЙТХУЩ, ИПФС, ЛПОЕЮОП, ЬФП ОЕ РБОБГЕС
  deny    message       = "Blacklisted file extension detected ($mime_filename)"
          condition     = ${if match {${lc:$mime_filename}}{\N(\.exe|\.pif|\.bat|\.scr|\.lnk|\.com|\.vbs|\.cpl)$\N}{1}{0}}
								       
  # нОПЗП МЙ Х ОБУ МАДЕК, ЪОБАЭЙИ ЛЙФБКУЛЙК? б ЧПФ ЛЙФБКУЛПЗП УРБНБ ЬФП РПХВБЧЙФ
  deny    message       = "Sorry, noone speaks chinese here"
          condition     = ${if eq{$mime_charset}{gb2312}{1}{0}}

  accept
										
acl_check_data:

# bounce test
        deny    message         = Message that generate bounce not coming from main hosts
	                condition       = ${if !match{$message_body}{X-Bounce-ID}{yes}{no}}
			                condition       = ${if eq{$sender_address}{}{yes}{no}}

  # рТПЧЕТСЕН РЙУШНП ОБ ЧЙТХУЩ
  #deny    malware       = *
  #        message       = "In e-mail found VIRUS - $malware_name"

  accept


begin routers
dnslookup:
  driver = dnslookup
  domains = ! +local_domains
  transport = remote_smtp
  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
  no_more

system_aliases:
  driver      = redirect
  allow_fail
  allow_defer
  data = ${lookup mysql{SELECT goto FROM alias WHERE address='${quote_mysql:$local_part@$domain}' OR address='${quote_mysql:@$domain}'}}

mysqluser_spam:
driver = accept
domains = +local_domains
condition = ${if >{$acl_m0}{59}{yes}{no}}
transport = mysql_spam_delivery
no_verify
no_expn
no_more

dovecot_user:
  driver = accept
  condition = ${lookup mysql{SELECT goto FROM alias WHERE address='${quote_mysql:$local_part@$domain}' OR address='${quote_mysql:@$domain}'}{yes}{no}}
  transport = dovecot_delivery


begin transports
remote_smtp:
        driver                  = smtp
	        headers_add             = "X-Bounce-ID: $primary_hostname"
#remote_smtp:
 # driver = smtp

mysql_spam_delivery:
driver = appendfile
check_string = ""
create_directory
delivery_date_add
directory = ${lookup mysql{SELECT CONCAT('/var/mail/exim/', `maildir`, '/', '.Spam') \
FROM `mailbox` WHERE `username`='${local_part}@${domain}'}}
directory_mode = 770
envelope_to_add
group = mail
maildir_format
maildir_tag = ,S=$message_size
message_prefix = ""
message_suffix = ""
mode = 0600

dovecot_delivery:
  driver = pipe
  command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain
  message_prefix =
  message_suffix =
  delivery_date_add
  envelope_to_add
  return_path_add
  log_output
  user = mailnull

address_pipe:
  driver = pipe
  return_output

address_reply:
  driver = autoreply



begin retry

*                    *       F,2h,15m; G,16h,1h,1.5; F,4d,6h


begin rewrite


begin authenticators

auth_plain:
  driver           = plaintext
  public_name      = PLAIN
  server_condition = ${lookup mysql{ \
			SELECT username FROM mailbox \
			WHERE username = '${quote_mysql:$auth2}' \
			 AND password = '${quote_mysql:$auth3}' \
			 AND active = '1' \
			}{yes}{no}}
  server_prompts   = :
  server_set_id    = $auth2

auth_login:
  driver           = plaintext
  public_name      = LOGIN
  server_condition = ${lookup mysql{ \
                        SELECT username FROM mailbox \
			WHERE username = '${quote_mysql:$auth1}' \
			 AND password = '${quote_mysql:$auth2}' \
			 AND active = '1' \
			}{yes}{no}}
  server_prompts   = Username:: : Password::
  server_set_id    = $auth1

auth_cram_md5:
  driver           = cram_md5
  public_name      = CRAM-MD5
  server_secret    = ${lookup mysql{\
                        SELECT password FROM mailbox \
			WHERE username = '${quote_mysql:$auth1}' \
			 AND active = '1' \
			}{$value}fail}
  server_set_id    = $auth1

blade_007
ст. прапорщик
Сообщения: 571
Зарегистрирован: 2010-03-12 12:59:08
Контактная информация:

Re: Авторизация Exim

Непрочитанное сообщение blade_007 » 2010-12-17 11:57:58

Во-первых, прогнать с проверкой exim -bd -d+all
Смотреть в сторону acl_check_rcpt: возможно путь к какому-либо списку проверки неправильный/нет доступа.

Аватара пользователя
vaskocuturilo
мл. сержант
Сообщения: 147
Зарегистрирован: 2009-09-21 9:06:43
Откуда: Архангельск
Контактная информация:

Re: Авторизация Exim

Непрочитанное сообщение vaskocuturilo » 2010-12-17 13:46:42

Вывод дал следующее

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

13:45:24 82763 LOG: MAIN
13:45:24 82763   IPv6 socket creation failed: Protocol not supported
13:45:24 82763 LOG: MAIN
13:45:24 82763   Failed to create IPv6 socket for wildcard listening (Protocol not supported): will use IPv4
13:45:24 82763 LOG: MAIN
13:45:24 82763   socket bind() to port 25 for address (any IPv4) failed: Address already in use: waiting 30s before trying again (9 more tries)
|Кто-то сидит на 25 порут кроме Exima ????

blade_007
ст. прапорщик
Сообщения: 571
Зарегистрирован: 2010-03-12 12:59:08
Контактная информация:

Re: Авторизация Exim

Непрочитанное сообщение blade_007 » 2010-12-17 15:12:02

Сам же exim. Сначала остановите exim, потом запустите отладку.

masterevil
рядовой
Сообщения: 10
Зарегистрирован: 2011-05-17 15:05:00

Re: Авторизация Exim

Непрочитанное сообщение masterevil » 2011-05-17 15:19:24

Добрый день! Ребят, помогите решить одну проблему! Вобщем поставил я Exim, в связке с Dovecot. Все учетки хранятся в MySQL. В принципе все по статье с сайта. Привязал нему веб интерфейс дял отправки писем. Все работает замечательно. Но есть один момент который не дает мне покоя. В качестве клиента использую Thunderbird, все работает. А вот стандартный MacOS Mail клиент не хочет отправлять письма. Получает все отлично, а при отправке пишет что не могу авторизоваться. В логах Exim наблюдаю следующее: auth_plain authenticator failed for IP-адрес: 535 Incorrect authentication data. Как правильно авторизовать маковский клиент? Если есть у кого метод авторизации то дайте поглядеть поалуйста. Заранее благодарен за помощь!

Raven_kg
рядовой
Сообщения: 46
Зарегистрирован: 2009-11-30 9:38:35
Контактная информация:

Авторизация Exim

Непрочитанное сообщение Raven_kg » 2011-11-04 14:06:26

Добрый день всем.
Сделал все по статье Лиса, (конфиг dovecot пришлось немного подправить ибо latest version). Собственно вот конфы:
dovecot.conf

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

auth_debug = yes
auth_debug_passwords = yes
auth_mechanisms = plain login digest-md5 cram-md5
auth_verbose = yes
base_dir = /var/run/dovecot/
first_valid_uid = 93
info_log_path = /var/log/dovecot.log
log_path = /var/log/dovecot.log
login_greeting = Welcome to IMAP/POP3 server
mail_debug = yes
mail_location = maildir:/srv/data/mail/var/spool/exim/%d/%n

passdb {
  args = /etc/dovecot/dovecot-sql.conf
  driver = sql
}

userdb {
  args = /etc/dovecot/dovecot-sql.conf
  driver = sql
}

protocols = imap pop3
service imap-login {
  inet_listener imap {
    address = <ip>
    port = 143
  }
  inet_listener imaps {
    address = <ip>
    port = 993
    ssl = yes
  }
}

service imap {
  process_limit = 1024
  vsz_limit = 256 M
}

service lmtp { #Авось пригодится когда-нить
  inet_listener lmtp {
    address = <серый_ip> 
    port = 26
  }
}

service pop3-login {
  inet_listener pop3 {
    address = <ip>
    port = 110
  }
  inet_listener pop3s {
    address = <ip>
    port = 995
    ssl = yes
  }
}

service pop3 {
  process_limit = 1024
}

ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

dovecot-sql.conf

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

driver = mysql
connect = host=хост dbname=база user=юзер password=пасс
default_pass_scheme = CRAM-MD5
password_query = SELECT `username` as `user`, `password` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'
user_query = SELECT `maildir` AS `home`, 93 AS `uid`, 93 AS `gid` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'
exim.conf

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

primary_hostname = mail.домен

domainlist local_domains = ${lookup mysql{SELECT domain FROM domain WHERE domain='${domain}' AND (type='LOCAL' OR type='VIRTUAL')}}

domainlist relay_to_domains = ${lookup mysql{SELECT domain FROM domain WHERE domain='${domain}' AND type='RELAY'}}

hostlist spamers = ${lookup mysql{SELECT senders FROM blacklist_host WHERE senders='${sender_host_address}'}}

hostlist   relay_from_hosts = localhost : 127.0.0.1 : 192.168.50.0/24

GET_QUOTA=${lookup mysql{SELECT current FROM quota WHERE username='${local_part}'}

MAILDIR_SIZE=${eval:${sg{${sg{${readfile{/srv/data/mail/var/spool/exim/$domain/$local_part/maildirsize}\
                      {\n}}}{\N^.+?\n\N}{}}}{\N(?s)\s+-?\d+\n\N}{+}}0+500K}

daemon_smtp_ports = 25 : 465
tls_on_connect_ports = 465
tls_advertise_hosts = *
tls_certificate = /etc/pki/tls/private/exim.pem
tls_privatekey = /etc/pki/tls/private/exim.pem

log_selector = \
	 +all
#        +all_parents \
#        +lost_incoming_connection \
#        +received_sender \
#        +received_recipients \
#        +smtp_confirmation \
#        +smtp_syntax_error \
#        +smtp_connection \
#        +smtp_protocol_error \
#        -queue_run

syslog_timestamp = no


acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data

av_scanner = clamd:/var/run/clamav/clamd.sock

trusted_users = dovecot
qualify_domain = домен
allow_domain_literals = false
exim_user = exim
exim_group = exim
never_users = root
delay_warning = 4h:8h:24h:48h
return_size_limit = 50k
host_lookup = *
rfc1413_hosts = *
rfc1413_query_timeout = 0s
smtp_enforce_sync = true
syslog_duplication = false
allow_mx_to_ip
ignore_bounce_errors_after = 2d
timeout_frozen_after = 2d
message_size_limit = 200M
smtp_accept_max = 1000
smtp_accept_max_per_connection = 50
smtp_accept_max_per_host = 20
smtp_connect_backlog = 50
smtp_accept_queue_per_connection = 30
remote_max_parallel = 15
split_spool_directory = true


.include /etc/exim/ips.conf  #Тут описаны локальные ипы и смтп-баннер

hide mysql_servers = параметры базы :-D

begin acl

acl_check_rcpt:
deny message      = "Illegal characters are in an address."
     domains       = +local_domains
     local_parts   = ^[.] : ^.*[@%!/|]

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

deny message   = "All email from *.orange.fr - discarded!"
     condition = ${if match{$sender_helo_name}{.orange.fr}{yes}{no}}

deny message   = "All email from *.mdp2.net - discarded!"
     condition = ${if match{$sender_helo_name}{.mdp2.net}{yes}{no}}

deny message   = "All email from *.mail.comcast.net - discarded!"
     condition = ${if match{$sender_helo_name}{.mail.comcast.net}{yes}{no}}

deny message   = "All email from *.libero.it - discarded!"
     condition = ${if match{$sender_helo_name}{.libero.it}{yes}{no}}

deny message   = "All email from *.ono.com - discarded!"
     condition = ${if match{$sender_helo_name}{.ono.com}{yes}{no}}

deny message   = "All email from *.wanadoo.fr - discarded!"
     condition = ${if match{$sender_helo_name}{.wanadoo.fr}{yes}{no}}


accept senders=${lookup mysql{SELECT senders FROM whitelist \
        WHERE senders='${quote_mysql:$sender_address}' \
        OR senders='*@${quote_mysql:$sender_address_domain}' LIMIT 1}}

deny message = "Your address in banlist!"
        senders=${lookup mysql{SELECT senders FROM blacklist \
        WHERE senders='${quote_mysql:$sender_address}' \
        OR senders='*@${quote_mysql:$sender_address_domain}' LIMIT 1}}

deny hosts = +spamers
     message = "Host rejected by spamers list on rbl.ispalternativa.net.ua!"

accept authenticated = *

deny message       = "HELO/EHLO required by SMTP RFC"
     condition     = ${if eq{$sender_helo_name}{}{yes}{no}}

deny condition     = ${if match{$sender_helo_name}{\N^\d+$\N}{yes}{no}}
     hosts         = !127.0.0.1:!localhost:*
     message       = "There can not be only numbers in HELO!"

deny condition     = ${if eq{$sender_address}{}{yes}{no}}
     hosts         = +relay_from_hosts
     message       = "Your message have not return address"

deny message   = "The use of IP is forbidden in HELO!"
     hosts     = *:!+relay_from_hosts
     condition = ${if eq{$sender_helo_name}\
                      {$sender_host_address}{true}{false}}


deny condition = ${if eq{$sender_helo_name}\
                      {$interface_address}{yes}{no}}
     hosts     = !127.0.0.1 : !localhost : *
     message   = "The use of my IP is forbidden!"

deny message   = "Dynamic hosts is forbidden!"
     condition = ${if match{$sender_host_name}\
                     {adsl|dialup|pool|peer|dhcp} {yes}{no}}

deny    message       = rejected because $sender_host_address \
        is in a black list at $dnslist_domain\n$dnslist_text
        hosts         = !+relay_from_hosts
        !authenticated = *
        log_message   = found in $dnslist_domain
        dnslists      = bl.spamcop.net : \
                        cbl.abuseat.org : \
                        dnsbl.njabl.org : \
                        sbl-xbl.spamhaus.org : \
                        pbl.spamhaus.org


drop   message     = Rejected - Sender Verify Failed
       log_message = Rejected - Sender Verify Failed
       hosts       = *
       !verify     = sender/no_details/callout=2m,defer_ok
       !condition  =  ${if eq{$sender_verify_failure}{}}


accept domains    = +local_domains
       endpass
       message    = $acl_verify_message
       verify     = recipient

accept domains  = +relay_to_domains
       endpass
       message  = "Unrouteable address!"
       verify   = recipient/callout=30s,defer_ok,use_postmaster


accept  hosts         = +relay_from_hosts
accept  authenticated = *
deny    message       = relay not permitted
accept

acl_check_data:

deny     message  = This message contains a virus ($malware_name).
         demime   = *
         malware  = */defer_ok
accept


begin routers

dnslookup:
  driver = dnslookup
  domains = ! +local_domains
  transport = remote_smtp
  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
  no_more

system_aliases:
  driver = redirect
  allow_fail
  allow_defer
  data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE \
            `address`='${quote_mysql:$local_part@$domain}' OR \
                `address`='${quote_mysql:@$domain}'}}

dovecot_user:
  driver = accept
  condition = ${lookup mysql{SELECT `goto` FROM \
  `alias` WHERE \
  `address`='${quote_mysql:$local_part@$domain}' OR \
  `address`='${quote_mysql:@$domain}'}{yes}{no}}
  transport = dovecot_delivery

begin transports

remote_smtp:
  driver = smtp

address_reply:
  driver = autoreply

dovecot_delivery:
  driver = pipe
  command = /usr/libexec/dovecot/deliver -d $local_part@$domain
  message_prefix =
  message_suffix =
  delivery_date_add
  envelope_to_add
  return_path_add
  log_output
  user = exim


address_pipe:
   driver = pipe
   return_output

address_file:
  driver = appendfile
  delivery_date_add
  envelope_to_add
  return_path_add

null_transport:
    driver = appendfile
    file = /dev/null


begin retry
*                    *       F,2h,15m; G,16h,1h,1.5; F,4d,6h

begin rewrite

begin authenticators

auth_plain:
  driver = plaintext
  public_name = PLAIN
  server_condition = ${lookup mysql{SELECT `username` FROM \
                     `mailbox` WHERE `username` = \
                     '${quote_mysql:$auth2}' AND `password` = \
                     '${quote_mysql:$auth3}'}{yes}{no}}
  server_prompts = :
  server_set_id = $auth2

auth_login:
  driver = plaintext
  public_name = LOGIN
  server_condition = ${lookup mysql{SELECT `username` FROM \
                     `mailbox` WHERE `username` = \
                     '${quote_mysql:$auth1}' AND `password` = \
                     '${quote_mysql:$auth2}'}{yes}{no}}
  server_prompts = Username:: : Password::
  server_set_id = $auth1

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
Выборка почты проходит без эксцессов, а вот с авторизацией при отправке проблемко:

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

2011-11-04 16:46:16 [3857] SMTP connection from [клиентский ип]:43589 I=[ип сервера]:25 (TCP/IP connection count = 1)                                                                                              
2011-11-04 16:46:16 [5774] no host name found for IP address клиентский ип                                                                                                                                           
2011-11-04 16:46:16 [5774] auth_cram_md5 authenticator failed for (домен клиента) [клиентский ип]:43589 I=[ип сервера]:25: 535 Incorrect authentication data                                                       
2011-11-04 16:46:17 [5774] auth_cram_md5 authenticator failed for (домен клиента) [клиентский ип]:43589 I=[ип сервера]:25: 535 Incorrect authentication data                                                       
2011-11-04 16:46:18 [5774] auth_cram_md5 authenticator failed for (домен клиента) [клиентский ип]:43589 I=[ип сервера]:25: 535 Incorrect authentication data                                                       
2011-11-04 16:46:18 [5774] auth_cram_md5 authenticator failed for (домен клиента) [клиентский ип]:43589 I=[ип сервера]:25: 535 Incorrect authentication data                                                       
2011-11-04 16:46:19 [5774] SMTP connection from (домен клиента) [клиентский ип]:43589 I=[ип сервера]:25 lost                                                                                                       
2011-11-04 16:46:19 [5774] no MAIL in SMTP connection from (домен клиента) [клиентский ип]:43589 I=[ип сервера]:25 D=3s C=EHLO,AUTH,AUTH,AUTH,AUTH
Пароли хранятся в базе зашифрованые в cram-md5

Что я не так сделал?

Александр
проходил мимо

Re: Авторизация Exim

Непрочитанное сообщение Александр » 2011-11-09 10:06:37

Здравствуйте!

Имею проблему с авторизацией по CRAM-MD5

exim.conf
.....
auth_cram_md5:
driver = dovecot
public_name = CRAM-MD5
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1
....

dovecot.conf
....
auth default {
mechanisms = plain login cram-md5
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0660
user = mailnull
group = mailnull
}
client {
path = /var/run/dovecot/auth-client
mode = 0660
user = mailnull
group = mailnull
log_path = /var/log/dovecot-smtp-aut.log
}
}
....

В логах имею
auth_cram_md5 authenticator failed for .... 535 Incorrect authentication data (set_id=xxx@yyy.ru)

Подскажите что может быть и где смотреть? :st:

Александр
проходил мимо

Re: Авторизация Exim

Непрочитанное сообщение Александр » 2011-11-09 11:54:13

Сделал так

#dovecotpw
Enter new password:
Retype new password:
{CRAM-MD5}de1964c54a4e19d6debc1840bf7be693f4289372cab3504e52ac00a9bd9374a4

#mysql> update mailbox set password='{CRAM-MD5}de1964c54a4e19d6debc1840bf7be693f4289372cab3504e52ac00a9bd9374a4' where username='locale@domain';

и оля...

в Бате

09.11.2011, 16:21:32: SEND - Аутентификация (программный CRAM-MD5)...
09.11.2011, 16:21:32: SEND - Отправка письма для Адресата.


Но опять же.. получается что будет работать только этот метод? А если я захочу не Бата?!

Как объединить простую авторизацию с CRAM-MD5 ?!

Александр
проходил мимо

Re: Авторизация Exim

Непрочитанное сообщение Александр » 2011-11-09 12:10:23

В общем все работает если в базе занесен пароль вида
{CRAM-MD5}de1964c54a4e19d6debc1840bf7be693f4289372cab3504e52ac00a9bd9374a4
авторизации login,plain,craw-md5 работает на ура.

Fil15
проходил мимо
Сообщения: 1
Зарегистрирован: 2012-01-25 15:06:19

Re: Авторизация Exim

Непрочитанное сообщение Fil15 » 2012-01-27 13:58:01

Добрый день всем! Была проблема авторизации в thunderbird по этим конфигам. Решение такое:
В конфиге exim кусок авторизации:

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

auth_plain:
   driver = dovecot
   public_name = PLAIN
   server_socket = /var/run/dovecot/auth-client
   server_set_id = $auth1

auth_login:
   driver = dovecot
   public_name = LOGIN
   server_socket = /var/run/dovecot/auth-client
   server_set_id = $auth1
В dovecot в конфиге:

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

 socket listen {
    master {
      path = /var/run/dovecot/auth-master
      mode = 0666
    }
    client {
#Эти настройки отвечают за авторизацию клиентов, в нашей ситуации клиентом выступает dovecot
#когда отвечает на SMTP AUTH
     path = /var/run/dovecot/auth-client
     mode = 0660
     user = mail
    #group = Debian-exim
   }
  }
}
P.S. надеюсь кому и поможет. Ибо другого универсально решения я найти не смог.

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

Re: Авторизация Exim

Непрочитанное сообщение dikens3 » 2012-01-27 17:27:46

Можно было бы и тут почитать или в официальной документации.
http://wiki.lissyara.su/wiki/%D0%90%D1% ... B8_dovecot
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

zander
рядовой
Сообщения: 16
Зарегистрирован: 2008-12-26 13:34:29
Откуда: Россия

Re: Авторизация Exim

Непрочитанное сообщение zander » 2012-05-11 10:02:13

Вопрос по статье. Там есть фраза:
"Можно добавлять в админке пользователей, и пробовать зайти. Конечно, почтой ещё и не пахнет, но папочки посоздавать можно :)"
М-м, имеется ввиду, что создавая в постфиксадминке ящики пользователей и не поднимая сам exim, в почтовой директории должны появляться ящики пользователей? А как же быть с тем, что чтобы папка создалась письмо должно отправить, а без полноценной почты ничто никуда не отправится? Или я что-то не понимаю? Тогда по каким причинам папки могут не создаваться и в чем причину?

Demontager
ефрейтор
Сообщения: 68
Зарегистрирован: 2011-06-27 23:11:48
Откуда: Украина
Контактная информация:

Re: Авторизация Exim

Непрочитанное сообщение Demontager » 2012-07-22 13:54:00

Подскажите, пожалуйста, почему Exim не может залогится в свою базу, (пароль совпадает само собой) ?

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

Jul 22 12:34:45  exim[1660]: failed to expand "${lookup mysql{SELECT domain FROM domains WHERE domain='${domain}' AND (type='LOCAL' OR type='VIRTUAL')}}" while checking a list: lookup of "SELECT domain FROM domains WHERE domain='mydomain.com' AND (type='LOCAL' OR type='VIRTUAL')" gave DEFER: MYSQL connection failed: Access denied for user 'exim'@'localhost' (using password: YES)
В конце статьи написано что у Лисяры была такая проблема с dovecote, а у меня в логе exim.Пробую как и он выставить снова пароль:

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

mysql> use exim;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SET PASSWORD FOR 'exim'@'localhost' = moyparol('exim');
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'moyparol('exim')' at line 1

Demontager
ефрейтор
Сообщения: 68
Зарегистрирован: 2011-06-27 23:11:48
Откуда: Украина
Контактная информация:

Re: Авторизация Exim

Непрочитанное сообщение Demontager » 2012-07-22 15:26:50

Забыл прописать пароль от mysql в конфиге EXIM. Всё работает теперь, почта и туда и от сюда ходит.
А такой вопрос ещё, можно как-то автоматизировать добавление учёток в базу ? Я вносил данные вручную:

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

mysql> use exim;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
 

mysql> INSERT INTO `exim`.`aliases` (`local_part`, `domain`, `recipients`)
    -> VALUES ('root', 'moydomen.com', 'admin@moydomen.com');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `exim`.`blacklist` (`senders`, `when_added`)
    -> VALUES ('blacklister@dot.ru', CURDATE());
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `exim`.`blacklist_host` (`senders`, `when_added`)
    -> VALUES ('12.134.36.100', CURDATE());
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO `exim`.`domains` (`domain`, `type`)
    -> VALUES ('moydomen.com', 'LOCAL');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `exim`.`users` (`login`, `name`, `password`, `uid`, `gid`, `domain`,
    -> `quota`, `status`, `smtp_auth`) VALUES ('admin', 'Admin. System administrator',
    -> ENCRYPT('password-here'), '26', '6', 'moydomen.com', '150', '1', '1');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `exim`.`whitelist` (`senders`, `when_added`)
    -> VALUES ('do-not-reply@google.com', CURDATE());
Query OK, 1 row affected (0.00 sec)

kuts
проходил мимо

Re: Авторизация Exim

Непрочитанное сообщение kuts » 2012-07-29 13:13:43

авторизация exim сделана как в http://wiki.dovecot.org/HowTo/EximAndDovecotSASL
авторизация dovecot сделана как в http://wiki.dovecot.org/AuthDatabase/PasswdFile

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

  passdb passwd-file {
    args = username_format=%n /usr/local/etc/exim/domains/%d
  }
соответсвенно файлы паролей имеют имена доменов, в них хранится кусок логина пользователя до собаки и его пароль. сам логин представляет из себя полный электронный адрес (с собакой и доменом)

при этом наблюдается вот такой глюк:

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

2012-07-29 11:55:23 1SvOLT-0006tk-EK <= "user@domain.ru"@mail.domain.ru H=someadslhost.ru (SamsungNP300) [12.234.56.78] P=esmtpa A=dovecot_login:user@domain.ru S=7205
в заголовках письма имеется вот такой заголовок с полным бредом:

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

Sender: "user@domain.ru"@mail.domain.ru
комментирование строчек server_set_id решило проблему убрав этот заголовок. всё как и говорилось в вики dovecot :)

как ещё можно порешать эту проблему?

chipset
мл. сержант
Сообщения: 113
Зарегистрирован: 2012-05-12 11:24:30

Re: Авторизация Exim

Непрочитанное сообщение chipset » 2012-08-22 9:48:47

Настраивал по статье http://www.lissyara.su/articles/freebsd ... tfixadmin/ вроде все работает телнется на потовик но не авторизуется. С почтовой программы тоже заваливается на авторизации. Что может быть не так.

chipset
мл. сержант
Сообщения: 113
Зарегистрирован: 2012-05-12 11:24:30

Re: Авторизация Exim

Непрочитанное сообщение chipset » 2012-08-22 9:49:50

И напрягает еще это:

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

/usr/local/etc/rc.d/dovecot start
Starting dovecot.
If you have trouble with authentication failures,
enable auth_debug setting. See http://wiki.dovecot.org/WhyDoesItNotWork
This message goes away after the first successful login.