|
|
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
|
|
|
|
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"a
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-09, terminus
DNS zones
Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)
Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
|
Комментарии пользователей [12 шт.]