X

HOWTO: почтовик на базе dbmail (mysql) и exim в Debian Squeeze

К сожалению, на оригинальном источнике мануала сбилась подсветка, и я переживаю за целостность материалов в будущем, поэтому скопипастил к себе. Заодно добавил, несколько комментариев.

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

# aptitude update
# aptitude install exim4 exim4-daemon-heavy mysql-server mysql-client dbmail dbmail-mysql clamav clamav-daemon clamav-data clamav-freshclam spamassassin sa-exim

Назначение пакетов наглядно понятно из названий.

Важно поставить именно exim4-daemon-heavy. У вас может стоять exim4-light, в случае если выскочит вопрос, об удалении light версии, соглашайтесь.

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

Пароль root-а для MySQL сервера будет запрошен только в случае, если MySQL еще не установлен. В противном случае, подразумевается, что вы его знаете.

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

$ mysql -u root -p

Создаём БД:

CREATE DATABASE dbmail CHARACTER SET utf8 COLLATE utf8_general_ci;

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

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

Обратите внимание, что DB_PASSWORD надо заменить на пароль от базы, а так же, что после pass= не должно быть пробелов!!!

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

START_LMTPD=1
START_IMAPD=1
START_POP3D=1

Файл /etc/default/dbmail всего скорее будет пустым или отсутствовать, поэтому его возможно придется создать

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

# /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

После рестарта с большой вероятностью Вам покажут сообщение:

Starting ClamAV daemon: clamd LibClamAV Warning: **************************************************
LibClamAV Warning: ***  The virus database is older than 7 days!  ***
LibClamAV Warning: ***  Please update it as soon as possible.    ***
LibClamAV Warning: **************************************************

В нем говорится, что базы антивируса устарели, поэтому их надо обновить. Делаем это вручную:

#freshclam

 

Устанавливаем значения конфигурации 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='127.0.0.1;serv.ip.addr.ess;::1'
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'

Если на одном сервере несколько доменов, то их надо указывать в dc_other_hostnames через точку с запятой, пример:
dc_other_hostnames='domain1.org;domain2.org'

В dc_local_interfaces, вместо serv.ip.addr.ess, нужно указать ip сервера

Полный листинг /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

Я обычно в качестве email-а использую полный адрес почты. В таком случае, если email: mymail@domain.org, то надо выполнить:
dbmail-users -amymail@domain.org -wPASSWORD -smymail@domain.org

Подробнее, про управление пользователями можно прочитать тут: DBMAIL manage_users (http://www.dbmail.org/dokuwiki/doku.php/manage_users). Например, удалить пользователя можно так:
dbmail-users -d mymail@domain.org

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

Настройки из The Bat!

Адреса серверов:

  • POP3: domain.com
  • SMTP: domain.com

Аутентификация POP3: Обычная

Аутентификация SMTP:
[*] Аутентификация SMTP (RFC-2554)
[*] Использовать параметры получения почты (POP3/IMAP)
[*] Аутентификация "POP прежде SMTP"

Что делать в случае проблем:

  1. Перепроверьте все конфиги (особенно если ошибка вида: Exim configuration error in line 210 of /var/lib/exim4/config.autogenerated.tmp).
  2. Найдите все комманды перезапуска сервисов и сделайте им рестарт (особенно если не можете приконектиться из почтового клиента).
  3. Проверьте логи, в /var/log/*

Оригинал статьи тут: http://linuxforum.ru/viewtopic.php?id=3316
Автор первоисточника: zerg.

Категории: Linux

Комментарии (5)

  • настроил по описанию, все заработало кроме clamav.
    Не пойму почему не передает exim сокету clamav. Нигде в логах нет упоминания что проверка прошла, и нет в тегах письма следов проверки.
    Может ли влиять очередность файлов конфига exim на это?
    Настраивал на ubuntu 6.

    • Я думаю, что может. Более подробно подсказать не могу, не в курсе. Попробуй задать этот вопрос на sysadmins.ru в соответствующем топике.

  • День добрый ! А на 7.0 подобное случаем не проделывали?

  • Добрый день! Настроил по шаблону -всё работает, а как прикрутить шифрование здесь?

    • Привет! Не могу ответить, не сталкивался - надо гуглить.