exim+dovecot+postfixadmin+mysql+tls

1) Postfixadmin.

Установка и настройки ничем не отличаются от тех, которые описаны здесь. В том числе создание базы в MySQL и назначение прав юзеру.

2) Dovecot.

Перейдём сразу к настройкам:

base_dir = /var/run/dovecot/
protocols = imap imaps pop3 pop3s
listen = *
disable_plaintext_auth = no
log_path = /var/log/maillog
log_timestamp = "%b %d %H:%M:%S "
syslog_facility = mail
ssl_cert_file = /etc/ssl/smtpd.pem
ssl_key_file = /etc/ssl/smtpd.pem
mail_location = maildir:/var/mail/exim/%h
mail_privileged_group = mail
dotlock_use_excl = yes
verbose_proctitle = yes
first_valid_uid = 26
first_valid_gid = 26
maildir_copy_with_hardlinks = yes
protocol imap {
login_greeting_capability = no
imap_client_workarounds = delay-newmail outlook-idle netscape-eoh  tb-extra-mailbox-sep
}
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
protocol lda {
postmaster_address = postmaster@example.com
auth_socket_path = /var/run/dovecot/auth-master
}
auth_default_realm = domain.tld
auth_username_format = %Lu
auth_verbose = no
auth_debug = no
auth default {
mechanisms = plain
passdb pam {
}
passdb sql {
args = /usr/local/etc/dovecot-sql.conf
}
userdb passwd {
args = blocking=yes
}
userdb sql {
args = /usr/local/etc/dovecot-sql.conf
}
user = root
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = mailnull
group = mail
}
client {
path = /var/run/dovecot/auth-client
mode = 0660
user = mailnull
group = mail
}
}
}
dict {
}
plugin {
}

Ставим права на этот файл 444 и владелец root:wheel

Содержимое /usr/local/etc/dovecot-sql.conf

driver = mysql
connect = host=localhost user=postfixadmin password=postfixadmin dbname=postfixadmin
default_pass_scheme = MD5
user_query = SELECT maildir AS home, 26 AS uid, 26 AS gid FROM mailbox WHERE username = '%n@%d'
password_query = SELECT password AS password FROM mailbox WHERE username = '%n@%d' AND active = '1'

Ставим права на этот файл 640 и владелец dovecot:mailnul

3) exim

Перед установкой внесём изменения в /etc/make.conf:

PORTSDIR?=      /usr/ports
.if ${.CURDIR} == ${PORTSDIR}/mail/exim
WITH_MYSQL=YES
WITH_TLS=YES
WITH_MAILDIR=YES
WITH_AUTH_PLAINTEXT=YES
WITH_AUTH_CRAM_MD5=YES
WITH_AUTH_LOGIN=YES
WITH_SA_EXIM=YES
WITHOUT_IPV6=YES
LOG_FILE_PATH?=syslog
WITH_CONTENT_SCAN=YES
WITH_DEFAULT_CHARSET?=koi8-r
.endif

Ниже приведена конфигурация.

primary_hostname = srv.mail.com
#hide mysql_servers = localhost/postfixadmin/mailuser/mailuser
hide mysql_servers = localhost::(/tmp/mysql.sock)/postfixadmin/mailuser/mailuser
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/16
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data
tls_certificate = /etc/ssl/smtpd.pem
tls_privatekey = /etc/ssl/smtpd.pem
daemon_smtp_ports = 25 : 465 : 587
tls_on_connect_ports = 465
qualify_domain = srv.mail.com
qualify_recipient = srv.mail.com
disable_ipv6 = true
exim_user = mailnull
exim_group = mail
never_users = root
rfc1413_hosts = *
rfc1413_query_timeout = 5s
sender_unqualified_hosts = +relay_from_hosts
recipient_unqualified_hosts = +relay_from_hosts
ignore_bounce_errors_after = 2d
timeout_frozen_after = 7d
log_selector = +all
syslog_timestamp = no
begin acl
acl_check_rcpt:
accept  hosts = :
deny    message       = Restricted characters in address
domains       = +local_domains
local_parts   = ^[.] : ^.*[@%!/|]
deny    message       = Restricted characters in address
domains       = !+local_domains
local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
accept  local_parts   = postmaster
domains       = +local_domain
require verify        = sender
accept  hosts         = +relay_from_hosts
control       = submission
accept  authenticated = *
control       = submission
require message = relay not permitted
domains = +local_domains : +relay_to_domain
require verify = recipient
accept
acl_check_data:
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{$local_part}lsearch{/etc/aliases}}
user = mailnull
group = mail
file_transport = address_file
pipe_transport = address_pipe
userforward:
driver = redirect
check_local_user
file = $home/.forward
no_verify
no_expn
check_ancestor
file_transport = address_file
pipe_transport = address_pipe
reply_transport = address_reply
condition = ${if exists{$home/.forward} {yes} {no} }
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
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_file:
driver = appendfile
delivery_date_add
envelope_to_add
return_path_add
address_reply:
driver = autoreply
begin retry
*                      *           F,2h,15m; G,16h,1h,1.5; F,4d,6h
begin rewrite
begin authenticators
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

Теперь несколько строк об авторизации CRAM_MD5.

Аутентификационный механизм cram_md5 описан в RFC2195. Сервер посылает клиенту строку вызова, и ответ содержит имя пользователя и CRAM-MD5 строки вызова, комбинированные с секретной строкой (паролем), который известен обоим, серверу и клиенту. Таким образом, секретная строка не посылается по сети открытым текстом, что делает этот аутентификатор более безопасным, чем “plaintext”. Однако, обратная сторона — это то, что секретная строка должна быть доступна в открытом виде с обоих строн.

Иными словами, есть 2 пути: либо не использовать CRAM-MD5, либо нужно добавить в базу ещё одно поле БД, где будет содержаться пароль в чистом виде. Я выберу второй вариант, ибо мне как админу, нужно знать пароли юзеров на почту (мало ли, кто-то забыл). О том, как это сделать, читаем здесь. Теперь прописываем аторизацию CRAM-MD5:

auth_cram_md5:
driver = cram_md5
public_name = CRAM-MD5
server_secret = ${lookup mysql{SELECT `pw_clear` FROM \
`mailbox` WHERE `username` \
= '${quote_mysql:$auth1}'}{$value}fail}
server_set_id = $auth2

4)Последние штрихи.

Добавляем строки в /etc/rc.conf для запуска :

sendmail_enable="NONE"
exim_enable="YES"
dovecot_enable="YES"

Редактируем файл /etc/mail/mailer.conf:

sendmail        /usr/local/sbin/exim
send-mail       /usr/local/sbin/exim
mailq           /usr/local/sbin/exim -bp
newaliases      /usr/local/sbin/exim -bi
hoststat        /usr/local/sbin/exim
purgestat       /usr/local/sbin/exim

После этого меняем владельца файла логов /var/log/maillog на mailnull и запускаем dovecotexim:

#/usr/local/etc/rc.d/dovecot start
#/usr/local/etc/rc.d/exim start

5) Заводим юзеров через postfixadmin и пробуем отправить письмо:

dovecot: Jun 01 15:19:26 Info: imap-login: Login: user=, method=PLAIN, rip=192.168.5.2, lip=192.168.5.129, TLS
Jun  1 15:20:07  exim[3050]: [3050] SMTP connection from [192.168.5.2]:2561 I=[192.168.5.129]:25 (TCP/IP connection count = 1)
Jun  1 15:20:07  exim[11331]: [11331] 1MB9J1-0002wl-5n "user@test.ru" from env-from rewritten as ""user@test.ru"@srv.mail.com" by submission mode
Jun  1 15:20:07  exim[11331]: [11331] 1MB9J1-0002wl-5n <= "user@test.ru"@srv.mail.com H=([192.168.5.2]) [192.168.5.2]:2561 I=[192.168.5.129]:25 P=esmtpa A=auth_plain:user@test.ru S=561 id=4A23D6CC.6030806@test.ru T="dsadas" from for user@test.ru
Jun  1 15:20:07  exim[11331]: [11331] SMTP connection from ([192.168.5.2]) [192.168.5.2]:2561 I=[192.168.5.129]:25 closed by QUIT
Jun  1 15:20:07  exim[11337]: [11337] cwd=/var/spool/exim 3 args: /usr/local/sbin/exim -Mc 1MB9J1-0002wl-5n
deliver(user@test.ru): Jun 01 15:20:07 Info: msgid=<4A23D6CC.6030806@test.ru>: saved mail to INBOX
Jun  1 15:20:07  exim[11337]: [11337] 1MB9J1-0002wl-5n => user F=<"user@test.ru"@srv.mail.com> P=<"user@test.ru"@srv.mail.com> R=dovecot_user T=dovecot_delivery S=677 QT=0s DT=0s
Jun  1 15:20:07  exim[11337]: [11337] 1MB9J1-0002wl-5n Completed QT=0s

Если у вас какие-то ошибки, то сразу будет видно.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *