Инструменты пользователя

Инструменты сайта


ustanavlivaem_svjazku_exim_dovecot_na_centos_6

Устанавливаем связку Exim + Dovecot на CentOS 6


1) Установим exim как SMTP сервер и dovecot для сбора почты через POP3.

yum install exim dovecot -y

2) Запишем начальную конфигурацию для exim в файл /etc/exim/exim.conf (не забываем поправить в нем primary_hostname):

Пример начальной конфигурации

Пример начальной конфигурации

primary_hostname = domain
 
log_selector =  \
        +all_parents \
        +lost_incoming_connection \
        +received_sender \
        +received_recipients \
        +tls_cipher +tls_peerdn \
        +smtp_confirmation \
        +smtp_syntax_error \
        +smtp_protocol_error
 
domainlist local_domains = lsearch;/etc/exim/domains
hostlist relay_from_hosts = 127.0.0.1
 
domainlist relay_to_domains = lsearch;/etc/exim/domains
exim_user = exim
exim_group = exim
trusted_users = apache
 
never_users = root
host_lookup = *
rfc1413_hosts = *
rfc1413_query_timeout = 0s
ignore_bounce_errors_after = 1d
timeout_frozen_after = 1d
smtp_accept_max = 500
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data
acl_smtp_mail = acl_check_sender
 
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
                verify        = recipient
                domains       = +local_domains
 
        require verify        = sender
 
        accept  hosts         = +relay_from_hosts
                control       = submission
 
        accept  authenticated = *
                condition     = ${if eq{${extract{5}{:}{${lookup{$authenticated_id}lsearch{/etc/exim/passwd}}}}}{no} {yes}{no}}
                condition     = ${if eq{${extract{3}{:}{${lookup{${domain:$authenticated_id}}lsearch{/etc/exim/domains}}}}}{no} {yes}{no}}
                control       = submission/domain=
 
        deny    message       = rejected because $sender_host_address is in a black list at $dnslist_domain\\n$dnslist_text
                dnslists      = ${readfile {/etc/exim/dnsblists}{:}} 
 
        require message       = relay not permitted
                domains       = +local_domains : +relay_to_domains
 
        require verify        = recipient
 
        accept
 
    acl_check_data:
        accept
 
    acl_check_sender:
        accept
 
begin routers
    dnslookup:
        driver = dnslookup
        transport = remote_smtp
        ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
        self = pass
        no_more
 
    disabled_domains:
        driver = redirect
        condition = ${extract{3}{:}{${lookup{$domain}lsearch{/etc/exim/domains}}}}
        allow_fail = yes
        data = :fail: Domain disabled
        no_more
 
    disabled_users:
        driver = redirect
        condition = ${extract{5}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim/passwd}}}}
        allow_fail = yes
        data = :fail: User disabled
        no_more
 
    local_domains:
        driver = redirect
        data = ${quote_local_part:$local_part}@${extract{1}{:}{${lookup{$domain}lsearch{/etc/exim/domains}}}}
        cannot_route_message = Unknown user
        no_more
 
    group_aliases:
        driver = redirect
        data = ${extract{1}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim/aliases}}}}
        condition = ${if and{\
                        {exists{/etc/exim4/aliases}}\
                        {eq {${extract{2}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim/aliases}}}}} {group} }\
                    } {yes} {no} }
        redirect_router = a_dnslookup
 
    aliases:
        driver = redirect
        data = ${extract{1}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim/aliases}}}}
        condition = ${if exists{/etc/exim/aliases} {yes} {no} }
 
    aliases_pipe:
        driver = accept
        transport = aliases_pipe
        condition = ${lookup {$local_part@$domain} lsearch {/etc/exim/pipe-aliases} {yes} {no} }
 
    local_users:
        driver = redirect
        condition = ${lookup {$local_part@$domain} lsearch {/etc/exim/passwd} {yes} {no} }
        data = $local_part@$domain
        redirect_router = autoreplay
 
    catchall_for_domains:
        driver = redirect
        headers_add = X-redirected: yes
        data = ${extract{2}{:}{${lookup{$domain}lsearch{/etc/exim/domains}}}}
        file_transport = local_delivery
 
    unknown_users:
        driver = redirect
        allow_fail = yes
        data = :fail: Unknown user
        no_more
 
    autoreplay:
        driver = accept
        condition = ${if exists{${extract{4}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim/passwd}}}}/message.txt} {yes} {no}}
        retry_use_local_part
        transport = address_reply
        unseen
 
    localuser:
        driver = accept
        transport = local_delivery
 
# Same routers without autoreplay
 
    a_dnslookup:
        driver = dnslookup
        transport = remote_smtp
        ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
        self = pass
        no_more
 
    a_disabled_domains:
        driver = redirect
        condition = ${extract{3}{:}{${lookup{$domain}lsearch{/etc/exim/domains}}}}
        allow_fail = yes
        data = :fail: Domain disabled
        no_more
 
    a_disabled_users:
        driver = redirect
        condition = ${extract{5}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim/passwd}}}}
        allow_fail = yes
        data = :fail: User disabled
        no_more
 
    a_local_domains:
        driver = redirect
        data = ${quote_local_part:$local_part}@${extract{1}{:}{${lookup{$domain}lsearch{/etc/exim/domains}}}}
        cannot_route_message = Unknown user
        redirect_router = a_dnslookup
        no_more
 
    a_aliases:
        driver = redirect
        data = ${extract{1}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim/aliases}}}}
        condition = ${if exists{/etc/exim/aliases} {yes} {no} }
        redirect_router = a_dnslookup
 
    a_aliases_pipe:
        driver = accept
        transport = aliases_pipe
        condition = ${lookup {$local_part@$domain} lsearch {/etc/exim/pipe-aliases} {yes} {no} }
 
    a_local_users:
        driver = accept
        transport = local_delivery
        condition = ${lookup {$local_part@$domain} lsearch {/etc/exim/passwd} {yes} {no} }
 
    a_catchall_for_domains:
        driver = redirect
        headers_add = X-redirected: yes
        data = ${extract{2}{:}{${lookup{$domain}lsearch{/etc/exim/domains}}}}
        file_transport = local_delivery
        redirect_router = a_dnslookup
 
begin transports
    remote_smtp:
        driver = smtp
 
    local_delivery:
        driver = appendfile
        file = ${extract{4}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim/passwd}}}}/inbox
        delivery_date_add
        envelope_to_add
        return_path_add
        mode = 0660
        quota = ${extract{3}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim/passwd}}}}M
        quota_warn_threshold = 75%
        use_lockfile = no
        no_mode_fail_narrower
        user = ${extract{1}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim/passwd}}}}
        group = ${extract{2}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim/passwd}}}}
 
    address_pipe:
        driver = pipe
        return_output
 
    aliases_pipe:
        driver = pipe
        command = ${extract{1}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim/pipe-aliases}}}}
        use_shell
 
    address_reply:
        driver = autoreply
        headers = ${readfile{${extract{4}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim/passwd}}}}/message.txt}}
        to = $sender_address
 
begin retry
*       *       F,2h,15m; G,16h,1h,1.5; F,4d,6h
 
begin rewrite
 
begin authenticators
 
login:
    driver = dovecot
    public_name = LOGIN
    server_socket = /var/run/dovecot/auth-client
    server_set_id = $1
 
plain:
    driver = dovecot
    public_name = PLAIN
    server_socket = /var/run/dovecot/auth-client
    server_set_id = $1


3) Создадим остальные конфигурационные файлы:

touch /etc/exim/aliases /etc/exim/blacklist /etc/exim/dnsblists /etc/exim/domains /etc/exim/pipe-aliases

4) Запишем конфигурацию для dovecot в файл /etc/dovecot/dovecot.conf :

Конфигурация для Dovecot

Конфигурация для Dovecot

log_path = /var/log/dovecot.log
login_greeting = pop3/imap service.
protocols = imap pop3
auth_mechanisms = plain login cram-md5 digest-md5
service auth {
  unix_listener auth-client {
    mode = 0660
    user = exim
    group = exim
  }
  user = root
}
passdb passwd-file {
  args = /etc/dovecot/passwd
  driver = passwd-file
}
userdb {
  args = /etc/dovecot/passwd
  driver = passwd-file
}
disable_plaintext_auth = no
mail_privileged_group = mail
first_valid_uid = 93
ssl = no
mail_location = mbox:/var/mail/%d/%n


5) Запишем скрипт для создания юзеров, например в /root/addmail.sh :

Скрипт для создания пользователей (ящиков)

Скрипт для создания пользователей (ящиков)

#!/bin/sh

mailuser=$1
pass=$2
hash=`doveadm pw -s MD5 -p $pass`
user=`echo $mailuser |cut -d'@' -f1`
domain=`echo $mailuser |cut -d'@' -f2`
mkdir -p /var/mail/$domain/$user
touch /var/mail/$domain/$user/inbox
chown -R exim:exim /var/mail/$domain
if ! grep $domain /etc/exim/domains >/dev/null
then
    echo "$domain:$domain::no" >>/etc/exim/domains
fi
echo "$mailuser:93:93:0:/var/mail/$domain/$user:no:" >>/etc/exim/passwd
echo "$mailuser:$hash:93:93::/var/mail/$domain/$user:::" >>/etc/dovecot/passwd


Не забываем сделать chmod для него:

chmod +x /root/addmail.sh

Создание нового ящика будет делаться так:

/root/addmail.sh mailbox@domain.com password

6) Стартуем exim и dovecot, а также включаем их в автозагрузку:

chkconfig dovecot on
chkconfig exim on
service dovecot start
service exim start

Источник:

ustanavlivaem_svjazku_exim_dovecot_na_centos_6.txt · Последнее изменение: 2016/04/15 00:00 (внешнее изменение)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki