Делал по
http://www.lissyara.su/articles/freebsd ... amassasin/ проблема в следующем:
Сейчас часть configure такой
Код: Выделить всё
# Local_domains включает домены, считающиеся локальными, то есть те домены, для
# которых exim делает локальную доставку, для остальных доменов почта
# доставляется по MX записям в DNS.
domainlist local_domains = ${lookup pgsql{SELECT domain FROM local_domain}}
#domainlist local_domains = mydomain.ru
#Список доменов куда разрешен прием
#domainlist relay_to_domains = ${lookup pgsql{SELECT hosts FROM relaytohosts}}
domainlist relay_to_domains = mydomain.ru
#hostlist relay_from_hosts = ${lookup pgsql{SELECT hosts FROM relayfromhosts}}
hostlist relay_from_hosts = localhost : 127.0.0.0/8 : 192.168.1.200
lookup_cram:
driver = cram_md5
public_name = CRAM-MD5
server_secret = ${lookup pgsql {select password from accounts where login='$1@mydomain.ru'}{$value}fail}
# server_secret = ${lookup pgsql {select password from accounts where login='$1'\@$local_domains}{$value}fail}
server_set_id = $1
# LOGIN аутентификация - не требует хранения пароля в открытом виде, однако, по
# сети пароль передается в открытом виде - требуется лишь выполнение условия
# server_condition - $1 - имя пользователя, а $2 - пароль. LOGIN безопасен
# только при установлении ssl соединения.
login:
driver = plaintext
public_name = LOGIN
server_prompts = Username:: : Password::
server_condition = ${lookup pgsql {select login from accounts where login='$1@mydomain.ru' and password='$2'}{yes}{no}}
# server_condition = ${lookup pgsql {select login from accounts where login='$1'\@$local_domains and password='$2'}{yes}{no}}
server_set_id = $1
Как видно из настроек не работают следующие опции:
Код: Выделить всё
#domainlist relay_to_domains = ${lookup pgsql{SELECT hosts FROM relaytohosts}}
#hostlist relay_from_hosts = ${lookup pgsql{SELECT hosts FROM relayfromhosts}}
#server_secret = ${lookup pgsql {select password from accounts where login='$1'\@$local_domains}{$value}fail}
#server_condition = ${lookup pgsql {select login from accounts where login='$1'\@$local_domains and password='$2'}{yes}{no}}
При этом если в ручную достать relayfromhosts будет:
#exim=# select * from relayfromhosts;
# hosts
#---------------
# localhost
# 127.0.0.0/8
# 192.168.1.200
# 192.168.222.1
# (3 rows)
И достать local_domains
#exim=# SELECT domain FROM local_domain;
# domain
#----------------
# mydomain.ru
#(1 запись)
Так всё нормально работает но, если эти опции врубать так, например в авторизации, то в main konstantine#
Код: Выделить всё
tail -f /var/log/exim/mainlog
2010-07-13 22:46:27 no host name found for IP address 192.168.222.1
2010-07-13 22:46:28 lookup_cram authenticator failed for ([192.168.222.1]) [192.168.222.1]: 435 Unable to authenticate at present (set_id=konstantine): unknown variable name "local_domains"
2010-07-13 22:46:28 login authenticator failed for ([192.168.222.1]) [192.168.222.1]: 435 Unable to authenticate at present (set_id=konstantine): unknown variable name "local_domains"
Не могли бы ткунть носом где я в синтаксисе накосячил ? Как мне сделать чтобы автоматически подставлялись домены из переменной local_domains.
Если делать вообще как в статье сказано:
Код: Выделить всё
#server_secret = ${lookup pgsql {select password from accounts where login='$1'}{$value}fail}
#server_condition = ${lookup pgsql {select login from accounts where login='$1' and password='$2'}{yes}{no}}
То получается так:
2010-07-13 23:16:38 no host name found for IP address 192.168.222.1
2010-07-13 23:16:42 lookup_cram authenticator failed for ([192.168.222.1]) [192.168.222.1]: 535 Incorrect authentication data (set_id=konstantine)
2010-07-13 23:16:42 login authenticator failed for ([192.168.222.1]) [192.168.222.1]: 535 Incorrect authentication data (set_id=konstantine)
Т.е. авторизация не проходит из за того что в $1 попадает ИМЯ пользователя БЕЗ домена, т.е. выход такой нужно самому вручную в постовом клиенте в настройках smtp прописывать имя пользователя
user-name@mydomain.ru и будет
Код: Выделить всё
main konstantine# tail -f /var/log/exim/mainlog
2010-07-13 23:24:37 no host name found for IP address 192.168.222.1
2010-07-13 23:24:49 1OYiHj-0000iv-AX <= user-name@mydomain.ru H=([192.168.222.1]) [192.168.222.1] P=esmtpa A=lookup_cram:user-name@mydomain.ru S=607 id=4C3C92BD.1010606@mydomain.ru
Но блин мы все знаем что по умолчанию в настройках smtp почтовые автоматичекси прописывают только имя пользователя, без домена. Т.е. у меня складывается вывод что в данном случает exim нельзя настроить как МТА для нескольких доменов точнее можно, но в базу логинов нужно хранить только имя пользователя user без домена как описано в статье и тогда если "допустим я" знаю что есть почтовый ящик
konstantine@mydomain1.ru и НЕТ ящика
konstantine@mydomain2.ru. Я зная что один МТА сервер обслуживает получение и отправку почты для этих двух доменов, то значит я свободно смогу отправить письмо с ящика
konstantine@mydomain2.ru используя логин и пароль пользователя в mydomain1.ru и оно отправиться т.к. проверка по ЛОГИНУ пройдёт.
Та же песня с
Код: Выделить всё
#hostlist relay_from_hosts = ${lookup pgsql{SELECT hosts FROM relayfromhosts}}
Если вручную смотреть в Постгресе:
exim=# SELECT hosts FROM relayfromhosts;
hosts
---------------
localhost
127.0.0.0/8
192.168.1.200
192.168.222.1
(4 rows)
Но если отправлять почту с этих хостов без пароля будет:
Код: Выделить всё
2010-07-13 23:57:00 no host name found for IP address 192.168.222.1
2010-07-13 23:57:02 H=([192.168.222.1]) [192.168.222.1] F=<konstantine@mydomain.ru> rejected RCPT <notdrink@mail.ru>
Т.е. не видит он что хост 192.168.222.1 находиться в списках хостов для которых открыт опен релэй. - Приходится так же в ручную в конфиге прописывать список хостов.
Если я в чём то не прав будьте добры объяснить. Заранее благодарю.
@lissyara: Решений "искаропки" под конкретную задачу - катастрофически мало.
Любое боле-мене серьёзное решение - это кручение коробки под себя.