Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  подсчёт трафика
  программы
  почтовые системы
  FreeBSD Mail Howto
  exim & dovecot
  exim & courier-imap
  squirrelmail
  exim + saslauthd + courier-imap
  postfix -> exim
  sendmail -> exim
  imapsync
  Postfix + LDAP
  maildrop & postfix
  DSPAM
  Exim + LDAP
  ISPmanager
  Backup MX
  exim + exchange
  exim + dovecot + win2003 AD
  RoundCube
  qmail-ldap + AD
  spamooborona
  exim&dovecot + fetchmail + SSL
  Postfix + DBMail
  Mailgraph
  smfsav
  Exim+PgSQL
  Postfix + Dovecot + Clamav + SpamAssasin + LDAP vs MYSQL
  Simplemail Admin
  MTA qmail full install
  OpenLDAP адресная книга
  POSTFIX Статистики
  Backup MX (exim)
  Exim + dovecot + PgSQL + web
  Exim+dovecot2+dspam
  Возможности Dovecot 2
  Dovecot2 configfiles RUS
  Почтовый сервер по шагам ч.1
  Почтовый сервер по шагам ч.2
  Почтовый сервер по шагам ч.3
  Шелезяки
  Мелочи
  Файловая система
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


www.lissyara.su —> статьи —> FreeBSD —> почтовые системы —> exim + saslauthd + courier-imap

exim + saslauthd + courier-imap + ClamAV + системные пользователи - из /etc/passwd

Автор: lissyara.


    По просьбам трудящихся, решил настругать простенький мануальчик по exim & courier-imap & ClamAV с системными юзерами, вместо всяких БД. Честно говоря, я не вижу причин шарахаться от MySQL - уж 30 мег на диске, и 7 в памяти, на нынешних машинах всегда найдутся. Ну да ладно. Для авторизации отправителей будем использовать saslauthd.
   Итак, ставим из портов, но для начала рихтуем файл /etc/make.conf, надо добавить такие строки:
# директория с портами
PORTSDIR?= /usr/ports
# EXIM
.if ${.CURDIR} == ${PORTSDIR}/mail/exim
LOG_FILE_PATH?= syslog
WITH_CONTENT_SCAN= yes
WITH_DEFAULT_CHARSET?= koi8-r
WITHOUT_IPV6= yes
WITH_BDB_VER?= 4
WITH_SASLAUTHD= yes
.endif

После чего собираем и инсталлим EXIM:
/usr/ports/>cd /usr/home/lissyara/
/usr/home/lissyara/>cd /usr/ports/mail/exim
/usr/ports/mail/exim/>make && make install && make clean

После установки, топаем править файл /etc/mail/mailer.conf до такого состояния:
sendmail /usr/local/sbin/exim
send-mail /usr/local/sbin/exim
mailq /usr/local/sbin/exim -bp
newaliases /usr/local/sbin/exim -bi
hoststat /usr/local/sbin/exim
purgestat /usr/local/sbin/exim

И конфиг экзима, до такого:
#!/bin/sh
# моя конфига экзма. Будь проклят тот день,
# когда мне пришла в голову мысль подписать
# русские поясния ко всем пунктам! :) Хоть и
# делал я это в первую очередь для себя -
# чтоб лучше понять его, но работа эта оказалась
# слишком масштабная и неблагодарная...
# Имя хоста. Используется в EHLO.
# Фигурирует в других пунктах, если они не заданы -
# типа qualify_domain и прочих..
# Если тут ничё не установлено (строка закомметрована)
# то используется то, что вернёт функция uname() 
primary_hostname = mx.lissyara.su
# Делаем список локальных доменов. Далее этот
# список будет фигурировать в виде +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:192.168.0.0/16
# Вводим названия 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 = mx.lissyara.su
# Имя хоста для ситуации, обратной предыдущей, - это имя домена
# добавляемое к почте для системных юзеров, ну и вообще для почты
# пришедшей на адрес типа `root`, `lissyara`, & etc... Если этот
# пункт незадан то используется значение полученное из
# предыдущего пункта - `qualify_domain` 
qualify_recipient = mx.lissyara.su
# А это как раз кусок вышеописанного анахронизма - про почту в
# виде user@[222.222.222.222] - принимать её или нет. По дефолту
# (когда строка закомментирована) значение - false. Если захотите
# поставить true то надо будет добавить в список доменов
# комбинацию @[] - она означает `все локальные адреса`
allow_domain_literals = false
# Пользователь от которого работает exim
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 и
# переправляет его на user@test.su. Делается это для
# перечисленного списка доменов (* - все):
# percent_hack_domains = *
# Если сообщение было недоставлено, то генерится соощение
# об ошибке. Если сообщение об ошибке не удалось доставить
# то оно замораживается на указанный в этом пункте срок,
# после чего снова попытка доставить его. При очередной
# неудаче - сообщение удаляется.
ignore_bounce_errors_after = 45m
# Замороженные сообщения, находящиеся в очереди, дольше
# указанного времени удаляются и генерится сообщение
# об ошибке (при условии, что это не было недоставленное
# сообщение об ошибке :))
timeout_frozen_after = 15d
# собсно на этом штатный конфиг кончился, но
# меня-то это не устраивает... Поэтому пошли пункты,
# почёрпнутые из других источников.
# список адресов, через запятую, на которые засылаются
# сообщения о замороженных сообщениях (о замороженых
# уведомлениях о заморозке, сообщения не генерятся. - я
# надеюсь эта строка понятна :))
#freeze_tell = admin@lissyara.su
# Список хостов, почта от которых принимается, несмотря
# на ошибки в HELO/EHLO (тут указана моя подсеть)
helo_accept_junk_hosts = 192.168.0.0/16
# Через какое время повторять попытку доставки
# замороженного сообщения
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
# Убираем собственную временную метку exim`a из логов, её ставит
# сам syslogd - нефига дублировать
syslog_timestamp = no
### конфигурация 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 : !81-196.lissyara.su
 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!"
 # Рубаем хосты типа *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 = opm.blitzed.org : \
 cbl.abuseat.org : \
 bl.csma.biz : \
 dynablock.njabl.org
 # Разрешаем почту от доменов в списке relay_from_hosts
 accept hosts = +relay_from_hosts
 # Если неподошло ни одно правило - чувак явно ищет
 # открытый релей. Пшёл прочь. :)
 deny message = "relay not permitted"
# Тут идут ACL проверяющие содержимое (тело) письма.
# Без них будут пропускаться все сообщения.
acl_check_data:
 # Проверяем письмо на вирусы
 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
# следующие два пункта написаны мною, и ручаться могу тока за один - который
# оутлук авторизует. 
plain:
 driver = plaintext
 public_name = PLAIN
 server_prompts = :
 server_condition = ${if saslauthd{{$auth2}{$auth3}}{1}{0}}
 server_set_id = $auth2
login:
 driver = plaintext
 public_name = LOGIN
 server_prompts = "Username:: : Password::"
 server_condition = ${if saslauthd{{$auth1}{$auth2}}{1}{0}}
 server_set_id = $auth1
# есть ещё така хрень - но она тока для нешифрованных паролей.
# А системные - зашифрованы. Летучая мышь - пролетает...
#cram_md5:
# driver = cram_md5
# public_name = CRAM-MD5
# server_secret = "тут кондишен :)"
# server_set_id = $1

После чего можно запускать сам exim, тока снаружи почты не будет - т.к. ещё не установлен антивирь, но с локалхоста можно отправить - должна ходить, и демона занимающегося авторизацией:
/usr/home/lissyara/>echo 'exim_enable="YES"' >> /etc/rc.conf
/usr/home/lissyara/>echo 'saslauthd_enable="YES"' >> /etc/rc.conf
/usr/home/lissyara/>echo 'saslauthd_flags="-a getpwent"' >> /etc/rc.conf
/usr/home/lissyara/>echo 'sendmail_enable="NONE"' >> /etc/rc.conf
/usr/home/lissyara/>killall -9 sendmail
/usr/home/lissyara/>killall -9 sendmail
No matching processes were found
/usr/home/lissyara/>/usr/local/etc/rc.d/saslauthd.sh start
Starting saslauthd.
/usr/home/lissyara/>/usr/local/etc/rc.d/exim.sh start
Starting exim.
/usr/home/lissyara/>ps -axj | grep exim
mailnull 62198 1 62198 62198 0 Ss ?? 0:00,03 /usr/local/sbin/exim -bd -q
root 62201 482 62200 479 2 S+ p0 0:00,03 grep exim
root 20937 20935 20937 20932 1 I+ p1 0:00,09 more /usr/ports/mail/exim/M
/usr/home/lissyara/>sockstat | grep sasl
root saslauthd 62189 3 dgram -> /var/run/logpriv
root saslauthd 62189 5 stream /var/run/saslauthd/mux
root saslauthd 62188 3 dgram -> /var/run/logpriv
root saslauthd 62188 5 stream /var/run/saslauthd/mux
root saslauthd 62187 3 dgram -> /var/run/logpriv
root saslauthd 62187 5 stream /var/run/saslauthd/mux
root saslauthd 62186 3 dgram -> /var/run/logpriv
root saslauthd 62186 5 stream /var/run/saslauthd/mux
root saslauthd 62185 3 dgram -> /var/run/logpriv
root saslauthd 62185 5 stream /var/run/saslauthd/mux
root saslauthd 20758 3 dgram -> /var/run/logpriv
root saslauthd 20758 5 stream /var/run/saslauthd/mux
root saslauthd 20757 3 dgram -> /var/run/logpriv
root saslauthd 20757 5 stream /var/run/saslauthd/mux
root saslauthd 20756 3 dgram -> /var/run/logpriv
root saslauthd 20756 5 stream /var/run/saslauthd/mux
root saslauthd 20755 3 dgram -> /var/run/logpriv
root saslauthd 20755 5 stream /var/run/saslauthd/mux
root saslauthd 20754 3 dgram -> /var/run/logpriv
root saslauthd 20754 5 stream /var/run/saslauthd/mux
/usr/home/lissyara/>

Пробуем отправить себе письмецо:
/usr/local/etc/exim/>mail -s root root < /etc/rc.conf 

и в /var/log/maillog пронаблюдать ткие строки:
Jun 18 10:01:41 bsd-6-etalon exim[34814]: 2006-06-18 10:01:41 1FrqLt-00093W-Ad <= root@mx.lissyara.su U=root P=local S=1469 from <root@mx.lissyara.su> for root
Jun 18 10:01:41 bsd-6-etalon exim[34817]: 2006-06-18 10:01:41 1FrqLt-00093W-Ad => lissyara <root@mx.lissyara.su> R=localuser T=local_delivery
Jun 18 10:01:41 bsd-6-etalon exim[34817]: 2006-06-18 10:01:41 1FrqLt-00093W-Ad Completed

У меня уже прописан альяс рутовой почты на меня - потому оно мне и упало. Теперь можно ставить антивирь:
/usr/home/lissyara/>cd /usr/ports/security/clamav
/usr/ports/security/clamav/>make && make install && make clean

Тут же лезет синее окошко, где ничё не выбираем:
 Options for clamav 0.88.2_4
[ ] MILTER Compile the milter interface
[ ] CURL Support URL downloading
[ ] LIBUNRAR Support for external Unrar library
[ ] STDERR Print logs to stderr instead of stdout

После установки запускаем антивирь, и обновляем его:
/usr/local/etc/>echo 'clamav_clamd_enable="YES"' >> /etc/rc.conf
/usr/local/etc/>rc.d/clamav-clamd.sh start
Starting clamav_clamd.
LibClamAV Warning: **************************************************
LibClamAV Warning: *** The virus database is older than 7 days. ***
LibClamAV Warning: *** Please update it IMMEDIATELY! ***
LibClamAV Warning: **************************************************
/usr/local/etc/>freshclam
freshclam: Command not found.
/usr/local/etc/>rehash
/usr/local/etc/>freshclam
ClamAV update process started at Sun Jun 18 10:22:59 2006
Downloading main.cvd [-]
Downloading main.cvd [\]
Downloading main.cvd [*]
main.cvd updated (version: 39, sigs: 58116, f-level: 8, builder: tkojm)
Downloading daily.cvd [*]
daily.cvd updated (version: 1549, sigs: 1941, f-level: 8, builder: sven)
Database updated (60057 signatures) from database.clamav.net (IP: 62.181.41.8)
Clamd successfully notified about the update.
/usr/local/etc/>

Также не забываем запихнуть обновление антивируса в планировщик, хотябы раз в сутки.
Теперь надо поставить courier-imap - он будет раздавать почту клиентам по протоколам IMAP и POP3:
/usr/home/lissyara/>cd /usr/ports/mail/courier-imap/
/usr/ports/mail/courier-imap/>make && make install && make clean

 Options for courier-imap 4.1.1,1
[X] OPENSSL Build with OpenSSL support
[X] FAM Build in fam support for IDLE command
[X] TRASHQUOTA Include deleted mails in the quota
[ ] GDBM Use gdbm db instead of system bdb
[ ] IPV6 Build with IPv6 support
[ ] AUTH_LDAP LDAP support
[ ] AUTH_MYSQL MySQL support
[ ] AUTH_PGSQL PostgreSQL support
[ ] AUTH_USERDB Userdb support
[ ] AUTH_VCHKPW Vpopmail/vchkpw support

После установки, можно смело запускать всё это - в настройке оно не нуждается:
/usr/local/etc/>echo 'courier_authdaemond_enable="YES"' >> /etc/rc.conf
/usr/local/etc/>echo 'courier_imap_pop3d_enable="YES"' >> /etc/rc.conf
/usr/local/etc/>echo 'courier_imap_imapd_enable="YES"' >> /etc/rc.conf
/usr/local/etc/>rc.d/courier-authdaemond.sh start
Starting courier_authdaemond.
/usr/local/etc/>rc.d/courier-imap-pop3d.sh start
Starting courier_imap_pop3d.
/usr/local/etc/>rc.d/courier-imap-imapd.sh start
Starting courier_imap_imapd.
/usr/local/etc/>sockstat | grep courie
root couriertcp 59437 3 tcp4 *:143 *:*
root courierlog 59436 4 dgram -> /var/run/logpriv
root couriertcp 59424 3 tcp4 *:110 *:*
root courierlog 59423 4 dgram -> /var/run/logpriv
root courierlog 59406 4 dgram -> /var/run/logpriv
/usr/local/etc/>

Пробуем отправить письмо, авторизовавшись, должно пройти, а влогах примерно следующее:
Jun 18 10:37:30 bsd-6-etalon exim[59450]: 2006-06-18 10:37:30 1FrquX-000FSs-W1 <= admin@lissyara.su H=(mainkomp) [192.168.254.1] I=[192.168.254.250]:25 P=esmtpa A=login:lissyara S=2204 id=002201c692a8$ae3cf7b0$01fea8c0@mainkomp from <admin@lissyara.su> for root@mx.lissyara.su
Jun 18 10:37:30 bsd-6-etalon exim[59451]: 2006-06-18 10:37:30 1FrquX-000FSs-W1 => lissyara <root@mx.lissyara.su> R=localuser T=local_delivery
Jun 18 10:37:30 bsd-6-etalon exim[59451]: 2006-06-18 10:37:30 1FrquX-000FSs-W1 Completed
Jun 18 10:37:34 bsd-6-etalon pop3d: LOGIN, user=lissyara, ip=[192.168.254.1]
Jun 18 10:37:34 bsd-6-etalon pop3d: LOGOUT, user=lissyara, ip=[192.168.254.1], top=0, retr=2284, rcvd=34, sent=2509, time=0

P.S. Надо заметить что оно работает вообще практически без настроек - т.е. курьер можно не настраивать вообще, а exim, - тока добавить авторизацию, хосты с которых можно слать неавторизованным и поменять формат и путь к директории почты (дефолт - /var/mail с форматом mailbox, а надо ~/Maildir с форматом maildir).
P.S.2 Не забываем оставить вход по ssh только себе, ставить всем пользователям /sbin/nologin как шелл, сделать chroot всем пользователям FTP. И вообще почесаться обо всех открытых сервисах, куда можно зайти с системной учёткой. (FTP не пустит с таким шелом на сервер, если тока не добавить его - nologin в спиок разрешённых шеллов. Тока не стоит так делать.)



Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?t=3287.

размещено: 2006-06-18,
последнее обновление: 2010-11-24,
автор: lissyara

оценить статью:

slant, 2006-06-19 в 21:51:24

Поднимал сегодня же экзим, наткнулся на статейку - конфиг почти один в один! Статья рульная. Зачот. Поболее хороших статей.

nik, 2006-08-25 в 10:41:46

Молодец

chinga, 2006-08-29 в 10:16:18

pardon, это касяк в статье про
echo 'courier_authdaemond_enable="YES"' >> /etc/rc.conf
или у меня скрипт не доустановился. курьер 4.1.1 , в .../courier-imap/files этого скрипта тоже нет.

chinga, 2006-10-27 в 10:21:13

# Рубаем тех, кто не пишет отправителя
#  deny    condition     = ${if eq{$sender_address}{}{yes}{no}}
#          hosts         = !127.0.0.1 : !localhost : *
#          message       = "А какого HELO пустое?! Не по RFC..."

Почему это повторяется дважды?

Askon, 2007-02-01 в 11:18:00

never_users = root
Не обязательно указывать, т.к. root идет в fixed_never_users:
"When Exim is built, an option called FIXED_NEVER_USERS can be set to a list of users that must not be used for local deliveries. This list is fixed in the binary and cannot be overridden by the configuration file. By default, it contains just the single user name 'root'. The
"never_users" runtime option can be used to add more users to the fixed list."
Поэтому на рута он никогда не отправит почту, сразу для cron и прочей ерунды нужно прописать alias для пользователя root на кого-то другого.

Kolesya, 2007-02-13 в 19:52:36

при компиляции exim'a на 6.2 была такая ругань
================================
awk '{ print ($1+1) }' cnumber.h > cnumber.temp
rm -f cnumber.h; mv cnumber.temp cnumber.h
cc version.c
rm -f exim
cc -o exim
lookups/lookups.a(nis.o)(.text+0xb): In function `nis_open':
: undefined reference to `yp_get_default_domain'
lookups/lookups.a(nis.o)(.text+0x4f): In function `nis_find':
: undefined reference to `yp_match'
lookups/lookups.a(nis.o)(.text+0xa5): In function `nis0_find':
: undefined reference to `yp_match'
*** Error code 1

Stop in /usr/ports/mail/exim/work/exim-4.66/build-FreeBSD-i386.
*** Error code 1

Stop in /usr/ports/mail/exim/work/exim-4.66.
*** Error code 1

Stop in /usr/ports/mail/exim.
root#
================================

Решилось таким макаром
/etc/make.conf
# EXIM
.if ${.CURDIR} == ${PORTSDIR}/mail/exim
WITH_MYSQL=             yes
LOG_FILE_PATH?=         syslog
WITH_CONTENT_SCAN=      yes
WITH_DEFAULT_CHARSET?=  koi8-r
WITHOUT_IPV6=           yes
WITH_BDB_VER?=          4
WITHOUT_NIS=            yes
.endif

jeweller, 2007-04-15 в 11:30:15

подскаите как для cron менять alias для пользователя root на кого-то другого?
я сменил в /etc/crontab
root pereodic daily
root pereodic weekly
root pereodic monthly
на
user pereodic daily
user pereodic weekly
user pereodic monthly

теперь почта должна ходить в ящик user?

n/a, 2007-05-22 в 15:01:34

Спасибо за статью, зело полезна!

ashgdw, 2007-05-30 в 16:35:41

Спасибо! А то лень возиться с БД ради почтовика на 30 пользователей.

sash_gor, 2007-07-02 в 22:53:57

Сегодня потратил кучу времени на решение вопроса с неработой доставки почты. Заключается это в ошибке от имени pop3d что мол не находит директорию Maildir.

Итог потраченого времени:
Если в конфиге вы используете для указания пути к почте параматр directory = /usr/home/${local_part}/Maildir то для того, чтобы курьер знал где это находится надо в конфиге курьеровского pop3d и imap закомментировать строку MAILDIRPATH=Maildir. В таком случает pop3d будет искать директорию Maildir в домашнем каталоге пользователя.

PS Папка Maildir будет создана экзимом самостоятельно после получения первого письма для данного юзверя.

bonh, 2007-07-13 в 8:01:59

/usr/ports/>cd /usr/home/lissyara/
/usr/home/lissyara/>cd /usr/ports/mail/exim

Что за манёвры? ЫЫЫ

lissyara, 2007-07-13 в 8:49:18

Заблудился :)))

bonh, 2007-07-13 в 10:07:12

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

Banzaj, 2007-09-22 в 17:31:01

настроил вроде как по доке работает нормально но засёк что
самому себе и остальным юзерам можно без авторизации письма  
слать! Может чёто и накрутил не спорю, но поправил так:
acl_check_rcpt:
........
deny senders = $primary_hostname
message = "rellay not permited"
verify = sender
accept  domains       = +local_domains
         endpass
         message       = "In my mailserver not stored this user"
         verify        = recipient
................

torki, 2007-09-23 в 16:56:46

Всем огромный привет!!
От чайника: за статью 5 баллов, за сайт 100 раз по 5 баллов! Все работает! наружу почта не ходит наверное потому что все в Vmware делал, надо кое-чего подправить, "never_users" победил рассказав в файлике aliases мол root: admin и незабываем про make aliases иначе работать не будет.
Автору: Земной поклон, при жизни памятник, и по больше интересных мыслей!!!
Даа. Совсем забыл, а к этой пьянке можно приарутить DSPAM?

varlioud, 2007-11-16 в 1:21:51

sitc4tr

Michael, 2007-11-21 в 13:47:21

Заметил момент - в конфиге exim пишем

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

и потом пытаемся отправить почту :) - у меня не заработало :)

Пробуем отправить себе письмецо:
/usr/local/etc/exim/>mail -s root root < /etc/rc.conf





lissyara, 2007-11-21 в 13:48:55

Вообще-то, те кто думает о безопасности, сразу делают альяс с рута на юзера.
Поэтому, данный момент даже не освящён - считается по дефолту что так.

udaff, 2008-01-15 в 14:29:32

респект и уважуха :-)
добавь плз к статье борьбу со спамом.

rrr, 2008-03-14 в 14:26:57

Стремно заводить около сотни системных пользователей. %)) Вариант в один файл забить виртуальных пользователей типо: user{plain}password. А прокатит ли так настроить exim с курьером?

jeweller, 2008-03-14 в 16:15:04

А почему нет? есть же стятья на эту тему помойму даже

Михаил, 2008-06-19 в 11:56:09

Народ а где можно поставить чтобы системному юзверю admin соотвествовал ящик admin_instor@ukr.net
/etc/aliases?
Еще раз извиняюсь за беспокойство

Михаил, 2008-06-19 в 12:32:48

Народ мне в логах экзим пишет failed to open db-file, ведь экзим дб не юзает тогда чего он ругается и письмо доставить не может отправляю на себя тобишь admin_instor@ukr.net а он мне  - failed to open db-file

bonh, 2008-06-20 в 15:25:29

Мишаня, по поводу первого: юзай аллиасы, по поводу второго видимо у демона нет прав открыть фаил /etc/passwd

Shvapsss, 2008-07-09 в 13:03:06

Админ зацени плиз набоор ссылок и может навояешь из них что нить рульное, если что подпомогну.

MAILGRAPH + exim

Все компоненты я ставил из портов ИБО все ставлю из портов :)
По вот этой ссылки написаны все нюансы установки http://xgu.ru/wiki/Mailgraph

вот по этой примерное описание одной из моих проблем у меня графики не отображались.
http://www.opennet.ru/openforum/vsluhforumID1/71150.html

Решил все таки я это проблему копированием mailgraph-init из /usr/ports/mail/mailgraph/work/mailgraph-1.14 в /usr/local/etc/rc.d и соответственно права на запуск и сам запуск. После чего все графики у меня начали работать.

Pasha, 2010-10-17 в 22:40:18

Всем привет, сделал все по статье, создал пользователя и отправил с майл ру письмо, оно не пришло, в логах написано: FROZEN - что это значит? Заранее спасибо, я навичок, и если моно по подробнее. И ещё установил чистую фряху, поставил все по статье, что ещё надо поднять для работы почтового сервера, если он в локалке, и должен смотреть в мир, через щлюз... извините за беспокойство...

Виталий, 2011-11-30 в 10:48:07

Если используются системные пользователи, необходимо использовать метод pam, а не getpwent.

fitnes_pool, 2014-03-06 в 9:40:02

В этой статье опечатка, которую все как один копируют с этой статьи.
В строке {adsl|dialup|pool|peer|dhcp} надо заменить "pool" на "poll". У меня были из-за этого проблемы с получением писем от glavpooltorg.ru


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту

Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis

Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 12 чел.
За последние 30 мин было: 73 человек
За сегодня было
12918 показов,
1680 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

веселые картинки развлекательные гифки интресные факты смешные видео смешные истории из соцсетей

Время генерации страницы 2.1684 секунд
Из них PHP: 99%; SQL: 1%; Число SQL-запросов: 77 шт.
У Вас отключено GZIP-сжатие в браузере. Размер страницы 144644