[solved] Postfix+Dovecot+MySQL

Доброго времени.

Делаю по этому - http://en.gentoo-wiki.com/wiki/Dovecot/Install

user_query = \
  SELECT home, uid, gid \
  FROM users WHERE username = '%n' AND domain = '%d'

1. Не понимаю вот что - home, uid, gid как мне их выставлять если я хочу виртуальных пользователей?
2. Не понимаю где будут храниться письма.

Вопросы возможно простые, но не могу понять. Прочитал статью по установке и все что есть в dovecot-sql.conf.

Спасибо за подсказки.

А Вы осознанно выбрали mysql

А Вы осознанно выбрали mysql в качестве хранилища учетных записей?
Могу помочь с настройкой postfix+dovecot+spamassassin+openldap с вебмордой phpldapadmin, что очень удобно при управлении многодоменным почтовым сервером.

Секта Черных Пингвинов
http://blackpenguins.ru

NWhisper написал(а): А Вы

NWhisper написал(а):
А Вы осознанно выбрали mysql в качестве хранилища учетных записей?
Могу помочь с настройкой postfix+dovecot+spamassassin+openldap с вебмордой phpldapadmin, что очень удобно при управлении многодоменным почтовым сервером.

Я наверное не полно описал задачу. Исправляюсь.

Есть WEB приложение, в котором основные данные о пользователе (логин/пароль) хранятся в MySQL. Нужна интеграция почтового сервиса - поэтому такая связка. Ну и еще roundcube как WEB интерфейс к почте.

postfix кажется заработал.
dovecot немного запутал меня)

В таком случае:Цитата:

В таком случае:

Цитата:
SELECT home, uid, gid \
FROM users WHERE username = '%n' AND domain = '%d'

home - это путь к письмам. uid и gid это id виртуального юзера для почты (если домен виртуальный, иначе, зачем sql). Созадайте такового.
Если эти uid и gid одинаковы для всех, то их можно указать в /etc/dovecot/conf.d/10-auth.conf и не дергать из базы

Я бы посмотрел все-таки в сторону postfixadmin и заточил ваше вебприложение, чтоб оно в его базу ходило

izbushka написал(а): В таком

izbushka написал(а):
В таком случае:

Цитата:
SELECT home, uid, gid \
FROM users WHERE username = '%n' AND domain = '%d'

home - это путь к письмам. uid и gid это id виртуального юзера для почты (если домен виртуальный, иначе, зачем sql). Созадайте такового.
Если эти uid и gid одинаковы для всех, то их можно указать в /etc/dovecot/conf.d/10-auth.conf и не дергать из базы

Я бы посмотрел все-таки в сторону postfixadmin и заточил ваше вебприложение, чтоб оно в его базу ходило

Допустим я в настройках указал так

# Местонахождение директории с почтой (тильда обозначает дом. директорию юзверя)
mail_location = maildir:~/
# UID/GID пользователя vmail, владельца почтовой директории
mail_uid = 1004
mail_gid = 1004

home - из mysql получится поддиректорией домашней директории виртуального пользователя?

PS: Я просто хочу разобраться и понять в какой именно директории на файловой системе будет почта. Хочу знать где оно будет храниться.

У меня так:SELECT

У меня так:

SELECT CONCAT('/var/spool/vmail/', `maildir`) AS `home`...

в maildir - "имя домена/имя пользователя"
Т.е. вся почта в
/var/spool/vmail/имя домена/имя пользователя

ps Стоит заметить, что и постфикс должен об этом знать, если только вы не используете dovecot в качестве lda.

base_directory в базе ? хм,

base_directory в базе ? хм, оригинально. особенно когда туда пишет пых-пых, дырявый по ДНК.

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

slepnoga

slepnoga написал(а):
base_directory в базе ? хм, оригинально. особенно когда туда пишет пых-пых, дырявый по ДНК.

Есть способ не хранить base_directory в базе? Поделитесь плиз.

В базе хранится только часть

В базе хранится только часть пути (домен/имя). Т.е. можете проверять, средствами того же sql, чтоб там небыло попыток подняться на уровень вверх ("../") и все.
типа такого: SELECT CONCAT('/var/spool/vmail/', replace(`maildir`,'../','') AS `home`...

izbushka написал(а): В базе

izbushka написал(а):
В базе хранится только часть пути (домен/имя). Т.е. можете проверять, средствами того же sql, чтоб там небыло попыток подняться на уровень вверх ("../") и все.
типа такого: SELECT CONCAT('/var/spool/vmail/', replace(`maildir`,'../','') AS `home`...

Запустилось вроде.
Только подскажите еще плиз как правильно настроить postfix? Как правильно указать ему на сообщения?

Examples: # user_query =

 Examples:
#   user_query = SELECT home, uid, gid FROM users WHERE userid = '%u'
#   user_query = SELECT dir AS home, user AS uid, group AS gid FROM users where userid = '%u'
#   user_query = SELECT home, 501 AS uid, 501 AS gid FROM users WHERE userid = '%u'
#
user_query = \
  SELECT username   FROM mailbox  WHERE local_part = '%n' AND domain = '%d'  AND active='1'


 See doc/wiki/Variables.txt for full list. Some examples:
#
#   mail_location = maildir:~/Maildir
#   mail_location = mbox:~/mail:INBOX=/var/mail/%u
#   mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n
#
# <doc/wiki/MailLocation.txt>
#
mail_location = maildir:/var/mail/vhost/%d/%u/

# If you need to set multiple mailbox locations or want to change default
# namespace settings, you can do it by defining namespace sections.
#

#  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
#  ${nexthop} ${user}i
dovecot unix - n n - - pipe flags=DRhu user=nobody:nobody argv=/usr/libexec/dovecot/deliver -d ${recipient}

Вопросы ? Замечания ?

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Lilu написал(а):1. Не

Lilu написал(а):
1. Не понимаю вот что - home, uid, gid как мне их выставлять если я хочу виртуальных пользователей?
2. Не понимаю где будут храниться письма.

1. Управляйте аккаунтами через postfixadmin, например. Зачем что-то изобретать, если уже все готово.
2. На диске. Не в mysql, если вы об этом.

ps. вот тоже ничего статья

Делаю по этому ману -

Делаю по этому ману - link

Остановился на "Генерация SSL/TLS сертификатов"

Выполняю все команды и не пойму где я должен найти вот это?

ca.domain.ru.cert
mail.domain.ru.key
mail.domain.ru.cert

А вот это создается нормально

/etc/postfix/ssl/dh_1024.pem
/etc/postfix/ssl/dh_512.pem

(*)

Там написано "Создаем с помощью стандартных средств OpenSSL, в команды вдаваться не будем." А я "вдамся" в пояснения.

"Создаем центр сертификации" - получится ca.domain.ru.cert
"Создаем запрос на сертификацию" - получится *.req и приватный ключ (*.key)
"Ну и наконец подписываем" - ca.domain.ru.cert подпишет *.req и на выходе даст *.cert к тому *.key
Так что все три файла у вас получатся.

mastepaner написал(а): Там

mastepaner написал(а):
Там написано "Создаем с помощью стандартных средств OpenSSL, в команды вдаваться не будем." А я "вдамся" в пояснения.

"Создаем центр сертификации" - получится ca.domain.ru.cert
"Создаем запрос на сертификацию" - получится *.req и приватный ключ (*.key)
"Ну и наконец подписываем" - ca.domain.ru.cert подпишет *.req и на выходе даст *.cert к тому *.key
Так что все три файла у вас получатся.

Чувствую себя глупым =(
После выполнения команд получилось вот такое

host misc # pwd
/etc/ssl/misc
host misc # ls -l
total 56
-rwxr-xr-x 1 root root 5679 Sep 12 18:11 CA.pl
-rwxr-xr-x 1 root root 5175 Sep 12 18:11 CA.sh
-rwxr-xr-x 1 root root  119 Sep 12 18:11 c_hash
-rwxr-xr-x 1 root root  152 Sep 12 18:11 c_info
-rwxr-xr-x 1 root root  112 Sep 12 18:11 c_issuer
-rwxr-xr-x 1 root root  110 Sep 12 18:11 c_name
drwxr-xr-x 6 root root 4096 Jan 25 06:24 demoCA
-rw-r--r-- 1 root root 3289 Jan 25 06:24 newcert.pem
-rw-r--r-- 1 root root  916 Jan 25 06:23 newkey.pem
-rw-r--r-- 1 root root  741 Jan 25 06:23 newreq.pem
-rwxr-xr-x 1 root root 6419 Sep 12 18:11 tsget
host misc # ls -l demoCA/
total 52
-rw-r--r-- 1 root root 3112 Jan 25 06:21 cacert.pem
-rw-r--r-- 1 root root  737 Jan 25 06:20 careq.pem
drwxr-xr-x 2 root root 4096 Jan 25 06:19 certs
drwxr-xr-x 2 root root 4096 Jan 25 06:19 crl
-rw-r--r-- 1 root root    3 Jan 25 06:19 crlnumber
-rw-r--r-- 1 root root  268 Jan 25 06:24 index.txt
-rw-r--r-- 1 root root   21 Jan 25 06:24 index.txt.attr
-rw-r--r-- 1 root root   21 Jan 25 06:21 index.txt.attr.old
-rw-r--r-- 1 root root  128 Jan 25 06:21 index.txt.old
drwxr-xr-x 2 root root 4096 Jan 25 06:24 newcerts
drwxr-xr-x 2 root root 4096 Jan 25 06:19 private
-rw-r--r-- 1 root root   17 Jan 25 06:24 serial
-rw-r--r-- 1 root root   17 Jan 25 06:21 serial.old
host misc # ls -l demoCA/private/
total 4
-rw-r--r-- 1 root root 1041 Jan 25 06:20 cakey.pem

Где мне их найти?

(*)

cakey.pem и cacert.pem - это ваши ca.domain.ru.key и ca.domain.ru.cert
newkey.pem + newcert.pem + ненужный более newreq.pem = mail.domain.ru.key + mail.domain.ru.cert + ненужный более *.req

Мне postfix сказал

Мне postfix сказал следующее.

host bin # /etc/init.d/postfix start
 * Starting postfix (/etc/postfix) ...                                                            [ !! ]
 * ERROR: postfix failed to start

Где найти логи? Где посмотреть подробнее что случилось? Это возможно вообще?

Хм../var/log/mail.*/var/lo

Хм..

/var/log/mail.*
/var/log/messages

ну и

postfix check

Postfix и Dovecot

Postfix и Dovecot запустились. Но ничего не работает. =( Как понять что не правильно сделал? в /var/log/ нет файлов логов для этих программ. глухо все.

Они пишут логи через syslog.

Они пишут логи через syslog. Он запущен?

izbushka написал(а): Они

izbushka написал(а):
Они пишут логи через syslog. Он запущен?

А это плохо?

Jan 25 14:40:55 host postfix/pipe[18428]: 0D89B2A2736: to=<name@host.ru>, relay=dovecot, delay=0.69, delays=0.6/0.01/0/0.08, dsn=4.3.0, status=deferred (temporary failure. Command output: doveconf: Warning: NOTE: You can get a new clean config file with: doveconf -n > dovecot-new.conf doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:4: 'imaps' protocol is no longer necessary, remove it doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:4: 'pop3s' protocol is no longer necessary, remove it doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:29: protocol { ssl_listen } has been replaced by service { inet_listener { address } } doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:30: ssl_disable has been renamed to ssl doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:32: ssl_cert_file has been replaced by ssl_cert = <file doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:33: ssl_key_file has been replaced by ssl_key = <file doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:34: ssl_ca_file has been replaced by ssl_ca = <file doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:41: login_dir has been removed doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:43: login_chroot has been replaced by service { chroot } doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:44: login_user has been replaced by service { user } doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:45: login_process_size has been replaced by service { vsz_limit } doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:46: login_process_per_connection has been replaced by service { service_count } doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:47: login_processes_count has been replaced by service { process_min_avail } doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:48: login_max_processes_count has been replaced by service { process_limit } dovec

Lilu написал(а): А это

Lilu написал(а):
А это плохо?

А сами-то вы как думаете? Хорошего мало

izbushka написал(а): Lilu

izbushka написал(а):
Lilu написал(а):
А это плохо?

А сами-то вы как думаете? Хорошего мало

Сделал вот так

doveconf -n > dovecot-new.conf

применил новый конфиг. получил это

Jan 25 14:49:15 host postfix/pipe[18600]: 619422A2E9A: to=<name@host.ru>, relay=dovecot, delay=0.7, delays=0.63/0/0/0.07, dsn=4.3.0, status=deferred (temporary failure)

Собственно ничего не понял.

УРА! Письмо

УРА! Письмо доставилось!

Теперь надо проверить что pop/imap работают.

<name@hotmail.com>: Recipient

<name@hotmail.com>: Recipient address rejected: User unknown in virtual mailbox table

Почему так происходит при отправке письма?
На этот email посылаю письмо

Как простым способом

Как простым способом проверить работает ли авторизация в Dovecot (imap or pop)? Есть способ сделать это прям из консоли сервера? Так чтобы не настраивать пока больше ничего а просто проверить.

Если без шифрования, то

Если без шифрования, то да:

telnet localhost 110
user username
pass passw

izbushka написал(а): Если без

izbushka написал(а):
Если без шифрования, то да:

telnet localhost 110
user username
pass passw

Класс POP and IMAP так проверил - работают.
Письма на почтовый ящик доставляются. (из мне.) тоже проверил.

Теперь как проверить отправку? Если можно то тоже чтонить из консоли, чтобы попробовать письмо отправить из консоли через настраиваемый smtp.

Если без авторизации

Если без авторизации то

telnet localhost 25
helo localhost
mail from: <user@domain>
rcpt to: <user@doamin2>
data
text text
.
quit

С авторизацией сложно.

izbushka написал(а):Если без

izbushka написал(а):
Если без авторизации то

telnet localhost 25
helo localhost
mail from: <user@domain>
rcpt to: <user@doamin2>
data
text text
.
quit

С авторизацией сложно.

Да я без авторизации тестирую.

вот что получилось

...
rcpt to: 
550 5.1.1 <user@domainto.com>: Recipient address rejected: User unknown in virtual mailbox table

Что-то я не понял... это он сказал, что такого домена нет в "virtual mailbox table"... Я поломался.. =( Это же место назначение почему оно говорит, что этот домен должен быть у меня в таблице?
Я почти в панике.

Lilu написал(а): izbushka

Lilu написал(а):
izbushka написал(а):
Если без авторизации то

telnet localhost 25
helo localhost
mail from: <user@domain>
rcpt to: <user@doamin2>
data
text text
.
quit

С авторизацией сложно.

Да я без авторизации тестирую.

вот что получилось

...
rcpt to: 
550 5.1.1 <user@domainto.com>: Recipient address rejected: User unknown in virtual mailbox table

Что-то я не понял... это он сказал, что такого домена нет в "virtual mailbox table"... Я поломался.. =( Это же место назначение почему оно говорит, что этот домен должен быть у меня в таблице?
Я почти в панике.

Проверил отправку пользователю из этого же домена - доходит...

Может проблема тут гдето?

smtpd_recipient_restrictions =
 permit_mynetworks
 permit_sasl_authenticated
 # Отбрасываем тех, кто посылает SMTP команды вне очередности
 reject_unauth_pipelining
 # Проверяем на правильност адрес отправителя
 reject_non_fqdn_recipient
 reject_unknown_recipient_domain
 # Вот это одна из главных строчек :) Не дает нашему серверу стать открытым релеем почты
 reject_unauth_destination
 # Проверяем существует ли у нас получатель (если письмо доставляется многим получателям, 
 # и хотя-бы один не существует, то письмо не будет принято)
 reject_unlisted_recipient

 # Проверка отправителя по регулярным выражением
 #check_sender_access pcre:/etc/postfix/checks/sender_checks.pcre
 # Проверяем SPF
 #check_policy_service unix:private/spf
 # Проверяем по SQLGrey
 #check_policy_service inet:127.0.0.1:2501
 # Скармливаем DSpam-у
 #check_recipient_access pcre:/etc/postfix/dspam_incoming
 permit

в

в smtpd_recipient_restrictions, как и в других *_restrictions правила пишутся через запятую, afaik

izbushka написал(а): в

izbushka написал(а):
в smtpd_recipient_restrictions, как и в других *_restrictions правила пишутся через запятую, afaik

собственно делаю вот по этому руководству...

550 ответил постфикс

550 ответил постфикс

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

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

что-то добрый я сегодня ....

leryc написал(а): 550 ответил

leryc написал(а):
550 ответил постфикс

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

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

Простым английским языком тут написано следующее

550 5.1.1 <user@domainto.com>: адрес user@domainto.com отклонен: Пользователь не найден в таблице виртуальных почтовых ящиков

И это происходит на этапе ввода адреса назначения. Я предположил, что это оно пытается искать пользователя для адреса назначения. Это и поставило меня в тупик.

У меня одна база данных MySQL и postfix и dovecot обращаются к одним и тем же записям в ней.
Или вы про каких пользователей? Про место назначения? Тогда как быть если я хочу отправить письмо на ***@hotmail.com ?

domainto.com вероятно ваш и

domainto.com вероятно ваш и вероятно локальный домен - постфикс попытался через запрос к mysql найти пользоавтеля "user" в таблице "юзеры домена"
смотрите логи постфикса и мускула

(я приверженец exima и вникать в синтаксис постфикса не хочу)

что-то добрый я сегодня ....

leryc

leryc написал(а):
domainto.com вероятно ваш и вероятно локальный домен - постфикс попытался через запрос к mysql найти пользоавтеля "user" в таблице "юзеры домена"
смотрите логи постфикса и мускула

(я приверженец exima и вникать в синтаксис постфикса не хочу)

Блин... Нет. Не так.
На локальные домены почта доставляется. Тут все нормально. И с внешних ящиков на "настраиваемый" домен почта тоже доходит.

Как быть с отправкой почты во внешний мир? Допустим я захожу мне прислали письмо на мой ящик и я хочу отправить ответ допустим с моего домена на gmail.com. Как тут быть? в Своей почтовой программе как smtp сервер я указываю свой smtp и я так понимаю он должен переслать письмо на gmail... или на какойнить другой почтовый сервер. Именно вот это не работает...

tail -f

tail -f /var/log/dovecot/dovecot.log

что-то добрый я сегодня ....

leryc написал(а): tail -f

leryc написал(а):
tail -f /var/log/dovecot/dovecot.log

А вот это интересно такого лога нет. И не пойму как его включить.. =(

в /var/log/mail.log

в /var/log/mail.log смотрите
Чтоб сделать в dovecot.log - курить syslog.conf или dovecot.conf

nano

nano /etc/dovecot/conf.d/10-logging.conf

что-то добрый я сегодня ....

leryc написал(а): nano

leryc написал(а):
nano /etc/dovecot/conf.d/10-logging.conf

Спасибо! Полезно! =)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".