Страница 1 из 1
Не могу отправить письма не из нашей сети
Добавлено: 2014-02-19 21:49:34
dimish
Никак не могу понять, почему не отправляются письма не из нашей сети. Раньше была просто банально не нужно, теперь пытаюсь наладить. Связка exim+dovecot.
Если отправлять из нашей локальной сети - всё нормально. Если снаружи, вижу следующее:
Это стандартный андроидовский клиент (не уходит. в программе пишет неверное имя пользователя и пароль):
Код: Выделить всё
Feb 19 22:29:29 freebsd exim[2194]: no host name found for IP address 78.25.121.178
Feb 19 22:29:29 freebsd exim[2194]: auth_plain authenticator failed for (localhost) [78.25.121.178] I=[m.y.i.p]:25: 535 Incorrect authentication data (set_id=mishurovskiy@mydomain.com)
А это через k-9 mail (уходит)
Код: Выделить всё
Feb 19 22:34:32 freebsd exim[2248]: no host name found for IP address 78.25.121.178
Feb 19 22:34:34 freebsd exim[2248]: 1WGByb-0000aG-CS <= mishurovskiy@mydomain.com H=([100.85.162.188]) [78.25.121.178] I=[m.y.i.p]:25 P=esmtpa A=auth_cram_md5:mishurovskiy@mydomain.com S=1451 id=aae3b685-6d68-4b20-9a0f-a23dfc307417@email.android.com from <mishurovskiy@mydomain.com> for myemail@qip.ru
Через аутлук не уходит.
Ааа.. Я так понял какая-то не та авторизация у меня стоит? Что поколупать? И что это за H=([100.85.162.188]) при отправка через k-9 mail?
Re: Не могу отправить письма не из нашей сети
Добавлено: 2014-02-19 23:26:04
xM
У вас же открытым текстом написано что не так в логе.
Смотрите методы аутентификации.
Re: Не могу отправить письма не из нашей сети
Добавлено: 2014-02-20 8:38:48
dimish
Подскажите?

Попробую погадать.

Возможно exim не верно интерпретирует переданную клиентом информацию при способе Plain. Почему? Вот кусок конфига про аутентификацию:
Код: Выделить всё
begin authenticators
auth_plain:
driver = plaintext
public_name = PLAIN
server_condition = ${lookup mysql{SELECT `username` FROM \
`mailbox` WHERE `username` = \
'${quote_mysql:$1}' AND `password` = \
'${quote_mysql:$2}'}{yes}{no}}
server_prompts = :
server_set_id = $2
auth_login:
driver = plaintext
public_name = LOGIN
server_condition = ${lookup mysql{SELECT `username` FROM \
`mailbox` WHERE `username` = \
'${quote_mysql:$1}' AND `password` = \
'${quote_mysql:$2}'}{yes}{no}}
server_prompts = Username:: : Password::
server_set_id = $1
auth_cram_md5:
driver = cram_md5
public_name = CRAM-MD5
server_secret = ${lookup mysql{SELECT `password` FROM \
`mailbox` WHERE `username` \
= '${quote_mysql:$1}'}{$value}fail}
server_set_id = $1
Re: Не могу отправить письма не из нашей сети
Добавлено: 2014-02-20 10:29:28
dimish
Ахаха.. Вы не поверите, в чём, собственно, оказывается дело.

С андроидовскими клиентами - фиг с ними, это я разобрался.
Суть проблемы в том, что у пользователей не уходит почта из аутлука, когда они подключаются по 3ж. А иногда уходит.. И звонят они мне из командировок ночью и жутко матеряться.

Оказывается, просто некоторые ip операторов, занесены в спамерские блэклисты. А некоторые не занесены.

Как повезёт. А я из-за циклопичности лога и непоняток кто, собственно, конектится и не замечал, пока сам не протестировал.
Вопрос в лоб: существует ли какой-нибудь красивый метод решить этот вопрос кроме: а) выдать всем статический ip. б) добавить все диапазоны операторов в белый лист?
Re: Не могу отправить письма не из нашей сети
Добавлено: 2014-02-20 13:23:00
snorlov
А не поможет ли волшебное слово vpn...
Re: Не могу отправить письма не из нашей сети
Добавлено: 2014-02-20 14:04:23
xM
dimish писал(а):Оказывается, просто некоторые ip операторов, занесены в спамерские блэклисты. А некоторые не занесены.

Как повезёт. А я из-за циклопичности лога и непоняток кто, собственно, конектится и не замечал, пока сам не протестировал.
Это решается грамотной настройкой Exim, когда почта от своих аутентифицированных пользователей не проверяется на вхождение в DNS BL.
Re: Не могу отправить письма не из нашей сети
Добавлено: 2014-02-21 9:02:50
dimish
vpn сложный процесс, требующий помощи в настройке на каждом устройстве. В принципе у меня есть вэб интерфейс, которым все желающие могут пользоваться, да и то это вызывает кучу лучей поноса, ибо "слишком много кнопочек надо нажимать".
По поводу "грамотной настройки". Ну, я пользуюсь почти стандартным конфигом, который здесь же и брал. Там, вроде, аутентификация должна проходить до bl, (accept authenticated = * , если я правильно понял) однако, что-то не стреляет. Вот, может взгляните трезвым взглядом?
Код: Выделить всё
begin acl
# Эти правила срабатывают для каждого получателя
acl_check_rcpt:
# принимать сообщения которые пришли с локалхоста,
# не по TCP/IP
accept hosts = 77.221.130.213 : 89.104.88.106 : 78.25.121.162 :
# Запрещаем письма содержащие в локальной части
# символы @; %; !; /; |. Учтите, если у вас было
# `percent_hack_domains` то % надо убрать.
# Проверяются локальные домены
deny message = "Wrong symbol in adress"
domains = +local_domains
local_parts = ^[.] : ^.*[@%!/|]
# Проверяем недопустимые символы для
# нелокальных получателей:
deny message = "Wrong symbol in address"
domains = !+local_domains
local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
# Запрещаем, если невозможно проверить отправителя
# (отсутствует в списке локальных пользователей)
# У себя я это закоментил, по причине, что некоторые
# железяки (принтеры, & etc) и программы (Касперский, DrWEB)
# умеют слать почту, в случае проблем но не умеют ставить
# нужного отправителя. Такие письма эта проверка не пускает.
# require verify = sender
# Запрещщаем тех, кто не обменивается приветственными
# сообщениями (HELO/EHLO)
deny message = "HELO/EHLO not by SMTP RFC"
condition = ${if eq{$sender_helo_name}{}{yes}{no}}
# Принимаем сообщения от тех, кто аутентифицировался:
# Вообще, большинство конфигов в рунете - это один и тот же
# конфиг написанный Ginger, в котором этот пункт расположен
# внизу. Но при таком расположении рубятся клиенты с adsl,
# ppp, и прочие зарезанные на последующих проверках. Но это
# жа неправильно! Этом мои пользователи из дома! Потому
# я это правило расположил до проверок.
accept authenticated = *
# Рубаем нах, тех, кто подставляет свой IP в HELO
deny message = "Not send your IP as HELO!"
hosts = *:!+relay_from_hosts
condition = ${if eq{$sender_helo_name}{$sender_host_address}{true}{false}}
# Рубаем тех, кто в HELO пихает мой IP (2500 за месяц!)
deny condition = ${if eq{$sender_helo_name}{$interface_address}{yes}{no}}
hosts = !127.0.0.1 : !localhost : *
message = "Wrong IP. Get out!"
# Рубаем тех, кто в HELO пихает только цифры
# (не бывает хостов ТОЛЬКО из цифр)
deny condition = ${if match{$sender_helo_name}{\N^\d+$\N}{yes}{no}}
hosts = !127.0.0.1:!localhost:*
message = "Wrong HELO. Get out!"
# Рубаем хосты типа *adsl*; *dialup*; *pool*;....
# Нормальные люди с таких не пишут. Если будут
# проблемы - уберёте проблемный пункт (у меня клиенты
# имеют запись типа asdl-1233.zone.su - я ADSL убрал...)
deny message = "Suspicious host.. Get out!"
condition = ${if match{$sender_host_name}{dialup|pool|peer|dhcp}{yes}{no}}
# Рубаем тех, кто в блэк-листах. Серваки перебираются
# сверху вниз, если не хост не найден на первом, то
# запрашивается второй, и т.д. Если не найден ни в одном
# из списка - то почта пропускается.
deny message = "host in blacklist - $dnslist_domain \n $dnslist_text"
hosts = !192.168.1.0/24 : *
dnslists = opm.blitzed.org : \
proxies.blackholes.easynet.nl : \
cbl.abuseat.org : \
bl.spamcop.net : \
# bl.csma.biz : \
dynablock.njabl.org : \
# Задержка. (это такой метод борьбы со спамом,
# основанный на принципе его рассылки) На этом рубается
# почти весь спам. Единственно - метод неприменим на
# реально загруженных MTA - т.к. в результате ему
# приходится держать много открытых соединений.
# но на офисе в сотню-две человек - шикарный метод.
#
# более сложный вариант, смотрите в статье по exim и
# курьер имап. Т.к. там метод боле умный (просто правил
# больше :), то можно и на более загруженные сервера ставить)
warn
# ставим дефолтовую задержку в 20 секунд
set acl_m0 = 15s
warn
# ставим задержку в 0 секунд своим хостам и
# дружественным сетям (соседняя контора :))
hosts = +relay_from_hosts : 192.168.0.0/20 :
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
# Проверка получателя в локальных доменах.
# Если не проходит, то проверяется следующий ACL,
# и если непрошёл и там - deny
accept domains = +local_domains
endpass
message = "Account Unavailable"
verify = recipient
# Проверяем получателя в релейных доменах
# Опять-таки если не проходит -> следующий ACL,
# и если непрошёл и там - deny
accept domains = +relay_to_domains
endpass
message = "Wrong Host"
verify = recipient
# Разрешаем почту от доменов в списке relay_from_hosts
accept hosts = +relay_from_hosts
# Если неподошло ни одно правило - чувак явно ищет
# открытый релей. Пшёл прочь. :)
deny message = "Get out! 07"
Re: Не могу отправить письма не из нашей сети
Добавлено: 2014-02-21 15:36:12
dimish
Ну, не знаю, в общем, как правильно, поставил accept senders перед проверкой dns bl и внёс туда несколько самых яростных пользюков 3ж. Наверное меня теперь спамом завалят. =(
Re: Не могу отправить письма не из нашей сети
Добавлено: 2014-02-22 0:41:04
xM
После
у вас acl_check_rcpt работать дальше не должен.
Если он работает, то, очевидно, аутентификация клиентом пройдена не была.
Re: Не могу отправить письма не из нашей сети
Добавлено: 2014-02-23 16:15:25
xM
Кстати, для того, чтобы юзеры корректно авторизовывались на вашем сервере можете перед проверкой на DNS BL вставить
Код: Выделить всё
# --- accept authenticated users for own domains only
deny message = Authentication need to relay.
hosts = !127.0.0.1 : !localhost : *
domains = +local_domains
sender_domains = +local_domains
Re: Не могу отправить письма не из нашей сети
Добавлено: 2014-02-24 11:32:52
dimish
Спасибо. На самом деле это я - дебил.

При тестировании просто забыл поставить галочку в клиенте, что требуется смтп аутентификация. Но, хоть с андроидовскими клиентами разобрался и руководство по экзиму переколупал.
