The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Почтовый сервер на основе sendmail и dbmail. (dbmail mail sendmail)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: dbmail, mail, sendmail,  (найти похожие документы)
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.dev/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 (имя можно любое) createuser -U postgres dbmail Теперь надо присвоить пользователю пароль psql postgres postgres Присваиваем пароль ALTER USER dbmail WITH PASSWORD '<password>'; \q Теперь создаем базу createdb -U dbmail dbmail И создаем таблицы в базе: psql -U dbmail dbmail < sql/postgresql/create_tables.pgsql Теперь копируем конфигурационный файл в /etc cp dbmail.conf /etc/ Правим конфиг... Параметры говорят сами за себя, и у человека хоть немного знакомого с английским вопросов вызывать недолжны. Какие возникли проблемы - поумолчанию в конфиге указано довольно большое количество подключений к базе данных, при запуске 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 следующую строку: 0 3 * * * /usr/local/sbin/dbmail-util -cturpd -l 24h -qq Для обслуживания базы данных. DBmail предоставляет в наше распоряжение 2 транспорта для передачи писем в базу данных dbmail-lmtp и dbmail-smtp. Если MTA поддерживает lmtp то рекомендуется использовать именно его. Запуск: dbmail-lmtpd и dbmail-pop3d (или dbmail-imapd - кому что нравиться) Осталось состыковать наш MTA с dbmail. На сайте http://www.dbmail.org/ имеется wiki с описанием стыковки dbmail с Qmail, Exim, Postfix и Sendmail. Подключение к Sendmail. Для того, чтобы sendmail понял, чего мы от него хотим, надо сначала создать 2 m4 макроса: /usr/share/sendmail/cf/mailer/dbmail.m4 PUSHDIVERT(-1) ifdef(`DBMAIL_MAILER_PATH',, `ifdef(`DBMAIL_PATH', `define(`DBMAIL_MAILER_PATH', DBMAIL_PATH)', `define(`DBMAIL_MAILER_PATH', /usr/sbin/dbmail-smtp)')') _DEFIFNOT(`DBMAIL_MAILER_FLAGS', `SPhnu9') ifdef(`DBMAIL_MAILER_ARGS',, `define(`DBMAIL_MAILER_ARGS', `dbmail -d $u')') POPDIVERT Mdbmail, P=DBMAIL_MAILER_PATH, F=_MODMF_(CONCAT(`DFM', DBMAIL_MAILER_FLAGS), `DBMAIL'), S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP/HdrFromSMTP, ifdef(`DBMAIL_MAILER_MAX', `M=DBMAIL_MAILER_MAX, ')T=DNS/RFC822/X-Unix, A=DBMAIL_MAILER_ARGS и /usr/share/sendmail/cf/mailer/dbmail-lmtp.m4 PUSHDIVERT(-1) ifdef(`DBMAIL_MAILER_PATH',, `ifdef(`DBMAIL_PATH', `define(`DBMAIL_MAILER_PATH', DBMAIL_PATH)', `define(`DBMAIL_MAILER_PATH', [IPC])')') _DEFIFNOT(`DBMAIL_MAILER_FLAGS', `AhmXz5@/:|') ifdef(`DBMAIL_MAILER_ARGS',, `define(`DBMAIL_MAILER_ARGS', `TCP $h 24')') POPDIVERT Mdbmail-lmtp, P=DBMAIL_MAILER_PATH, F=_MODMF_(CONCAT(`DFM', DBMAIL_MAILER_FLAGS), `DBMAIL'), S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP/HdrFromSMTP, ifdef(`DBMAIL_MAILER_MAX', `M=DBMAIL_MAILER_MAX, ')T=DNS/RFC822/X-Unix, A=DBMAIL_MAILER_ARGS На этом этапе возникла только одна проблемка, поумолчанию у меня dbmail-smtp стал в /usr/local/sbin, а макрос ищет его в /usr/sbin/ ситуацию можно поправить создав ссылку ln -s /usr/local/sbin/dbmail-smtp /usr/sbin/dbmail-smtp или поправив исходник макроса. Теперь в sendmail.mc (или его эквивалент) добавляем строчки: FEATURE(`mailertable')dnl MAILER(dbmail)dnl MAILER(dbmail-lmtp)dnl в /etc/mail/mailertable (именно его задает "FEATURE(`mailertable')" ) указываем домены, почта для которых будет передаваться в dbmail domain.org dbmail-lmtp:[127.0.0.1] domain.net dbmail-lmtp:[127.0.0.1] Незабыть убрать эти домены из /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 там не предусмотрено), затем make make install Правим конфиг /etc/mail/smfs/smf-sav.conf и запускаем: /usr/local/sbin/smf-sav или /usr/local/sbin/smf-sav -c /etc/mail/smfs/smf-sav.conf Теперь в sendmail.mc добавляем строчки для smf-sav, dnl Проверка Адреса отправителя define(`confMILTER_MACROS_HELO', confMILTER_MACROS_HELO`, {verify}')dnl INPUT_MAIL_FILTER(`smf-sav', `S=unix:/var/run/smfs/smf-sav.sock, T=S:30s;R:4m')dnl Далее в папке /etc/mail make all install && ../rc.d/sendmail restart Если все впорядке, то в логе /var/log/maillog можно увидеть строчки вида smf-sav[528]: sender check succeeded: <72stocknews@totallytitanium.com.>, 84.168.240.99, p54A8F063.dip.t-dialin.net, [00:00:03] (адрес существует) или smf-sav[528]: recipient check failed: <duncan@kr.dataxp.net.>, 84.168.240.99, p54A8F063.dip.t-dialin.net, <72stocknews@totallytitanium.com.>, [00:00:01] (адрес несуществует) ВАЖНО! При рестарте НЕОБХОДИМО, чтобы 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 define(`confPRIVACY_FLAGS', `goaway,noetrn,nobodyreturn,noreceipts')dnl define(`confTO_COMMAND', `1m')dnl define(`confTO_IDENT', `0s')dnl define(`confTO_RESOLVER_RETRANS', `7s')dnl define(`confTO_RESOLVER_RETRY', `4')dnl define(`confMAX_DAEMON_CHILDREN',`256')dnl define(`confCONNECTION_RATE_THROTTLE',`8')dnl define(`confBAD_RCPT_THROTTLE', `1')dnl Sendmail v8.12+ Далее в папке /etc/mail make all install && ../rc.d/sendmail restart ВАЖНО! Этот фильтр должен быть ПЕРВЫМ среди остальных фильтров в конфиге sendmail-а ВАЖНО! При рестарте НЕОБХОДИМО, чтобы smf-sav запускался раньше sendmail-а. Послесловие. Все вышеуказаное было проделано на FreeBSD 6.1 и успешно заработало практически с первой попытки. Писано это было скорее как шпаргалка, а не как подробное пошаговое руководство. Врядли настройка ответственного сервера будет доверена человеку неумеющему создать нового пользователя в системе; например о первоначальной настройке sendmail-а ничего не сказано, считается что читатель самостоятельно проделает первоначальную настройку. На момент "опубликования" произошли некоторые изменения - ветка dbmail-2.2 стала стабильной. Ради любопытства проделал все вышеперечисленное на другой машине с FreeBDS 6.1, - разницы в установке никакой, различаются только структуры базы данных.

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, dutcher (?), 10:57, 24/11/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как в sendmail организовать систему сниффинга почты юзеров?
     
     
  • 2.13, Гость (?), 13:27, 27/11/2006 [^] [^^] [^^^] [ответить]  
  • +/
    что вы понимаете под сниффингом?
     

  • 1.2, dawnshade (?), 12:08, 24/11/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    после фразы


    >Postfix - сам его не "щупал", порасспрашивал >знакомых (и неочень) людей,
    >оказалось, что Postfix  практически никто не >применяет на почтовых
    >серверах, обслуживающих хотя-бы 1000 ящиков и 10->15 доменов  (просьба не
    >возмущаться поклонников Postfix-а, верю что это >хороший МТА, но это - не мой выбор).

    просто плакал.

    >1.2. как сказал один знакомый "Sendmail может >ВСЕ! на что только
    >способна почта".

    ровно такие же костыли как и в qmail - левые демоны рабтающие через milter, в то время как нормальные MTA реализуют одной строкой в конфе.
    и не зря его начали переписывать с нуля.

     
  • 1.4, Terteron (?), 13:20, 24/11/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    2 site Admin:
    почему не удалить пост от 12:08:11, 24/11/2006, там гонево на sendmail?
     
  • 1.5, creativ (??), 16:20, 24/11/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    это что болезнь такая из исходников ставить?
     
     
  • 2.9, fantom (??), 09:22, 27/11/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >это что болезнь такая из исходников ставить?

    Ставя из исходников я всегда знаю с какими параметрами что собирал,
    При необходимости перестановки (например на другую систему) ненадо гадать какие
    параметры там поумолчанию.

     
     
  • 3.12, dawnshade (?), 10:44, 27/11/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >>это что болезнь такая из исходников ставить?
    >
    >Ставя из исходников я всегда знаю с какими параметрами что собирал,
    >При необходимости перестановки (например на другую систему) ненадо гадать какие
    >параметры там поумолчанию.


    научитесь пользоватся портами. и не превращайте систему в slackware.
    P.S. про постфикс еще раз. freebsd.org пользует постфикс со всеми мэйлистами и прочей шелухой. догадайтесь какой там трафик.
    и опеннет тоже Ж)
    так что категоричных утверждений не надо.

     
     
  • 4.14, Гость (?), 13:29, 27/11/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >>>это что болезнь такая из исходников ставить?
    >>
    >>Ставя из исходников я всегда знаю с какими параметрами что собирал,
    >>При необходимости перестановки (например на другую систему) ненадо гадать какие
    >>параметры там поумолчанию.
    >
    >
    >научитесь пользоватся портами. и не превращайте систему в slackware.
    >P.S. про постфикс еще раз. freebsd.org пользует постфикс со всеми мэйлистами и
    >прочей шелухой. догадайтесь какой там трафик.
    >и опеннет тоже Ж)
    >так что категоричных утверждений не надо.
    а в портах уже есть эти фильтры?
    или раз в портах нет, то из исходников компилять это зазорно?
     
     
  • 5.17, dawnshade (?), 14:34, 27/11/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >>>>это что болезнь такая из исходников ставить?
    >>>
    >>>Ставя из исходников я всегда знаю с какими параметрами что собирал,
    >>>При необходимости перестановки (например на другую систему) ненадо гадать какие
    >>>параметры там поумолчанию.
    >>
    >>
    >>научитесь пользоватся портами. и не превращайте систему в slackware.
    >>P.S. про постфикс еще раз. freebsd.org пользует постфикс со всеми мэйлистами и
    >>прочей шелухой. догадайтесь какой там трафик.
    >>и опеннет тоже Ж)
    >>так что категоричных утверждений не надо.
    >а в портах уже есть эти фильтры?
    >или раз в портах нет, то из исходников компилять это зазорно?


    а пропатчить порт и сделать это достоянием общественности никак (man send-pr)? или вы привыкли работать только для себя? с большой вероятностью это еще кому-то потребуется, да вам же при повторной инсталляции скаже на secondary MX.
    P.S. я именно так и делаю.

     
     
  • 6.19, fantom (??), 15:48, 27/11/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >>>>>это что болезнь такая из исходников ставить?
    >>>>
    >>>>Ставя из исходников я всегда знаю с какими параметрами что собирал,
    >>>>При необходимости перестановки (например на другую систему) ненадо гадать какие
    >>>>параметры там поумолчанию.
    >>>
    >>>
    >>>научитесь пользоватся портами. и не превращайте систему в slackware.
    >>>P.S. про постфикс еще раз. freebsd.org пользует постфикс со всеми мэйлистами и
    >>>прочей шелухой. догадайтесь какой там трафик.
    >>>и опеннет тоже Ж)
    >>>так что категоричных утверждений не надо.
    >>а в портах уже есть эти фильтры?
    >>или раз в портах нет, то из исходников компилять это зазорно?
    >
    >
    >а пропатчить порт и сделать это достоянием общественности никак (man send-pr)? или
    >вы привыкли работать только для себя? с большой вероятностью это еще
    >кому-то потребуется, да вам же при повторной инсталляции скаже на secondary
    >MX.
    >P.S. я именно так и делаю.

    1. Работай я только на себя  - не утруждался бы написанием подобных заметок, лично мне хватило бы описания раза в 3 короче.

    2. Не на всех системах есть порты!
    Есть например линукс - и там уже лезть надо в исодник пакета и ковыряться в нем.

    Иксы или какой-нить ОпенОфис незадумываясь полезу ставить из портов, а вот что-нить типа apach или dbmail предпочитаю из исходников.

     
     
  • 7.20, dawnshade (?), 16:20, 27/11/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >
    >2. Не на всех системах есть порты!
    >Есть например линукс - и там уже лезть надо в исодник пакета
    >и ковыряться в нем.

    гм, а пакет менеджеры придумали наверное глупые люди. и из статьи:

    >Все вышеуказаное было проделано на FreeBSD 6.1 и успешно заработало
    >практически с первой попытки.

    так что про пенгвинов тут не надо.


     
     
  • 8.21, fantom (??), 17:33, 27/11/2006 [^] [^^] [^^^] [ответить]  
  • +/
    У меня на обслуживании есть сервера RH9 и Debian на которых скорее всего тоже п... текст свёрнут, показать
     
     
  • 9.23, Гость (?), 18:23, 27/11/2006 [^] [^^] [^^^] [ответить]  
  • +/
    спасибо за статью бум тоже пробовать а критиковать просто, вот сделать уже с... текст свёрнут, показать
     
  • 4.15, fantom (??), 13:44, 27/11/2006 [^] [^^] [^^^] [ответить]  
  • +/
    А никто и не делал категоричных утверждений :)
    Всего лишь среди опрошеных мною людей (примерно 30 человек) ниукого небыло
    сервера на postfix-е крупнее 100 ящиков...
     
     
  • 5.18, dawnshade (?), 14:35, 27/11/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >А никто и не делал категоричных утверждений :)
    >Всего лишь среди опрошеных мною людей (примерно 30 человек) ниукого небыло
    >сервера на postfix-е крупнее 100 ящиков...


    вот сразу наскидку 2 человека :)
    опять же посмотрите в хедера любого письма пришедего вам с крупного релея, там тоже найдется достаточно постфиксов :))

     
  • 2.10, Imago (?), 09:34, 27/11/2006 [^] [^^] [^^^] [ответить]  
  • +/
    А это что панацея, юзать предкомпиленные пакеты с хламом, когда используется 1 или 2
    фичи?
     

  • 1.6, Зелный (?), 16:28, 24/11/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как были перенесены пользователи из системы в базу?
    Там совпадают форматы шифрования паролей?
     
     
  • 2.7, fantom (??), 09:16, 27/11/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Перенос пользователей в базу еще незакончен.
    примерно 50% юзеров заводились специальным скриптом и их пароли остались в логах.
    Ну а остальных придется вылавливать снифером.
     
  • 2.8, fantom (??), 09:18, 27/11/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Кстати насчет шифрования паролей надо будет посмотреть, в dbmail поддерживается несколько видов шифрования.
     
     
  • 3.11, Зелный (?), 10:03, 27/11/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Ясно.
    Просто хотелось бы как-нибудь автоматически провести этот перенос, т.к. у меня подобная проблема, и пользователей довольно много.

    Почитал доки, так и не понял, как он хранит пароли в базе, помоему открытыми.

     
     
  • 4.16, fantom (??), 13:46, 27/11/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >Ясно.
    >Просто хотелось бы как-нибудь автоматически провести этот перенос, т.к. у меня подобная
    >проблема, и пользователей довольно много.
    >
    >Почитал доки, так и не понял, как он хранит пароли в базе,
    >помоему открытыми.


    при заведении можно указать
         -p pwtype password type may be one of the following:
                   plaintext, crypt, md5-hash, md5-digest, md5-base64
                   each type may be given a '-raw' suffix to indicate
                   that the password argument has already been encoded.

     

  • 1.22, fantom (??), 17:52, 27/11/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Перенос пользователей оказывается элементарный!
    dbmail-users -a <username> -P /etc/master.passwd -s <mail@address>

    Такчто перенос системных пользователей очень простой

     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру