The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Рассылка спама с моего почтового сервера"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Почта / FreeBSD)
Изначальное сообщение [ Отслеживать ]

"Рассылка спама с моего почтового сервера"  +/
Сообщение от s.zirro email(ok) on 17-Янв-14, 16:41 
Добрый день.
Что есть: сервер на ОС FreeBSD 9.2, почтовый сервер Exim 4.82 с авторизацией пользователей через AD.
Со вчерашнего дня заметил в почте "возвраты" с других почтовых адресов с проблемой "невозможно доставить сообщение", причём с адресов, которым я ничего не отправлял.
Например:
"A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:

  dj-t.point@freenet.de
    SMTP error from remote mail server after RCPT TO:<dj-t.point@freenet.de>:
    host mx.freenet.de [195.4.92.211]: 550 unrouteable address
... "
Стал рытсья в логах сквида и действительно с моего адреса отправляются письма на непонятные адреса. Впопыхах решил, что это на моей машине вирус завёлся и, естественно, проверился несколькими антивирусами (хотя и так штатный есть), а также настроил Exim так, чтобы не мог отсылать почту без аутентификации (каюсь, все остальные пользователи ЛС могут отправлять письма без аутентификации). Проверил на своём почтовом клиенте - без аутентификации не отправляет. Вирусов не нашлось.
Однако, через некоторое время в журнале Exim'а снова наблюдаю отправку почты с моего ящика на левые адреса. Опять же, не вникая в суть, хотел решить вопрос кардинально и сменил свой пароль в AD. Снова проверил на локальном клиенте: со старым паролем ругается и не отправляет, с новым всё работает.
Но в журнале снова вижу что с моего ящика отправляются письма, которые я не посылал.
Стал более детально смотреть журнал и наконец увидел интересную вещь: оказывается соединение с Exim происходит с какого-то внешнего хоста, а не с моего локального адреса.
Например:
2014-01-17 15:16:48 1W47Pp-000MCh-C5 <= мой адрес@мой домен.ru H=(Galina) [91.65.34.20]:52373 I=[IP-адрес моего почтового сервера]:25 P=esmtpsa X=TLSv1.2:AES128-SHA256:128 CV=no SNI="имя моего почтового сервера" A=plain_ldap:мой адрес S=113785 M8S=0 T="=?utf-8?q?Ihre Mahnung -  Lastschrift konnte nicht durchgef=C3=BChrt werden 17.01.2014?=" from <мой адрес@мой домен.ru> for entifique@mudjaheddin.de
Ну, положим, у меня разрешены внешние соединения на 25 порт и кто-то с внешней машины отправляет письма "как будто от меня", но как проходит аутентификация, если я пароль сменил всего час назад на довольно сложный (хотя и до этого стоял не слабый).
Или я может что-то упускаю?
Я могу временно закрыть внешние соединения на 25 порт, но уже опасаюсь что и это не поможет (но помешает работе некоторых удалённых пользователей) и хотелось понять, что в конце концов происходит

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Рассылка спама с моего почтового сервера"  +/
Сообщение от mesmeridze email(ok) on 17-Янв-14, 18:58 
Вы из мира можете отправить письмо использую тот же самый адрес отправителя и получателя? Если да, то скорее всего дело не в авторизации.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Рассылка спама с моего почтового сервера"  +/
Сообщение от s.zirro email(ok) on 20-Янв-14, 08:40 
> Вы из мира можете отправить письмо использую тот же самый адрес отправителя
> и получателя? Если да, то скорее всего дело не в авторизации.

Я был уверен что это невозможно, сейчас буду проверять.

Проверил телнетом с другого хоста:
telnet "мой почтовый сервер" 25
Trying IP моего почтового сервера...
Connected to "мой почтовый сервер".
Escape character is '^]'.
220 mail.kio.ru, ESMTP EXIM 4.82
EHLO "мой домен"
250-"мой почтовый сервер" Hello "мой домен" [212.33.212.232]
250-SIZE 134217728
250-8BITMIME
250-PIPELINING
250-STARTTLS
250 HELP
MAIL FROM:"мой почтовый адрес"
250 OK
RCPT TO:"мой почтовый адрес на gmail.com"
550 "Need authorization"

Тот же самый ответ, если я представлюсь не "мой домен" а любой другой (EHLO абракадабра.com)

Да и в логе EXIM'а видно, что при отправке спама с моего адреса используется аутентификация (приведу ещё раз).
2014-01-17 15:16:48 1W47Pp-000MCh-C5 <= мой адрес@мой домен.ru H=(Galina) [91.65.34.20]:52373 I=[IP-адрес моего почтового сервера]:25 P=esmtpsa X=TLSv1.2:AES128-SHA256:128 CV=no SNI="имя моего почтового сервера" A=plain_ldap:мой адрес S=113785 M8S=0 T="=?utf-8?q?Ihre Mahnung -  Lastschrift konnte nicht durchgef=C3=BChrt werden 17.01.2014?=" from <мой адрес@мой домен.ru> for entifique@mudjaheddin.de

A=plain_ldap - используемый метод аутентификации.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

5. "Рассылка спама с моего почтового сервера"  +/
Сообщение от s.zirro email(ok) on 20-Янв-14, 10:38 
Решил временно совсем заблокировать отправку писем с моего почтового адреса. Для этого поменял немного конфиг.
было:
# Принимаем сообщения от тех, кто аутентифицировался:
accept  authenticated = *
        logwrite      = "  $sender_helo_name   "  "$sender_address"

# запрещаем отправку некоторым пользователям (см. список user_need_auth)
deny    message = "Need authorization"
        log_message = Need authorization (auth:<$authenticated_id>, sender:<$sender_address>, host:<$sender_host_address>)
        condition   = ${lookup{$sender_address}wildlsearch{/usr/local/etc/exim/user_need_auth}{yes}{no}}

стало:
# запрещаем отправку некоторым пользователям (см. список user_need_auth)
deny    message = "Need authorization"
        log_message = Need authorization (auth:<$authenticated_id>, sender:<$sender_address>, host:<$sender_host_address>)
        condition   = ${lookup{$sender_address}wildlsearch{/usr/local/etc/exim/user_need_auth}{yes}{no}}

# Принимаем сообщения от тех, кто аутентифицировался:
accept  authenticated = *
        logwrite      = "  $sender_helo_name   "  "$sender_address"

Теперь с моего адреса вообще ничего не уходит (в том числе и спам). В журнале пишет, что нужна аутентификация
2014-01-20 10:16:23 H=(fa-dfb09aa251ba) [79.247.66.231]:3066 I=[IP моего почтового сервера]:25 F=<мой почтовый адрес> A=plain_ldap:ivanov rejected RCPT <peer.magazin@s
permageile-schlampe.de>: Need authorization (auth:<ivanov>, sender:<IP моего почтового сервера>, host:<79.247.66.231>)

В общем то я переживу какое-то время без отправки почты, но в журнале Exim'а стали появляться об отправке спама от других локальных пользователей. Я не могу блокировать всех пользователей. Есть у кого какие идеи?

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

8. "Рассылка спама с моего почтового сервера"  +/
Сообщение от Спокойный Аноним on 24-Янв-14, 19:22 
есть какие-то успехи в этом деле?
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

9. "Рассылка спама с моего почтового сервера"  +/
Сообщение от s.zirro email(ok) on 27-Янв-14, 09:14 
> есть какие-то успехи в этом деле?

Если это действительно кому-то интересно, то да - успехи есть.
С помощью exim -be -d стал смотреть как раскрываются строки в моём аутентификаторе. И понял, что, во-первых: с таким синтаксисом поиск (lookup ldap) не всегда работает успешно, а во-вторых: если после неудачного поиска возвращается пустое значение (user=""), то ldapauth возвращает "истина" в любом случае.
Соответственно, я сперва добился чтобы гарантированно работал поиск в LDAP. Вот в таком варианте у меня заработало (заменил lookup ldap на lookup ldapdn, заменил имя домена на IP-адрес контроллера домена, добавил к параметру LDAP baseDN):

LDAP_AUTH = user="cn=пользователь, который может искать в AD,cn=Users,dc=corp,dc=ххххх,dc=ru" pass="пароль"
LDAP_URL = ldap://IP-адрес контроллера домена:389/dc=corp,dc=ххххх,dc=ru
lookup ldapdn{LDAP_AUTH LDAP_URL?dn?sub?(|(otherMailbox=$auth2)(mail=$auth2))

если пользователь есть в AD возвращает "DN-пользователя", если нет - пустую строку.

Далее объединил в одном условии проверку: 1. такой пользователь существует в AD (чтобы поиск не возвращал пустую строку) и 2. пользователь может аутентифицироваться в AD.

server_condition = ${if and{{!eq{}{${lookup ldapdn{LDAP_AUTH LDAP_URL?dn?sub?(|(otherMailbox=$auth2)(mail=$auth2))}}}}\
                  {ldapauth {user="${lookup ldapdn{LDAP_AUTH LDAP_URL?dn?sub?(|(otherMailbox=$auth2)(mail=$auth2))}}" \
                   pass="$auth3" LDAP_URL}}}{yes}{no}}
В данном условии меня смущает то, что необходимо дважды производить поиск в AD (lookup ldapdn). К сожалению, у меня не хватило ума как ещё оптимизировать это условие. К тому же я успокаиваю себя тем, что, судя по отладочным логам, реальный поиск происходит только в первый раз, затем используется кэширование и, кроме того, пользователей реально пользующихся аутентификацией при отправке письма очень мало и значит никакой значимой нагрузки двойной поиск не создаёт.

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "Рассылка спама с моего почтового сервера"  +/
Сообщение от Спокойный Аноним on 27-Янв-14, 17:15 
отлично, рукопожимаю :D

> ещё оптимизировать это условие.

вот так например, fail для пустой строки замены ->избавляемся от дополнительной проверки

server_condition = ${if ldapauth {user=${quote_ldap:${lookup ldapdn
                 {ldap:///ou=people,o=company?dn?sub?(mail=$1)}}}
                 pass=$2 ldap:///}{yes}fail}

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "Рассылка спама с моего почтового сервера"  +/
Сообщение от s.zirro email(ok) on 27-Янв-14, 17:24 
> отлично, рукопожимаю :D

Спасибо, не ожидал.

> вот так например, fail для пустой строки замены ...

И ещё раз спасибо, всё гениальное просто. Потестирую такой вариант (у меня мысли крутились в направлении: в первом поиске запомнить результат в какую-то переменную, затем сравнить её с пустой строкой и, если переменная не равна пустой строке, то в ldapauth подставить значение этой переменной).

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

2. "Рассылка спама с моего почтового сервера"  +/
Сообщение от koblin (ok) on 18-Янв-14, 17:11 
разрешена пересылка писем снаружи на любые адреса (открытый релей)?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Рассылка спама с моего почтового сервера"  +/
Сообщение от s.zirro email(ok) on 20-Янв-14, 08:41 
> разрешена пересылка писем снаружи на любые адреса (открытый релей)?

Нет, разрешена только отправка писем от пользователей локальных сетей без авторизации. Для себя сделал принудительную проверку авторизации, о чём сказано в первом посте.


Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

6. "Рассылка спама с моего почтового сервера"  +/
Сообщение от koblin (ok) on 20-Янв-14, 16:29 
да, вижу... а пароли где хранятся и в каком виде?
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "Рассылка спама с моего почтового сервера"  +/
Сообщение от s.zirro email(ok) on 20-Янв-14, 17:25 
> да, вижу... а пароли где хранятся и в каком виде?

Пароли, если можно так выразиться, хранятся в AD. Для аутентификации Exim делает LDAP запрос:

plain_ldap:
    driver                  = plaintext
    public_name             = PLAIN

    server_prompts          = :

    server_condition        = ${if ldapauth {user="${lookup ldap {user=LDAP_AD_BINDDN \
                            pass=LDAP_AD_PASS \
                            ldap://мой домен:389/?dn?sub?(otherMailbox=$auth2)}}" \
                            pass=${quote_ldap:$auth3} \
                            ldap://мой домен:389/}{yes}{no}}

  
    server_advertise_condition = ${if eq{$tls_cipher}{}{no}{yes}}
    server_set_id           = $auth2

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру