LinuxForum.Fans
Тема

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

Автор: deleted_user 35 сообщений 40403 просмотров
#38527

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

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

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

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

Для начала ставим пакеты:
[console]# aptitude update
# aptitude install exim4 exim4-daemon-heavy mysql-server mysql-client dbmail dbmail-mysql clamav clamav-daemon clamav-data spamassassin sa-exim[/console]

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

Следующее действие - настройка БД. Для этого логинимся туда как root:
[console]$ mysql -u root -p[/console]

Создаём БД:
[console]CREATE DATABASE dbmail CHARACTER SET utf8 COLLATE utf8_general_ci;[/console]

И пользователя к ней (не забудьте подставить желаемый пароль):
[console]GRANT ALL PRIVILEGES ON dbmail.* TO 'dbmail'@'localhost' IDENTIFIED BY 'DB_PASSWORD' WITH GRANT OPTION;[/console]

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

Теперь подготавливаем и заливаем образ базы:
[console]$ zcat /usr/share/doc/dbmail-mysql/examples/create_tables.mysql.gz > ~/create_tables_dbmail.sql
$ mysql -u dbmail -p dbmail < create_tables_dbmail.sql[/console]

Следующий шаг - настройка dbmail. В файле /etc/dbmail/dbmail.conf заменяем стандартные значения на ниже приведённые (пароль укажите свой):
[console]driver = mysql
authdriver = sql
host = localhost
sqlport = 3306
sqlsocket = /var/run/mysqld/mysqld.sock
user = dbmail
pass = DB_PASSWORD[/console]

Полный листинг файла /etc/default/dbmail:
[console]START_LMTPD=1
START_IMAPD=1[/console]

И рестартуем демона:
[console]# /etc/init.d/dbmail restart[/console]

Далее настраиваем ClamAV, разрешаем ему работу с Exim:
[console]# adduser clamav Debian-exim
# chmod -Rf g+w /var/spool/exim4
# chmod -Rf g+s /var/spool/exim4[/console]

И в /etc/clamav/clamd.conf нас интересует значение:
[console]AllowSupplementaryGroups true[/console]

Рестартуем:
[console]# /etc/init.d/clamav-daemon restart[/console]

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

Тем самым включаем периодическое автообновление. Рестарутем:
[console]# /etc/init.d/spamassassin restart[/console]

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

Полный листинг /etc/exim4/update-exim4.conf.conf:
[console]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'[/console]

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

Полный листинг /etc/exim4/conf.d/main/06_exim4-config_smtp_banner_user :
[console]smtp_banner = $smtp_active_hostname mail server[/console]

Полный листинг /etc/exim4/conf.d/main/10_exim4-config_clamav_user:
[console]av_scanner = clamd:/var/run/clamav/clamd.ctl[/console]

Полный листинг /etc/exim4/conf.d/transport/30_exim4-config_dbmail_lmtp_user :
[console]dbmail_lmtp:
driver = smtp
protocol = lmtp
hosts = 127.0.0.1
allow_localhost
return_path_add[/console]

Полный листинг /etc/exim4/conf.d/router/750_exim4-config_dbmail_user:
[console]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[/console]

Полный листинг /etc/exim4/conf.d/auth/10_exim4_config_dbmail_auth_plain_user:
[console]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[/console]

Полный листинг /etc/exim4/conf.d/auth/15_exim4-config_dbmail_auth_login_user :
[console]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[/console]

Полный листинг /etc/exim4/conf.d/auth/20_exim4-config_dbmail_auth_cram_md5_user :
[console]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[/console]

Ну и кусок правил для блокирования нежелательной почты из /etc/exim4/conf.d/acl/40_exim4-config_check_data:
[console]--- Пропущено ---
# 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
--- Конец файла ---[/console]

Последний штрих - указание транспорта lmtp в файле /etc/services путём добавления в конец файла строчки
[console]lmtp 24/tcp # Dbmail lmtpd[/console]

Рестартуем exim:
[console]# /etc/init.d/exim4 restart[/console]

Создадим первого пользователя системы:
[console]# dbmail-users -a логин -w пароль -s адрес_почты@somedomain.org[/console]

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

При написании были использованы материалы:
http://wiki.e-lug.ru/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BF%D0%BE%D1%87%D1%82%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_%D0%B2_Debian_GNU/Linux,_Exim4_DBMail_PostgreSQL
http://www.lissyara.su/archive/exim+dbmail/
кучка man'ов

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

#69032

При команды
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 норм конектится

#69034
shellist написал:
root@ubuntu:~# mysql -u dbmail
shellist написал:
root@ubuntu:~# mysql -u root

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

#69048

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

#69051

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

#69614

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.

#69653

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

shellist написал:
mysql -u root -p dbmail < create_tables_dbmail.sql

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

#69660

был не прав

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

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

#69833

посидел все конфиги перепроверил и 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 - Невозможно соединиться с сервером

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

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

#100837

Dbmail - довольно интересное решение. Сделал все как описано, при попытке отправки сообщения получаю ошибку (в клиенте claws-mail):
[console]
* Соединение с 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
[/console]
или при попытке отправить сообщения из очереди
[console]
*** При отправке сообщения возникла ошибка.
[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
[/console]
Логи dbmail и exim4 молчат.

#100839

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

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

#100841

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

#100902

Для работы POP3 и IMAP одновременно, файл /etc/default/dbmail должен быть следующим:
[console]
START_LMTPD=1
START_IMAPD=1
START_POP3D=1
[/console]

#101888

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

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

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

#101901

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

#101934

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

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

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

Войдите или зарегистрируйтесь, чтобы ответить.