Exim + Courier-IMAP + локальные пользователи

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
stup
мл. сержант
Сообщения: 90
Зарегистрирован: 2006-06-15 17:36:48

Непрочитанное сообщение stup » 2006-06-20 20:17:09

Вобщем еще раз попробовал он у меня собирается без этого скрипта courier-authdaemond.sh, почему такое происходит я не знаю. Но устанавливаю курьер строго по инструкции. Захожу в порты пишу make, дает выбрать опции, затем make install. Потом прописываю все что нужно в rc.conf потом смотрю что там есть в /usr/local/etc/rc.d и нахожу что все *.sh скрипты есть, а courier-authdaemond.sh этого нет. Вот такие вот дела. Ошибиться тут вроде не в чем.

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

stup
мл. сержант
Сообщения: 90
Зарегистрирован: 2006-06-15 17:36:48

Непрочитанное сообщение stup » 2006-06-20 20:20:09

Кстати письмо пользователю отправлял без проблем, все доходило, и на нем же тестировал антивирь. Так, что с SMTP похоже все в порядке. Там видимо и авторизация-то не нужна. Не пробовал без авторизации.

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

Непрочитанное сообщение Alex Keda » 2006-06-20 20:33:51

lissyara писал(а):

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

ll /usr/local/etc/rc.d/ | grep auth
Убей их всех! Бог потом рассортирует...

stup
мл. сержант
Сообщения: 90
Зарегистрирован: 2006-06-15 17:36:48

Непрочитанное сообщение stup » 2006-06-20 20:40:50

lissyara писал(а):
lissyara писал(а):

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

ll /usr/local/etc/rc.d/ | grep auth
Не понимаю. Что это ? Команда, но она не выполняется. ll: command not found

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

Непрочитанное сообщение Alex Keda » 2006-06-20 20:52:38

тогда

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

ls /usr/local/etc/rc.d/ | grep auth
Убей их всех! Бог потом рассортирует...

stup
мл. сержант
Сообщения: 90
Зарегистрирован: 2006-06-15 17:36:48

Непрочитанное сообщение stup » 2006-06-20 21:01:19

Ок. завтра попробую сей-час уже дома.

stup
мл. сержант
Сообщения: 90
Зарегистрирован: 2006-06-15 17:36:48

Непрочитанное сообщение stup » 2006-06-21 10:18:02

lissyara писал(а):тогда

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

ls /usr/local/etc/rc.d/ | grep auth
Попробовал эту команду, в ответ как и ожидалось тишина. Нет в каталоге /usr/local/etc/rc.d ничего, что бы начиналось с auth...

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

Непрочитанное сообщение Alex Keda » 2006-06-21 10:21:35

странно...

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

pkg_info | grep auth
Убей их всех! Бог потом рассортирует...

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

Непрочитанное сообщение Alex Keda » 2006-06-21 10:23:51

Попробуй руками его поставить:

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

cd /usr/ports/security/courier-authlib-base
make && make install && make clean
Убей их всех! Бог потом рассортирует...

stup
мл. сержант
Сообщения: 90
Зарегистрирован: 2006-06-15 17:36:48

Непрочитанное сообщение stup » 2006-06-21 11:43:14

Уф ... запутался... пакеты нашлись, ну думаю надо бы их как-то переустановить, а для начала неплозо бы и удалить их. Удалил пакеты courier-authlib-userdb и courier-authlib-base. Захожу в порт /usr/ports/security/courier-authlib-base/ а там нет ничего кроме директории work и Makefile. Попробовал дать команду make deinstall говорит, что не установлено у вас ничего. Дал make он просто ее проглотил. Ладно выкачал снова эти 2 пакета добавил с помощью команды pkg_add снова создался юзер Courier и все такое. Захожу в порты и вижу те же work и Makefile, информация о пакете отсутствует. Вот чудеса думаю. Пробую обновить порт security но вряд ли, что это даст. Вот запутался и не знаю пока, что делать.

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

Непрочитанное сообщение Alex Keda » 2006-06-21 11:45:09

сделать, как в статье написано...
Убей их всех! Бог потом рассортирует...

stup
мл. сержант
Сообщения: 90
Зарегистрирован: 2006-06-15 17:36:48

Непрочитанное сообщение stup » 2006-06-21 12:11:13

Вроде как-то поставил. Даже почту смог посмотреть но пишит в логи такое :

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

Jun 21 13:08:06 gella imapd: Failed to create cache file: maildirwatch (mihail)
Jun 21 13:08:06 gella imapd: Error: Input/output error
Jun 21 13:08:06 gella imapd: Check for proper operation and configuration
Jun 21 13:08:06 gella imapd: of the File Access Monitor daemon (famd).
Jun 21 13:08:06 gella imapd: Failed to create cache file: maildirwatch (mihail)
Jun 21 13:08:06 gella imapd: Error: Input/output error
Jun 21 13:08:06 gella imapd: Check for proper operation and configuration
Jun 21 13:08:06 gella imapd: of the File Access Monitor daemon (famd).
Что бы это могло бы быть ?

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

Непрочитанное сообщение Alex Keda » 2006-06-21 12:19:18

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

stup
мл. сержант
Сообщения: 90
Зарегистрирован: 2006-06-15 17:36:48

Непрочитанное сообщение stup » 2006-06-21 12:36:53

Послал, получил прочитал. но в логах то же самое. Вот что нашел :

Q: Repeated messages in syslog: "Failed to create cache file: maildirwatch (user) Error: Input/output error Check for proper operation and configuration of the File Access Monitor daemon (famd)." How can I solve it?

This means that Courier was compiled with File Alteration Monitor (FAM), but FAM is not running, or is not configured. If you have FAM installed you can add it to a runlevel and start it. Some FAM configuration use portmapper, so you will need to have portmap running also. You can also see "man 8 imapd" for more information.

Только зачем это нужно не совсем понимаю.

stup
мл. сержант
Сообщения: 90
Зарегистрирован: 2006-06-15 17:36:48

Непрочитанное сообщение stup » 2006-06-21 13:30:06

Интересно было бы еще попробовать через ssl, не пробовал так делать, и что для этого нужно ? Какой-нибудь сертификат создавать ?

stup
мл. сержант
Сообщения: 90
Зарегистрирован: 2006-06-15 17:36:48

Непрочитанное сообщение stup » 2006-06-21 14:16:41

Спасибо не нужно, уже сам все настроил. Щас еще с SMTP авторизацией по SSL поиграюсь.

stup
мл. сержант
Сообщения: 90
Зарегистрирован: 2006-06-15 17:36:48

Непрочитанное сообщение stup » 2006-06-21 14:51:55

Интересует еще проверка по smtp то есть в экзиме. Я как понимаю ее нет, а каким образом можно ее сделать ? Чтобы я так же вводил логин пароль.

stup
мл. сержант
Сообщения: 90
Зарегистрирован: 2006-06-15 17:36:48

Непрочитанное сообщение stup » 2006-06-21 16:34:25

В конфиге себе поправил, себя убрал

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

hostlist   relay_from_hosts = localhost:127.0.0.0/8
А она все равно отправляет от любого адреса с любого IP. Что не есть хорошо.

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

Непрочитанное сообщение Alex Keda » 2006-06-21 20:29:57

пересобери без ФАМ этого.
Перезапускал, после того как убрал?
конфиг покажи

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

cat /usr/local/etc/exim/configure | grep -v "^#"
Убей их всех! Бог потом рассортирует...

stup
мл. сержант
Сообщения: 90
Зарегистрирован: 2006-06-15 17:36:48

Непрочитанное сообщение stup » 2006-06-22 9:52:30

Пересобираю щас без FAM'a. А конфиг экзима да вот он :

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

#!/bin/sh
# моя конфига экзма. Будь проклят тот день,
# когда мне пришла в голову мысль подписать
# русские поясния ко всем пунктам! :) Хоть и
# делал я это в первую очередь для себя -
# чтоб лучше понять его, но работа эта оказалась
# слишком масштабная и неблагодарная...


# Имя хоста. Используется в EHLO.
# Фигурирует в других пунктах, если они не заданы -
# типа qualify_domain и прочих..
# Если тут ничё не установлено (строка закомметрована)
# то используется то, что вернёт функция uname()
 
primary_hostname = gella.guit.pfr.ru

# Делаем список локальных доменов. Далее этот
# список будет фигурировать в виде +local_domains
# В данном случае домены выбираются из БД MySQL. Также
# можно их просто перечислить через двоеточие. Есть интересная
# возможность, можно указать юзер@[хост] - lissyara@[222.222.4.5]

domainlist local_domains = @ 

# делаем список доменов с которых разрешены релеи.
# Далее этот список будет в виде +relay_to_domains
# Можно использовать символы подстановки, типа:
# .... = *.my.domen.su : !spam.my.domen.su : first.su
# тогда пропускается всё, что похоже на *.my.domen.su, но
# от spam.my.domen.su релеится почта не будет.

domainlist relay_to_domains =

# Составляем список хостов с которых разрешён неавторизованый
# релей. Обычно в нём находятся локальные сети, и локалхост...
# ЛокалХост в двух видах был внесён сознательно - пару раз
# сталкивался с кривым файлом /etc/hosts - результатом было
# непонимание `localhost` но пониманием 127.0.0.1/8

hostlist   relay_from_hosts = localhost:127.0.0.0/8

# Вводим названия acl`ов для проверки почты. (В общем-то, это
# необязательно, если вы делаете открытый релей, или хотите
# принимать вообще всю почту с любого хоста для любых
# получателей... Тока потом не жалуйтесь что у Вас спам
# и провайдер выкатывает немеряный счёт :))

acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data

# Прикручиваем антивирус - при условии, что exim собран
# с его поддержкой. В качестве антивиря юзаем ClamAV,
# ибо - ПО должно быть свободным! :)
# Итак, указываем местоположение сокета clamd.

av_scanner = clamd:/var/run/clamav/clamd

# Адрес куда слать на проверку спама (SpamAssasin), но я
# это не юзаю. Не так много у меня спама... 
# spamd_address = 127.0.0.1 783

# Имя домена добавляемое для локальных отправителей (реальных
# юзеров системы) т.е. почта отправляемая от root, будет от
# root@домен_указанный_здесь. Если пункт незадан, то используется
# имя хоста из `primary_hostname`. Логичней было бы написать здесь
# lissyara.su, но мне удобней иначе:

qualify_domain = gella.guit.pfr.ru

# Имя хоста для ситуации, обратной предыдущей, - это имя домена
# добавляемое к почте для системных юзеров, ну и вообще для почты
# пришедшей на адрес типа `root`, `lissyara`, & etc... Если этот
# пункт незадан то используется значение полученное из
# предыдущего пункта - `qualify_domain`

qualify_recipient = gella.guit.pfr.ru

# А это как раз кусок вышеописанного анахронизма - про почту в
# виде user@[222.222.222.222] - принимать её или нет. По дефолту
# (когда строка закомментирована) значение - false. Если захотите
# поставить true то надо будет добавить в список доменов
# комбинацию @[] - она означает `все локальные адреса`

allow_domain_literals = false

# Пользователь от которого работает exim
# На самом деле, с этим пунктом косяк - дефолт - mailnull, но т.к.
# нужно читать файл /etc/passwd - то возможны два варианта - дать
# право на чтение пользователю mailnull, или запускать exim от
# пользователя root. Я выбрал второй вариант - ибо не знаю какой
# лучше. Оба плохие :( Если тока сделать копию файла и на неё дать
# нужные права... Короче - есть простор для экспериментов...

#exim_user = root
exim_user = mailnull

# группа в кторой работает exim

exim_group = mail

# запрещаем работу доставки под юзером root - в целях безопасности

never_users = root

# Проверяем соответствие прямой и обратной зон для всех хостов.
# Тока зачем это нужно - даже и незнаю... Спам на этом не режется...
# Зато возможны проблемы - если сервер зоны скажет `сервер файлед`
# то почту от этого хоста Вы не получите :)

#host_lookup = *

# Тоже анахронизм (на самом деле, не такой уж анахронизм, но все давно
# забили на ident и закрыли файрволлом tcp:113...) Это проверка - Ваш
# хост спрашивает у удалённого, с которого было подключение, а кто
# собстно ко мне подключился на такой-то порт? Если на удалённом хосте
# работает identd - он может ответить (а может и не ответить - как
# настроить), скажет UID пользователя от которого установлено
# соединение, тип ОС, и имя пользователя. Теперь, понимаете, почему
# у всех оно зарублено и файрволлами позакрыто? :) Это же палево :)
# Тока на мой взгляд, если на сервере всё настроено правильно -
# то вовсе это и не страшно.
# Короче - если хостс поставить * то будет проверять все. Таймаут -
# если поставить 0 то не будет ждать ответа ни от кого. По
# вышеописанным причинам - отключаем

#rfc1413_hosts = *
rfc1413_query_timeout = 0s

# По дефолту, экзим отфутболивает все `неквалифицированные` адреса,
# состоящие тока из локальной части. Для того чтобы разрешить такие письма
# определённых хостов используются эти директивы:
# для `неквалифицированных` отправителей

sender_unqualified_hosts = +relay_from_hosts

# для `неквалифицированных` получателей

recipient_unqualified_hosts = +relay_from_hosts

# Интересный пункт, тока я не вполне понимаю его логику.
# Позволяет выполнять что-то типа - пришло сообщение на
# локальный ящик user%test.su@lissyara.su и
# перечисленного списка доменов (* - все):

# percent_hack_domains = *

# Если сообщение было недоставлено, то генерится соощение
# об ошибке. Если сообщение об ошибке не удалось доставить
# то оно замораживается на указанный в этом пункте срок,
# после чего снова попытка доставить его. При очередной
# неудаче - сообщение удаляется.

ignore_bounce_errors_after = 45m

# Замороженные сообщения, находящиеся в очереди, дольше
# указанного времени удаляются и генерится сообщение
# об ошибке (при условии, что это не было недоставленное
# сообщение об ошибке :))

timeout_frozen_after = 15d

# собсно на этом штатный конфиг кончился, но
# меня-то это не устраивает... Поэтому пошли пункты,
# почёрпнутые из других источников.

# список адресов, через запятую, на которые засылаются
# сообщения о замороженных сообщениях (о замороженых
# уведомлениях о заморозке, сообщения не генерятся. - я
# надеюсь эта строка понятна :))
#freeze_tell = admin@lissyara.su

# Список хостов, почта от которых принимается, несмотря
# на ошибки в HELO/EHLO (тут указана моя подсеть)

helo_accept_junk_hosts = 10.100.11.0/24

# Через какое время повторять попытку доставки
# замороженного сообщения

auto_thaw = 1h

# Приветствие сервера

smtp_banner = "$primary_hostname, ESMTP EXIM $version_number"

# Максимальное число одновременных подключений по
# SMTP. Рассчитывать надо исходя из нагрузки на сервер

smtp_accept_max = 50

# максимальное число сообщений принимаемое за одно соединение
# от удалённого сервера (или пользователя). C числом 25
# я имел проблемы тока один раз - когда у меня три дня лежал
# инет и после его подъёма попёрли мессаги. Но у меня не так
# много почты - всего 30 пользователей.

smtp_accept_max_per_connection = 25

# чё-то про логи и борьбу с флудом - я так понимаю -
# максимальное число сообщений записываемых в логи

smtp_connect_backlog = 30

# максимальное число коннектов с одного хоста

smtp_accept_max_per_host = 20

# Ход ладьёй - для увеличения производительности,
# директория `spool` внутри, разбивается на
# директории - это ускоряет обработку

split_spool_directory = true

# Если у сообщения много адресатов на удалённых хостах,
# то запускатеся до указанного числа максимально число
# параллельных процессов доставки

remote_max_parallel = 15

# при генерации сообщения об ошибке прикладывать
# не всё сообщение, а кусок (от начала) указанного
# размера (иногда полезно и целиком - в таком случае
# просто закомментируйте эту строку)

return_size_limit = 70k

# размер сообщения. У меня стоит относительно большой
# размер (`относительно` - потому, что на большинстве
# хостов оно ограничено 2-5-10мб, либо стоит анлим.)

message_size_limit = 64M

# разрешаем неположенные символы в HELO (столкнулся
# с этим случайно - имя фирмы состояло из двух слов
# и какой-то раздолбай домен обозвал my_firme_name
# прям с подчёркиваниями... Виндовые клиенты при
# соединении радостно рапортовали о себе
# `vasya.my_firme_name` ну а экзим их футболил :))

helo_allow_chars = _

# Принудительная синхронизация. Если отправитель
# торопится подавать команды, не дождавшись ответа,
# то он посылается далеко и надолго :) Немного,
# спам режется.

smtp_enforce_sync = true

# Выбираем, что мы будем логировать
# + - писать в логи,
# - - Не писать в логи.
# +all_parents - все входящие?
# +connection_reject - разорваные соединения
# +incoming_interface - интерфейс (реально - IP)
# +lost_incoming_connections - потеряные входящие
# соединения
# +received_sender - отправитель
# +received_recipients - получатель
# +smtp_confirmation - подтверждения SMTP?
# +smtp_syntax_error - ошибки синтаксиса SMTP
# +smtp_protocol_error - ошибки протокола SMTP
# -queue_run - работа очереди (замороженные мессаги)
log_selector = \
    +all_parents \
    +connection_reject \
    +incoming_interface \
    +lost_incoming_connection \
    +received_sender \
    +received_recipients \
    +smtp_confirmation \
    +smtp_syntax_error \
    +smtp_protocol_error \
    -queue_run



### конфигурация ACL для входящей почты
begin acl

# Эти правила срабатывают для каждого получателя
acl_check_rcpt:


# принимать сообщения которые пришли с локалхоста,
# не по TCP/IP
accept  hosts = :

# Запрещаем письма содержащие в локальной части
# символы @; %; !; /; |. Учтите, если у вас было
# `percent_hack_domains` то % надо убрать.
# Проверяются локальные домены
deny    message       = "incorrect symbol in address"
        domains       = +local_domains
        local_parts   = ^[.] : ^.*[@%!/|]

# Проверяем недопустимые символы для
# нелокальных получателей:
deny    message       = "incorrect symbol in address"
        domains       = !+local_domains
        local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./

# Принимаем почту для постмастеров локальных доменов без
# проверки отправителя (я закомментировал, т.к. это -
# основной источник спама с мой ящик).

accept  local_parts   = postmaster
        domains       = +local_domains

# Запрещщаем, если невозможно проверить отправителя
# (отсутствует в списке локальных пользователей)
# У себя я это закоментил, по причине, что некоторые
# железяки (принтеры, & etc) и программы (Касперский, DrWEB)
# умеют слать почту, в случае проблем но не умеют ставить
# нужного отправителя. Такие письма эта проверка не пускает.

#  require verify        = sender

# Запрещщаем тех, кто не обменивается приветственными
# сообщениями (HELO/EHLO)
deny    message       = "HELO/EHLO require by SMTP RFC"
        condition     = ${if eq{$sender_helo_name}{}{yes}{no}}

# Принимаем сообщения от тех, кто аутентифицировался:
# Вообще, большинство конфигов в рунете - это один и тот же
# конфиг написанный Ginger, в котором этот пункт расположен
# внизу. Но при таком расположении рубятся клиенты с adsl,
# ppp, и прочие зарезанные на последующих проверках. Но это
# жа неправильно! Этом мои пользователи из дома! Потому
# я это правило расположил до проверок.

accept  authenticated = *

# Рубаем нах, тех, кто подставляет свой IP в HELO

deny    message       = "Your IP in HELO - access denied!"
        hosts         =  * : !+relay_from_hosts : !gella.guit.pfr.ru
        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       = "main IP in your HELO! Access denied!"

# Рубаем тех, кто в HELO пихает только цифры
# (не бывает хостов ТОЛЬКО из цифр)

deny    condition     = ${if match{$sender_helo_name}\
  {\N^\d+$\N}{yes}{no}}
        hosts         = !127.0.0.1 : !localhost : *
        message       = "can not be only number in HELO!"

# Рубаем тех, кто не пишет отправителя

#  deny    condition     = ${if eq{$sender_address}{}{yes}{no}}
#          hosts         = !127.0.0.1 : !localhost : *
#          message       = "А какого HELO пустое?! Не по RFC..."

## Рубаем тех, кто не пишет отправителя (пробел)

#  deny    condition     = ${if match{$sender_address}{\N^\s+$\N}{yes}{no}}
#          hosts         = !127.0.0.1 : !localhost : *
#          message       = "А какого HELO пустое (тока пробелы)?! Не по RFC..."

# Рубаем тех, кто не пишет отправителя

#  deny    condition     = ${if eq{$sender_address}{}{yes}{no}}
#          hosts         = !127.0.0.1 : !localhost : *
#          message       = "Where sender of this mail?!"

# Рубаем хосты типа *adsl*; *dialup*; *pool*;....
# Нормальные люди с таких не пишут. Если будут
# проблемы - уберёте проблемный пункт (у меня клиенты
# имеют запись типа asdl-1233.zone.su - я ADSL убрал...)

deny    message       = "your hostname is bad (adsl, poll, ppp & etc)."
        condition     = ${if match{$sender_host_name} \
                             {adsl|dialup|pool|peer|dhcp} \
                             {yes}{no}}

# Задержка. (это такой метод борьбы со спамом,
# основанный на принципе его рассылки) На этом рубается
# почти весь спам. Единственно - метод неприменим на 
# реально загруженных MTA - т.к. в результате ему
# приходится держать много открытых соединений.
# но на офисе в сотню-две человек - шикарный метод.
#
# более сложный вариант, смотрите в статье по exim и 
# курьер имап. Т.к. там метод боле умный (просто правил
# больше :), то можно и на более загруженные сервера ставить)

warn

# ставим дефолтовую задержку в 20 секунд
    set acl_m0 = 30s
warn

# ставим задержку в 0 секунд своим хостам и 
# дружественным сетям (соседняя контора :))

      hosts = +relay_from_hosts:213.234.195.224/28:80.253.9.18/32
      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       = "In my mailserver not stored this user"
        verify        = recipient

# Проверяем получателя в релейных доменах
# Опять-таки если не проходит -> следующий ACL,
# и если непрошёл и там - deny

accept  domains       = +relay_to_domains
        endpass
        message       = "main server not know how relay to this address"
        verify        = recipient

# Рубаем тех, кто в блэк-листах. Серваки перебираются
# сверху вниз, если не хост не найден на первом, то
# запрашивается второй, и т.д. Если не найден ни в одном
# из списка - то почта пропускается.

deny    message       = "you in blacklist - $dnslist_domain --> $dnslist_text"
        dnslists      = relays.ordb.org : \
                        opm.blitzed.org : \
                        cbl.abuseat.org : \
                        bl.csma.biz : \
                        dynablock.njabl.org : \
                        relays.ordb.org

# Разрешаем почту от доменов в списке relay_from_hosts

accept  hosts         = +relay_from_hosts

# Если неподошло ни одно правило - чувак явно ищет
# открытый релей. Пшёл прочь. :)

deny    message       = "Homo hominus lupus est"

# Тут идут ACL проверяющие содержимое (тело) письма.
# Без них будут пропускаться все сообщения.

acl_check_data:

# Рубаем письма с китайскими сиволами

deny message = "this is spam - denied"
condition = ${if match{$message_body} \
              {105[-_]*51[-_]*86|778[-_]*98[-_]*94} \
              {yes}{no}}

# Проверяем письмо на вирусы

deny malware = *
message = "In e-mail found VIRUS - $malware_name"

# Если есть необходимость - тут проверки на спам

# Пропускаем остальное

accept


# чё делаем с почтой

begin routers

# Поиск маршрута к хосту в DNS. Если маршрут не найден в DNS -
# то это `унроутабле аддресс`. Не проверяются локальные
# домены, 0.0.0.0 и 127.0.0.0/8

dnslookup:
  driver = dnslookup
  domains = ! +local_domains
  transport = remote_smtp
  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
  no_more

# В качестве файла альясов используется стандартный файл альясов.
# Ребилдить БД командой newaliases не надо - т.к. в данном случае
# используется не БД а именно текстовый файл.

system_aliases:
  driver = redirect
  allow_fail
  allow_defer
  data = ${lookup{$local_part}lsearch{/etc/aliases}}
  user = mailnull
  group = mail
  file_transport = address_file
  pipe_transport = address_pipe

# Это специфический транспорт для адресов сгенерённых форвардингом для
# доставки в файл, pipe или для авто-ответов... Используется файло в
# хомяке, для перенаправления почты...

userforward:
  driver = redirect
  check_local_user
# local_part_suffix = +* : -*
# local_part_suffix_optional
  file = $home/.forward
# allow_filter
  no_verify
  no_expn
  check_ancestor
  file_transport = address_file
  pipe_transport = address_pipe
  reply_transport = address_reply
  condition = ${if exists{$home/.forward} {yes} {no} }


# Этот роутер проверяет локальный юзер или нет. Если в нём будет
# ошибка (юзер не найден) то он выдаст мессагу "Unknown user".

localuser:
  driver = accept
  check_local_user
# local_part_suffix = +* : -*
# local_part_suffix_optional
  transport = local_delivery
  cannot_route_message = Unknown user

# начинаются транспорты - как доставляем почту

begin transports

# Доставка на удалённые хосты - по SMTP

remote_smtp:
  driver = smtp

# Транспорт для доставки почты локальным адресатам. Ввиду отсутствия в файле
# /etc/passwd поля для указания пути к почте, используется хомяк.

local_delivery:
  driver = appendfile
  check_string = ""
  create_directory
  delivery_date_add
  directory = /usr/home/${local_part}/Maildir
# directory = /var/mail/${local_part}
  directory_mode = 770
  envelope_to_add
  group = mail
  maildir_format
  maildir_tag = ,S=$message_size
  message_prefix = ""
  message_suffix = ""
  mode = 0660


# Это транспорт для доставки через трубу по адресам сгенерённым
# форвардингом или альясингом. Если эта pipe генерит стандартный вывод,
# возвращается отправителью с руганью в виде этого вывода. Установив
# return_fail_output вместо return_output можно добиться чтобы отлупы
# шли тока в случае ошибок, а не просто ругани.

address_pipe:
  driver = pipe
  return_output

# Транспорт для доставки сгенерённой альясингом или форвардингом.

address_file:
  driver = appendfile
  delivery_date_add
  envelope_to_add
  return_path_add

# Транспорт для автоответов

address_reply:
  driver = autoreply


# Начинаются повторы недоставленных писем.

begin retry

# Этот кусок я не трогал. Думаю разработчики лучше знают,
# какие тут должны быть цифирьки. Если же вы это знаете
# лучше их - меняйте. Хотя... А какого, если Вы такой
# умный, читаете этот мануал? Может ну, их, цифирьки, а? :)
# Address or Domain  Error   Retries
# -----------------  -----   -------

*                    *       F,2h,15m; G,16h,1h,1.5; F,4d,6h


# преобразование адресов. У меня такого нету.

begin rewrite


# Секция авторизации при отправке писем. Ввиду того,
# что почтовых клиентов много, и все всё делают
# по-своему, то и механизмов авторизации три...

begin authenticators

# следующие два пункта выдернуты из рассылки экзима,
# на его родном сайте - www.exim.org, пробовал только оутглюком,
# потому за всё не ручаюсь :)

plain:
  driver = plaintext
  public_name = PLAIN
  server_condition = "${if and {{!eq{$2}{}}{!eq{$3}{}} \
                          {crypteq{$3}{${extract{1}{:} \
{${lookup{$2}lsearch{/etc/mailpasswd}{$value}{*:*}}}}}}}{1}{0}}"
  server_set_id = $2

login:
  driver = plaintext
  public_name = LOGIN
  server_prompts = "Username:: : Password::"
  server_condition = "${if and {{!eq{$1}{}}{!eq{$2}{}} \
                          {crypteq{$2}{${extract{1}{:} \
{${lookup{$1}lsearch{/etc/mailpasswd}{$value}{*:*}}}}}}}{1}{0}}"
  server_set_id = $1

# летучей мыши нет, для её аутентификации надо тут писать кондишен,
# но чё-то меня сёдня ломает :)) Выглядеть это будет примерно так:
#cram_md5:
#  driver = cram_md5
#  public_name = CRAM-MD5
#  server_secret = "тут кондишен :) будет время и необходимость - нарисую
#                   захотите сами - возьмите за образец из любой другой
#                   статьи сайта, где для MySQL - и вперёд..."
#  server_set_id = $1

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

Непрочитанное сообщение Alex Keda » 2006-06-22 10:20:02

lissyara писал(а):пересобери без ФАМ этого.
Перезапускал, после того как убрал?
конфиг покажи

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

cat /usr/local/etc/exim/configure | grep -v "^#"
как ты думаешь, зачем я дал этот кусок кода?
Убей их всех! Бог потом рассортирует...

stup
мл. сержант
Сообщения: 90
Зарегистрирован: 2006-06-15 17:36:48

Непрочитанное сообщение stup » 2006-06-22 12:40:30

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

primary_hostname = gella.guit.pfr.ru


domainlist local_domains = @


domainlist relay_to_domains =


hostlist   relay_from_hosts = localhost:127.0.0.0/8


acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data


av_scanner = clamd:/var/run/clamav/clamd



qualify_domain = gella.guit.pfr.ru


qualify_recipient = gella.guit.pfr.ru


allow_domain_literals = false


exim_user = mailnull


exim_group = mail


never_users = root




rfc1413_query_timeout = 0s


sender_unqualified_hosts = +relay_from_hosts


recipient_unqualified_hosts = +relay_from_hosts




ignore_bounce_errors_after = 45m


timeout_frozen_after = 15d




helo_accept_junk_hosts = 10.100.11.0/24


auto_thaw = 1h


smtp_banner = "$primary_hostname, ESMTP EXIM $version_number"


smtp_accept_max = 50


smtp_accept_max_per_connection = 25


smtp_connect_backlog = 30


smtp_accept_max_per_host = 20


split_spool_directory = true


remote_max_parallel = 15


return_size_limit = 70k


message_size_limit = 64M


helo_allow_chars = _


smtp_enforce_sync = true

log_selector = \
    +all_parents \
    +connection_reject \
    +incoming_interface \
    +lost_incoming_connection \
    +received_sender \
    +received_recipients \
    +smtp_confirmation \
    +smtp_syntax_error \
    +smtp_protocol_error \
    -queue_run



begin acl

acl_check_rcpt:


accept  hosts = :

deny    message       = "incorrect symbol in address"
        domains       = +local_domains
        local_parts   = ^[.] : ^.*[@%!/|]

deny    message       = "incorrect symbol in address"
        domains       = !+local_domains
        local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./


accept  local_parts   = postmaster
        domains       = +local_domains



deny    message       = "HELO/EHLO require by SMTP RFC"
        condition     = ${if eq{$sender_helo_name}{}{yes}{no}}


accept  authenticated = *


deny    message       = "Your IP in HELO - access denied!"
        hosts         =  * : !+relay_from_hosts : !gella.guit.pfr.ru
        condition     = ${if eq{$sender_helo_name}\
  {$sender_host_address}{true}{false}}



deny    condition     = ${if eq{$sender_helo_name}\
  {$interface_address}{yes}{no}}
        hosts         = !127.0.0.1 : !localhost : *
        message       = "main IP in your HELO! Access denied!"


deny    condition     = ${if match{$sender_helo_name}\
  {\N^\d+$\N}{yes}{no}}
        hosts         = !127.0.0.1 : !localhost : *
        message       = "can not be only number in HELO!"








deny    message       = "your hostname is bad (adsl, poll, ppp & etc)."
        condition     = ${if match{$sender_host_name} \
                             {adsl|dialup|pool|peer|dhcp} \
                             {yes}{no}}


warn

    set acl_m0 = 30s
warn


      hosts = +relay_from_hosts:213.234.195.224/28:80.253.9.18/32
      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



accept  domains       = +local_domains
        endpass
        message       = "In my mailserver not stored this user"
        verify        = recipient


accept  domains       = +relay_to_domains
        endpass
        message       = "main server not know how relay to this address"
        verify        = recipient


deny    message       = "you in blacklist - $dnslist_domain --> $dnslist_text"
        dnslists      = relays.ordb.org : \
                        opm.blitzed.org : \
                        cbl.abuseat.org : \
                        bl.csma.biz : \
                        dynablock.njabl.org : \
                        relays.ordb.org


accept  hosts         = +relay_from_hosts


deny    message       = "Homo hominus lupus est"


acl_check_data:


deny message = "this is spam - denied"
condition = ${if match{$message_body} \
              {105[-_]*51[-_]*86|778[-_]*98[-_]*94} \
              {yes}{no}}


deny malware = *
message = "In e-mail found VIRUS - $malware_name"



accept



begin routers


dnslookup:
  driver = dnslookup
  domains = ! +local_domains
  transport = remote_smtp
  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
  no_more


system_aliases:
  driver = redirect
  allow_fail
  allow_defer
  data = ${lookup{$local_part}lsearch{/etc/aliases}}
  user = mailnull
  group = mail
  file_transport = address_file
  pipe_transport = address_pipe


userforward:
  driver = redirect
  check_local_user
  file = $home/.forward
  no_verify
  no_expn
  check_ancestor
  file_transport = address_file
  pipe_transport = address_pipe
  reply_transport = address_reply
  condition = ${if exists{$home/.forward} {yes} {no} }



localuser:
  driver = accept
  check_local_user
  transport = local_delivery
  cannot_route_message = Unknown user


begin transports


remote_smtp:
  driver = smtp


local_delivery:
  driver = appendfile
  check_string = ""
  create_directory
  delivery_date_add
  directory = /usr/home/${local_part}/Maildir
  directory_mode = 770
  envelope_to_add
  group = mail
  maildir_format
  maildir_tag = ,S=$message_size
  message_prefix = ""
  message_suffix = ""
  mode = 0660



address_pipe:
  driver = pipe
  return_output


address_file:
  driver = appendfile
  delivery_date_add
  envelope_to_add
  return_path_add


address_reply:
  driver = autoreply



begin retry


*                    *       F,2h,15m; G,16h,1h,1.5; F,4d,6h



begin rewrite



begin authenticators


plain:
  driver = plaintext
  public_name = PLAIN
  server_condition = "${if and {{!eq{$2}{}}{!eq{$3}{}} \
                          {crypteq{$3}{${extract{1}{:} \
{${lookup{$2}lsearch{/etc/mailpasswd}{$value}{*:*}}}}}}}{1}{0}}"
  server_set_id = $2

login:
  driver = plaintext
  public_name = LOGIN
  server_prompts = "Username:: : Password::"
  server_condition = "${if and {{!eq{$1}{}}{!eq{$2}{}} \
                          {crypteq{$2}{${extract{1}{:} \
{${lookup{$1}lsearch{/etc/mailpasswd}{$value}{*:*}}}}}}}{1}{0}}"
  server_set_id = $1

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

Непрочитанное сообщение Alex Keda » 2006-06-22 13:10:09

стоп.
отправляет куда? Локальным пользователям - обязан с любого адреса ,а релеить например, на яндекс, или майлру не будет, с таким конфигом
Убей их всех! Бог потом рассортирует...

stup
мл. сержант
Сообщения: 90
Зарегистрирован: 2006-06-15 17:36:48

Непрочитанное сообщение stup » 2006-06-22 13:37:55

Да именно так и происходит, что локальным пользователям с любого адреса. А этого не хотелось бы. Хотелось бы чтобы могли отпралять только те кто прописан в mailpasswd. И чтобы отправлялось и на яндекс и на любой другой почтовик. Что для этого нужно сделать. Иначе говоря чтобы любой пользователь проходил аутенфикация, и если ты есть то милости просим авторизуйся и отправляй, а если тебя нет в списке локальных пользователей, то иди дальше...) Типа извини но ты не являешься пользователем данной системы, посему и воспользоваться ее услугами не можешь ... ) Ну и хочется конечно чтобы я например как пользователь мог отправлять письма и на любую другую почту )

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

Непрочитанное сообщение Alex Keda » 2006-06-22 14:16:57

ты почту получать на свой сервер снаружи хочешь?
Если хочешь - то надо чтобы все могли слать
====
поставь обязательную авторизацию.
а вообще RFC по SMTP хоть по диагонали пробегись...
Убей их всех! Бог потом рассортирует...