exim + dovecot + mysql

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
fletch
рядовой
Сообщения: 10
Зарегистрирован: 2010-02-01 13:46:19

exim + dovecot + mysql

Непрочитанное сообщение fletch » 2010-02-01 14:42:36

Помогите, уже замучался с довекотом и экзимом.
Вот лог экзима:

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

2010-02-01 12:41:05 no host name found for IP address 192.168.7.78
2010-02-01 12:41:05 Delay 5s for  [192.168.7.78] with HELO=[127.0.0.1]. Mail from admin@eximet.com.ua to test@eximet.com.ua.
2010-02-01 12:41:11 Delay 5s for  [192.168.7.78] with HELO=[127.0.0.1]. Mail from admin@eximet.com.ua to test@eximet.com.ua.
2010-02-01 12:41:16 1NbtiW-00024M-SM <= admin@eximet.com.ua H=([127.0.0.1]) [192.168.7.78] I=[192.168.7.167]:25 P=esmtpa A=auth_cram_md5: S=531 id=4B66AE66.9050604@eximet.com.ua from <admin@eximet.com.ua> for test@eximet.com.ua
2010-02-01 12:41:16 1NbtiW-00024M-SM == test@eximet.com.ua R=dovecot_user T=dovecot_delivery defer (0): Child process of dovecot_delivery transport returned 75 (could mean temporary error) from command: /usr/lib/dovecot/deliver
Лог довекота:

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

Feb 01 12:41:16auth(default): Info: master in: USER     1       test@eximet.com.ua      service=deliver
Feb 01 12:41:16auth-worker(default): Info: sql(test@eximet.com.ua): SELECT 501 AS `uid`, 12 AS `gid` FROM `mailbox` WHERE `username` = 'test@eximet.com.ua' AND `active`='1'
Feb 01 12:41:16auth(default): Info: master out: USER    1       test@eximet.com.ua      uid=501 gid=12
Feb 01 12:41:16deliver(test@eximet.com.ua): Info: auth input: uid=501
Feb 01 12:41:16deliver(test@eximet.com.ua): Info: auth input: gid=12
exim.conf:

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

primary_hostname = mail.eximet.com.ua
hide mysql_servers = localhost/exim2/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'}}
domainlist local_domains = eximet.com.ua
domainlist relay_to_domains = eximet.com.ua
hostlist   relay_from_hosts = localhost:127.0.0.0/8
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data
#av_scanner = clamd:/var/lib/clamav/clamd.sock
#spamd_address = 127.0.0.1 783
qualify_domain = eximet.com.ua
qualify_recipient = eximet.com.ua
allow_domain_literals = false
exim_user = exim
exim_group = mail
never_users = root
rfc1413_query_timeout = 0s
ignore_bounce_errors_after = 5m
timeout_frozen_after = 1d
freeze_tell = admin@eximet.com.ua
helo_accept_junk_hosts = 192.168.7.0/24
auto_thaw = 5m
smtp_banner = "$primary_hostname, ESMTP EXIM $version_number"
smtp_accept_max = 50
smtp_accept_max_per_connection = 25
smtp_connect_backlog = 30
smtp_accept_max_per_host = 20
split_spool_directory = true
remote_max_parallel = 5
return_size_limit = 100k
message_size_limit = 10M
helo_allow_chars = _
smtp_enforce_sync = true
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
begin acl
acl_check_rcpt:
  accept  hosts = :
  deny    message       = "Недопустимые символы в адресе"
          domains       = +local_domains
          local_parts   = ^[.] : ^.*[@%!/|]
  deny    message       = "Недопустимые символы в адресе"
          domains       = !+local_domains
          local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
#  accept  local_parts   = postmaster
#          domains       = +local_domains
#  require verify        = sender
  deny    message       = "HELO/EHLO is required by SMTP RFC"
          condition     = ${if eq{$sender_helo_name}{}{yes}{no}}
  deny    message       = "No IP in HELO is allowed!"
          hosts         =  * : !+relay_from_hosts : !192.168.7.0/24
          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       = "This is my ip! GTFO!"
  deny    condition     = ${if match{$sender_helo_name}\
                          {\N^\d+$\N}{yes}{no}}
          hosts         = !127.0.0.1:!localhost:*
          message       = "Only digits in HELO. You must be kidding!"
  deny    message       = "Please, buy a domain"
          condition     = ${if match{$sender_host_name} \
                               {adsl|dialup|pool|peer|dhcp} \
                               {yes}{no}}
  warn
        set acl_m0 = 5s
  warn
        hosts = +relay_from_hosts
        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
  accept  domains       = +local_domains
          endpass
          message       = "No such user in this domain"
          verify        = recipient
  accept  domains       = +relay_to_domains
          endpass
          message       = "Can't find route to host"
          verify        = recipient
  accept  hosts         = +relay_from_hosts
  deny    message       = "Get out. This is not an open relay."
acl_check_data:
  deny message = "this is spam - denied"
  condition = ${if match{$message_body} \
              {105[-_]*51[-_]*86|778[-_]*98[-_]*94} \
              {yes}{no}}
  #deny malware = *
  #message = "Virus detected - $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}'}}
#Dovecot mail delivery:
dovecot_user:
  driver = accept
  condition = ${lookup mysql{SELECT `username` FROM `mailbox` WHERE `active`='1' AND `username`='${quote_mysql:$local_part@$domain}' OR `username`='${quote_mysql:@$domain}'}}
  transport = dovecot_delivery
begin transports
remote_smtp:
  driver = smtp
dovecot_delivery:
  driver = pipe
  command = /usr/lib/dovecot/deliver -d $local_part@$domain -f $sender_address
  message_prefix =
  message_suffix =
  delivery_date_add
  envelope_to_add
  return_path_add
  log_output
  user = dovecot
  group = mail
  temp_errors = 64 : 69 : 70 : 71 : 72 : 73 : 74 : 75 : 78
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}'}{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
dovecot.conf:

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

base_dir = /var/run/dovecot/
protocols = pop3
listen = *
ssl = no
disable_plaintext_auth = no
shutdown_clients = yes
log_timestamp = "%b %d %H:%M:%S"
syslog_facility = mail
log_path=/var/log/dovecot.log
info_log_path=/var/log/dovecot-errors.log
auth_debug = yes
mail_debug = yes
login_dir = /var/run/dovecot/login
login_chroot = yes
login_user = dovecot
login_process_size = 64
login_process_per_connection = yes
login_processes_count = 3
login_max_processes_count = 128
login_max_connections = 256
login_greeting = Dovecot ready.
login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c
login_log_format = %$: %s
mail_location = maildir:/var/spool/exim/%d/%n
mail_privileged_group = mail
first_valid_uid = 500
first_valid_gid = 1
#umask = 0077
protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
protocol lda {
  postmaster_address = admin@eximet.com.ua
  auth_socket_path = /var/run/dovecot/auth-master
}
auth default {
  mechanisms = plain
  socket listen {
   master {
    path = /var/run/dovecot/auth-master
    mode = 0600
    user = dovecot
    group = mail
    }
  }
passdb sql {
args = /etc/dovecot/dovecot-sql.conf
 }
userdb sql {
args = /etc/dovecot/dovecot-sql.conf
 }
user = root
}
plugin {
} 
dovecot-sql.conf:

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

driver = mysql
connect = host=localhost dbname=exim2 user=exim password=exim
default_pass_scheme = PLAIN
password_query = SELECT `username` as `user`, `password` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'
#user_query = SELECT `maildir` AS `home`, 501 AS `uid`, 2 AS `gid` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'
user_query = SELECT 501 AS `uid`, 12 AS `gid` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'
#password_query = SELECT concat(userid, '@', domain) AS user, password FROM users WHERE userid = '%n' AND domain = '%d'
#user_query = SELECT home, uid, gid FROM users WHERE userid = '%n' AND domain = '%d' 

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

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

Re: exim + dovecot + mysql

Непрочитанное сообщение hizel » 2010-02-01 15:03:54

включите для protocol lda { логи, типа

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

  log_path = /var/log/dovecot-deliver.log
  info_log_path = /var/log/dovecot-deliver.log
и смотрите там
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

fletch
рядовой
Сообщения: 10
Зарегистрирован: 2010-02-01 13:46:19

Re: exim + dovecot + mysql

Непрочитанное сообщение fletch » 2010-02-01 15:29:05

спасибо, сейчас пишет в dovecot-deliver.log:

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

Feb 01 14:32:12deliver(test@eximet.com.ua): Fatal: setuid(501) failed with euid=76(dovecot): Operation not permitted
Где права подкрутить?

fletch
рядовой
Сообщения: 10
Зарегистрирован: 2010-02-01 13:46:19

Re: exim + dovecot + mysql

Непрочитанное сообщение fletch » 2010-02-01 15:37:07

Всё, разобрался, забегала наконец-то.
Надо было в соответствии с официальной вики поставить группу и права на бинарник deliver.

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

[root@getaway samba]# chgrp mail /usr/lib/dovecot/deliver
[root@getaway samba]# chmod 04750 /usr/lib/dovecot/deliver
[root@getaway samba]# ls -la /usr/lib/dovecot/deliver
-rwsr-x--- 1 root mail 945416 Янв 28 23:19 /usr/lib/dovecot/deliver

fletch
рядовой
Сообщения: 10
Зарегистрирован: 2010-02-01 13:46:19

Re: exim + dovecot + mysql

Непрочитанное сообщение fletch » 2010-02-01 15:56:44

Не тут то было. Забегала только локально. В пределах домена. На другие отправлять не хочет.

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

2010-02-01 14:49:28 no host name found for IP address 192.168.7.78
2010-02-01 14:49:28 Delay 5s for  [192.168.7.78] with HELO=[127.0.0.1]. Mail from admin@eximet.com.ua to fletch.dp@gmail.com.
2010-02-01 14:49:33 H=([127.0.0.1]) [192.168.7.78] I=[192.168.7.167]:25 F=<admin@eximet.com.ua> rejected RCPT <fletch.dp@gmail.com>: "Get out. This is not an open relay."
Знаю, что это относится к экзиму, но не нашел на форуме, если знаете - плиз ткните носом.
И второй вопрос. Хотелось бы, чтоб клиенты при настройке почтовика не фигачили в поле логина весь адрес, а только его часть до @ Понимаю, что это надо поправить в dovecot-sql.conf.

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

Re: exim + dovecot + mysql

Непрочитанное сообщение hizel » 2010-02-01 16:01:42

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

fletch
рядовой
Сообщения: 10
Зарегистрирован: 2010-02-01 13:46:19

Re: exim + dovecot + mysql

Непрочитанное сообщение fletch » 2010-02-01 16:06:35

hizel писал(а):суид не секурно :(
вам обязательно Multiple UIDs?
а с виртуальными пользователями разве есть другой способ? тем более это настроил после нескольких дней мук. больше трогать довекот без нужды не хочется :smile:

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

Re: exim + dovecot + mysql

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

запутки :(
я оказывается держу процесс авторизации под рутом

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

>ps auxww | grep dovecot-auth
root       1561  0.0  0.1  6204  2556  ??  S    10Jan10   0:30.52 dovecot-auth
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

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

Re: exim + dovecot + mysql

Непрочитанное сообщение hizel » 2010-02-01 16:35:37

а, не заметил :)

у вас я не вижу авторизации и видимо должно пропускаться через правило

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

accept  hosts         = +relay_from_hosts
значит надо добавить в relay_from_hosts подсеть вашу локальную

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