From: fantom <tolik@dataxp.net.>
Newsgroups:
Date: Mon, 17 Nov 2006 14:31:37 +0000 (UTC)
Subject: Почтовый сервер на основе sendmail и dbmail.
Вступление.
Достался мне внаследство почтовик, проработавший 3 года практически без изменений.
И крутился на нем sendmail, каждый почтовый ящик - отдельный
пользователь (а ящиков примерно 2000 :) ).
Произошло ЧП - сломался сервер, но жесткий диск остался цел и невредим.
В связи с этим было закуплено новое железо. Можно конечно банально
воткнуть старый винт - и пусть все крутиться дальше, как и было до
поломки, но это решение показалось неправильным по нескольким причинам:
1. Винту 4 года, может и посыпалься ненароком.
2. В случае выхода из строя винта как быть с пользовательской почтой? логинами-паролями?
3. Давно была мысль обновить ПО на сервере.
В результате усиленных поисков в инете наткнулся на руководство по настройке связки
Exim+dbmail+SpamAssasin+Антивирус (http://www.opennet.ru/docs/RUS/dbmail/)
Именно это руководство и послужило отправной точной для дальнейших действий и поисков.
Почему...
1. Почему sendmail?
Из почтовых серверо Qmail, Sendmail, Postfix и Exim мне больше всего
понравился Qmail: прост в настройке, по всем отзывам и по собственным
впечатлениям - быстр, надежен, наименьшее количество обнаруженых
уязвимостей (если не сказать - полное их отсутствие); но и давно не
обновлялся, большинство функционала реализуется сторонними утилитами,
т.е. требует довольно существенного "обвеса" для дастижения
необходимого уровня.
Postfix - сам его не "щупал", порасспрашивал знакомых (и неочень) людей,
оказалось, что Postfix практически никто не применяет на почтовых
серверах, обслуживающих хотя-бы 1000 ящиков и 10-15 доменов (просьба не
возмущаться поклонников Postfix-а, верю что это хороший МТА, но это - не
мой выбор).
Exim - мне тут сложно что-либо сказать, имею только косвенные данные -
по моим опросам примерно 3 из 10 используют Exim, причины - проще
настроить, чем sendmail; меньшее количество уязвимостей, чем в sendmail.
Sendmail - несмотря на регулярные проблемы с безопасностью и сложность
настройки почему все-таки Sendmail?
1.1. Сложность конфига компенсируется относительной простотой xxxxx.mc
файла из которого с помошью m4 получаем конфиг, помоемому xxxxx.mc
выглядит не сложнее, чем конфиг Exim-а.
1.2. как сказал один знакомый "Sendmail может ВСЕ! на что только
способна почта".
2. Почему dbmail?
Очень заманчива идея хранить в базе данных не только логин-пароль, но и
сами письма. Сразу есть поддержка обьема почтового ящика. Можно держать
базу на отдельном серваке.Быстро восстановить работу сервера при сбое из
дампа базы. Поиском иных вариантов не занимался, возможно существуют
альтернативы dbmail (даже наверняка существуют), но меня вполне
устраивает dbmail.
DBMail - Установка и настройка.
-------------------------------
Официальный сайт http://www.dbmail.org/.
На момент написания последний стабильный релиз был dbmail-2.0.10.
Скачиваем архив dbmail-2.0.xx.tar.gz
распаковываем tar -zxf dbmail-2.0.xx.tar.gz
cd dbmail-2.0.xx
Можно (и желательно) внимательно прочитать INSTALL
Далее говорим, что наша база - PostgreSQL (ну или MySQL - кому как надо)
./configure --with-pgsql (или --with-mysql)
И далее хорошо знакомое
make
Если были ошибки - выявляем причины и устраняем.
make check
make install
Желательно для dbmail специально создать пользователя, хотя и
необязательно (я создал и обозвал dbmail)
Далее необходимо создать собственно базу данных.
Для этого читаем файлик INSTALL.dbmail в котором и описана эта процедура.
Конкретно для PostgreSQL необходимо проделать следующее:
создаем пользователя с именем dbmail (имя можно любое)
Правим конфиг...
Параметры говорят сами за себя, и у человека хоть немного знакомого с английским
вопросов вызывать недолжны.
Какие возникли проблемы - поумолчанию в конфиге указано довольно большое
количество подключений к базе данных, при запуске dbmail-pop3d база
перестала принимать подключения для начала стоит выбрать числа поменьше
(MAXCHILDREN и MAXCONNECTS я для начала уменьшил в 10 раз)
Теперь база данных готова для использования.
Добавление пользователей можно делать с помощью консольной утилиты
dbmail-users dbmail-users -a username -w secret -g 0 -m 25M -s
username@domain.org username1@domain.net
-a username - имя пользователя
-s username@domain.org - алиас (можно несколько через пробел) почта ДЛЯ этих адресов будет складываться
в ящик username
-m 25M - обьем ящика (поумолчанию - в байтах, K - килобайты, M - мегабайты) 25Мегабайт
-w secret - пароль
Прочие опции желающие могут поизучать прочтя вывод команды
dbmail-users --help
Еще в INSTALL.dbmail рекомендуют добавить в cron следующую строку:
На этом этапе возникла только одна проблемка, поумолчанию у меня
dbmail-smtp стал в /usr/local/sbin, а макрос ищет его в /usr/sbin/
ситуацию можно поправить создав ссылку
Незабыть убрать эти домены из /etc/mail/local-host-names (или его
эквивалента), иначе письма для этих доменов в dbmail непопадут, а будут
доставлены локальным пользователям.
Пересобрать конфиг sendmail-а и перезапустить sendmail.
Теоретически ВСЕ! почта должна складываться в базу даных и отдаваться по
протоколу pop3 или imap в зависимости от того, какой демон
(dbmail-pop3d или dbmail-imapd) запущен.
ВАЖНО! При рестарте ОЧЕНЬ желательно, чтобы dbmail-lmtpd запускался
раньше sendmail-а.
Теперь осталось настрить sendmail для отбивания спама.
Проверка адреса отправителя.
Воспользуемся фильтрами, работающими посредствам Milter API в sendmail.
Т.к. milter-sender теперь платный, воспользуемся фильтром smf-sav
http://smfs.sourceforge.net/smf-sav.html выполняющим те же функции.
Качаете, распаковываете, правите Makefile (сценария ./configure там не
предусмотрено), затем
ВАЖНО! При рестарте НЕОБХОДИМО, чтобы smf-sav запускался раньше
sendmail-а, иначе проверка небудет выполняться.
Можно прикрутить еще проверку на зомбированые хосты.
Например при помощи smf-zombie, в механизмах его работы я не разбирался,
могу только сказать, что это дает определенный эффект.
Качаете там же, где и smf-sav, распаковываете, правите Makefile
(сценария ./configure там не предусмотрено), затем
make
make install
Конфигов для него никаних ненужно.
Запускаем:
/usr/local/sbin/smf-zombie
Теперь в sendmail.mc добавляем строчки для smf-zombie
dnl Убивание спама от зомбированых хостов
dnl Этот фильтр должен быть ПЕРВЫМ среди остальных фильтров
define(`confMILTER_MACROS_HELO', confMILTER_MACROS_HELO`, {verify}')dnl
define(`confMILTER_MACROS_ENVFROM', confMILTER_MACROS_ENVFROM`, {msg_size}')dnl
INPUT_MAIL_FILTER(`smf-zombie', `S=unix:/var/smfs/smf-zombie.sock, T=S:30s;R:1m')dnl
ВАЖНО! Этот фильтр должен быть ПЕРВЫМ среди остальных фильтров в конфиге sendmail-а
ВАЖНО! При рестарте НЕОБХОДИМО, чтобы smf-sav запускался раньше sendmail-а.
Послесловие.
Все вышеуказаное было проделано на FreeBSD 6.1 и успешно заработало
практически с первой попытки.
Писано это было скорее как шпаргалка, а не как подробное пошаговое руководство.
Врядли настройка ответственного сервера будет доверена человеку
неумеющему создать нового пользователя в системе; например о
первоначальной настройке sendmail-а ничего не сказано, считается что
читатель самостоятельно проделает первоначальную настройку.
На момент "опубликования" произошли некоторые изменения - ветка
dbmail-2.2 стала стабильной.
Ради любопытства проделал все вышеперечисленное на другой машине с
FreeBDS 6.1, - разницы в установке никакой, различаются только структуры
базы данных.
1195 Прочтений • [Почтовый сервер на основе sendmail и dbmail. (dbmail mail sendmail)] [08.05.2012] [Комментариев: 0]