Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » FAQ по Exim MTA #2

Модерирует : lynx, Crash_Master, dg, emx, ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

Открыть новую тему     Написать ответ в эту тему

ShriEkeR



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FAQ по Exim MTA #1

Текущая версия Exim 4.80

   Home page Автор Philip Hazel, University of Cambridge.
Exim - чертовски быстр, отличный выбор для загруженных систем. Свободно распространяемый Mail Transport Agent (MTA, лицензия GPL), обладающий возможностью очень гибкой и тонкой настройки, включая поиск конфигурационной информации в базах данных - mySQL, PostgresQL, Oracle, SQLite.., а также LDAP.  В Exim встроена поддержка Maildir (quota), SMTP-аутентификация, TLS/SSL, SpamAssassin, сканирование на лету антивирусом(ами), ACL, системные фильтры... Сомневающимся.
На многие вопросы помогут найти ответы рассылки: На русском + На английском
Документация на русском по Exim + много полезной инфы на www.lissyara.su

Установка почтового сервера на базе Exim с поддержкой виртуальный аккаунтов (MySQL).
Подробное руководство состоит из двух связанных частей:
   1. Установка и настройка Exim 4.20.
   2. Установка  и настройка Tpop3d с поддержкой виртуальных аккаунтов.
Внимательно читаем здесь © ginger
-=-=-=-
Улучшенный вариант части 1: Exim-4.50 + MySQL © ginger
-=-=-=-
Так как Tpop3d не совместим с MS Outlook Express 6, а также не поддерживает IMAP, автор рекомендует его заменить на Dovecot. Изменения, которые нужно сделать cмотрим здесь © ginger
-=-=-=-
Еще один вариант установки © Wombat
-=-=-=-
Exim+Courier-Imap+MySQL+ClamAV+DSPAM+SquirrelMail © Павел Семенец Искать по ctrl+F=Павел Семенец
-=-=-=-
Опции для сборки exim из портов (FreeBSD) © tankistua
 
Уважаемые коллеги!
 
Нам очень дороги ваши конфиги и логи на несколько страниц, но, поверьте, их гораздо приятнее читать когда они заключены в тэг more.

Всего записей: 6382 | Зарегистр. 27-09-2004 | Отправлено: 18:49 16-05-2011 | Исправлено: AkeHayc, 21:09 21-04-2013
vlary



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimawar
Цитата:
Как можно такое реализовать?
 Элементарно, Ватсон

Код:
domainlist local_domains = @
domainlist relay_to_domain1 = domain1.ru
domainlist relay_to_domain2 = domain2.ru
domainlist our_domains = +local_domains : +relay_to_domains1  +relay_to_domains2
 
begin routers
dnslookup:
  driver = dnslookup
  domains = ! +our_domains
  transport = remote_smtp
  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
  no_more
 
 
smart_route1:
driver = manualroute
domains = relay_to_domain1
transport = local_smtp
route_list = * 192.168.0.101
 
smart_route2:
driver = manualroute
domains = relay_to_domain2
transport = local_smtp
route_list = * 192.168.0.102
 
begin transports
remote_smtp:
  driver = smtp
local_smtp:
  driver = smtp
interface = 192.168.0.100

Ну, с акцесс-листами через ldap и mysql сам разберешься, это не сложно, в мануале готовые строчки написаны.
 
 


----------
Заслуженный SCOтовод, почетный SUNтехник и любитель Кошек

Всего записей: 17008 | Зарегистр. 13-06-2007 | Отправлено: 15:13 15-01-2012 | Исправлено: vlary, 15:21 15-01-2012
dimawar

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо, с маршрутизацией понятно
 

Цитата:
Ну, с акцесс-листами через ldap и mysql сам разберешься, это не сложно, в мануале готовые строчки написаны.

 
сейчас у меня в ACL имеется проверка только для одного сервера по LDAP

Код:
deny        domains = +relay_to_domains
        message = "Unknown user for this domain"
        condition = ${if !match{${lookup ldap {LDAP_AD_MAIL_RCPT}}}\
                {@MS_EXCHANGE_DOMAIN}{yes}{no}}

 
как разделить проверку, чтобы для разных доменов было?
например второй сервер (домен) проверять через SMTP

Всего записей: 25 | Зарегистр. 22-10-2008 | Отправлено: 16:08 15-01-2012 | Исправлено: dimawar, 16:09 15-01-2012
vlary



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimawar
Цитата:
как разделить проверку, чтобы для разных доменов было?  
Ну это вообще азбука.
В acl_smtp_rcpt вставляешь:
deny    message   =  User Not Found
        domains   = +relay_to_domain2  
        !verify   = recipient/callout=2m,defer_ok,use_sender
 


----------
Заслуженный SCOтовод, почетный SUNтехник и любитель Кошек

Всего записей: 17008 | Зарегистр. 13-06-2007 | Отправлено: 18:12 15-01-2012
lek



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Уважаемые гуру.
 
Хочу перед SMTP авторизацией проверять наличие IP-адреса и email в таблице (которая заполняется при ошибках авторизации). Т.е. если слишком много ошибок - то не допускать к авторизации (чтобы не подбирали пароль). И если с проверкой IP всё получилось, то с проверкой email - нет.
 
Проверяю IP следующим образом:
 

Код:
 
M2K_CHECK_SMTP_AUTH_IP_BLOCK = ${if eq{1}{${lookup mysql{SELECT eximCheckIPAuthBlackList('${quote_mysql:$sender_host_address}')}{$value}fail}}{yes}{no}}
 
acl_smtp_auth = acl_m2k_auth
 
acl_m2k_auth:
        deny
                message = SMTP AUTH for host $sender_host_address is blocked. You can get access only via web interface  
                log_message = SMTP AUTH for host $sender_host_address is blocked. You can get access only via web interface: as=$authenticated_sender, ai=$authenticated_id, 1 = $1, 2 = $2, 3 = $3
                condition = M2K_CHECK_SMTP_AUTH_IP_BLOCK
 
        accept
 

 
Ну и написал функцию для проверки, имеется ли адрес отправителя в списке:

Код:
 
DELIMITER |;
DROP FUNCTION IF EXISTS eximCheckIPAuthBlackList;\g
CREATE DEFINER=`m2k_smtp`@'%' FUNCTION eximCheckIPAuthBlackList ( ipaddr VARCHAR(255))
RETURNS INT(1)
NOT DETERMINISTIC
READS SQL DATA
COMMENT 'Check IP blacklist for smtp auth'
BEGIN
        DECLARE cnt INT DEFAULT 0;
        DECLARE ts INT DEFAULT 0;
 
        -- get current timestamp
        SELECT UNIX_TIMESTAMP() INTO ts;
 
        -- delete stale records
        DELETE FROM SMTP_AUTH_BLACKLIST WHERE ts - CR_TIME > 3600;
 
        -- chech if ip is blocked
        -- 40 more auth failures in 60 seconds
        SELECT COUNT(*) INTO cnt FROM SMTP_AUTH_BLACKLIST WHERE IP = ipaddr AND ts - CR_TIME < 60;
        IF cnt > 40 THEN
                RETURN 1;
        END IF;
END\g
DELIMITER ;
 

 
Т.е. если более 40 раз в минуту неправильно произвёл аутентификаци - то login и IP-адрес попадают в таблицу SMTP_AUTH_BLACKLIST, записи старше часа - удаляются. Это отлажено и работает.
Теперь следующая проблема - не допустить к авторизации тот логин, который подбирает пароль. Попробовал вывести разные переменные на этапе работы acl_smtp_auth - ни одна не содержит логина

Код:
 
log_message = SMTP AUTH for host $sender_host_address is blocked. You can get access only via web interface: as=$authenticated_sender, ai=$authenticated_id, 1 = $1, 2 = $2, 3 = $3
 

 
Есть какие-нибудь соображения, как проверить login до авторизации? Во время авторизации проверить - не проблема (пока так и сделал костылём), однако сообщение получается одинаковое, независимо от того - заблокирован ли пользователь за множество попыток авторизации или же ввёл просто неправильный пароль (или логин) - 535 Incorrect authentication data
Тогда как, если пользователь заблокирован за ввод неправильных данных с одного IP - выдаётся - SMTP AUTH for host 95.25.230.28 is blocked. You can get access only via web interface: as=, ai=, 1 = , 2 = , 3 =

Всего записей: 230 | Зарегистр. 28-12-2002 | Отправлено: 20:37 30-01-2012
vlary



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lek
Цитата:
Т.е. если слишком много ошибок - то не допускать к авторизации (чтобы не подбирали пароль).
Зачем оно тебе? Поставь после ввода неправильного пароля задержку в 30 секунд - и пусть подбирают на здоровье. При нормальных паролях глядишь, через миллион лет подберут.


----------
Заслуженный SCOтовод, почетный SUNтехник и любитель Кошек

Всего записей: 17008 | Зарегистр. 13-06-2007 | Отправлено: 22:57 30-01-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lek
Во первых в доке четко сказано, что нехер использовать $1,$2,$3 вместо них надо юзать $auth1,$auth2,$auth3. Первые оставлены для совместимости и юзанье их, как говорится, не всегда полезно для вашего здоровья.
 
По поводу ip - вы просто изобрели велосипед, вместо того, что заюзать fail2ban.
Что касается имени пользователя, то оно пишется в $auth1 или $auth2 в зависимости от типа авторизации.
 
Я бы вам рекомендовал все это в authenticators провернуть, не смотря на то, что для этого есть acl_smtp_auth... Хотя... В какой точно момент данные через этот acl проходят (что-то я не заметил в доке)?

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6397 | Зарегистр. 28-08-2008 | Отправлено: 23:22 30-01-2012 | Исправлено: Alukardd, 23:31 30-01-2012
lek



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vlary
Как бы это реализовать, подскажи плиз? Всё равно ведь надо сохранять состояние и проверять его при аутентификации.  
 
Alukardd
Можно и в аутентификаторы запихнуть. Правда из них можно вернуть либо accept, либо 535 Incorrect authentication data, но не какое-то сообщение. Ладно бы с пользователями, мне для лога бы Fail2Ban посмотрел - он парсит логи, не хотелось бы на это завязываться.  

Всего записей: 230 | Зарегистр. 28-12-2002 | Отправлено: 00:28 31-01-2012
vlary



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lek
Цитата:
Как бы это реализовать, подскажи плиз? Всё равно ведь надо сохранять состояние и проверять его при аутентификации.  
А чего его реализовывать? Просто перед выдачей 535 Incorrect authentication data подождать 30 секунд. А дабы не дергали в несколько потоков, поставить ограничение на число коннектов с одного айпи.
 


----------
Заслуженный SCOтовод, почетный SUNтехник и любитель Кошек

Всего записей: 17008 | Зарегистр. 13-06-2007 | Отправлено: 00:36 31-01-2012
lek



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vlary
Alukardd
 
Решил с помощью perl и memcache: server_condition вызывает функцию в perl, которая:
1. Смотрит, есть ли в мемкэше ключ с IP пользователя. Значением ключа являются timestamp (время, когда неправильно аутентифицировался), разделённые точкой с запятой.
Значения старше часа - удаляются
2. Аналогично, смотрит, есть ли в мэмкэше EMAIL пользователя
3. Вычисляет, не превышен ли порог ошибок по IP
4. Вычисляет, не превышен ли порог ошибок по EMAIL (он меньше, чем по IP)
5. Если порог не превышен, то собственно сама авторизация:

Код:
$mysql_result = Exim::expand_string(${lookup mysql{...}});
- как ни странно, это работает, т.е. в перл не пришлось передавать логин, пароль, базу и хост для коннекта к mysql
Если пароль правильный и юзер не забанен - то аутентификация удалась
Если неправильный - в мемкэш заносится неудача в ключ c IP и в ключ с EMAIL
 
Заодно избавился от процедур и функций mysql. В памяти то оно побыстрее будет

Всего записей: 230 | Зарегистр. 28-12-2002 | Отправлено: 23:15 12-02-2012
vlary



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lek
Цитата:
Заодно избавился от процедур и функций mysql. В памяти то оно побыстрее будет
Можешь посмотреть в сторону применения SQLite. У меня все списки (черные, белые, серые) на нем сделаны.
 


----------
Заслуженный SCOтовод, почетный SUNтехник и любитель Кошек

Всего записей: 17008 | Зарегистр. 13-06-2007 | Отправлено: 11:47 13-02-2012
Munster

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
проблема - запустил на строил exim. Письма не уходят - следующая проблема
 
с гуглом:
2012-02-21 12:35:58 1RzkzR-000G0o-IR SMTP error from remote mail server after MAIL FROM:<help@*****.ru> SIZE=4219: host ASPMX.L.GOOGLE.com [173.194.69.26]: 454-4.5.0 SMTP protocol violation, no commands allowed to pipeline after\n454 4.5.0 STARTTLS, see RFC 3207 uf2si13034038bkb.79
 
 
с mail  
220 mailserver.*****.ru ESMTP Sendmail 8.14.3/8.14.3; Tue, 21 Feb 2012 12:48:57
 +0300
helo localhost250 mailserver.******.ru Hello programmer[192.168.100.74]
mail from: help@******.ru250 OK
rcpt to: *****@mail.ru250 Accepted
data
354 Enter message, ending with "." on a line by itself
lalala
.
250 OK id=1RzmLl-000GHy-Rs

Всего записей: 20 | Зарегистр. 11-09-2006 | Отправлено: 12:52 21-02-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
Вопрос больше не конкретно по Exim, а вообще по почтовым серверам...
 
Есть необходимость сделать повысить отказоустойчивость сервера. В голове мелькают 3 мысли:
  • тупо вторая машина с зеркалированием базы пользователей(тут средствами СУБД) и Maildir(тут можно хоть DRBD применять). Машины связать в HA кластер (подмена IP, синхронизация активных соединений и всё такое)
  • создание 2 MX записей на NS и соответственно тот, что второй (с меньшим приоритетом) делать релеем для основного и пересылать почту на него с огромным времнем жизни и достаточно частыми попытками переслать письмо.
  • создание 2 MX записей на NS (можно даже с одинаковым весом). И при этом организовать полную синхронизацию между серверами (аналогично 1-о мысли, только без кластера).
     
    Подскажите что лучше и если можно ссылочки на примеры или интересные техники. Если Exim имеет свои механизмы(или есть приёмы его конфигурирования) для синхронизации почты и учёток со вторым сервером, то хотелось бы узнать о таких возможностях. В качестве почтового сервера используется Dovecot, но мне кажется это абсолютно не важно. С доступностью веб-морды я как-нибудь уж разберусь (DNS --> 2 nginx --> 2 web-морды).

    ----------
    Microsoft gives you windows, linuх gives you the whole house...
    I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

  • Всего записей: 6397 | Зарегистр. 28-08-2008 | Отправлено: 14:39 25-02-2012
    vlary



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alukardd Что именно подразумевается под почтовым сервером? Собственно  SMTP MTA?  IMAP/POP3? Сервер базы данных? Или все в куче?
    И что хочется добиться от резервирования? 1. Чтобы не терялись письма снаружи? 2. Чтобы она быстро приходила и отправлялась? 3. Чтобы юзер всегда мог отправить почту изнутри? 4. Чтобы он всегда имел доступ к своему ящику и почтовым архивам? 5. Все сразу?
    В первом варианте вообще делать ничего не надо, если сервер меньше 3 дней в дауне, почта сохранится на серверах отправителей и придет потом.  
    Во втором случае нужно иметь двух провайдеров и два фронт-энда.  
    Ну а дальше - это уже действительно нужна кластеризация почтовой инфраструктуры. Как это реализуется, например, в Коммунигейте, можно почитать здесь: Ссылка
     
     
     
     
    Добавлено:
    Munster Так ты для гугла тоже весь лог сессии выложи, а то привел только одну строчку.


    ----------
    Заслуженный SCOтовод, почетный SUNтехник и любитель Кошек

    Всего записей: 17008 | Зарегистр. 13-06-2007 | Отправлено: 16:44 25-02-2012
    Alukardd



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vlary
    Под "почтовым сервером" я имел ввиду всё вместе(не знаю как это по другому назвать).
    Ссылка не очень познавательна...
    Интересует вариант №5 - доступность всего и сразу.
     
    Вариант клстеризации не всегда я так понимаю подходит. Например, сейчас у меня стоит вопрос о размещении резервного сервера в другом офисе, и что-то я не очень знаю как так будет работать кластер через инет(вообще такое применяется? через VPN что ли?)
     
    Если честно, то меня больше всего интересует схема описанная мной в 3 пункте. Можно ли прямо так все и сделать? Тупо наладив нелепую синхронизацию и указав 2 MX записи(2-ую всё-таки менее приоритетной сделать)...
    Всё это интересует, в данном случае, в разрезе конкретных служб - Exim+Dovecot.

    ----------
    Microsoft gives you windows, linuх gives you the whole house...
    I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

    Всего записей: 6397 | Зарегистр. 28-08-2008 | Отправлено: 00:22 26-02-2012 | Исправлено: Alukardd, 00:23 26-02-2012
    vlary



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alukardd
    Цитата:
    Всё это интересует, в данном случае, в разрезе конкретных служб - Exim+Dovecot.
    Ну, поставить 2 Эксима - не проблема. А вот как задублировать Dovecot - это уже интересно.
    В свое время, когда была жива компания SCO, она предлагала аж 2 вида кластеров: Reliant HA и Nonstop Cluster. Вот там все было сделано по-взрослому: двухканальный рэйд, два или больше физических сервера, общий айпи. В случае падения одного сервера все прекрасно работало на оставшемся. Думаю, на линуксе тоже есть нечто подобное.
    Однако стоит ли игра свечек? Золотое правило - затраты на предотвращение возможного ущерба не должны превышать убытков от этого ущерба.
     


    ----------
    Заслуженный SCOтовод, почетный SUNтехник и любитель Кошек

    Всего записей: 17008 | Зарегистр. 13-06-2007 | Отправлено: 15:45 26-02-2012
    shadowmaster63

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    2012-03-20 14:30:08 H=(Armagedon) [2X.9X.X6.6X] F=<test@mydomain.ru> rejected RCPT <test_milbox2011@mail.ru>: "Homo hominus lupus est"
     
    Скажите пожалуйста почему mail и яндекс реджектит мои мессаги ?

    Всего записей: 15 | Зарегистр. 29-04-2011 | Отправлено: 16:01 20-03-2012
    Alukardd



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    shadowmaster63
    Одна из возможных причин - отсутствие зоны обратного просмотра для вашего ip адреса.
    Другая причина - это отсутствие SPF записи в вашей доменной зоне.

    ----------
    Microsoft gives you windows, linuх gives you the whole house...
    I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

    Всего записей: 6397 | Зарегистр. 28-08-2008 | Отправлено: 16:49 20-03-2012 | Исправлено: Alukardd, 16:50 20-03-2012
    vlary



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    shadowmaster63 И это тоже: H=(Armagedon). Приличные сервера так не здороваются,  нужно предъявлять FQDN.

    ----------
    Заслуженный SCOтовод, почетный SUNтехник и любитель Кошек

    Всего записей: 17008 | Зарегистр. 13-06-2007 | Отправлено: 17:46 20-03-2012
    Alukardd



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vlary
    Да вроде как за приветствие не реджектят, точнее его требуют но содержание вроде как не особо вдаются... Надо будет уточнить это дело в своих ACL'ях.
     
    p.s. заглянул в свой reject.log и парочку его ротаций - отправил еще одного Китайского провайдера в бан iptables'ом, за один лишь засветившийся ip...
     
    Добавлено:
    OMG, а вроде как без этой записи меня когда-то реджектили... Обнаружил у себя что TXT запись описана не верно, и не возвращалась по соответствующему запросу. Я забыл указать имя поддомена для которого она была записана (было просто IN TXT, даже @ не была вначале указана - ппц, чего только не обнаружишь).

    ----------
    Microsoft gives you windows, linuх gives you the whole house...
    I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

    Всего записей: 6397 | Зарегистр. 28-08-2008 | Отправлено: 18:03 20-03-2012 | Исправлено: Alukardd, 18:04 20-03-2012
    shadowmaster63

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите на счет FQDN как это исправить ?
    На счет обратной зоны завтра попробую исправить.
    TXT запись прописана  
    @    TXT    v=spf1 ip4:serverIP a mx -all

    Всего записей: 15 | Зарегистр. 29-04-2011 | Отправлено: 21:09 20-03-2012
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

    Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » FAQ по Exim MTA #2


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru