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

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 —> почтовые системы —> ISPmanager

Замена дефолтового майлера на ISPmanager

Автор: lissyara.


    Холодный субботний день. Сижу плюю в потолок - ничё не хочется делать, да и ничё не надо... Возле часов лезет сообщение в аське - "привет" - понеслось - этого человека я не знаю :)
   Итак. Есть хостинг на типа виртуальном сервере - ISPmanager. По дефолту, майлер там - sendmail, но он не устраивал - первую же проблему решить не удалось - при отправке этот дурик вначале интересовался наличием хоста в DNS-блэклистах, и давал отлуп, не давая авторизоваться для отправки почты. Гениальное решение :) С учётом невнятного конфига и меньшей чем у exim`a гибкости - решение просилось само.
   Итак. Требуется сэмулировать текущий конфиг sendmail, по возможности более полно, чтобы осталось управление с родной админки. Полазив по ФС и повкуривав в конфиги (для чего пришлось создать тестовый домен и пару тестовых юзеров), всё встало на свои места. Ничё особо сложного конфигурация из себя не представляла - да и не могла, с учётом использовавшегося MTA. Что удалось выяснить:
/etc/mail/aliases - файл альясов. Основная работа идёт именно с ним. Формат стандартный, поэтому проблем не возникло.
/etc/mail/local-host-names - список локальных доменов - по одному на строчку. Exim понимает такой формат, поэтому тоже не было проблем.
/etc/mail/mailer.conf - конфигурация почтового враппера - какой почтарь вызывать с какими параметрами
/etc/mail/virtusertable - файл альясов для виртуальных пользователей - сопоставление имён виртуальных, именам реальных системых пользователей. Формат тоже стандартный - тока разделитель - пробел, что не является проблемой, т.к. exim`y монописуально - двоеточие или пробел будет как разделитель. Тут же используются конструкции типа @my-domain.su - для них обработку не писал - не понял их значения - видимо действие для ненайденных юзеров. Exim такое сам обрабатывает.
/usr/local/etc/dovecot.passwd - файл типа системного файла паролей. Формат похожий, тока вместо шелла используется путь к майлбоксу.
   Также используется файл системных паролей, через соответсвующие системные же вызовы - т.е. инфа хорошо продублирована - sendmail авторизуется по системе, а dovecot по своему файлу паролей. Всегда непонимал в таких случаях - почему бы не использовать БД! До кучи используются системные квоты - но опять же - exim умеет, при доставке, распознавать ошибки системной квоты, и генерить соответствующее сообщение. Конечно, это не есть гуд - письмо вначале примется, а потом сгенерится рикошет - но лучше это, чем ничего.
   Ставим exim из портов (которые там, кстати, регулярно обновляются - видимо на уровне реальной машины), для этого пилим /etc/make.conf:
# added by lissyara 2007-09-01 in 17:30 MSK

# директория с портами
PORTSDIR?=      /usr/ports
# EXIM
.if ${.CURDIR} == ${PORTSDIR}/mail/exim
WITH_CONTENT_SCAN=      yes
WITH_DEFAULT_CHARSET?=  koi8-r
WITHOUT_IPV6=           yes
WITH_BDB_VER?=          4
WITH_SASLAUTHD=         yes
.endif

   Пояснения - ввиду кривости моих рук, мне не удалось запустить авторизацию через pam, поэтому использовал sasauthd - хотя честно - жалко память - там её всего 64 выделено...
   Дальше рисуем конфиг - привожу его не целиком, а лишь то что правил, и кое чё по мелочи - чтоб было понятно что к чему относится (иначе можно было бы выложить diff да и всё :)), а остальное - дефолтовый конфиг:
# куски конфигурации exim`a, относящиеся к делу.

# далее - правки главной конфигурации

# список доменов держащих почту на этой машине. Тут просто - тупо
# указываем абсолютное имя файла, и exim построчно его добавляет к списку
domainlist local_domains = @ : /etc/mail/local-host-names

# added by lissyara 2007-09-02 in 02:35 MSK
# пришлось поменять группу exim`a с дефолтовой на wheel, причина - 
# права доступа к перечисленным выше файлам, ISPmanager выставляет
# на них права 640 и root:wheel; а exim некоторые читает не от рута.
exim_group = wheel
#exim_group = mail

# added by lissyara 2007-09-02 in 02:26 MSK
# юзаем сислог и штатную ротацию логов
syslog_timestamp = no
log_file_path = syslog


# далее - правки acl_check_rcpt

# в паре ACL надо закомментить строку:
# control = submission
# иначе начнутся грабли с адресами, вылезут адреса такого
# типа - <"user@domain.su"@domain.su>

# то, ради чего всё и затеяно - блэк листы. Оно же - главная подпорка,
# т.к. их нет в отдельном файле, тока в конфиге sendmail, поэтому они
# оттуда выгребаются скриптом по крону, и складываются в файл.
# надо заметить, что в данной опции, к сожалению, нельзя юзать
# списки хостов, поэтому есть некоторый элемент изврата в построении
# данного списка
  deny    message       = rejected because $sender_host_address is\
  in a black list at $dnslist_domain\n$dnslist_text
          dnslists      = ${lookup{lists}	\
				lsearch{/usr/local/etc/exim/blacklists.txt}}


# далее - правки раздела конфигурации роутеров

# тут роутер dnslookups

# роутер по файлу системных альясов - отличие от штатного - лишь одно,
# последняя строка - добавлена для ограничения его обрабоки
# только локальными системными пользователями
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
  # added by lissyara 2007-09-01 in 21:28 MSK
  domains = $primary_hostname

# added by lissyara 2007-09-01 in 21:09 MSK
# роутер обработки альясов с виртуальных юзеров на реальных системных
# практически полная копия системных альясов, но для поиска
# используется полностью квалифицированные адреса по другому файлу
ispmanager_aliases:
  driver       = redirect
  allow_fail
  allow_defer
  data         = ${lookup{$local_part@$domain}	\
			lsearch{/etc/mail/virtusertable}}
  user         = mailnull
  group                = mail
  file_transport = address_file
  pipe_transport = address_pipe

# тут роутер userforward

# роутер локаюзер. Отличие от дефолтвого лишь одно - добавлен
# добавлен домен для ограничения обработки лишь системными пользователями
localuser:
  driver = accept
  check_local_user
# local_part_suffix = +* : -*
# local_part_suffix_optional
  # added by lissyara 2007-09-01 in 21:31 MSK
  domains = $primary_hostname
  transport = local_delivery
  cannot_route_message = Unknown user


# далее - секция транспортов. Показаны лишь транспорты, которые менялись
# пришлось поменять юзера от которого работает транспорт - иначе
# не запускалось vacation - уведомление о получении (или о отпуске)
# кстати - я так и не уверен, что оно работает, но по крайней мере добился
# чтобы не было ругани при приёме сообщения... :(
address_pipe:
  driver = pipe
  return_output
  # next 2 lines added by lissyara 2007-09-02 in 00:33 MSK
  user = mailnull
  group = mailnull


# секция аутентификаторов - целиком

# единственное отличие от дефолтовых аутентификаторов с использованием
# saslauthd - это поиск и подстановка имени реального юзера, с
# использованием имени виртуального, как ключа. Оператор sg используется
# для удвоения возможных двоеточий в паролях

PLAIN:
  driver                     = plaintext
  server_set_id              = $auth2
  server_prompts             = :
  server_condition           = ${if saslauthd{{${lookup{$auth2}         \
                                lsearch{/etc/mail/virtusertable}}}      \
                                {${sg{$auth3}{:}{::}}}{smtp}} {yes}{no}}

LOGIN:
  driver                     = plaintext
  server_set_id              = $auth1
  server_prompts             = <| Username: | Password:
  server_condition           = ${if saslauthd{{${lookup{$auth1}         \
                                lsearch{/etc/mail/virtusertable}}}      \
                                {${sg{$auth2}{:}{::}}}{smtp}} {yes}{no}}

   Ну и самая главная, и единственная подпорка - это скрипт для выгребания блэклистов DNS из конфига sendmail, поскольку вносимые через админку, фигурируют только в нём. Данный скрипт запускаем кроном, с нужной частотой. Если будете прописывать в рутовый крон - то тока кроном с админки, посколько она перезапишет ваши строки при удобном случае... Можно запускать от другого пользователя, лишь бы прав хватало, на запись, ибо на чтение - они есть - конфиг читается всеми:
cat /etc/mail/blacklists.sh
#!/bin/sh

# variables
blacklist_file="/usr/local/etc/exim/blacklists.txt"
sendmail_config="/etc/mail/sendmail.cf"
grep="/usr/bin/grep"
awk="/usr/bin/awk"

# очищаем файл, заодно всовываем в него ключ по которому ищем
echo -n "lists" > ${blacklist_file}
# extract blacklists domain
# изврат - '\.\$' - используется для удаления символа точки на конце
# имени домена. В таком виде, exim не может их обработать...
${grep} "DNS based IP address spam list" ${sendmail_config} \
        | ${awk} '{print $8}' | ${awk} -F '\.\$' '{print $1}'|
        {
        while read list
        do
                # добавляем домены
                echo -n " : ${list}" >> ${blacklist_file}
        done
        }

# валим
exit 0;

   Ещё косяк - по умолчанию, директория с сокетом saslauthd ограничена на чтение-запись:
03% ll /var/run/saslauthd/mux 
srwxrwxrwx  1 root  mail  0 Sep  2 02:38 /var/run/saslauthd/mux
03# ll /var/run | grep saslauthd
drwxrwx---  2 cyrus   mail      512 Sep  2 02:38 saslauthd

   И у exim, в момент аутентификации, не хватает прав добраться до сокета. Как вариант, я сделал так:
chown mailnull /var/run/saslauthd

   Далее, добавляем-удаляем такой набор строк в /etc/rc.conf:
# next 2 lines commented by lissyara 2007-09-02 in 02:23 MSK
#sendmail_enable="YES"
#sendmail_msp_queue_enable="NO"
# added by lissyara 2007-09-02 in 02:23 MSK
sendmail_enable="NONE"
exim_enable="YES"
saslauthd_enable="YES"

   И правим конфиг враппера:
more /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

   Ну и всё. Останавливаем sendmail, запускаем saslauthd и exim - готово:
/etc/rc.d/sendmail forcestop
/usr/local/etc/rc.d/saslauthd start
/usr/local/etc/rc.d/exim start

P.S. Что касается автоответа - не уверен, что он работает, а ман читать лениво. По крайней мере, в такой же конфигурации с sendmail он не приходит, а что в админке надо сделать чтоб приходил - я не понял...
P.S.2 Для отладки работы в сети, юзаем:
/usr/local/sbin/exim -bd -d+all

  Для первых данных:
/usr/local/sbin/exim -d+all local@user < /etc/rc.conf

P.S.3 По результатам первых тестов - вроде работает автоответчик... Короче - ну и хрен с ним :)



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

размещено: 2007-09-02,
последнее обновление: 2007-11-22,
автор: lissyara

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

Влад., 2007-09-03 в 1:31:28

Этот пост говорит о нежелании разбираться в sendmail'e.
Все ошибки надуманные.

ispsystem, 2007-09-03 в 7:21:05

А зачем такой изврат?
ISPmanager умеет прекрасно работать и с exim и еще много c чем. В доке есть подробное описание как его связать с нужным вам MTA.

lissyara, 2007-09-03 в 8:45:50

Нежелаю. А кто бы отрицал - нафиг он мне сдался?
Что касается документации - на сайте не нашёл, ссылка из админки - битая. Тратить МОЁ время на изучение продукта, который МНЕ не интереен - не желаю. Лучше я потрачу время на изучение того, что мне интересно - exim. Что и описано :)

dvg_lab, 2007-09-03 в 9:18:32

сертификация по FreeBSD предполагает знание sendmail, это так к слову :)

lissyara, 2007-09-03 в 9:22:05

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

PuzzleW, 2007-09-03 в 15:23:15

привязка exim'a к ispmanager'y по документации не прошла. exim даже не стартовал.

более того, задача которая стояла - предавторизация для открывания рилея даже для ip из *BL - на exim'e решается проще чем в sendmail

текщее решение проблеимы - по статье - практически идеально, разве что BL приходиться извращенным образом выковыривать :)

offtop:
кстати, подтверждаю кривость прикрученности вирутальных пользователей в панели(не тут конечно надо, ну да бог с ним)
создаю в ispmanager домен, завожу пользователя, СРАЗУ вписываю к нему два алиаса. СОЗДАЕТЬСЯ виртуальный пользователь и к нему ТРИ АЛИСА. это еще бы ничего...
НО ПОЧТА в его папку НЕ ДОСТАВЛЯЕТЬСЯ.

Yspex, 2007-09-03 в 21:26:28

Да простит меня Лисс и другие! Вспомните Шерлок Холмса, он говорил, у меня есть моск, есть полочки, и у меня по полочкам разложено то, что мне нужно, а вот то что мне не нужно увы... извольте. Согласен с Лисом!

alik, 2007-09-03 в 22:20:21

Спасибо от имени заказчика :)
Быстрый и качественный результат.
Я уж было разочаровался, что либо все так плохо, либо у меня требования завышенные.
По крайней мере несколько админов (включая службу поддержки minivds) отвечали что на базе sendmail это сделать невозможно.  
В любом случае спасибо за результат, какая разница что там внутри:)

serge, 2007-11-22 в 1:44:13

Респект и увага автору!!! Почта пошла влет.
Только domains = $primary_hostname все таки убрал из конфига.
З.Ы. sendmail может и мощная программа, но порой действительно нет времени разбираться в его конфигах. И дело не в отсутствии желания это сделать.

serge, 2008-01-03 в 23:03:18

Изменился файл конфигурации sendmail под ISPManager. Теперь конфиг лежит в /etc/mail/имя_сервера.cf . Соответственно скрипт для выковыривания "Списков блокировки dnsbl" перестает отрабатывать. Для исправление, правим переменную sendmail_config в файле /etc/mail/blacklists.sh на свое значение.

ashgdw, 2008-03-07 в 16:15:52

# последняя строка - добавлена для ограничения его обрабоки
# только локальными системными пользователями.

Имеется ввиду - для СНЯТИЯ ограничения??? а то когда читаю, мозг вскипает ;))

Irka, 2008-05-11 в 6:46:02

Сиди дальше плюй в паталок!
-1 =(


Оставьте свой комментарий:
Ваше имя:   *
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
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS

Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT

В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat

Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp

Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration

Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster

HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS

История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire

Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной

Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server

Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs

Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec

Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash

Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT

Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3

Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN

На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm

Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth&quota

Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli

Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master

MySQL (Master Master) and (Master Slave) Как настроить репликацию…
2010-03-22, Mufanu
named 9.7.0

Система доменных имен (Domain Name Service, DNS) - одна из тех незаметных, закулисных программ, которым не уделяется и половины того внимания, которого они заслуживают.
2010-03-09, terminus
DNS zones

Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
подписка

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

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

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1387 секунд
Из них PHP: 60%; SQL: 40%; Число SQL-запросов: 77 шт.
Исходный размер: 114143; Сжатая: 23214