Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Postfix+Dovecot с виртуальными пользователями под MySQL  (Прочитано 7486 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Frozen Twilight

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Как ни странно, данный топик будет не вопросом и криком о помощи, а сразу ответом. ;)

К сожалению, многочисленные HOWTO на просторах сети на тему как настроить связку Postfix+Dovecot с аутентификацией через MySQL базу написаны не всегда хорошо и понятно, некоторые даже не учитывают текущие особенности используемого софта.
Расскажу, пожалуй, как я реализовал вышеупомянутое прочтения всевозможных доков и некоторых мытарств.

Есть система под Debian GNU/Linux squeeze. Необходимо поднять ни от чего не зависящий почтовый сервер на базе Postfix в качестве MTA и Dovecot в качестве POP3/IMAP сервера с виртуальными (не системными) пользователями почты. Для удобства хотелось бы иметь единую базу пользователей, хранимую в MySQL базе, точнее единственной её таблице.
Под названиями большинства конфигурационных параметров приведены ссылки на соответствующие упоминания их в документации для более глубокого понимания их назначения.

Шаг 1
  • Устанавливаем Postfix (пакеты postfix и postfix-mysql). В моём случае это версия 2.7.1.
  • Устанавливаем Dovecot (пакеты dovecot-common, dovecot-imapd, dovecot-pop3d). Версия 1.2.13.

Шаг 2
Конфигурируем Postfix. Редактируем файл /etc/postfix/main.cf.
Кроме уже имеющихся там настроек по умолчанию (вполне годных за небольшими исключениям) добавляем следующие:
Цитировать
# директория для хранения почты
virtual_mailbox_base = /var/mail
# источник списка обслуживаемых доменов (отдельный конфиг с описанием SQL запроса)
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_mailbox_domains.cf
# источник списка обслуживаемых почтовых ящиков (отдельный конфиг с описанием SQL запроса)
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailbox_maps.cf
# меняем минимально возможный UID владельца (по умолчанию = 100)
virtual_minimum_uid = 8
# задаём цифровой UID владельца (mail) файлов почтовых ящиков (можно уточнить в /etc/passwd), теоретически можно использовать любого пользователя
virtual_uid_maps = static:8
# задаём цифровой GID группы владельца (mail) файлов почтовых ящиков (можно уточнить в /etc/group), теоретически можно использовать любую группу
virtual_gid_maps = static:8

Если необходима аутентификация пользователей при отправке почты (обычно в случае если отправка почты происходит с иных, кроме определённых в mynetworks, хостов), то добавляем также следующее:
Цитировать
smtpd_sasl_auth_enable = yes
# отправлять почту могут только разрешённые хосты и аутентифицированные пользователи
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtpd_sasl_security_options = noanonymous
# тип аутентификации, выполните команду postconf -a, чтобы определить, поддерживает ли его ваш Postfix
smtpd_sasl_type=dovecot
# относительный (относительно директории очереди Postfix, по умолчанию - /var/spool/postfix) путь к служебным данным для аутентификации через Dovecot
# также см. секцию "auth default" → "socket listen" → "client" в /etc/dovecot/dovecot.conf, значения должны соответстовать
smtpd_sasl_path=private/auth

Шаг 3
На MySQL сервере создаём базу данных (если необходима отдельная) и таблицу для хранения данных о пользователях почты. Пример запроса, создающего структуры таблицы:
CREATE TABLE `users` (
  `username` varchar(64) NOT NULL,
  `domain` varchar(255) NOT NULL,
  `password` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `maildir` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`username`,`domain`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
Колонка username будет содержать имя пользователя (т.е. someuser из someuser@mydomain.com), domain — имя домена (на случай если ваш почтовый сервер будет обслуживать несколько различных доменов), password — пароль открытым текстом, maildir — относительный (внутри /var/mail) путь к файлу почтового ящика, где будет храниться приходящая почта, т.е. например mydomain.com/someuser или же someuser@mydomain.com.
При необходимости данную таблицу можно создавать в любой удобной вам базе, но не забудьте о разграничении доступа!
Затем выдаём права на выборку и создаём пользователя для подключения:
GRANT SELECT ON имя_БД.users TO 'имя_пользователя_БД'@'localhost' IDENTIFIED BY 'пароль_пользователя_БД'
Шаг 4
Далее создадим необходимые подконфиги Postfix с запросами к MySQL.
файл /etc/postfix/mysql-virtual_mailbox_domains.cf
hosts = 127.0.0.1
user = имя пользователя БД
password = пароль пользователя БД
dbname = имя базы данных
query = SELECT `domain` FROM `users` WHERE `domain`='%s' LIMIT 1
Запрос получает имя домена в случае, если оно существует (есть хотя бы один пользователь на нём).

файл /etc/postfix/mysql-virtual_mailbox_maps.cf
hosts = 127.0.0.1
user = имя пользователя БД
password = пароль пользователя БД
dbname = имя базы данных
query = SELECT `maildir` FROM `users` WHERE CONCAT(`username`,'@',`domain`)='%s'
Запрос получает путь к почтовому ящику по заданном e-mail адресу.

Не забудьте установить на данные конфигурационные файлы безопасные права, чтобы избежать кражи реквизитов к БД и данных о пользователях почты.
chmod 0640 mysql-virtual_mailbox_domains.cf mysql-virtual_mailbox_maps.cf
chown root:postfix mysql-virtual_mailbox_domains.cf mysql-virtual_mailbox_maps.cf
Задаём файлам доступ на чтение и запись для владельца файла и доступ только на чтение для группы. Задаём владельца root и группу postfix. Любые другие пользователи не смогут получить доступ к содержимому данных конфигов.

Шаг 5
Конфигурируем Dovecot. Редактируем файл /etc/dovecot/dovecot.conf.
Несмотря на длину конфига по умолчанию, учитывающего всевозможные варианты конфигурации, действительно необходимого для данного примера там совсем немного. Можно оставить лишь следующее:
Цитировать
base_dir = /var/run/dovecot
# обслуживаемые протоколы
protocols = imap imaps pop3 pop3s
# аутентификация открытым текстом НЕ запрещена
disable_plaintext_auth = no
log_timestamp = "%Y-%m-%d %H:%M:%S "
login_user = dovecot
login_processes_count = 1
login_max_connections = 20
# задаём путь к файлам почтовых ящиков для входящей почты (обратите внимание, его же должен использовать и Postfix! согласуйте значение mbox с параметром virtual_mailbox_base в /etc/postfix/main.cf и значениями колонки maildir в таблице пользователей) и путь к директории для её хранения (тот, откуда будет отдаваться почта по POP3/IMAP протоколам, и где будут храниться данные IMAP папок)
mail_location = mbox:/var/mail/%d/%u:INBOX=/var/mail/%d/%n
# UID владельца файлов и папок
mail_uid = mail
# GID владельца файлов и папок
mail_gid = mail
mail_privileged_group = mail
first_valid_uid = 8
last_valid_uid = 8
protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
}
auth default {
   mechanisms = plain login
   # ссылки на подконфиг с запросами к БД
   userdb sql {
      args = /etc/dovecot/dovecot-sql.conf
   }
   passdb sql {
      args = /etc/dovecot/dovecot-sql.conf
   }
   # следующая секция необходима только при использования аунтентификации в Postfix
   socket listen {
      client {
         path = /var/spool/postfix/private/auth
         mode = 0660
         user = postfix
         group = postfix
      }
   }
   #
}

файл /etc/dovecot/dovecot-sql.conf
Цитировать
driver = mysql
connect = host=127.0.0.1 user=имя_пользователя_БД password=пароль_пользователя_БД dbname=имя_БД
# указываем, что в таблице хранятся пароли открытым текстом
default_pass_scheme = PLAIN
# запрос получения имени пользователя
user_query = SELECT `username` FROM `users` WHERE `username`='%n' AND `domain`='%d'
# запрос получения пароля
password_query = SELECT `password` FROM `users` WHERE `username`='%n' AND `domain`='%d'
Не забываем обезопасить реквизиты БД путём задания 0600 прав на dovecot-sql.conf.

Шаг 6
Остаётся добавить необходимые данные в таблицу с пользователями. При внесении в неё изменений перезапуск Postfix или Dovecot не требуется. Недостающие файлы и директории для хранения почты будут создаваться автоматически.


Хотелось бы услышать комментарии и поправки, если вдруг чего-то упустил. ???

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28506
    • Просмотр профиля
*yawn*
<3 LDAP <3
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Frozen Twilight

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Ну да, а ещё Cyrus SASL, SQLite и т.д.
На вкус и цвет. :P

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28506
    • Просмотр профиля
SQLite - то же самое, что и MySQL. Подходит только для несуществующих пользователей.
LDAP позволяет вести единую базу регистратора для всей организации.
Имена, пароли, адреса... всё.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн lamep

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
как все это заставить работать через релей???тоесть у мне почтовик является 2 почта идет через 1...на первом почтавике свой домен у меня свой...моя почта ходит по локалу замечательно на внешние вервера уходит а вот с внешнего не идет...я так понимаю надо сделать релей или????на 25 прописал ререй в Postfix а где прописать релей на 110 в Dovecot.  :idiot2:не могу решить проблему по приему почты с внешних серверов...хепл...

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28506
    • Просмотр профиля
:idiot2:
Напиши то же самое нормальным языком. Решение очевидно.
А получение почты снаружи - fetchmail
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн lamep

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
https://forum.ubuntu.ru/index.php?topic=139808.new#new
вот вроде там все по русски и нормальным языком... и что такое fetchmail..где эту утилиту искать че кавырять?... просто я еще чайник в линуксе.я так понимаю эта вмето dovecota?
« Последнее редактирование: 06 Мая 2011, 01:31:04 от lamep »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28506
    • Просмотр профиля
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн lamep

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
да я ожидал такого ответа!!!такое ощешение что либо очень велекодушен либо сам не чего не знает человек....

Оффлайн toxi

  • Любитель
  • *
  • Сообщений: 82
  • Павловский Роман Олегович
    • Просмотр профиля
    • IT-портал Service Plus
Можно ли настроить Dovecot так, чтобы он принмимал пользователей, логины у которых начинаются с заглавной буквы?
Пользователь на почту заходит, все нормально, но письма не попадают к нему в папку, а создается рядом еще одна папка, где логин пользователя прописан в нижнем регистре сервером.
Ubuntu x86/x64 * LTS | VirtualBox

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28506
    • Просмотр профиля
Читаем http://tools.ietf.org/html/rfc5321#section-2.4 до полного просветления.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн andrew_bye

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2698
    • Просмотр профиля
Флейм удален.

 

Страница сгенерирована за 0.022 секунд. Запросов: 23.