Серверная почта на основе Postfix, Dovecot и MySQL для Debian | ||
Администрирование > Разное Postfix — очень мощный почтовый сервер, основанный на идеологии Open Source, его часто называют Postfix MTA — Postfix Mail Transfer Agent. В этом руководстве, собранном из разных истоников и дополненных личными переживаниями, я расскажу как установить Postfix в связке с Dovecot (IMAP/POP3) и MySQL на сервер Apache под управлением OC Debian. Руководство было опробовано на Debian 5 Lenny и Debian 6 Squeeze. Текст статьи достаточно объёмный, но выполнив все шаги, мы получим в своё распоряжение надёжный почтовый сервер с возможностью добавления почтовых доменов и ящиков прямо через интерфейс MySQL, а это многого стоит. Серверная почта на основе Postfix, Dovecot и MySQL для DebianPostfix — очень мощный почтовый сервер, основанный на идеологии Open Source, его часто называют Postfix MTA — Postfix Mail Transfer Agent. В этом руководстве, собранном из разных истоников и дополненных личными переживаниями, я расскажу как установить Postfix в связке с Dovecot (IMAP/POP3) и MySQL на сервер Apache под управлением OC Debian. Руководство было опробовано на Debian 5 Lenny и Debian 6 Squeeze. Текст статьи достаточно объёмный, но выполнив все шаги, мы получим в своё распоряжение надёжный почтовый сервер с возможностью добавления почтовых доменов и ящиков прямо через интерфейс MySQL, а это многого стоит. Базовая настройка системыПредполагается, что в файле /etc/hosts уже есть запись для нашего сервера, в этом примере и ниже по тексту будет использована следующая запись: 127.0.0.1 localhost.localdomain localhost В файле /etc/hostname должно содержаться сокращённое название сервера, в днном случае mysrv: echo "mysrv" > /etc/hostname Перед установкой пакетов следует обновить сведения и систему: aptitude update && aptitude safe-upgrade Установка нужных пакетовВыполним следующую команду для установки Postfix, Dovecot, OpenSSL и MySQL: aptitude install postfix postfix-mysql postfix-doc mysql-client mysql-server dovecot-common dovecot-imapd dovecot-pop3d postfix-tls libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl telnet В процессе установки появится несколько диалогов первоначальной настройки пакетов, вот основные шаги:
Так же нам понадобится отличный инструмент mailx, с его помощью мы будем отсылать тестовые письма непосредственно из консоли: aptitude install mailx или, если недоступен первый вариант прораммы: aptitude install bsd-mailx Итак мы установили все необходимые пакеты и готовы перейти к детальной настройке конфигурации. Настройка MySQL базы данных доменных имён и пользователейДля начала подключимся к MySQL серверу прямо из командной строки, нужно будет ввести пароль пользователя root, указанный при установке: mysql -u root -p После этого должно появиться приглашение к вводу команд MySQL, вроде этого: mysql> Создадим базу данных для Postfix и выберем её для дальнейшего использования: CREATE DATABASE mail; Подобные команда может быть выполнена и через интерфейс phpMyAdmin, но это менее безопасно во всех случаях. Создадим пользователя с говорящим именем «mail_admin», он у нас будет главный по почте, поэтому наделим его всему привилегиями на всех локальных доменах. ВАЖНО! Сейчас и ниже «mail_admin_password» следует заменить на пароль для этого пользователя, в первой строке он задаётся впервые: GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'mail_admin_password'; Далее создаём таблицу в которой будут храниться все активные почтовые домены, доменов может быть сколько угодно и это радует: CREATE TABLE domains ( domain varchar(50) NOT NULL, PRIMARY KEY (domain) ); Создадим таблицу пересылки почты с ящика на ящик: CREATE TABLE forwardings ( source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) ); Создадим таблицу для хранения почтовых аккаунтов: CREATE TABLE users ( email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) ); И наконец создадим таблицу транспортировки: CREATE TABLE transport ( domain varchar(128) NOT NULL default '', transport varchar(128) NOT NULL default '', UNIQUE KEY domain (domain) ); Работа с MySQL на данном этапе завершена, выходим обратно в консоль: quit Проверим, что MySQL связана с localhost (127.0.0.1). Для этого откроем файл /etc/mysql/my.cnf и найдём следующую строку: bind-address = 127.0.0.1 Если MySQL на сервере уже настроен на другой IP адрес, следует это учесть в поледующих шагах настройки Postfix. Не рекомендуется запускать MySQL сервер на публичном IP адресе — это небезопасно. Чтобы внесённые нами изменения корректно вступили в силу — перезапустим MySQL сервер: /etc/init.d/mysql restart На следующем этапе мы настроим Postfix на работу с MySQL. Настройка Postfix на работу с MySQLДля каждой таблицы в MySQL нам следует создать файл соответствия для Postfix. Создадим файл для работы с почтовыми доменами Postfix: touch /etc/postfix/mysql-virtual_domains.cf В созданный файл /etc/postfix/mysql-virtual_domains.cf нужно добавить следующие строки, замените пароль «mail_admin_password» на пароль пользователя «mail_admin»: user = mail_admin Создадим похожий файл для настройки пересылки почты с ящика на ящик: touch /etc/postfix/mysql-virtual_forwardings.cf В созданный файл /etc/postfix/mysql-virtual_forwardings.cf нужно добавить следующие строки, замените пароль «mail_admin_password» на пароль пользователя «mail_admin»: user = mail_admin Далее создадим файл для работы с почтовыми аккаунтами: touch /etc/postfix/mysql-virtual_mailboxes.cf В созданный файл /etc/postfix/mysql-virtual_mailboxes.cf нужно добавить следующие строки, замените пароль «mail_admin_password» на пароль пользователя «mail_admin»: user = mail_admin И наконец создаём вспомогательный файл для виртуального отображения почты: touch /etc/postfix/mysql-virtual_email2email.cf В созданный файл /etc/postfix/mysql-virtual_email2email.cf нужно добавить следующие строки, замените пароль «mail_admin_password» на пароль пользователя «mail_admin»: user = mail_admin Установим нужные права и владельца на только что созданные файлы: chmod o= /etc/postfix/mysql-virtual_*.cf Добавим почтовую группу и пользователя для передачи почты. Все сообщения виртуальных почтовых ящиков будут храниться в папке /home/vmail на сервере: groupadd -g 5000 vmail На редактирование файл /etc/postfix/main.cf и убедимся в наличии следующих строк, адрес сервера следует заменить на выбранный ранее: myhostname = mysrv.example.com На этом мы закончим конфигурировать Postfix и перейдём к настройке SSL и генерации сертификата. Создание SSL сертификата для PostfixНам нужно сгенерировать SSL сертификат для Postfix, чтобы работать с почтой по защищённому соединению. Это гораздо безопаснее нежели обычный доступ по незащищённому каналу. Перейдём в директорию Postfix и создадим там сертификат с приватным ключом: cd /etc/postfix Сертификат создаётся на год, о чём говорит цифра 365. На экран будет выведен диалог ввода информации о ключе: Country Name (2 letter code) [US]: RU Установим права на файл ключа таким образом, чтобы любой доступ был только у владельца, иными словами — отменим права у остальных: chmod o= /etc/postfix/smtpd.key На этом создание SSL сертификата завершено, перейдём к настройке saslauthd для доступа к MySQL. Настройка saslauthd для доступа к MySQLSaslauthd — это демон аутентификации, который работает посредствам SASL. Нам он нужен, чтобы связать Postfix с MySQL и позволять им совместно работать. Для начала создадим директорию для saslauthd: mkdir -p /var/spool/postfix/var/run/saslauthd Сохраним начальную версию файла: cp -a /etc/default/saslauthd /etc/default/saslauthd.bak Откроем на редактирование файл /etc/default/saslauthd и установим в нём следующие значения: START=yes После этого нам нужно создать файл /etc/pam.d/smtp: touch /etc/pam.d/smtp И внести в него следующие строки. Укажите нужный пароль для пользователя «mail_admin», заменив «mail_admin_password» на верное значение: auth required pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 Создадим файл /etc/postfix/sasl/smtpd.conf: touch /etc/postfix/sasl/smtpd.conf И внесём в него следующие строки, так же заменив пароль на верный: pwcheck_method: saslauthd Установим права на вновь созданные файлы: chmod o= /etc/pam.d/smtp Теперь добавим пользователя postfix в группу sasl и перезапустим сервисы: adduser postfix sasl На этом конфигурирование saslauthd завершено. Далее мы настроим Dovecot на использование базы данных MySQL для IMAP/POP3 идентификации. Настройка DovecotDovecot — это IMAP и POP3 сервер, который позволит нам забирать почту программами сборщиками. Это гибкий и безопасный инструмент в системе Linux. Нам нужно открыть на редактирование файл /etc/postfix/master.cf и добавить в конце следующие ниже строки: dovecot unix - n n - - pipe Сохраним для потомков изначальный конфигурационный файл Dovecot: cp -a /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.bak После чего откроем файл /etc/dovecot/dovecot.conf на редактирование и заменим всё его содержимое указанным ниже кодом. Ящик «[email protected]» следует заменить на желаемый: protocols = imap imaps pop3 pop3s MySQL будет сохранять в себе пароли доступа, поэтому мы сохраним копию первоначального /etc/dovecot/dovecot-sql.conf, а потом произведём настройку: cp -a /etc/dovecot/dovecot-sql.conf /etc/dovecot/dovecot-sql.conf.bak Содержимое исходного файла /etc/dovecot/dovecot-sql.conf полностью заменим на нижеуказанное, не забудем поменять пароль «mail_admin_password» на актуальный: driver = mysql На этом настройка Dovecot завершена, следует перезагрузить его: /etc/init.d/dovecot restart Проверим файл /var/log/mail.log на отсутсвие ошибок: tail -50 /var/log/mail.log И найдём примерно следующие строки: Feb 13 14:00:17 somevar dovecot: Dovecot v1.0.15 starting up Перед началом тестирования следует установить права и владельца на файл конфигурации Dovecot /etc/dovecot/dovecot.conf: chgrp vmail /etc/dovecot/dovecot.conf Проверим корректность работы POP3 сервера, для этого мы подключимся к POP3 серверу через терминал: telnet localhost pop3 После ввода команды в консоли должно отобразиться примерно следующие: Trying 127.0.0.1... Выйдем из режима терминала, пока он нам больше не нужен: quit С Dovecot разобрались, теперь перейдём к настройке алиасов. Настройка почтовых алиасовОткроем на редактирование файл /etc/aliases и убедимся в корректности значений для директив «postmaster» и «root», адрес почты для root следует изменить на желаемый: postmaster: root Активируем новые алиасы и перезагрузим Postfix: newaliases На этом настройка алиасов завершена, перейдём к тестированию Postfix. Тестирование PostfixДля проверки корректности функционирования SMTP-AUTH и TLS, в консоли введём следующую команду: telnet localhost 25 После успешного соединения, в терминале должно появиться что-то вроде этого: 220 mysrv.example.com ESMTP Postfix (Debian/GNU) Далее вводим команду в терминал: ehlo localhost После ввода команды, в терминале должно отобразиться нечто вроде этого: Trying 127.0.0.1... Для нас важно наличие строки «250-STARTTLS». Вводим в терминал команду «quit» и перейдём к наполнению базы данных MySQL почтовыми доменами и пльзователями. Настройка почтовых доменов и аккаунтовНа этом этапе нужно иметь настроенные записи DNS для почтовых доменов. Для этого следует создать необходимую запись MX, если её ещё нет, в списках DNS, которая будет указывать на полный домен. Подключимся к MySQL из консоли, добавить аккаунт в MySQL можно любым другим способом, в том числе и из PHP или Python скрипта, но сейчас мы остановимся на консоли: mysql -u root -p Добавим в список доменов наш основной домен и создадим первый почтовый аккаунт, «example.com», «[email protected]» и «password» следует заменить корректными значениями: USE mail; Обратите внимание на команду шифрования пароля, добавлять или менять пароль нужно именно так. Теперь попробуем отправить почту вновь созданному аккаунту. Это необходимо для создания структуры директорий на диске, которые появяться после получения первого письма. Для отправки почты непосредственно из консоли мы будем использовать mailx или bsd-mailx, в зависимости от того, что установилось выше: mailx [email protected] После ввода команды будет предложено ввести тему сообщения. Вводим, нажимаем Enter, после чего нажимаем Ctrl + D. Поле «CC» можно оставить пустым. Так как почтовых доменов может быть несколько, следует указывать полный почтовый адрес «[email protected]» для сборщика почты, иначе по имени пользователя «info» нельзя будет определить, к какому домену он принадлежит и почта не будет отправлена или получена. На этом перейдём к следующему шагу — проверке лог файлов. Проверка логовПосле отправки тестового сообщения нам следует проверить логи на остутствие ошибок. Проверим содержимое файла /var/log/mail.log в последних 50 строках: tail -50 /var/log/mail.log Мы должны увидеть нечто подобное: Feb 13 15:07:49 somevar postfix/cleanup[5877]: E1D145803: message-id= Далее мы проверим лог доставки Dovecot, котрый находится в файле /home/vmail/dovecot-deliver.log и должны увидеть нечто похожее на: deliver([email protected]): 2011-02-13 17:05:19 Info: msgid=: saved mail to INBOX Если в логе есть ошибки в работе сервиса cmusieve, не обращайте на них внимания, в конце статьи я расскажу как от них избавиться. Теперь можно проверить структуру почтового хранилища и директорий на диске. Проверка структуры директорий на дискеПерейдём в директорию /home/vmail/example.com/sales/Maildir, где «example.com» адрес нашего почтового домена: cd /home/vmail/example.com/sales/Maildir Выполним команду поиска: find Внутри директории должно содержаться примерно следующее: ./dovecot-uidlist Просмотреть почту можно прямо из консоли при помощи утилиты mutt: cd /home/vmail/example.com/sales/Maildir Если она не установлена, выполним: aptitude install mutt Настройка почтовых программПользователь может забрать почту любой доступной почтовой программой. В качестве IMAP/POP3 и SMTP сервера следует указать домен, записанный в MX записи интерфейса DNS, например «mail.example.com». Логин — это почтовый адрес пользователя, как уже говорилось это необходимо при мультидоменной конфигурации, которую мы и реализовали. Шифрование входящей почты — SSL, исходящей — TLS. Чтобы забирать почту пользователя root, в нашем примере его почтовый ящик «[email protected]», следует настроить переадресацию в таблице forwardings: mysql -u root -p USE mail; После этого вся системная почта — уведомления CRON, сообщение от вспомогательных программ и сервисов — будет пренаправлена на новый адрес, с которого мы можем её забрать. Возможные проблемыЕдинственная проблема, замеченная в логах, это несоответствие пакета cmusieve в Debian 6 Squeeze. В файле /home/vmail/ наблюдалось примерно следующее: 2011-02-13 20:23:31 deliver([email protected]): Fatal: Plugin cmusieve not found from directory /usr/lib/dovecot/modules/lda Дабы исправить положение установим нужный пакет, который теперь называется sieve, в этом собственно и проблема: aptitude install libsieve2-1 Потом, нужно открыть файл /etc/dovecot/dovecot.conf на редактирование и заменить строку: mail_plugins = cmusieve На нижеуказанную: mail_plugins = sieve Перезагружаем Dovecot: /etc/init.d/dovecot restart После этих несложных действий логи стали чисты. Список базовых почтовых портов
|
||
Комментарии | ||