Fetchmail медленно принимает почту.

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
oleks1y
рядовой
Сообщения: 35
Зарегистрирован: 2009-06-30 11:30:45

Fetchmail медленно принимает почту.

Непрочитанное сообщение oleks1y » 2009-07-15 12:03:59

На серваке установлен Exim, настроен по статье http://www.lissyara.su/?id=1837&commented=1#voting (OS FreeBSD 7.0). Внутри локалки почта работает без проблем и тормозов (локальный домен myfirm.ua, ящики users@myfirm.ua). Прикрутил fetchmail для забора почты с ящика прова myfirm@provider.net, вот его конфиг:

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

set postmaster "admin@myfirm.ua"
defaults        protocol pop3,
                timeout 60,
                keep,         
                flush
set logfile /var/log/fetchmail.log
set daemon 900
poll pop.provider.net proto pop3
envelope X-Envelope-To localdomains myfirm.ua
user "myfirm"
password "12345"
is root
fetchdomains myfirm.ua
is "*" = to "*"
norewrite
smtphost 127.0.0.1
Проблема в следующем, fetchmail выгребает порядка 25 писем маленького размера очень долго (30 минут). Как-то можно ускорить его работу? Конфиг Exim такой же как в исходной статье http://www.lissyara.su/?id=1837&commented=1#voting за исключением того, что заккоментировал строки:

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

# dnslookup:
#  driver = dnslookup
#  domains = ! +local_domains
#  transport = remote_smtp
#  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
#  no_more
а добавил:

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

smarthost:
driver = manualroute
domains = ! +local_domains
transport = remote_smtp
route_list = * smtp.provider.net

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

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35466
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Fetchmail медленно принимает почту.

Непрочитанное сообщение Alex Keda » 2009-08-27 12:39:29

в логах что
Убей их всех! Бог потом рассортирует...

Аватара пользователя
konstantine
ефрейтор
Сообщения: 55
Зарегистрирован: 2009-03-14 11:51:17

Re: Fetchmail медленно принимает почту.

Непрочитанное сообщение konstantine » 2010-07-13 20:05:11

Делал по 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: Решений "искаропки" под конкретную задачу - катастрофически мало.
Любое боле-мене серьёзное решение - это кручение коробки под себя.