Оцените конфиги Exim+Dovecot+postfixadmin

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Mike
рядовой
Сообщения: 26
Зарегистрирован: 2008-06-23 12:07:21

Оцените конфиги Exim+Dovecot+postfixadmin

Непрочитанное сообщение Mike » 2008-06-27 12:32:03

Делал по сатье Lissyara, но добавил квоты с помощью Exim. Интересует процесс связки exim+dovecot, правильно ли?
configure

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

#!/bin/sh
primary_hostname = mydomain.com

hide mysql_servers = localhost/exim/exim/mypass
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.1.0/24

acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data

av_scanner = clamd:/var/run/clamav/clamd.sock
# spamd_address = 127.0.0.1 783

qualify_domain = mx.mydomain.com

qualify_recipient = mx.mydomain.com

allow_domain_literals = false

exim_user = mailnull

exim_group = mail

never_users = root

rfc1413_query_timeout = 0s

ignore_bounce_errors_after = 45m

timeout_frozen_after = 1d

freeze_tell = postmaster@mydomain.com

helo_accept_junk_hosts = 192.168.0.0/16

auto_thaw = 1h

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 = 5

split_spool_directory = true

remote_max_parallel = 20

return_size_limit = 70k

message_size_limit = 5M

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

  require verify        = sender

  deny    message       = "HELO/EHLO обязано быть по SMTP RFC"
          condition     = ${if eq{$sender_helo_name}{}{yes}{no}}

  accept  authenticated = *

  
  deny    message       = "Не надо пихать свой IP в качестве 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       = "Это мой IP-адрес! Пшёл прочь!"

  deny    condition     = ${if match{$sender_helo_name}\
			  {\N^\d+$\N}{yes}{no}}
	  hosts         = !127.0.0.1:!localhost:*
          message       = "В HELO не могут быть тока цифры!"

  deny    message       = "Не нравится мне Ваш хост..."
          condition     = ${if match{$sender_host_name} \
                               {adsl|dialup|pool|peer|dhcp} \
                               {yes}{no}}
  deny    message       = "host in blacklist - $dnslist_domain \n $dnslist_text"
          dnslists      = cbl.abuseat.org : \
                          bl.spamcop.net : \
                          bl.csma.biz : \
                          dynablock.njabl.org : \


  warn
        set acl_m0 = 20s
  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       = "В этом домене нет такого пользователя"
          verify        = recipient

  accept  domains       = +relay_to_domains
          endpass
          message       = "Моя сервера не знать маршрут на этот хост..."
          verify        = recipient

  accept  hosts         = +relay_from_hosts

  deny    message       = "Свободен. Это тебе не ОпенРелей."



acl_check_data:

  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}'}}


#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


mysqluser:
  driver = accept
  condition = ${if eq{}{${lookup mysql{SELECT `maildir` FROM `mailbox` \
              WHERE `username`='${quote_mysql:$local_part@$domain}'}}}{no}{yes}}
  transport = mysql_delivery

begin transports

remote_smtp:
    driver = smtp

mysql_delivery:
    driver = appendfile
    check_string = ""
    create_directory
    delivery_date_add
    directory = ${lookup mysql{SELECT CONCAT('/var/spool/exim/', `maildir`) \
                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
quota = ${lookup mysql{SELECT `quota`  \
    FROM `mailbox` WHERE `username`='${local_part}@${domain}'}{${value}}}
quota_warn_message = "\
	To: $local_part@$domain\n\
	From: postmaster@$domain\n\
	Subject: Your maildir is going full\n\
	This message is automaticaly generated by your mail server.\n\
	This means, that your mailbox is 75% full. If you would \n\
	override this limit new mail would not be delivered to you! "
quota_size_regex = S=(\d+)$
quota_warn_threshold = 50%
return_path_add


#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 = exim
		  
		  


address_file:
    driver = appendfile
    delivery_date_add
    envelope_to_add
    return_path_add

address_pipe:
  driver = pipe
  return_output

address_reply:
  driver = autoreply

begin retry

# Address or Domain  Error   Retries
# -----------------  -----   -------
*                    *       F,2h,15m; G,16h,1h,1.5; F,4d,6h
*          quota

begin rewrite

begin authenticators

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

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

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

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

#!/bin/sh

base_dir = /var/run/dovecot/

protocols = imap pop3

listen = *

ssl_disable = yes

disable_plaintext_auth = no


shutdown_clients = yes

log_timestamp = "%b %d %H:%M:%S "

syslog_facility = mail

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_greeting = dovecot MUA ready

login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c

login_log_format = %$: %s

verbose_proctitle = yes

first_valid_uid = 26
first_valid_gid = 0
mail_location = maildir:/var/spool/exim/%d/%n

mail_privileged_group = mail


protocol imap {
login_executable = /usr/local/libexec/dovecot/imap-login

mail_executable = /usr/local/libexec/dovecot/imap

imap_max_line_length = 65536

mail_plugins = trash
mail_plugin_dir = /usr/local/lib/dovecot/imap

login_greeting_capability = yes

imap_client_workarounds = delay-newmail outlook-idle netscape-eoh tb-extra-mailbox-sep
}

protocol pop3 {
login_executable = /usr/local/libexec/dovecot/pop3-login

mail_executable = /usr/local/libexec/dovecot/pop3

pop3_no_flag_updates = no

pop3_enable_last = no

pop3_reuse_xuidl = no

pop3_lock_session = yes

  pop3_uidl_format = %08Xu%08Xv

pop3_logout_format = top=%t/%p, retr=%r/%b, del=%d/%m, size=%s

mail_plugins = trash
mail_plugin_dir = /usr/local/lib/dovecot/pop3

  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}


# своя доставка dovecot - delivery
protocol lda {
  # Куда слать письма про превышение квоты
postmaster_address = postmaster@mydomain.com
mail_plugins = trash
mail_plugin_dir = /usr/local/lib/dovecot/lda
sendmail_path = /usr/sbin/sendmail
auth_socket_path = /var/run/dovecot/auth-master
}


# Дефолтовый realm/domain для использования если домен явно не задан. Это
# используется и для SASL и для добавления @domain к имени пользователя
# в плайнтекст логинах.
auth_default_realm = mydomain.com
#!!! Это для того чтоб можна было логин использовать в виде «user» без доменной части????


auth default {
  mechanisms = plain

   # Добавлено для работы deliver от dovecot
    socket listen {
    master {
    path = /var/run/dovecot/auth-master
       mode = 0600
       user = mailnull
       #group = mail
     }
   }
#Вот это я немного не догоняю, ведь у меня в конфиге Екзима используется mysql-delivery


  # SQL database
  passdb sql {
    args = /usr/local/etc/dovecot-sql.conf
  }


  # SQL database
  userdb sql {
    args = /usr/local/etc/dovecot-sql.conf
  }

  user = root


plugin {
}
dovecot-sql.conf

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

driver = mysql
connect = host=/tmp/mysql.sock dbname=exim user=exim password=WvoS3t57
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`, 26 AS `uid`, 26 AS `gid`, concat('maildir:storage=', quota,':ignore=Trash') AS quota FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'
## 'maildir:storage=', quota,':ignore=Trash' -  ВОТ ЭТО че такое?


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

Непрочитанное сообщение hizel » 2008-06-27 15:57:40

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

Mike
рядовой
Сообщения: 26
Зарегистрирован: 2008-06-23 12:07:21

Re: Оцените конфиги Exim+Dovecot+postfixadmin

Непрочитанное сообщение Mike » 2008-06-28 23:16:48

Это вот это?

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

#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
###########################################

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

#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
Я просто не очень понимаю разницу между "dovecot_delivery" и "mysql_delivery"...
И потом не знаю как прикрутить Екзимовские квоты...
Вот это

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

quota = ${lookup mysql{SELECT `quota`  \
    FROM `mailbox` WHERE `username`='${local_part}@${domain}'}{${value}}}
quota_warn_message = "\
   To: $local_part@$domain\n\
   From: postmaster@$domain\n\
   Subject: Your maildir is going full\n\
   This message is automaticaly generated by your mail server.\n\
   This means, that your mailbox is 75% full. If you would \n\
   override this limit new mail would not be delivered to you! "
quota_size_regex = S=(\d+)$
quota_warn_threshold = 50%
И правильно ли включен плагин Trash в dovecot?


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

Re: Оцените конфиги Exim+Dovecot+postfixadmin

Непрочитанное сообщение hizel » 2008-07-01 11:23:52

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

Mike
рядовой
Сообщения: 26
Зарегистрирован: 2008-06-23 12:07:21

Re: Оцените конфиги Exim+Dovecot+postfixadmin

Непрочитанное сообщение Mike » 2008-07-02 14:26:10

Согласен, но как тогда квоты прикрутить? Экзимовские

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

Re: Оцените конфиги Exim+Dovecot+postfixadmin

Непрочитанное сообщение hizel » 2008-07-02 14:44:47

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

Mike
рядовой
Сообщения: 26
Зарегистрирован: 2008-06-23 12:07:21

Re: Оцените конфиги Exim+Dovecot+postfixadmin

Непрочитанное сообщение Mike » 2008-07-03 15:09:50

А как?
Я попробовал сделать вот так:
в dovecot.conf:

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

## dovecot-lda specific settings
  ##
   socket listen {
     master {
       path = /var/run/dovecot/auth-master
       mode = 0600
       user = mail # User running Dovecot LDA
       #group = mail # Or alternatively mode 0660 + LDA user in this group
     }
   }


protocol imap {
...
  mail_plugins = quota imap_quota
...
}

protocol lda {
...
  mail_plugins = quota
...
}

plugin {
...
quota = maildir
...
}
В exim.conf
в секции routers

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

    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
в секции transport

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

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

Сдесь даже не пойму где задаются эти квоты
И вот так

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

cat /usr/local/etc/dovecot-sql.conf

driver = mysql
connect = host=/var/run/mysql/mysql.sock dbname=mail user=mail password=123456
default_pass_scheme = MD5
user_query = SELECT concat('maildir:',mailhome) as mail, mailhome as home, uid, gid, concat('maildir:storage=', quota,':ignore=Trash') AS quota FROM users WHERE userid = '%n@%d' and active ='Y'
password_query = SELECT userid as user, crypt as password, domain as domain FROM users WHERE userid = '%n@%d' and active='Y'

cat /usr/local/etc/dovecot.conf

#POP3 specific settings

protocol pop3 {
  login_executable = /usr/local/libexec/dovecot/pop3-login
  mail_executable = /usr/local/libexec/dovecot/pop3
  pop3_no_flag_updates = no
  pop3_enable_last = no
  pop3_reuse_xuidl = no
  pop3_lock_session = yes
  pop3_uidl_format = %08Xu%08Xv
  pop3_logout_format = top=%t/%p, retr=%r/%b, del=%d/%m, size=%s
  mail_plugins = quota
  mail_plugin_dir = /usr/local/lib/dovecot/pop3
  pop3_client_workarounds = outlook-no-nuls
}

protocol lda {
  postmaster_address = postmaster@dom.ru
  hostname = mail.dom.ru
  mail_plugins = cmusieve quota
  mail_plugin_dir = /usr/local/lib/dovecot/lda
  sendmail_path = /usr/sbin/sendmail
  auth_socket_path = /var/run/dovecot/auth-master
}

#IMAP specific settings

protocol imap {
  login_executable = /usr/local/libexec/dovecot/imap-login
  mail_executable = /usr/local/libexec/dovecot/imap
  imap_max_line_length = 65536
  mail_plugins = quota imap_quota
  mail_plugin_dir = /usr/local/lib/dovecot/imap
  login_greeting_capability = yes
  imap_client_workarounds = outlook-idle
}
Вот этот плагин он вообще не находит "cmusieve"
Может, подскажешь как правильно, я ведь меньше чем пол года с Юниксом знаком... Или какие нить готовые конфиги...
Буду признателен.