Оптимизация exim

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Alfi
проходил мимо

Оптимизация exim

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

Добрый день, хочу с вами посоветоватся, задача перед почтовым сервером стоит отправлять почту ТОЛЬКО от аутентифицированных пользователей и ТОЛЬКО если он подключен по TLS.
Вот часть моего конфига

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

begin acl

acl_check_connect:

        accept  hosts           = localhost
                control         = no_enforce_sync

        accept

acl_check_auth:

       accept encrypted        = *
       accept condition        = ${if eq{${uc:$smtp_command_argument}}{CRAM-MD5}}
       deny   message          = TLS encryption required


acl_check_rcpt:

        accept  hosts           = :

        accept  hosts           = +relay_from_hosts

        accept  authenticated   = *

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

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

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

        deny    message         = $sender_host_address is not allowed to send mail from $sender_address_domain
                spf             = softfail:fail

        deny    message         = "Your IP in HELO - access denied!"
                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 : !+relay_from_hosts : *
                message         = "my IP in your HELO! Access denied!

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

        deny    condition       = ${if match{$sender_address}{\N^\s+$\N}{yes}{no}}
                hosts           = !127.0.0.1 : !localhost : !+relay_from_hosts : *
                message         = "Sender address contains spaces?! not for RFC..."
        deny    condition       = ${if eq{$sender_address}{}{yes}{no}}
                hosts           = !127.0.0.1 : !localhost : !+relay_from_hosts : *
                message         = "Sender address is empty?! not for RFC..."

        deny    condition       = ${lookup mysql{SELECT `goto` FROM `alias` WHERE `address`='${quote_mysql:$local_part@domain.ru}'}{no}{yes}}
                hosts           = !127.0.0.1 : !localhost : !+relay_from_hosts : *
                message         = "No such user!"

        deny    hosts           = !+relay_from_hosts : *
                dnslists        = bl.spamcop.net : cbl.abuseat.org : zen.spamhaus.org
                message         = "you in blacklist - $dnslist_domain \n $dnslist_text"

        warn    set acl_m0      = 30s

        warn    hosts           = +relay_from_hosts : 127.0.0.1/8
                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         = "In my mailserver not stored this user"
                verify          = recipient

        accept  domains         = +relay_to_domains
                endpass
                message         = "main server not know how relay to this address"
                verify          = recipient

        deny    message         = "No, there is no open relays here :)"
Соответственно есть 4 попытки подключения
1)без TLS и без AUTH попытка выдает No such user!
2)с TLS но без AUTH - попытка выдает No such user!
3)без TLS но с AUTH - попытка выдает TLS encryption required
4)с TLS с AUTH - почта отправляется

No such user он выдает из-за этого правила:

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

       deny    condition       = ${lookup mysql{SELECT `goto` FROM `alias` WHERE `address`='${quote_mysql:$local_part@domain.ru}'}{no}{yes}}
                hosts           = !127.0.0.1 : !localhost : !+relay_from_hosts : *
                message         = "No such user!"
собственно вопрос почему по 1 пункту не рубится на acl_check_auth а по 3 рубится? можно как-нибудь сделать чтобы он не проходил весь цикл проверок?
И вообще посоветуйте как можно оптимизировать данный конфиг, любой критике буду рад

Хостинговая компания 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/
Выделенные сервера, Россия, Москва, от 2460 рублей (8 CPU, 8Gb RAM, 2x500Gb HDD, RAID 3ware 9750):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

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

Re: Оптимизация exim

Непрочитанное сообщение Alfi » 2010-02-01 15:32:36

Ещё 1 проблема тестил всё это на mozilla thunderbird,там отлично работает. Когда поставил outlook 2003 и попытался отправить письмо оно почему то не прошло по

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

accept  authenticated   = *
и пошло по всем правилам уткнувшись в 30 секундную задержку

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

Re: Оптимизация exim

Непрочитанное сообщение dikens3 » 2010-02-01 18:29:46

Могу предположить, что вы запрашиваете TLS только при команде AUTH. Т.е. всё работает верно, а вы неверно поняли что сами же и написали.

Т.е. если клиент(Thunderbird, bat и т.п.) даёт команду AUTH, он обязан быть подключен по TLS.
Соответственно если не даёт AUTH, то и не обязан. Что в принципе верно. (Понятно почему? подключение серверов как клиентов может не быть осуществлено по TLS, тот же mail.ru к примеру.)
1)без TLS и без AUTH попытка выдает No such user!
Это можно выяснить с помощью отладки (прилепленная тема - полезные скрипты). Там всё выясниться.


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

            hosts           = !127.0.0.1 : !localhost : !+relay_from_hosts : *
Я рекомендую по русски писать:

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

            !hosts           = 127.0.0.1 : localhost : +relay_from_hosts
можно как-нибудь сделать чтобы он не проходил весь цикл проверок?
Кто он? А вообще порядок сверху вниз до первого accept/deny и т.п.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.