1 (26.12.2010 03:57:10 отредактировано zerg)

!!! Ниже опубликованная статья - первый вариант настройки почтаря на базе DBmail + Exim в Debian. С тех пор были накоплены некоторые изменения. Ссылки на обновлённые статьи: http://linuxforum.ru/viewtopic.php?pid=125525#p125525 !!!

Написал парочку хауту для размещения в бложике своём, но решил что оный миру нафиг не нужен. Итак всякого быдла в сети навалом. А статейки были бы полезны линуксфоруму. Так что размещаю первую тут. Текст оригинальный.

Бытует такое мнение, что системный администратор за свою жизнь должен сделать обязательно несколько вещей. Точно не вспомнить, но поднятие своего почтового сервера в этом списке точно было. Собственно для этого я использовал связку из Dbmail (MySql) и Exim, а так же Spamassasin и Clamav. Все пакеты были были взяты из репозиториев Debian Squeeze. Допиливались только конфиги.

Собственно почему именно Dbmail? Отзывы хорошие. Конечно то, что всю почту он складирует в БД, для меня несколько избыточно. Зато чертовски удобно и практично. Ещё умеет жить с каталогами LDAP, но этого я не стал настраивать.

Для начала ставим пакеты:

 Консоль:
# aptitude update
# aptitude install exim4 exim4-daemon-heavy mysql-server mysql-client dbmail dbmail-mysql clamav clamav-daemon clamav-data spamassassin sa-exim

Назначение пакетов наглядно понятно из названий.
Во время установки mysql-сервера будет запрошен пароль root пользователя базы данных. Главное его потом не забыть...

Следующее действие - настройка БД. Для этого логинимся туда как root:

 Консоль:
$ mysql -u root -p

Создаём БД:

 Консоль:
CREATE DATABASE dbmail CHARACTER SET utf8 COLLATE utf8_general_ci;

И пользователя к ней (не забудьте подставить желаемый пароль):

 Консоль:
GRANT ALL PRIVILEGES ON dbmail.* TO 'dbmail'@'localhost' IDENTIFIED BY 'DB_PASSWORD' WITH GRANT OPTION;

На данные действия база должна вернуть результат OK. После этого логофимся:

 Консоль:
exit;

Теперь подготавливаем и заливаем образ базы:

 Консоль:
$ zcat /usr/share/doc/dbmail-mysql/examples/create_tables.mysql.gz > ~/create_tables_dbmail.sql
$ mysql -u dbmail -p dbmail < create_tables_dbmail.sql

Следующий шаг - настройка dbmail. В файле /etc/dbmail/dbmail.conf заменяем стандартные значения на ниже приведённые (пароль укажите свой):

 Консоль:
driver  = mysql
authdriver = sql
host = localhost
sqlport = 3306
sqlsocket = /var/run/mysqld/mysqld.sock
user = dbmail
pass = DB_PASSWORD

Полный листинг файла /etc/default/dbmail:

 Консоль:
START_LMTPD=1
START_IMAPD=1

И рестартуем демона:

 Консоль:
# /etc/init.d/dbmail restart

Далее настраиваем ClamAV, разрешаем ему работу с Exim:

 Консоль:
# adduser clamav Debian-exim
# chmod -Rf g+w /var/spool/exim4
# chmod -Rf g+s /var/spool/exim4

И в /etc/clamav/clamd.conf нас интересует значение:

 Консоль:
AllowSupplementaryGroups true

Рестартуем:

 Консоль:
# /etc/init.d/clamav-daemon restart

Устанавливаем значения конфигурации Spamassasin (в /etc/default/spamassassin):

 Консоль:
ENABLED=1
CRON=1

Тем самым включаем периодическое автообновление. Рестарутем:

 Консоль:
# /etc/init.d/spamassassin restart

Настройка Exim4. Сам процесс очень специфичен для конфигурации Exim в Debian. Ниже указываю файлы, которые надо изменить или создать.

Полный листинг /etc/exim4/update-exim4.conf.conf:

 Консоль:
dc_eximconfig_configtype='internet'
dc_other_hostnames='somedomain.org'
dc_local_interfaces=''
dc_readhost=''
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets='127.0.0.0/8'
dc_smarthost=''
CFILEMODE='644'
dc_use_split_config='true'
dc_hide_mailname=''
dc_mailname_in_oh='true'
dc_localdelivery='maildir_home'

Полный листинг /etc/exim4/conf.d/main/05_exim4-config_dbmail_lookup_user (не забудьте указать правильный пароль от БД):

 Консоль:
hide mysql_servers = localhost/dbmail/dbmail/DB_PASSWORD

Полный листинг /etc/exim4/conf.d/main/06_exim4-config_smtp_banner_user :

 Консоль:
smtp_banner = $smtp_active_hostname mail server

Полный листинг /etc/exim4/conf.d/main/10_exim4-config_clamav_user:

 Консоль:
av_scanner = clamd:/var/run/clamav/clamd.ctl

Полный листинг /etc/exim4/conf.d/transport/30_exim4-config_dbmail_lmtp_user :

 Консоль:
dbmail_lmtp:
     driver = smtp
     protocol = lmtp
     hosts = 127.0.0.1
     allow_localhost
     return_path_add

Полный листинг /etc/exim4/conf.d/router/750_exim4-config_dbmail_user:

 Консоль:
dbmail_user:
     debug_print = "R: dbmail_user for $local_part@$domain"
     driver = accept
     condition = ${lookup mysql{\
          SELECT alias_idnr FROM dbmail_aliases WHERE \
          alias='${quote_mysql:$local_part@$domain}' OR \
          alias='${quote_mysql:@$domain}'}{yes}{no}}
     transport = dbmail_lmtp
     cannot_route_message = Unknown user

Полный листинг /etc/exim4/conf.d/auth/10_exim4_config_dbmail_auth_plain_user:

 Консоль:
auth_plain:
     driver = plaintext
     public_name = PLAIN
     server_condition = ${lookup mysql{\
          SELECT user_idnr FROM dbmail_users WHERE \
          userid='${quote_mysql:$2}' AND \
          passwd='${quote_mysql:$3}'}{yes}{no}}
     server_prompts =:
     server_set_id = $2

Полный листинг /etc/exim4/conf.d/auth/15_exim4-config_dbmail_auth_login_user :

 Консоль:
auth_login:
     driver = plaintext
     public_name = LOGIN
     server_condition = ${lookup mysql{\
          SELECT user_idnr FROM dbmail_users WHERE \
          userid='${quote_mysql:$1}' AND \
          passwd='${quote_mysql:$2}'}{yes}{no}}
     server_prompts = Username::: Password::
     server_set_id = $1

Полный листинг /etc/exim4/conf.d/auth/20_exim4-config_dbmail_auth_cram_md5_user :

 Консоль:
auth_cram_md5:
     driver = cram_md5
     public_name = CRAM-MD5
     server_secret = ${lookup mysql{\
          SELECT passwd FROM dbmail_users WHERE \
          userid='${quote_mysql:$1}'}{$value}fail}
     server_set_id = $1

Ну и кусок правил для блокирования нежелательной почты из /etc/exim4/conf.d/acl/40_exim4-config_check_data:

 Консоль:
--- Пропущено ---
  # This hook allows you to hook in your own ACLs without having to
  # modify this file. If you do it like we suggest, you'll end up with
  # a small performance penalty since there is an additional file being
  # accessed. This doesn't happen if you leave the macro unset.
  .ifdef CHECK_DATA_LOCAL_ACL_FILE
  .include CHECK_DATA_LOCAL_ACL_FILE
  .endif


  # ClamAV virus scan for post server
  deny  message = This message contains a virus: ($malware_name) please scan your system.
        demime = *
        malware = *


  # accept otherwise
  accept
--- Конец файла ---

Последний штрих - указание транспорта lmtp в файле /etc/services путём добавления в конец файла строчки

 Консоль:
lmtp            24/tcp                          # Dbmail lmtpd

Рестартуем exim:

 Консоль:
# /etc/init.d/exim4 restart

Создадим первого пользователя системы:

 Консоль:
# dbmail-users -a логин -w пароль -s адрес_почты@somedomain.org

Дело за малым - настройка любимого почтового клиента. Но тут каждый сделает всё сам.

При написании были использованы материалы:
http://wiki.e-lug.ru/%D0%9D%D0%B0%D1%81 … PostgreSQL
http://www.lissyara.su/archive/exim+dbmail/
кучка man'ов

Надеюсь пригодиться.

2

При команды
root@ubuntu:~# ls

create_tables_dbmail.sql

root@ubuntu:~# mysql -u dbmail -p dbmail < create_tables_dbmail.sql
Enter password:
ERROR 1045 (28000): Access denied for user 'dbmail'@'localhost' (using password: YES)

пароль точно верный так как
root@ubuntu:~# mysql -u root -p
Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 48
Server version: 5.1.41-3ubuntu12.6 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

на mysql норм конектится

3 (17.08.2010 23:22:20 отредактировано k0xy)

shellist пишет:

root@ubuntu:~# mysql -u dbmail

shellist пишет:

root@ubuntu:~# mysql -u root

2 разных пользователя , видимо , у дбмейл другой пароль

4

Нет пользователь всего 1  (shell и естественно root)
пароль один и тотже на оба

5

проверил в файле /etc/dbmail/dbmail.conf
пароль тот же что и вожу

6 (19.08.2010 18:11:31 отредактировано shellist)

shell@ubuntu:~$ mysql -u root -p dbmail < create_tables_dbmail.sql
Enter password:
You have new mail in /var/mail/shell
shell@ubuntu:~$
--
Всё норм но при создание нового мыла

root@ubuntu:/home/shell# dbmail-users -a test -w 0516 -s test@shell.org

Aug 19 08:28:41 ubuntu dbmail-users[6832]: Error:[sql] dbmysql.c,db_connect(+172): mysql_real_connect failed: Access denied for user 'dbmail'@'localhost' (using password: YES)
Failed. Could not connect to database (check log)
Command failed.

7 (19.08.2010 19:47:13 отредактировано zerg)

А как тема сюда переехала? о_О

shellist пишет:

mysql -u root -p dbmail < create_tables_dbmail.sql

ммм... а ничего, что вы используете пользователя root и пароль к нему "dbmail"?

8 (19.08.2010 21:03:55 отредактировано shellist)

был не прав

9

shellist пишет:

Так как в системе пользователя dbmail не зарегистрировано

OK, а где выдержка из логов?

10 (19.08.2010 23:22:03 отредактировано shellist)

посидел все конфиги перепроверил и 2 нескольких не правильно указал пароль от юзера dbmail

вот root@ubuntu:~# dbmail-users -a test -w 0516 -s test@shell.org
Adding INBOX for new user... ok.
[test@shell.org]
Done
test:x:4:0:0.00:0.00:test@shell.org
заранее сори если глупый вопрос, тут будет и pop3.shell.org и smtp.shell.org ?

И

как теперь прикрутить веб морду?
попробовал pop3.shell.org и smtp.shell.org
!19.08.2010, 22:20:19: FETCH - Невозможно соединиться с сервером

11

shellist пишет:

заранее сори если глупый вопрос, тут будет и pop3.shell.org и smtp.shell.org ?

Просто shell.org. На разных портах - разные сервисы...
Насчёт веб-морды, сходите по ссылке на lissyara.su, он там что-то прикручивал.

12

Dbmail  - довольно интересное решение. Сделал все как описано, при попытке отправки сообщения получаю ошибку (в клиенте claws-mail):

 Консоль:

* Соединение с SMTP сервером: mydomain.org ...
*** При отправке сообщения возникла ошибка.
[22:32:22] IMAP4> 20 UID STORE 34 +FLAGS.SILENT (\Deleted)
[22:32:22] IMAP4< 20 OK UID STORE completed
[22:32:22] IMAP4> 21 EXPUNGE
[22:32:22] IMAP4< * 1 EXPUNGE
[22:32:22] IMAP4< 21 OK EXPUNGE completed
[22:32:22] IMAP4- [fetching UIDs...]
[22:32:22] IMAP4> 22 UID FETCH 1:* (UID)
[22:32:22] IMAP4< 22 OK UID FETCH completed

или при попытке отправить сообщения из очереди
 Консоль:

*** При отправке сообщения возникла ошибка.
[22:48:49] IMAP4- [fetching flags...]
[22:48:49] IMAP4> 23 UID FETCH 1:* (FLAGS UID)
[22:48:49] IMAP4< * 1 FETCH (FLAGS (\Seen) UID 38)
[22:48:49] IMAP4< 23 OK UID FETCH completed

Логи dbmail и exim4 молчат.

UNIX: Live Free OR Die

13

zorro, хм, не вижу надписей типа failed или error... На что он жалуется то?

Сам с таки не сталкивался. Давайте разбираться...

14 (20.11.2010 23:30:42 отредактировано zorro)

zerg,  я виноват, поправил конфиг /etc/exim4/update-exim4.conf.con, сообщения уходят.

UNIX: Live Free OR Die

15

Для работы POP3 и IMAP одновременно, файл  /etc/default/dbmail должен быть следующим:

 Консоль:

START_LMTPD=1
START_IMAPD=1
START_POP3D=1

UNIX: Live Free OR Die

16

В документации dbmail нашел как организовать соединение через SSL с помощью stunnel, но с настройками возникли проблемы. Может кто-то делал подобное?

UNIX: Live Free OR Die

17

zorro пишет:

В документации dbmail нашел как организовать соединение через SSL с помощью stunnel, но с настройками возникли проблемы. Может кто-то делал подобное?

делал... без stunel'а вообще не вижу смысла делать

18

zerg, согласен, просто было интересно smile

UNIX: Live Free OR Die

19

По поводу веб-интерфейса есть какие-нибудь готовые решения?

UNIX: Live Free OR Die

20

zorro пишет:

По поводу веб-интерфейса есть какие-нибудь готовые решения?

Ещё не изучал вопрос. Не было нужды. По ссылкам в первом посте, bsd'шники что-то прикручивали...

21

Прикрутил простенький SquirrelMail

UNIX: Live Free OR Die

22

Есть материал для sqlite. Надо?

23

zerg пишет:

Есть материал для sqlite. Надо?

Выкладывай, интересная тема.

UNIX: Live Free OR Die

24

Конфиги в этой статье прошу считать устаревшими.

Вариант настройки с SQLite + новые конфиги:
http://aliech.pp.ru/node/1

С PostgreSQL и новыми конфигами:
http://aliech.pp.ru/node/2

Замечены проблемы в использование MySQL. Рекомендую обратить внимание на Postgres.

Спасибо.

25

Спасибо, теперь сложилась полная картина настройки dbmail + предоставлен выбор СУБД: MySQL, PostgreSQL, SQLite.
Лучше знаю mysql, поэтому работаю с ним, можно по подробнее о возникших проблемах в его использовании?

UNIX: Live Free OR Die

26

zorro, не смог раскачать базу с innodb и 15ГБ до хорошей производительности. Например затыки терпеть при синхронизации папок - нервировало.

Хотя бы то, с innodb нельзя дефрагментировать таблицы - уже недостаток.

27 (22.08.2011 14:21:53 отредактировано pb13)

Товарищи, а что делать вот при таком:
При финальном перезапуске exim4 выдает:

 Консоль:
root@mailServer:~# /etc/init.d/exim4 restart
* Stopping MTA for restart                                                     2011-08-22 13:42:07 Exim configuration error in line 210 of /var/lib/exim4/config.autogenerated.tmp:
  main option "mysql_server" unknown
Invalid new configfile /var/lib/exim4/config.autogenerated.tmp, not installing
/var/lib/exim4/config.autogenerated.tmp to /var/lib/exim4/config.autogenerated

Дистрибутив Ubuntu 10.04  ac

Вопрос снят, ошибка в конфиге была.

P.S. Автору статьи респект огромный. Все работает идеально ab

Диагноз: Gentoo'шник в стадии ремиссии. Лечению не поддаётся.

28 (01.09.2011 13:46:25 отредактировано pb13)

zerg пишет:

# dbmail-users -a логин -w пароль -s адрес_почты@somedomain.org

Если хотите, чтобы в базу падали сразу шифрованные пароли в MD5
и enryption_type=md5 вставало автоматом делаем:

 Консоль:
# dbmail-users -a login -p md5-hash -w password -s login@domain.zone

В базу записывается пароль в виде:
$1$SKWJC5xL$PVynlB6pq3VflNi9IL7ow., авторизация проходит нормально - проверил только что ab

Диагноз: Gentoo'шник в стадии ремиссии. Лечению не поддаётся.

29 (17.11.2011 05:43:44 отредактировано Shark-kun)

Кто подскажет из за чего такое может быть?

 Консоль:
Stopping MTA for restart:2011-10-23 02:55:55 Exim configuration error:
  there are two transports called "dbmail_lmtp"
Invalid new configfile /var/lib/exim4/config.autogenerated.tmp, not installing
/var/lib/exim4/config.autogenerated.tmp to /var/lib/exim4/config.autogenerated

как я понял dbmail_lmtp это /etc/exim4/conf.d/transport/30_exim4-config_dbmail_lmtp_user
 Консоль:
dbmail_lmtp:
     driver = smtp
     protocol = lmtp
     hosts = 127.0.0.1
     allow_localhost
     return_path_add

или я не прав?

Проблема решена путям:

 Консоль:
rm /var/log/exim4/paniclog

30 (29.10.2011 16:37:55 отредактировано ustas1983)

Ребят подскажите пожалуйста, сделал всё как написано тут. Вроде всё работате за исключением того что с внешки письма нефига не приходят и пишут said: 550 relay
    not permitted (in reply to RCPT TO command). Сделано всё прям ровно как по шаблону. Ревирсивные зоны и МХ записи созданы ... кудаж ещё копать ?
dc_eximconfig_configtype='internet'
dc_other_hostnames='mydomain.ru'
dc_local_interfaces=''
dc_readhost=''
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets='127.0.0.0/24'
dc_smarthost=''
CFILEMODE='644'
dc_use_split_config='true'
dc_hide_mailname=''
dc_mailname_in_oh='true'
dc_localdelivery='maildir_home'

Всё. Заработало  ) надо было в dc_other_hostnames='mydomain.ru:'mydomain.ru:'mydomain.ru:'mydomain.ru:'mydomain.ru:' пречислисть все свои хосты. Спасибо очень всё быстро если не считать моего тупизма заработало )