Инструменты пользователя

Инструменты сайта


webmail

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

webmail [2026/06/11 12:15] (текущий)
Строка 1: Строка 1:
 +====== Часть 3 Почтовый сервер для дома на базе Postfix+Dovecot+Mysql...... ======
 +
 +В первых двух статьях, я рассказал как установить LAMP сервер на базе дистрибутива Ubuntu (8.04-8.10)
 +
 +[[http://www.ubuntu.liski.su/dokuwiki/doku.php?id=howtoo]]
 +
 +[[http://www.ubuntu.liski.su/index.php?page=77]]
 +
 +[[http://www.ubuntu.liski.su/index.php?page=81]]
 +
 +В продолжении этой темы расскажу, как установить для дома или небольшой организации почтовый сервер.
 +
 +Итак все, что написано в части 1 и 2 вами уже изучено и проделано. Т.е. LAMP сервер уже установлен.
 +
 +Почтовый сервер, конфигурация которого предлагается в этом руководстве, позволит вам и вашим пользователям использовать следующие функции: 
 +
 +     * получать и хранить электронную почту для пользователей;
 +     * получать электронную почту, используя протоколы IMAP и POP3 - в т.ч. с SSL шифрованием;
 +     * принимать и пересылать сообщение для пользователей, если они идентифицированны;
 +     * использовать веб-интерфейс для чтения электронной почты в веб-браузере;
 +     * выявлять и удалять спам;
 +     * использовать веб-интерфейс для администрирования почтового сервера.
 +
 +Используя этот документ вы можете просто "прокопипастить" приведенные в нем команды. Почтовый сервер будет работать. Но для реальной работы, Вам надо будет использовать свои реальные имена.
 +
 +Поэтому я попытался своими комментариями облегчить Вам решение этой задачи. Для этого, от Вас потребуются аккуратность и базовые знания в следующих областях:
 +
 +     * MySQL (создание баз данных, предоставление доступа пользователям, основные запросы SQL)
 +     * SMTP (что это такое, и как выглядят основные SMTP диалоги)
 +     * POP3, IMAP (что они делают, и каковы их различия)
 +     * Postfix (основы базовой конфигурации, в файле main.cf, а так же, умение редактировать базовой конфигурационный файл и знать, что лог-файлы вашей почты находится в /var/log/mail.)
 +     * Dovecot ( то же, что и с Postfix)
 +     * Ubuntu / Linux (основы администрирования системы, настройка конфигурационных файлов с помощью текстового редактора, чтение лог-файлов)
 +
 +:!:   В начале статьи я приведу примеры настройки конфигурации сервера через консоль. В конце статьи два раздела (Шаг. 11 и 12) посвящены настройкам через WEB интерфейс.
 +
 +=====Шаг 1: Устанавливаем необходимые пакеты =====
 +
 +Если, не активирован ROOT:
 +
 +<code>sudo su
 +sudo passwd root</code>
 +
 +Сделаем ссылочку на bash на sh:
 +
 +<code>ln -sf /bin/bash /bin/sh</code>
 +
 +Уберем apparmor (чего то, с ним пока не все ладится!)
 +
 +<code>/etc/init.d/apparmor stop
 +update-rc.d -f apparmor remove</code>
 +
 +Проверим все ли пакеты установлены у нас, для почтового Mail-сервера.
 +
 +<code>aptitude install postfix-mysql mysql-server dovecot-pop3d dovecot-imapd openssl phpmyadmin squirrelmail postfix-mysql mysql-server-5.0 dovecot-pop3d dovecot-imapd lha unrar openssl libapache2-mod-php5 php5-mysql telnet mutt ssh openssh-server</code>
 +
 +===== Шаг 2: Создаем базу данных =====
 +
 +  * Если у Вас есть опыт в использовании MySQL, то вы можете вводить SQL команды непосредственно в оболочке 'MySQL', то есть, в её командной строке.
 +  * Кроме того, вы можете так же использовать программу PhpMyAdmin, введя в браузере адрес: [[http://localhost/phpmyadmin]]. Команды те же, вводить их надо в закладке "SQL".
 +  * Дополнительно напомню, что при установке пакета **mysql-server**, система попросила вас ввести пароль для пользователя "root".
 +  * Как раз, этот пароль мы и будем применять для для администрирования MySQL сервера. Как раз, его и надо ввести при запуске программы PhpMyAdmin.
 +
 +Итак, для работы данной конфигурации, мы с вами создадим базу данных с именем **mailserver**.
 +
 +Для работы конкретно с этой базой, мы создадим пользователя **mailuser** с определенными правами и паролем **mailuser2009**.
 +
 +Естественно, в реальной конфигурации вы можете и должны использовать свои  собственные имена и пароли!
 +
 +:!: Работу проводим в Терминале, вводя необходимые команды.
 +
 +:!: Здесь необходимо вводить пароль пользователя "root" для MySQL сервера.
 +
 +Итак команда для создания базу данных '**mailserver**', выглядит, так:
 +
 +<code>mysqladmin -p create mailserver</code>
 +
 +Соединимся с вновь созданной базой, для этого выполним две команды:
 +
 +<code>mysql -p</code>
 +<code>USE mailserver</code>
 +
 +На экране Терминала, это будет выглядеть так:
 +
 +
 +{{:mysql1.png|}}
 +
 +:!:Напомню еще раз, что для запуска команды **mysql -p**, необходим пароль root для MySQL.
 +
 +:!:Когда вы увидите приглашение в виде: **mysql>**, то это значит, что вы находитесь в оболочке MySQL, и можете вводить команды.
 +
 +С помощью следующей команды, мы создадим пользователя **mailuser** и предоставим ему определенные права:
 +
 +<code>mysql>
 +GRANT SELECT ON mailserver.*
 +TO mailuser@localhost
 +IDENTIFIED BY 'mailuser2009';
 +exit</code>
 +
 +<note>Эта команда создаст пользователя с именем "mailuser", который имеет права только на выбор и чтение данных из базы "mailserver". Он не может изменять ее. Обычно это делается в целях безопасности.
 +Если вы хотите добавить или изменить данные в базе, то используйте имя пользователя 'root', или создать еще одну учетную запись для этой цели. Считаем пароль'mailuser2007` учебным !</note>
 +
 +
 +===== Шаг 3: Создаем таблицы для базы данных =====
 +
 +<note>  Cмотрите внизу статьи альтернативный способ создания тавлиц с помощью программы phpmyadmin!</note>
 +
 +Внутри недавно созданной базы данных вам необходимо создать таблицы, которые хранят информацию о доменах, и переадресации почтовых ящиков и о пользователях. Подключаемся к MySQL и снова выберем нашу базу 'mailserver:
 +
 +<code>mysql -p mailserver</code>
 +
 +Увидев строку приглашения **mysql>**, создаем таблицу для виртуальных доменов, выполнив следующую команду:
 +
 +<file>mysql></file>
 +
 +<code>CREATE TABLE `virtual_domains` (
 +id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
 +name VARCHAR(50) NOT NULL
 +) ENGINE = InnoDB;</code>
 +
 +Следующая таблица содержит данные о фактических учетных записях пользователей.
 +
 +Каждый пользователь имеет имя пользователя и пароль. Они используется для доступа к почтовому ящику по POP3 или IMAP, при входе в веб-службы или для отправки почты, на ящики, даже, если они не находятся в вашей локальной сети.
 +
 +Так как пользователи, как правило, легко забывают, свои адреса электронной почты, то обычно используются реальные имена пользователей.
 +
 +Создаем таблицу пользователей:
 +
 +<code>CREATE TABLE `virtual_users` (
 +id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
 +domain_id INT(11) NOT NULL,
 +user VARCHAR(40) NOT NULL,
 +password VARCHAR(32) NOT NULL,
 +CONSTRAINT UNIQUE_EMAIL UNIQUE (domain_id,user),
 +FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
 +) ENGINE = InnoDB;</code>
 +
 +И, наконец, создаем таблица псевдонимов, для переадресации почты с одного ящика на другой:
 +
 +<code>CREATE TABLE `virtual_aliases` (
 +id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
 +domain_id INT(11) NOT NULL,
 +source VARCHAR(40) NOT NULL,
 +destination VARCHAR(80) NOT NULL,
 +FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
 +) ENGINE = InnoDB;</code>
 +
 +  Опция FOREIGN KEY указывает, что записи в virtual_aliases и virtual_users таблицах связаны с записями в virtual_domains таблице.
 +Это позволит сохранить данные в вашей базе данных последовательно, потому что вы не можете создать виртуальные псевдонимы или виртуальных пользователей, не подключенных к виртуальной области. позволит вам избежать дублирования, так как вы просто хранить доменное имя один раз - в virtual_domains стол - и нигде более. Суффикс 'ON DELETE CASCADE' означает, что если вы удалите запись из таблицы, то связанные  с ней другие записи, будут удалены из текущей таблицы автоматически. Вы можете удалить имя домена в virtual_domains таблице, то и все зависимые по ссылкам записи в других таблицах будут также удалены.
 +
 +Ниже пример данных для таблицы virtual_domains и virtual_users:
 +
 +|virtual_domains||
 +^id ^name^
 +|1 |example.com|
 +|2 |liski.net|
 +
 +|virtual_users||
 +^id ^domain_id ^user    ^password^
 +|1 |1    |victor    |12345|
 +|2 |1    |alex      |12345|
 +|3 |2    |vasya   |12345|
 +
 +Соответственно их почтовые адреса выглядят следующим образом :
 +
 +    * victor@example.com
 +    * alex@example.com
 +    * vasya@liski.net
 +
 +И пример для таблицы виртуальных псевдонимов:
 +
 +^virtual_aliases^^  
 +^id ^domain_id ^source ^destination^
 +|1 |1 |alex         |alex.pupkin@gmail.com|
 +|2 |2 |vasya |vasya50@yahoo.com|
 +|3 |2 |vasya |vasya@mycompany.com|
 +
 +Это позволит почту для alex@example.com направить для alex.pupkin@gmail.com. А почта для vasya@liski.net перенаправляется обеим пользователям- vasya50@yahoo.com и vasya@mycompany.com
 +
 +Не отчаивайтесь, если этот путь выглядит достаточно сложным. Такая база данных не должна администрироваться путем ручного ввода SQL-команд.
 +
 +Но важным является то, что вы теперь понимаете схему таблиц базы данных.
 +
 +В реальных условиях, для управления почтовыми ящиками, прменяются интернет-средства администрирования, о которых будет сказано ниже.
 +
 +
 +===== Шаг 4. Создаем mapping файлы для базы данных. =====
 +
 +==== virtual_mailbox_domains ====
 +
 +Создаем и сразу вводим содержание в файл **/etc/postfix/mysql-virtual-mailbox-domains.cf**:
 +
 +<code>gedit /etc/postfix/mysql-virtual-mailbox-domains.cf</code>
 +
 +В появившееся пустое окно вводим следующие строки:
 +    
 +<file>user = mailuser
 +password = mailuser2009
 +hosts = 127.0.0.1
 +dbname = mailserver
 +query = SELECT 1 FROM virtual_domains WHERE name='%s'</file>
 +
 +Выполним команду для конфигурирования файла /etc/postfix/main.cfg:
 +
 +<code>postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf</code>
 +
 +(:!:  С помощью команды postconf-е удобно добавлять конфигурационные строки в файл /etc/postfix/main.cf. Эта команда также активирует новый параметр мгновенно, поэтому вам не придется перезагружать Postfix.)
 +
 +Откроем базу данных **mailserver** для занесения в созданные таблицы первичных данных:
 +
 +<code>mysql -p mailserver</code>
 +
 +Увидим строку приглашения и введем данные для таблицы virtual_domains:
 +
 +^id ^name^
 +|1  |example.com|
 +|2  |liski.net|
 +
 +<code>mysql>
 +USE mailserver</code>
 +
 +<file>
 +INSERT INTO virtual_domains (id, name) VALUES (1, 'example.com');
 +INSERT INTO virtual_domains (id, name) VALUES (2, 'liski.net');</file>
 +
 +<code>exit</code>
 +
 +проверим в Терминале, введя по очереди две строки:
 +
 +<code>
 +postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
 +postmap -q liski.net mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf</code>
 +
 +Если вы увидели ответ на каждую команду цифру '1', то значит все правильно.
 +
 +==== virtual_mailbox_maps ====
 +
 +Создадим пользователя и группу vmail:
 +
 +<code>
 +groupadd -g 5000 vmail
 +useradd -g vmail -u 5000 vmail -d /home/vmail -m</code>
 +
 +Внесем сведения о них в фаил /etc/postfix/main.cfg:
 +
 +<code>
 +postconf -e virtual_uid_maps=static:5000
 +postconf -e virtual_gid_maps=static:5000</code>
 +
 +Точно так же, введем данные в таблицу virtual_users:
 +
 +<code>mysql -p mailserver
 +
 +INSERT INTO virtual_users (id, domain_id, user, password)
 +VALUES (1, 1, 'victor', MD5('12345'));
 +
 +INSERT INTO virtual_users (id, domain_id, user, password)
 +VALUES (2, 1, 'alex', MD5('12345'));</code>
 +
 +Проверим, все ли мы сделали правильно, здесь же в базе введем следующую команду:
 +
 +<code>
 +SELECT CONCAT(virtual_users.user, '@', virtual_domains.name) AS email
 +FROM virtual_users
 +LEFT JOIN virtual_domains ON virtual_users.domain_id=virtual_domains.id;</code>
 +
 +Вывод увидим в виде таблицы, представленной ниже:
 +
 +<file>+--------------------+
 +| email              |
 ++--------------------+
 +| alex@example.com   
 +| victor@example.com | 
 ++--------------------+
 +2 rows in set (0.00 sec)</file>
 +
 +Еще раз:
 +
 +<code>
 +SELECT CONCAT(virtual_users.user, '@', virtual_domains.name) AS email,
 +virtual_users.password
 +FROM virtual_users
 +LEFT JOIN virtual_domains ON virtual_users.domain_id=virtual_domains.id;</code>
 +
 +Увидим следующую таблицу:
 +
 +<file>+--------------------+----------------------------------+
 +| email              | password                         |
 ++--------------------+----------------------------------+
 +| victor@example.com | 827ccb0eea8a706c4c34a16891f84e7b | 
 +| alex@example.com   | 827ccb0eea8a706c4c34a16891f84e7b | 
 ++--------------------+----------------------------------+
 +2 rows in set (0.00 sec)</file>
 +
 +
 +**Создадим таблицу view_users** (если вы успели выйти из базы данных, то повторите команду:
 +
 +<code>mysql -p mailserver
 +
 +mysql>
 +USE mailserver
 +
 +</code>
 +
 +<code>CREATE VIEW view_users AS
 +SELECT CONCAT(virtual_users.user, '@', virtual_domains.name) AS email,
 +virtual_users.password
 +FROM virtual_users
 +LEFT JOIN virtual_domains ON virtual_users.domain_id=virtual_domains.id;</code>
 +
 +проверка:
 +
 +<code>mysql> SELECT * FROM view_users;</code>
 +
 +Последует следующий вывод:
 +
 +<file>+--------------------+----------------------------------+
 +| email              | password                         |
 ++--------------------+----------------------------------+
 +| victor@example.com | 827ccb0eea8a706c4c34a16891f84e7b | 
 +| alex@example.com   | 827ccb0eea8a706c4c34a16891f84e7b | 
 ++--------------------+----------------------------------+
 +2 rows in set (0.00 sec)
 +
 +mysql></file>
 +
 +Выходим из оболочки базы данных, с помощью команды quit:
 +
 +<code>quit</code>
 +
 +И создаем файл /**etc/postfix/mysql-virtual-mailbox-maps.cf**:
 +
 +<code>gedit /etc/postfix/mysql-virtual-mailbox-maps.cf</code>
 +
 +Вставляем в пустое окно следующий текст:
 +
 +<file>user = mailuser
 +password = mailuser2009
 +hosts = 127.0.0.1
 +dbname = mailserver
 +query = SELECT 1 FROM view_users WHERE email='%s'</file>
 +
 +Сделаем постконфигурацию postfix:
 +
 +<code>postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf</code>
 +
 +проверка в Терминале:
 +
 +<code>postmap -q victor@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
 +postmap -q alex@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf</code>
 +
 +должны увидеть цифры "1" и еще раз "1".
 +
 +==== virtual_alias_maps ====
 +
 +Заполним таблицу virtual_aliases (вновь повторяем те же команды, чтобы зайти в Mysql):
 +
 +<code>mysql -p mailserver</code>
 +
 +Вносим следующие данные:
 +
 +^-------------------------------^
 +|1 |1 |victor |victor@example.com|
 +|2 |1 |victor |victor@gmail.com|
 +
 +<file>
 +INSERT INTO virtual_aliases (id, domain_id, source, destination)
 +VALUES (1, 1, 'victor', 'victor@example.com'),
 +       (2, 1, 'victor', 'victor@gmail.com');</file>
 +
 +<code>mysql></code>
 +
 +**По такой же схеме создаем и проверяем таблицу view_aliases:**
 +
 +<file>
 +CREATE VIEW view_aliases AS
 +SELECT CONCAT(virtual_aliases.source, '@', virtual_domains.name) AS email,
 +       destination
 +FROM virtual_aliases
 +LEFT JOIN virtual_domains ON virtual_aliases.domain_id=virtual_domains.id;</file>
 +
 +проверка:
 +
 +<code>mysql> SELECT * FROM view_aliases;</code>
 +
 +<file>+--------------------+---------------------+
 +| email              | destination         |
 ++--------------------+---------------------+
 +| victor@example.com | victor@example.com 
 +| victor@example.com | victor@gmail.com | 
 ++--------------------+---------------------+
 +2 rows in set (0.00 sec)
 +
 +mysql></file> 
 +Выходим из MySQL
 +
 +<code>quit</code>
 +
 +**И создаем файл /etc/postfix/mysql-virtual-alias-maps.cf:**
 +
 +
 +<code>gedit /etc/postfix/mysql-virtual-alias-maps.cf</code>
 +
 +<file>user = mailuser
 +password = mailuser2009
 +hosts = 127.0.0.1
 +dbname = mailserver
 +query = SELECT destination FROM view_aliases WHERE email='%s'</file>
 +
 +проверим:
 +
 +<code>postmap -q victor@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf</code>
 +
 +увидим:
 +
 +<file>victor@example.com,victor@gmail.com
 +
 +root@example:/home/victor#</file> 
 +
 +Создаем файл **/etc/postfix/mysql-email2email.cf:
 +**
 +<code>gedit /etc/postfix/mysql-email2email.cf</code>
 +
 +<file>user = mailuser
 +password = mailuser2009
 +hosts = 127.0.0.1
 +dbname = mailserver
 +query = SELECT email FROM view_users WHERE email='%s'</file>
 +
 +проверка:
 +
 +<code>postmap -q victor@example.com mysql:/etc/postfix/mysql-email2email.cf</code>
 +
 +увидим:
 +
 +<file>victor@example.com
 +root@example:/home/victor#</file> 
 +
 +Чтобы  Postfix знал где искать эти пути, добавим следующую строку в файл main.cf:
 +
 +<code>postconf -e virtual_alias_maps=mysql:/etc/postfix/mysql-virtual-alias-maps.cf,mysql:/etc/postfix/mysql-email2email.cf</code>
 +
 +Разрешаем права
 +
 +<code>chgrp postfix /etc/postfix/mysql-*.cf
 +chmod u=rw,g=r,o= /etc/postfix/mysql-*.cf</code>
 +
 +
 +===== Шаг 5: Доставка писем через Dovecot LDA =====
 +
 +В Postfix входит агент доставки почты (MDA), их называют "виртуальные", как правило, они доставляет письма на виртуальные почтовые ящики.
 +
 +Но Dovecot поставляется с собственным агентом доставки. Этот агент называется "Dovecot LDA", который предоставляет более широкую функциональность.
 +
 +Для того, чтобы использовать этого агента Postfix, нам придется добавить следующую строку в файл: /etc/postfix/master.cf:
 +
 +<code>gedit /etc/postfix/master.cf</code>
 +
 +<file>dovecot   unix  -                               pipe
 +    flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}</file>
 +
 +<note>Перед второй строкой обязательно должно стоять два пробела, другое Postfix не понимает</note>
 +
 +Перезапустим Postfix:
 +
 +<code>postfix reload</code>
 +
 +а так же для активизации службы виртуальной доставки добавим две строчки в конфигурационный файл Postfix **/etc/postfix/main.cf**:
 +
 +<code>postconf -e virtual_transport=dovecot
 +postconf -e dovecot_destination_recipient_limit=1</code>
 +
 +До сих пор непосредственно Postfix передавал входящие письма для виртуальных пользователей из /usr/lib/dovecot/deliver программы.
 +
 +Теперь настало время настройки службы Dovecot.
 +
 +===== Шаг 6. Настраиваем Dovecot =====
 +
 +Настроим Dovecot, для работы со службами POP3 и IMAP.
 +
 +Конфигурационные файлы для Dovecot находится в папке /etc/dovecot. Начнём настройку с редактирования главного конфигурационного файла:
 +
 +<code>gedit /etc/dovecot/dovecot.conf</code>
 +
 +Находим и проверяем строчку с протоколами, она должна выглядеть следующим образом:
 +
 +:!: искать можно штатным поиском редактора, набирая фразу оканчивающуюся на знак 'равно'. Например, для поиска показанной ниже строки, я в поиске набрал фразу:- **protocols =**
 +
 +<file>protocols = imap imaps pop3 pop3s</file>
 +
 +Следующая строка показывает, что мы выключим работу сервера Dovecot, с применением шифрования SSL.
 +
 +Вы можете после проверки работы всех служб включить этот параметр поставив слово 'yes'!
 +
 +<file>disable_plaintext_auth = no</file>
 +
 +Вы можете после проверки работы всех служб, включить этот параметр поставив слово 'yes'.
 +
 +Следующая строка определяет очень важный параметр, путь к расположению почтовых ящиков пользователей: 
 +
 +<file>mail_location = maildir:/home/vmail/%d/%n/Maildir</file>
 +
 +Вам должно быть понятно, что пользователи найдут свои почтовые ящики в папках: /home/vmail/DOMAIN/USER/, и что они будут в формате Maildir...
 +
 +Следующая строка показывает, что внутри ящика папки будут начинаться с '.' , то есть, будут невидимы:
 +
 +<file>namespace private {
 +    separator = .
 +    prefix = INBOX.
 +    inbox = yes
 +}</file>
 +
 +Следующая строка определяет механизм аутентификации plain login :
 +
 +<file>mechanisms = plain login</file>
 +
 +Далее находим и меняем значение passdb sql следующим образом:
 +
 +<file>passdb sql {
 +    args = /etc/dovecot/dovecot-sql.conf
 +}</file>
 +
 +Эта строка показывает Dovecot, что пароли хранятся в базе данных MySQL.
 +
 +<file>userdb static {
 +    args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
 +}</file>
 +
 +Находим и правим следующую секцию, она должна выглядеть так:
 +
 +<file>socket listen {
 +    master {
 +        path = /var/run/dovecot/auth-master
 +        mode = 0600
 +        user = vmail
 +    }
 +
 +    client {
 +        path = /var/spool/postfix/private/auth
 +        mode = 0660
 +        user = postfix
 +        group = postfix
 +    }
 +}</file>
 +
 +Показано, что "chroot" директория для Postfix находится в каталоге /var/spool/postfix. Это является хорошей мерой безопасности, так что злоумышленник не сможет получить доступ к папке /etc/passwd/
 +
 +И финальные строки, которые скажут Dovecot о протоколе LDA ( local delivery agent).
 +
 +<file>protocol lda {
 +    log_path = /home/vmail/dovecot-deliver.log
 +    auth_socket_path = /var/run/dovecot/auth-master
 +    postmaster_address = postmaster@example.com
 +    mail_plugins = cmusieve
 +    global_script_path = /home/vmail/globalsieverc
 +}</file>
 +
 +:!: Помните, что эта конфигурация учебная, поэтому  в настоящей конфигурации, в email адресе: postmaster@example.com, надо будет использовать реальный домен.
 +
 +==== Настраиваем конфигурационный файл dovecot-sql.conf. ====
 +
 +Открываем в текстовом редакторе файл: **/etc/dovecot/dovecot-sql.conf** находим сточки и меняем их значения на нужные нам:
 +
 +<code>gedit /etc/dovecot/dovecot-sql.conf</code>
 +
 +Ниже четыре строки, показано, как они должны выглядеть, находим их и исправляем. Можно использовать кнопку <key>Поиск</key> в редакторе, ищем начальные фразы, например- **driver =**....:
 +
 +<file>driver = mysql
 +
 +connect = host=127.0.0.1 dbname=mailserver user=mailuser password=mailuser2009
 +
 +default_pass_scheme = PLAIN-MD5
 +
 +password_query = SELECT email as user, password FROM view_users WHERE email='%u';</file>
 +
 +**Перезапускаем Dovecot:**
 +
 +<code>/etc/init.d/dovecot restart</code>
 +
 +
 +Перед проведением тестирования сервера электронной почты, необходимо присвоить определенные права на файл /etc/dovecot/dovecot.conf, чтобы пользователь vmail, мог иметь доступ к этому файлу.
 +
 +Выполним следующие команды:
 +
 +<code>chgrp vmail /etc/dovecot/dovecot.conf
 +chmod g+r /etc/dovecot/dovecot.conf</code>
 +
 +Все!
 +
 +===== Шаг 7. Проверяем работоспособность Dovecot. =====
 +
 +Проверяем правильность работы, смотрим mail.log, в конце файла должны увидеть следующие строки:
 +
 +<code>gedit /var/log/mail.log</code>
 +
 +<file>Jan 14 14:23:27 mailserver dovecot: Dovecot v1.1.4 starting up
 +Jan 14 14:23:28 mailserver dovecot: auth-worker(default): mysql: Connected to 127.0.0.1 (mailserver)</file>
 +
 +===== Шаг 8. Тестируем нашу почту,через TELNET =====
 +
 +Поднимаем SMTP сесию через telnet.
 +
 +В "Терминале" пишем команду и нажимаем клавишу <key>Enter</key>:
 +
 +<code>telnet localhost smtp</code>
 +
 +Сервер должен ответить:
 +
 +<file>Trying 127.0.0.1...
 +Connected to mailserver.example.com.
 +Escape character is '^]'.
 +220 mailserver.example.com ESMTP Postfix (Ubuntu)</file>
 +
 +Пишем:
 +
 +<code>ehlo example.com</code>
 +
 +Видим:
 +
 +<file>250-mailserver.example.com
 +250-PIPELINING
 +250-SIZE 10240000
 +250-VRFY
 +250-ETRN
 +250-STARTTLS
 +250-ENHANCEDSTATUSCODES
 +250-8BITMIME
 +250 DSN</file>
 +
 +Пишем:
 +
 +<code>mail from:<boss@example.com></code>
 +
 +Видим:
 +
 +<file>250 2.1.0 Ok</file>
 +
 +Пишем:
 +
 +<code>rcpt to:<victor@example.com></code>
 +
 +Видим:
 +
 +<file>250 2.1.5 Ok</file>
 +
 +Пишем:
 +
 +<code>data</code>
 +
 +Видим:
 +
 +<file>354 End data with <CR><LF>.<CR><LF></file>
 +
 +Пишем ("."- точка обязательно):
 +
 +<code>Привет от боса!
 +.</code>
 +
 +<file>250 2.0.0 Ok: queued as 5859920C231</file>
 +
 +<code>quit</code>
 +
 +Видим:
 +
 +<file>221 2.0.0 Bye
 +Connection closed by foreign host.
 +root@mailserver:/home/victor#</file>
 +
 +Проверим логи.
 +
 +Вновь вернемся к лог файлу **/var/log/mail.log** . You should see something similar to:
 +
 +можно так:
 +
 +<code>gedit /var/log/mail.log</code>
 +
 +В конце файла должны увидеть следующие строки:
 +
 +<file>Jan 14 16:00:29 mailserver postfix/smtpd[8134]: connect from mailserver.example.com[127.0.0.1]
 +Jan 14 16:00:59 mailserver postfix/smtpd[8134]: 0F5821417D7: client=mailserver.example.com[127.0.0.1]
 +Jan 14 16:01:19 mailserver postfix/cleanup[8139]: 0F5821417D7: message-id=<20090114130059.0F5821417D7@mailserver>
 +Jan 14 16:01:19 mailserver postfix/qmgr[7068]: 0F5821417D7: from=<boss@example.com>, size=366, nrcpt=2 (queue active)
 +Jan 14 16:01:19 mailserver postfix/pipe[8142]: 0F5821417D7: to=<victor@example.com>, relay=dovecot, delay=28, delays=28/0.03/0/0.12, dsn=2.0.0, status=sent (delivered via dovecot service)
 +Jan 14 16:01:20 mailserver postfix/smtp[8141]: 0F5821417D7: to=<victor@gmail.com>, orig_to=<victor@example.com>, relay=gmail-smtp-in.l.google.com[209.85.220.179]:25, delay=29, delays=28/0.02/0.41/0.92, dsn=2.0.0, status=sent (250 2.0.0 OK 1231938080 4si27652369fxm.2)
 +Jan 14 16:01:20 mailserver postfix/qmgr[7068]: 0F5821417D7: removed
 +Jan 14 16:01:29 mailserver postfix/smtpd[8134]: disconnect from mailserver.example.com[127.0.0.1]</file>
 +
 +
 +Проверим наличие почтового ящика, введем в терминале команду: 
 +
 +<code>cd /home/vmail/example.com/victor</code>
 +<code>find</code>
 +
 +<code>root@mail:/home/victor# cd /home/vmail/example.com/victor
 +root@mail:/home/vmail/example.com/victor# find</code>
 +
 +Теперь мы должны увидеть все папки нашего почтового ящика:
 +
 +<file>.
 +./Maildir
 +./Maildir/cur
 +./Maildir/tmp
 +./Maildir/new
 +./Maildir/new/1231926651.M703647P9420.mailserver.example.com,W=459
 +./Maildir/dovecot-uidlist
 +./Maildir/dovecot.index.cache
 +./Maildir/dovecot.index.log
 +root@mailserver:/home/vmail/example.com/victor#</file>Checking the user's maildir
 +
 +Там же находится и отправленное письмо, прочитаем его с помощью команды mutt:
 +
 +There sits the email. Try to read the mail with the "mutt" program:
 +
 +<code>mutt -f /home/vmail/example.com/victor/Maildir/</code>
 +
 +В появившемся окне mutt, увидим наше письмо:
 +
 +^q:Quit  d:Del  u:Undel  s:Save  m:Mail  r:Reply  g:Group  ?:Help^
 +^   1 N   May 18 steve@example.c (0.1K)                          ^
 +
 +Нажмем <key>ENTER</key> для того , чтобы прочитать письмо (email):
 +
 +<file>From: boss@example.com
 +To: undisclosed-recipients: ;
 +
 +Привет от босса.</file>
 +
 +Таким образом, письмо прибыло на акаунт Виктор (Victor`s).
 +
 +:!: Нажмите клавишу <key>q</key>, чтобы выйти из **mutt**.
 +
 +==== Проверяем работу POP3 ====
 +
 +Давайте попробуем создать POP3 соединение и получить электронную почту (email) для Victora, введем команду:
 +
 +<code>telnet localhost pop3</code>
 +
 +На что сервер отвечает:
 +
 +<file>Trying 127.0.0.1...
 +Connected to localhost.
 +Escape character is '^]'.
 ++OK Dovecot ready.</file>
 +
 +Логинимся как Victor:
 +
 +<code>user victor@example.com</code>
 +
 +Видим ответ от сервера:
 +
 +<file>+OK</file>
 +
 +Передаем пароль:
 +
 +<code>pass 12345</code>
 +
 +Если пароль правильный, то сервер напишет:
 +
 +<file>+OK Logged in.</file>
 +
 +Просмотрим почту для Victor с помощью команды list:
 +
 +<code>list</code>
 +
 +Dovecot скажет вам, что есть одно письмо в почтовом ящике:
 +
 +<file>+OK 1 messages:
 +1 474
 +.
 +
 +Fetch that email number 1:
 +
 +retr 1
 +
 +Dovecot sends you the email:
 +
 ++OK 474 octets
 +Return-Path: <bos@example.com>
 +X-Original-To: victor@example.com
 +Delivered-To: victor@example.com
 +Received: from example.com (localhost [127.0.0.1])
 +    by ... (Postfix) with ESMTP id 692DF379C7
 +    for <john@example.com>; Fri, 18 May 2007 22:59:31 +0200 (CEST)
 +Message-Id: <...>
 +Date: Fri, 18 May 2007 22:59:31 +0200 (CEST)
 +From: bos@example.com
 +To: undisclosed-recipients:;
 +
 +Привет от боса!
 +.
 +</file>
 +
 +Закроем соединение с POP3 сервером:
 +
 +<code>quit</code>
 +
 +Сервер ответит:
 +
 +<file>
 ++OK Logging out.
 +Connection closed by foreign host.</file>
 +
 +==== Тестируем IMAP ====
 +
 +Можно для проверки пработоспособности IMAP соединения использовать тот же mutt:
 +
 +<code>mutt -f imap://victor@example.com@localhost</code>
 +
 +А можно, непосредственно в терминале создать и проверить IMAP соединение, применяя собственные команды IMAP:
 +
 +<code>telnet localhost imap2</code>
 +
 +Увидим ответ:
 +
 +<file>Trying 127.0.0.1...
 +Connected to localhost.
 +Escape character is '^]'.
 +* OK Dovecot ready.</file>
 +
 +IMAP команд всегда начинаются с номера и ответа на эту команду с тем же номером. Таким образом, следующие команды должны быть введены с номером в начале каждой строки. Войти с именем пользователя и паролем:
 +<code>1 login victor@example.com 12345</code>
 +
 +Dovecot ответит так:
 +
 +<file>1 OK Logged in.</file>
 +
 +Укажем Dovecot команду list для просмотра почтового ящика John's:
 +
 +<code>2 list "" "*"</code>
 +
 +Ответ на команду list:
 +
 +<file>* LIST (\HasNoChildren) "." "INBOX"</file>
 +
 +<code>2 OK List completed.</code>
 +Выберем ваш inbox:
 +
 +<code>3 select "INBOX"</code>
 +
 +
 +Dovecot дает вам все виды информации об этом ящике:
 +
 +<file>
 +* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
 +* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
 +* 1 EXISTS
 +* 0 RECENT
 +* OK [UIDVALIDITY 1180039205] UIDs valid
 +* OK [UIDNEXT 3] Predicted next UID
 +3 OK [READ-WRITE] Select completed.</file>
 +
 +Вы видите, что одно письмо уже существует. Загрузить его:
 +
 +<code>4 fetch 1 all</code>
 +
 +IMAP выдаст вам основную информацию по электронной почте:
 +
 +<file>* 1 FETCH (FLAGS (\Seen) INTERNALDATE .........
 +4 OK Fetch completed.</file>
 +
 +To read the actual mail body you need to fetch it explicitly:
 +
 +Для чтения содержимого (body) письма, можно получить командой:
 +
 +<code>5 fetch 1 body[]</code>
 +Вот,что мы увидим:
 +
 +<file>* 1 FETCH (BODY[] {474}
 +Return-Path: <bos@example.com>
 +X-Original-To: victor@example.com
 +Delivered-To: victor@example.com
 +Received: from example.com (localhost [127.0.0.1])
 +        by ... (Postfix) with ESMTP id 692DF379C7
 +        for <victor@example.com>; Fri, 18 May 2007 22:59:31 +0200 (CEST)
 +Message-Id: <...>
 +Date: Fri, 18 May 2007 22:59:31 +0200 (CEST)
 +From: bos@example.com
 +To: undisclosed-recipients:;
 +
 +Привет от босса!
 +)
 +5 OK Fetch completed.</file>
 +
 +Отсоединимся от сервера:
 +
 +<code>6 logout</code>
 +
 +Dovecot попрощается с вами:
 +
 +<file>* BYE Logging out
 +6 OK Logout completed.
 +Connection closed by foreign host.</file>
 +
 +Итак POP3 и IMAP работают. Теперь Вы можете использовать любую почтовую программу, например, как KMail, Evolution или Thunderbird и настроить через POP3 или IMAP свой почтовый аккаунт.
 +
 +Для проверки правильности работы зашифрованных соединений, можно использовать тот же mutt (обратите внимание на отличие всего на одну букву, т.е. на то, что теперь команда выглядит как- imap**S** ):
 +
 +<code>mutt -f imaps://victor@example.com@localhost</code>
 +
 +При использовании других почтовых программ, надо помнить, что именем пользователя- будет являться адрес электронной почты, (в нашем случае:- "victor@example.com) и пароль: '12345" (то же для нашего случая).
 +
 +Таким образом, Вы можете применять все ниже перечисленные виды соединений:
 +
 +    * POP3
 +    * IMAP
 +    * POP3 with TLS/SSL enabled
 +    * IMAP with TLS/SSL enabled
 +
 +====  Создание Сертификата и ключа ====
 +
 +В данной конфигурации используется сертификат из системы по умолчанию.
 +Используя приведенную ниже команду, вы можете создать свой собственный сертификат с соответствующим именем вашего сервера:
 +
 +<code>openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/dovecot.pem \
 +    -keyout /etc/ssl/private/dovecot.pem</code>
 +
 +Сертификат и ключ будут созданы, как только вы ответите на несколько вопросов:
 +
 +<file>Generating a 1024 bit RSA private key
 +.........++++++
 +............................++++++
 +writing new private key to '/etc/ssl/certs/dovecot.pem'
 +-----
 +You are about to be asked to enter information that will be incorporated
 +into your certificate request.
 +What you are about to enter is what is called a Distinguished Name or a DN.
 +There are quite a few fields but you can leave some blank
 +For some fields there will be a default value,
 +If you enter '.', the field will be left blank.
 +-----
 +Country Name (2 letter code) [AU]:RU
 +State or Province Name (full name) [Some-State]:Liski
 +Locality Name (eg, city) []:Liski
 +Organization Name (eg, company) [Internet Widgits Pty Ltd]:liski.net
 +Organizational Unit Name (eg, section) []:
 +Common Name (eg, YOUR name) []:mailtest.liski.net
 +Email Address []:postmaster@liski.net</file>
 +
 +Конечно, вы должны заполнить эту форму, вашей собственной информацией. Самым важным параметром является строка "Common Name..", которая должна содержать полное имя вашего почтового сервера.
 +Этот сертификат будет действительным в течение 10 лет (3650 дней) - вы, можете изменить этот период, как вам нужно.
 +
 +Не забудьте установить разрешение на частный ключ, чтобы исключить несанкционированный доступ к этому файлу:
 +
 +<code>chmod o= /etc/ssl/private/dovecot.pem</code>
 +
 +===== Шаг 9: Аутентификация SMTP =====
 +
 +Пока обойдемся без этого параметра (оформлю попозже)
 +
 +===== Шаг 10: Доступ к серверу, через "Squirrelmail" и "Roundcube", как Webmail клиентов. =====
 +
 +В репозитариях Ubuntu представлены пакеты "Squirrelmail" и "Roundcube".
 +
 +Это Webmail- IMAP клиенты, оба используют популярные web браузеры,легко настраиваются и обеспечивает полную функциональность,
 +
 +которую можно ожидать от почтового клиента, включая поддержку MIME, адресной книги, работают с почтовыми папками и фильтрами. Оба поддерживают русский язык.
 +
 +Я установил и настроил оба. Какой из них лучше, решать Вам.
 +
 +Устанавливал, чрез Synaptic. Можно из командной строки:
 +
 +<code>aptitude install squirrelmail</code>
 +
 +<code>aptitude install roundcube</code>
 +
 +Настройка свелась к созданию симлинков, (мягких ссылок) в папку /var/www.
 +
 +<code>ln -s /usr//share/squirrelmail/ /var/www/</code>
 +
 +<code>ln -s /usr/share/roundcube/ /var/www/</code>
 +
 +и назначению прав на них:
 +
 +<code>chown -R www-data:www-data /var/www/*</code>
 +
 +[[http://localhost/squirrelmail/src/login.php]]
 +
 +{{:squirrelmail.png|}}
 +
 +[[http://localhost/roundcube/]]
 +
 +{{:roundcube.png|}}
 +
 +===== Шаг 11: Альтернативный Шагу № 3. Создаем таблицы для нашей базы данных с помощью программы Phpmyadmin. =====
 +
 +Выше было показано, как находясь в командной оболочке  MySQL можно создавать таблицы.
 +
 +В этом разделе я покажу вам, как их можно создать с помощью программы Phpmyadmin.
 +
 +<note>Вы можете использовать любой из этих вариантов!</note>
 + 
 +{{:mailserver1.png|}}
 +
 +  * Запустив  Phpmyadmin и выбрав базу mailserver, нажимаем на вкладку <key>SQL</key>
 +
 +{{:mailserver2.png|}}
 +
 +  * В это окно (см. рисунок ниже), внесем путем копирования все строки, показанные за рисунком.
 +
 +Дамп базы данных **mailserver**:
 +<file>
 +CREATE TABLE `virtual_domains` (
 +id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
 +name VARCHAR(50) NOT NULL
 +) ENGINE = InnoDB;
 +
 +CREATE TABLE `virtual_users` (
 +id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
 +domain_id INT(11) NOT NULL,
 +user VARCHAR(40) NOT NULL,
 +password VARCHAR(32) NOT NULL,
 +CONSTRAINT UNIQUE_EMAIL UNIQUE (domain_id,user),
 +FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
 +) ENGINE = InnoDB;
 +
 +CREATE TABLE `virtual_aliases` (
 +id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
 +domain_id INT(11) NOT NULL,
 +source VARCHAR(40) NOT NULL,
 +destination VARCHAR(80) NOT NULL,
 +FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
 +) ENGINE = InnoDB;
 +
 +CREATE VIEW view_users AS
 +SELECT CONCAT(virtual_users.user, '@', virtual_domains.name) AS email,
 +    virtual_users.password
 +FROM virtual_users
 +LEFT JOIN virtual_domains ON virtual_users.domain_id=virtual_domains.id;
 +
 +CREATE VIEW view_aliases AS
 +SELECT CONCAT(virtual_aliases.source, '@', virtual_domains.name) AS email,
 +       destination
 +FROM virtual_aliases
 +LEFT JOIN virtual_domains ON virtual_aliases.domain_id=virtual_domains.id;
 +</file>
 +
 +{{:mailserver3.png|}}
 +
 +{{:mailserver4.png|}}
 +
 +{{:mailserver5.png|}}
 +
 +===== Шаг 12. Установка GRSoft Mail Manager, для управления базой данных. =====
 +
 +Теперь установим web-интерфейс для управления базой данных: **GRSoft Mail Manager (current version 1.7)**
 +Сама программа и руководство по установке находится на сайте:
 +
 +[[http://www.grs-service.ch/pub/grs_mminstallation.html]]
 +
 +На данное время, я загрузил следующую версию:
 +
 +[[http://www.grs-service.ch/pub/grs_mailmgr_v1_7.tgz]]
 +
 +Разархивируем, копируем в папку /var/www/mailmaster
 +
 +Применяем на неё команду:
 +
 +<code>chown -R www-data:www-data /var/www/mailmaster/*</code>
 +
 +И в браузере запускаем:
 +
 +[[http://localhost/mailmaster/install.php]]
 +
 +{{:mailmaster1.png|}}
 +
 +Рис. 1
 +
 +{{:mailmaster2.png|}}
 +
 +Рис. 2
 +
 +{{:mailmaster3.png|}}
 +
 +Рис. 3
 +
 +{{:mailmaster4.png|}}
 +
 +Рис. 4
 +
 +{{:mailmaster5.png|}}
 +
 +Рис. 5
 +
 +{{:mailmaster6.png|}}
 +
 +Рис. 6
 +
 +{{:mailmaster7.png|}}
 +
 +Рис. 7
 +
 +{{:mailmaster8.png|}}
 +
 +Рис. 8
 +
 +
 +{{:mailmaster12.png|}}
 +
 +Рис. 9
 +
 +{{:mailmaster9.png|}}
 +
 +Рис. 10
 +
 +{{:mailmaster10.png|}}
 +
 +Рис. 11
 +
 +{{:mailmaster11.png|}}
 +
 +Рис. 12
 +
 +{{:mailmaster14.png|}}
 +
 +Рис. 13
 +
 +{{:mailmaster1.png|}}
 +
 +Таким образом мы можем полностью управлять нашей базай данных через Web интерфейс.
 +
 +Добавлять, удалять и редактировать данные по всем позициям.
  
webmail.txt · Последнее изменение: 2026/06/11 12:15 (внешнее изменение)