The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Раздел полезных советов: Настройка почтового сервера на базе..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Настройка почтового сервера на базе..."  +/
Сообщение от auto_tips on 10-Июл-09, 11:55 
Задача: необходимо установить и настроить почтовый сервер для нескольких почтовых доменов.
В качестве МТА я выбрал Exim. Список доменов, пользователей и т.д. будут хранится в MySQL.
Итак, что мы имеем: ОС FreeBSD, на сервере 8 ip-адресов, MySQL сервер уже установлен.

Приступаем к установке:

1. Добавляем в  /etc/make.conf опции для сборки exim (так же у меня указана версия MySQL,
c которой собираются порты и в которых используется MySQL):

      DEFAULT_MYSQL_VER=51
      .if ${.CURDIR:N*/usr/ports/mail/exim} == ""
      WITH_MYSQL=yes
      WITH_SPF=yes
      WITH_SRS=yes
      WITHOUT_IPV6=yes
      WITHOUT_MAILSTORE=yes
      WITHOUT_MBX=yes
      WITHOUT_PASSWD=yes
      WITHOUT_PAM=yes
      WITHOUT_AUTH_SPA=yes
      WITHOUT_NIS=yes
      .endif

2. Устанавливаем exim с поддержкой MySQL из портов:

      cd /usr/ports/mail/exim ; make install clean ; echo 'exim_enable="YES"' >> /etc/rc.conf

3. Заменяем sendmail в /etc/mail/mailer.conf на exim:

      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

4. Создаём директорию, в которую exim будет складывать почту (у меня это /home/mail/domains)

      mkdir -p /home/mail/domains ; chown -R mailnull:mail /home/mail

5. Создаём БД для exim:

      mysqladmin -u root -p create exim_db

6. Создаём пользователя MySQL и выделяем ему права на БД:

      echo "GRANT SELECT, INSERT, UPDATE, LOCK TABLES, CREATE, DROP, DELETE, INDEX ON exim_db.*
      TO exim@localhost IDENTIFIED BY 'Mta_MaileR'" | mysql -u root -p mysql

7. Создаём структуру таблиц (описание таблиц и полей в конце статьи):

      fetch -v http://www.sysadminpages.com/files/exim/exim_db.sql
      mysql -u exim -p exim_db < exim_db.sql

8. Подключаемся к БД и добавляем записи для 1-го почтового домена
(Для примера взял вымешленые имя домена и ip-адрес. Для рабочего почтового сервера необходимо
заменить значения на реальные):

      mysql -u exim -p exim_db
      mysql>INSERT INTO domains VALUES('example.local','mail.example.local','10.1.10.1');
      mysql>INSERT INTO accounts (login, password, maildir, uid, gid, mailquota)
      VALUES ('admin@example.local', 'Pass4Admin', '/home/mail/domains/example.local/admin/Maildir', 26, 26, 2000);

9. Конфигурируем exim. Конфиг длинный, и поэтому его описание я опускаю.
Рабочий конфиг можно взять по адресу: https://www.opennet.ru/soft/exim.config

10. Запускаем exim

      /usr/local/etc/rc.d/exim start

11. Для проверки работоспособности отправляем тестовое письмо

      mail -s 'test message' admin@example.local
      test message
      .

Смотрим лог exim:

      tail /var/log/exim/mainlog

Если всё правильно настроено, то в логе будут записи примерно следующего содержания:

      2009-07-06 08:26:54 1MNnHZ-000CJx-U5 <= root@srv.example.local U=root P=local S=363
      2009-07-06 08:26:54 1MNnHZ-000CJx-U5 => admin <admin@example.local> R=localuser T=local_delivery
      2009-07-06 08:26:54 1MNnHZ-000CJx-U5 Completed

12. Устанавливаем dovecot

      cd /usr/ports/mail/dovecot
      make WITH_SSL=yes WITHOUT_IPV6=yes WITH_MYSQL=yes install clean
      echo 'dovecot_enable="YES"' >> /etc/rc.conf

13. Конфигурируем dovecot

      mv /usr/local/etc/dovecot.conf /usr/local/etc/dovecot.conf.orig
      cd /usr/local/etc/
      fetch -v https://www.opennet.ru/soft/dovecot.conf
      fetch -v https://www.opennet.ru/soft/dovecot-sql.conf

14. Запускаем dovecot

      /usr/local/etc/rc.d/dovecot start

15. Настраиваем почтовый клиент на получение-отправку почты. В качестве логина используем e-mail адрес.

Описание таблиц БД exim_db:

Таблица accounts - учётные записи пользователей
Таблица aliases - алиасы для почтовых адресов
Таблица domains - имена почтовых доменов, адреса МХ-ов и их ip-адресов
Таблица spam_domains - список "чёрных" доменов
Таблица spam_emails - список "чёрных" почтовых адресов
Таблица spam_ip_senders - список "чёрных" ip-адресов
Таблица white_domains - список "белых" доменов
Таблица white_emails - список "белых" почтовых адресов
Таблица white_ip_senders - список "белых" ip-адресов


URL: http://sysadminpages.com/2009/07/freebsd-exim-dovecot-mysql/
Обсуждается: https://www.opennet.ru/tips/info/2124.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по ответам | RSS]

1. "Настройка почтового сервера на базе Exim, MySQL и Dovecot во..."  +/
Сообщение от pazke email on 10-Июл-09, 11:55 
He многовато ли привилегий на exim_db дали ?
Судя по конфигам и SELECT хватило бы.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Настройка почтового сервера на базе Exim, MySQL и Dovecot во..."  +/
Сообщение от angra (ok) on 10-Июл-09, 12:33 
Шаманы от IT в ударе. Статья сводится к одному предложению: установи все нужные пакеты и поставь готовые конфиги с данных адресов.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Настройка почтового сервера на базе Exim, MySQL и Dovecot во..."  +/
Сообщение от csa (??) on 10-Июл-09, 13:01 
URL (https://www.opennet.ru/tips/info/2124.shtml) как-бы намекает - TIPS

а по готовому конфигу уже можно рыть доки (ибо ясно, что именно рыть), а не блуждать в тумане, не понимая, что с чем нужно связать, чтобы хоть что-то заработало

считайте это open source configs :)

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Настройка почтового сервера на базе Exim, MySQL и Dovecot во..."  +/
Сообщение от charon (ok) on 10-Июл-09, 18:54 
мне понравилось, что в ДиректАдмине всё это изящно реализовано без баз данных, в обычных текстовых файлах. Плюс еще ограничение на количество писем в день для логина включается созданием одного файла.
На досуге и эту статью почитаю.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Настройка почтового сервера на базе Exim, MySQL и Dovecot во..."  +/
Сообщение от Михаил Кривушин email on 10-Июл-09, 18:56 
В самом начале моих разборок мне попалось подобное хофту по postfix+mysql+чего то еще. Так вот - нафиг мне эта база на самом деле не нужна была.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Настройка почтового сервера на базе Exim, MySQL и Dovecot во..."  +/
Сообщение от BlackHawk (ok) on 10-Июл-09, 21:17 
мне всегда было интересно - чем же так MySQL приманил всех для почты?;) exim+openLDAP+courier делают свое дело на ура ;) и на много структурированее и нагляднее получается. тем более как показывает практика на загруженных машинах MySQL очень любит тупить, а если еще и и сайты там крутяться на чем-то типа joomla так вообще ховайся
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

7. "Настройка почтового сервера на базе Exim, MySQL и Dovecot во..."  +/
Сообщение от HFSC (??) on 11-Июл-09, 15:19 
чем нагляднее? ) добавлением через зад десяток собственных атрибутов в схему и написанием ограниченных фильтров? И кто сказал что опенлдап быстрее при большой нагрузке?
Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Настройка почтового сервера на базе Exim, MySQL и Dovecot во..."  +/
Сообщение от expr on 12-Июл-09, 23:42 
ну как сказать, сервер поднятый еще 4 года назад на связке postfix + openldap + courier работает до сих пор без проблем и достаточно гибок. Главное в этом направлении решить что запихивать в ldap а что не стоит. Некоторые вещи, такие управление аккаутнами/доменами гораздо нагляднее и удобнее реализовывываются как раз через ldap, а вот фильтры, черные/белые списки и тд. лучше оставить на откуп плоским конф файлам. Да пришлось написать несколько скриптов обёрток для управления помимо ldap администратора, но так и для мускула придется писать, чтобы для наиболее частых действий не приходилось в консоли набивать селекты и инсерты, а веб интерфейсы по определению не гибки.
Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Настройка почтового сервера на базе Exim, MySQL и Dovecot во..."  +/
Сообщение от HFSC (??) on 13-Июл-09, 00:39 
С sql гораздо проще добавлять в таблицу дополнительные поля и строить сложные фильтры, в моем конфиге exim например указано всего несколько макросов со сложными селектами для рутеров и транспортов.
Для веба я просто взял исходники postfixadmin и вбил туда все нужные поля,селекты и инсерты, тк там очень простой интерфейс на пхп
Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "Настройка почтового сервера на базе Exim, MySQL и Dovecot во..."  +/
Сообщение от xz (??) on 14-Июл-09, 15:17 
под нагрузкой все это не взлетит.

1) лишние лукапы на пустом месте
domainlist local_domains = @:mysql;SELECT domain from domains where domain='$domain'

smtp_banner = ${lookup mysql{select host from domains where ip = '$interface_address'}{$value}{$primary_hostname} } ESMTP Sendmail 8.14.3/8.14.3; $tod_full

2) очень умный кондишн, да.
  deny    message       = You host use dynamic address
          log_message   = SPAM remote host use dynamic address
          condition     = \
                        ${if \
                                match{$sender_host_name}\
                                {\
                                        ^.*([.-]\\d\{1,3\})([.-]\\d\{1,3\}).*|\
                                        ^.*([.-]\\d\{1,3\}).*client.*|\
                                        ^.*client.*([.-]\\d\{1,3\}).*|\
                                        ^.*dial(up|in).*([.-]\\d\{1,3\}).*|\
                                        ^.*(\\d\{1,3\}[.-]?).*dial(up|in).*|\
                                        ^.*(\\d\{1,3\}[.-]?).*dsl.*|\
                                        ^.*dsl.*(\\d\{1,3\}[.-]?).*|\
                                        ^.*dhcp.*(\\d\{1,3\}[.-]?).*|\
                                        ^.*(\\d\{1,3\}[.-]?).*dhcp.*|\
                                        ^.*(\\d\{1,3\}[.-]?).*ppp.*|\
                                        ^.*ppp.*(\\d\{1,3\}[.-]?).*|\
                                        ^.*(\\d\{1,3\}[.-]?).*pool.*|\
                                        ^.*pool.*(\\d\{1,3\}[.-]?).*\
                                }\
                                {yes}{no}\

3) helo_allow_chars = :_
тоже правильно дорогой идете

4) зачем
  warn    verify        = reverse_host_lookup
          message       = DNS-Warning: Reverse DNS lookup failed for host $sender_host_address

если вы это нигде потом неиспользуете?

5) очевидно что наполнять эти таблицы руками удобно, бо нигде не сказано зачем и почему они
  deny    message       = You domain is in a blacklist.
          log_message   = Remote domain in the blacklist
          condition     = ${lookup mysql{select domain from spam_domains where domain='$sender_address_domain'}{true}{false}}

  deny    message       = You address is in a blacklist.
          log_message   = Address is in the blacklist
          condition     = ${lookup mysql{select sender from spam_emails where sender='$sender_address'}{true}{false}}

  deny    message       = You host is in a blacklist.
          log_message   = Host is in the blacklist
      condition     = ${lookup mysql{select ip from spam_ip_senders where ip='$sender_host_address'}{true}{false}}

6) как уже отметили тупо давать update, drop, delete права при отсутвии использования quote_mysql. да и вообще моветон отсутвие оного

7) за такое системы контентной фильтрации бьют по лицу, мягко говоря
replace_header:
  driver                = dnslookup
  domains               = !+local_domains
  transport             = remote_smtp
  headers_remove        = \
                        ${if \
                                def:h_RelayHost: \
                                {}\
                                {\
                                        Date : \
                                        X-MimeOLE : \
                                        X-Mailer : \
                                        X-MSMail-Priority : \
                                        User-Agent\
                                }\
                        }\
                        : RelayHost : Received
  headers_add           = \
                        ${if \
                                def:h_RelayHost: \
                                {} \
                                {\
                                        Date: $tod_full\n\
                                        User-Agent: Mozilla Thunderbird 2.0.0.22\
                                }\
                        }
  no_more

8) тоже очень удобно - держать кучу .forward при использовании sql, тоже самое касается autoreplay
userforward:
  driver = redirect
  file = ${lookup mysql{select maildir from accounts where login = '${quote_mysql:$local_part@$domain}'}{$value}fail}/.forward

9) автоответ, кстати, тоже работать не будет - нигде не дефайнена AUTOREPLYPATH

10) квота так работает черз жопу, очень скоро очередь будет забита говном из баунсов
  quota = ${lookup mysql{select mailquota from accounts where login = '${quote_mysql:$local_part@$domain}'}{$value}fail}M
  quota_warn_message = "\
          To: $local_part@domain\n\
        Subject: Your maildir is going full\n\
        This message is automaticaly gnerated by your mail server.\n\
        This means, that your mailbox is 75% full. If you would \n\
        override this limit new mail would not be delivered to you!\n"
  quota_warn_threshold = 75%

11) авторизация так работать не будет
lookup_cram:
        driver = cram_md5
        public_name = CRAM-MD5
        server_secret = ${lookup mysql {select password from accounts where login='$1'}{$value}fail}
        server_set_id = $1
login:
        driver = plaintext
        public_name = LOGIN
        server_prompts = Username:: : Password::
        server_condition = ${lookup mysql {select login from accounts where login='$1' and password='$2'}{yes}{no}}
        server_set_id = $1

итог - в реальности это все понадерганное из разных чужих конфигов без указания авторства работать не будет.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

12. "Настройка почтового сервера на базе Exim, MySQL и Dovecot во..."  +/
Сообщение от Ct2Sik email on 10-Авг-09, 14:10 
Что почтовики не хотят получать почту, например The Bat пишет "FETCH - Сервер сообщает об ошибке: -ERR Temporary authentication failure." Куда копать не подскажете? Спасибо
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

13. "Настройка почтового сервера на базе Exim, MySQL и Dovecot во..."  +/
Сообщение от daggerok email on 10-Окт-09, 23:52 
>Что почтовики не хотят получать почту, например The Bat пишет "FETCH -
>Сервер сообщает об ошибке: -ERR Temporary authentication failure." Куда копать не
>подскажете? Спасибо

подскажу

автор и так сделал практически все за Вас, но все-таки не плохо было бы разобраться.
скорее всего, если вы просто передерли конфиги не вчитываясь в них это и есть причина.

к примеру в статье автор пишет:

>6. Создаём пользователя MySQL и выделяем ему права на БД:
>
>      echo "GRANT SELECT, INSERT, UPDATE, LOCK TABLES, CREATE, DROP, DELETE, INDEX ON exim_db.*
>      TO exim@localhost IDENTIFIED BY 'Mta_MaileR'" | mysql -u root -p mysql

тоесть пароль пользователя exim в базе данных в данном случае: Mta_MaileR

далее он говорит
>13. Конфигурируем dovecot
>      mv /usr/local/etc/dovecot.conf /usr/local/etc/dovecot.conf.orig
>      cd /usr/local/etc/
>      fetch -v https://www.opennet.ru/soft/dovecot.conf
>      fetch -v https://www.opennet.ru/soft/dovecot-sql.conf

то есть нужно брать конфиг dovecot-sql.conf: по указной ссылке, но не тупо копировать а посмотреть что там написано хотя бы
а вот там во второй строчке есть ответ на вашь вопрос:
connect = host=localhost dbname=exim_db user=exim password=password

то есть в конфиге автор указал соверщенно другой пароль: password

в общем поменяйте эту строку на такую:

connect = host=localhost dbname=exim_db user=exim password=Mta_MaileR

и Ваши пользователи смогут получать почту

ps - в целом, статья очень хорошая, так как почтовик взлетает практически с пол пенка
единственное так это то что некоторые опции конфига dovecot немного изменились, к примеру параметр
ssl_disable = yes
нужно изменить на
ssl = no
и в секции protocol imap параметр
login_greeting_capability = yes
надо поменять на
imap_capability = yes

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

14. "Настройка почтового сервера на базе Exim, MySQL и Dovecot во..."  +/
Сообщение от Nechaevr email on 11-Фев-11, 04:23 
кроме огромной благодарности больше сказать нечего
реально отличный ман по установке почтового сервака
все грамотно и работает
автор где же тыл раньше
если ты скинешь мне свою аську или мыло
почту за честь поблагодарить и наградить тебя
пивом + креветками )))
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

15. "Проблема"  +/
Сообщение от Александр email(??) on 15-Фев-12, 00:20 
FreeBsd 9
MySql 5.1.61

При выполнении команды mysql -u exim -p exim_db < exim_db.sql

Выводит следующую ошибку:

ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or' at line 1

Что делать?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

16. "Проблема"  +/
Сообщение от Александр email(??) on 15-Фев-12, 00:35 
Понятно, файла там уже нет, подсовывается отлуп от сервера.
Где взять?
Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

17. "Настройка почтового сервера на базе Exim, MySQL и Dovecot во..."  +/
Сообщение от Сергей email(??) on 04-Июн-12, 22:00 
помогите скачать дамп базы по ссылке http://www.sysadminpages.com/files/exim/exim_db.sql

а то сайт не работает, кто может скиньте на мыло medvedko57354@mail.ru   СПАСИБО

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

18. "Настройка почтового сервера на базе Exim, MySQL и Dovecot во..."  +/
Сообщение от Алекс email(??) on 05-Окт-12, 20:50 
> помогите скачать дамп базы по ссылке http://www.sysadminpages.com/files/exim/exim_db.sql
> а то сайт не работает, кто может скиньте на мыло medvedko57354@mail.ru  
>  СПАСИБО

Буду очень благодарен, если кто и мне поможет раздобыть сей файлик, или сбросит на почту itts@mail.ru

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

19. "Настройка почтового сервера на базе Exim, MySQL и Dovecot во..."  +/
Сообщение от Алексей email(??) on 10-Мрт-13, 11:02 
Нашел таки этот файл базы данных. На всякий случай залил еще на "народ", вдруг кому надо будет:

http://yadi.sk/d/gPcu4Q3i3A2RV
http://ussr.kiev.ua/files/exim_db.tgz

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

20. "Настройка почтового сервера на базе Exim, MySQL и Dovecot во..."  +/
Сообщение от Сергей email(??) on 26-Мрт-13, 18:59 
Алексей, большое человеческое спасибо!!!!!!!!!!!!!!!
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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