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

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


webmail

Часть 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:

sudo su
sudo passwd root

Сделаем ссылочку на bash на sh:

ln -sf /bin/bash /bin/sh

Уберем apparmor (чего то, с ним пока не все ладится!)

/etc/init.d/apparmor stop
update-rc.d -f apparmor remove

Проверим все ли пакеты установлены у нас, для почтового Mail-сервера.

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

Шаг 2: Создаем базу данных

  • Если у Вас есть опыт в использовании MySQL, то вы можете вводить SQL команды непосредственно в оболочке 'MySQL', то есть, в её командной строке.
  • Кроме того, вы можете так же использовать программу PhpMyAdmin, введя в браузере адрес: http://localhost/phpmyadmin. Команды те же, вводить их надо в закладке «SQL».
  • Дополнительно напомню, что при установке пакета mysql-server, система попросила вас ввести пароль для пользователя «root».
  • Как раз, этот пароль мы и будем применять для для администрирования MySQL сервера. Как раз, его и надо ввести при запуске программы PhpMyAdmin.

Итак, для работы данной конфигурации, мы с вами создадим базу данных с именем mailserver.

Для работы конкретно с этой базой, мы создадим пользователя mailuser с определенными правами и паролем mailuser2009.

Естественно, в реальной конфигурации вы можете и должны использовать свои собственные имена и пароли!

:!: Работу проводим в Терминале, вводя необходимые команды.

:!: Здесь необходимо вводить пароль пользователя «root» для MySQL сервера.

Итак команда для создания базу данных 'mailserver', выглядит, так:

mysqladmin -p create mailserver

Соединимся с вновь созданной базой, для этого выполним две команды:

mysql -p
USE mailserver

На экране Терминала, это будет выглядеть так:

:!:Напомню еще раз, что для запуска команды mysql -p, необходим пароль root для MySQL.

:!:Когда вы увидите приглашение в виде: mysql>, то это значит, что вы находитесь в оболочке MySQL, и можете вводить команды.

С помощью следующей команды, мы создадим пользователя mailuser и предоставим ему определенные права:

mysql>
GRANT SELECT ON mailserver.*
TO mailuser@localhost
IDENTIFIED BY 'mailuser2009';
exit

<note>Эта команда создаст пользователя с именем «mailuser», который имеет права только на выбор и чтение данных из базы «mailserver». Он не может изменять ее. Обычно это делается в целях безопасности. Если вы хотите добавить или изменить данные в базе, то используйте имя пользователя 'root', или создать еще одну учетную запись для этой цели. Считаем пароль'mailuser2007` учебным !</note>

Шаг 3: Создаем таблицы для базы данных

<note> Cмотрите внизу статьи альтернативный способ создания тавлиц с помощью программы phpmyadmin!</note>

Внутри недавно созданной базы данных вам необходимо создать таблицы, которые хранят информацию о доменах, и переадресации почтовых ящиков и о пользователях. Подключаемся к MySQL и снова выберем нашу базу 'mailserver:

mysql -p mailserver

Увидев строку приглашения mysql>, создаем таблицу для виртуальных доменов, выполнив следующую команду:

mysql>
CREATE TABLE `virtual_domains` (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL
) ENGINE = InnoDB;

Следующая таблица содержит данные о фактических учетных записях пользователей.

Каждый пользователь имеет имя пользователя и пароль. Они используется для доступа к почтовому ящику по POP3 или IMAP, при входе в веб-службы или для отправки почты, на ящики, даже, если они не находятся в вашей локальной сети.

Так как пользователи, как правило, легко забывают, свои адреса электронной почты, то обычно используются реальные имена пользователей.

Создаем таблицу пользователей:

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;
Опция 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:

gedit /etc/postfix/mysql-virtual-mailbox-domains.cf

В появившееся пустое окно вводим следующие строки:

user = mailuser
password = mailuser2009
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'

Выполним команду для конфигурирования файла /etc/postfix/main.cfg:

postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

(:!: С помощью команды postconf-е удобно добавлять конфигурационные строки в файл /etc/postfix/main.cf. Эта команда также активирует новый параметр мгновенно, поэтому вам не придется перезагружать Postfix.)

Откроем базу данных mailserver для занесения в созданные таблицы первичных данных:

mysql -p mailserver

Увидим строку приглашения и введем данные для таблицы virtual_domains:

id name
1 example.com
2 liski.net
mysql>
USE mailserver
INSERT INTO virtual_domains (id, name) VALUES (1, 'example.com');
INSERT INTO virtual_domains (id, name) VALUES (2, 'liski.net');
exit

проверим в Терминале, введя по очереди две строки:

postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
postmap -q liski.net mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

Если вы увидели ответ на каждую команду цифру '1', то значит все правильно.

virtual_mailbox_maps

Создадим пользователя и группу vmail:

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m

Внесем сведения о них в фаил /etc/postfix/main.cfg:

postconf -e virtual_uid_maps=static:5000
postconf -e virtual_gid_maps=static:5000

Точно так же, введем данные в таблицу virtual_users:

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'));

Проверим, все ли мы сделали правильно, здесь же в базе введем следующую команду:

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;

Вывод увидим в виде таблицы, представленной ниже:

+--------------------+
| email              |
+--------------------+
| alex@example.com   | 
| victor@example.com | 
+--------------------+
2 rows in set (0.00 sec)

Еще раз:

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;

Увидим следующую таблицу:

+--------------------+----------------------------------+
| email              | password                         |
+--------------------+----------------------------------+
| victor@example.com | 827ccb0eea8a706c4c34a16891f84e7b | 
| alex@example.com   | 827ccb0eea8a706c4c34a16891f84e7b | 
+--------------------+----------------------------------+
2 rows in set (0.00 sec)

Создадим таблицу view_users (если вы успели выйти из базы данных, то повторите команду:

mysql -p mailserver

mysql>
USE mailserver
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;

проверка:

mysql> SELECT * FROM view_users;

Последует следующий вывод:

+--------------------+----------------------------------+
| email              | password                         |
+--------------------+----------------------------------+
| victor@example.com | 827ccb0eea8a706c4c34a16891f84e7b | 
| alex@example.com   | 827ccb0eea8a706c4c34a16891f84e7b | 
+--------------------+----------------------------------+
2 rows in set (0.00 sec)

mysql>

Выходим из оболочки базы данных, с помощью команды quit:

quit

И создаем файл /etc/postfix/mysql-virtual-mailbox-maps.cf:

gedit /etc/postfix/mysql-virtual-mailbox-maps.cf

Вставляем в пустое окно следующий текст:

user = mailuser
password = mailuser2009
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM view_users WHERE email='%s'

Сделаем постконфигурацию postfix:

postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

проверка в Терминале:

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

должны увидеть цифры «1» и еще раз «1».

virtual_alias_maps

Заполним таблицу virtual_aliases (вновь повторяем те же команды, чтобы зайти в Mysql):

mysql -p mailserver

Вносим следующие данные:

——————————-
1 1 victor victor@example.com
2 1 victor victor@gmail.com
INSERT INTO virtual_aliases (id, domain_id, source, destination)
VALUES (1, 1, 'victor', 'victor@example.com'),
       (2, 1, 'victor', 'victor@gmail.com');
mysql>

По такой же схеме создаем и проверяем таблицу view_aliases:

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;

проверка:

mysql> SELECT * FROM view_aliases;
+--------------------+---------------------+
| email              | destination         |
+--------------------+---------------------+
| victor@example.com | victor@example.com  | 
| victor@example.com | victor@gmail.com | 
+--------------------+---------------------+
2 rows in set (0.00 sec)

mysql>

Выходим из MySQL

quit

И создаем файл /etc/postfix/mysql-virtual-alias-maps.cf:

gedit /etc/postfix/mysql-virtual-alias-maps.cf
user = mailuser
password = mailuser2009
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM view_aliases WHERE email='%s'

проверим:

postmap -q victor@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf

увидим:

victor@example.com,victor@gmail.com

root@example:/home/victor#

Создаем файл /etc/postfix/mysql-email2email.cf:

gedit /etc/postfix/mysql-email2email.cf
user = mailuser
password = mailuser2009
hosts = 127.0.0.1
dbname = mailserver
query = SELECT email FROM view_users WHERE email='%s'

проверка:

postmap -q victor@example.com mysql:/etc/postfix/mysql-email2email.cf

увидим:

victor@example.com
root@example:/home/victor#

Чтобы Postfix знал где искать эти пути, добавим следующую строку в файл main.cf:

postconf -e virtual_alias_maps=mysql:/etc/postfix/mysql-virtual-alias-maps.cf,mysql:/etc/postfix/mysql-email2email.cf

Разрешаем права

chgrp postfix /etc/postfix/mysql-*.cf
chmod u=rw,g=r,o= /etc/postfix/mysql-*.cf

Шаг 5: Доставка писем через Dovecot LDA

В Postfix входит агент доставки почты (MDA), их называют «виртуальные», как правило, они доставляет письма на виртуальные почтовые ящики.

Но Dovecot поставляется с собственным агентом доставки. Этот агент называется «Dovecot LDA», который предоставляет более широкую функциональность.

Для того, чтобы использовать этого агента Postfix, нам придется добавить следующую строку в файл: /etc/postfix/master.cf:

gedit /etc/postfix/master.cf
dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}

<note>Перед второй строкой обязательно должно стоять два пробела, другое Postfix не понимает</note>

Перезапустим Postfix:

postfix reload

а так же для активизации службы виртуальной доставки добавим две строчки в конфигурационный файл Postfix /etc/postfix/main.cf:

postconf -e virtual_transport=dovecot
postconf -e dovecot_destination_recipient_limit=1

До сих пор непосредственно Postfix передавал входящие письма для виртуальных пользователей из /usr/lib/dovecot/deliver программы.

Теперь настало время настройки службы Dovecot.

Шаг 6. Настраиваем Dovecot

Настроим Dovecot, для работы со службами POP3 и IMAP.

Конфигурационные файлы для Dovecot находится в папке /etc/dovecot. Начнём настройку с редактирования главного конфигурационного файла:

gedit /etc/dovecot/dovecot.conf

Находим и проверяем строчку с протоколами, она должна выглядеть следующим образом:

:!: искать можно штатным поиском редактора, набирая фразу оканчивающуюся на знак 'равно'. Например, для поиска показанной ниже строки, я в поиске набрал фразу:- protocols =

protocols = imap imaps pop3 pop3s

Следующая строка показывает, что мы выключим работу сервера Dovecot, с применением шифрования SSL.

Вы можете после проверки работы всех служб включить этот параметр поставив слово 'yes'!

disable_plaintext_auth = no

Вы можете после проверки работы всех служб, включить этот параметр поставив слово 'yes'.

Следующая строка определяет очень важный параметр, путь к расположению почтовых ящиков пользователей:

mail_location = maildir:/home/vmail/%d/%n/Maildir

Вам должно быть понятно, что пользователи найдут свои почтовые ящики в папках: /home/vmail/DOMAIN/USER/, и что они будут в формате Maildir…

Следующая строка показывает, что внутри ящика папки будут начинаться с '.' , то есть, будут невидимы:

namespace private {
    separator = .
    prefix = INBOX.
    inbox = yes
}

Следующая строка определяет механизм аутентификации plain login :

mechanisms = plain login

Далее находим и меняем значение passdb sql следующим образом:

passdb sql {
    args = /etc/dovecot/dovecot-sql.conf
}

Эта строка показывает Dovecot, что пароли хранятся в базе данных MySQL.

userdb static {
    args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
}

Находим и правим следующую секцию, она должна выглядеть так:

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
    }
}

Показано, что «chroot» директория для Postfix находится в каталоге /var/spool/postfix. Это является хорошей мерой безопасности, так что злоумышленник не сможет получить доступ к папке /etc/passwd/

И финальные строки, которые скажут Dovecot о протоколе LDA ( local delivery agent).

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
}

:!: Помните, что эта конфигурация учебная, поэтому в настоящей конфигурации, в email адресе: postmaster@example.com, надо будет использовать реальный домен.

Настраиваем конфигурационный файл dovecot-sql.conf.

Открываем в текстовом редакторе файл: /etc/dovecot/dovecot-sql.conf находим сточки и меняем их значения на нужные нам:

gedit /etc/dovecot/dovecot-sql.conf

Ниже четыре строки, показано, как они должны выглядеть, находим их и исправляем. Можно использовать кнопку <key>Поиск</key> в редакторе, ищем начальные фразы, например- driver =….:

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';

Перезапускаем Dovecot:

/etc/init.d/dovecot restart

Перед проведением тестирования сервера электронной почты, необходимо присвоить определенные права на файл /etc/dovecot/dovecot.conf, чтобы пользователь vmail, мог иметь доступ к этому файлу.

Выполним следующие команды:

chgrp vmail /etc/dovecot/dovecot.conf
chmod g+r /etc/dovecot/dovecot.conf

Все!

Шаг 7. Проверяем работоспособность Dovecot.

Проверяем правильность работы, смотрим mail.log, в конце файла должны увидеть следующие строки:

gedit /var/log/mail.log
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)

Шаг 8. Тестируем нашу почту,через TELNET

Поднимаем SMTP сесию через telnet.

В «Терминале» пишем команду и нажимаем клавишу <key>Enter</key>:

telnet localhost smtp

Сервер должен ответить:

Trying 127.0.0.1...
Connected to mailserver.example.com.
Escape character is '^]'.
220 mailserver.example.com ESMTP Postfix (Ubuntu)

Пишем:

ehlo example.com

Видим:

250-mailserver.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Пишем:

mail from:<boss@example.com>

Видим:

250 2.1.0 Ok

Пишем:

rcpt to:<victor@example.com>

Видим:

250 2.1.5 Ok

Пишем:

data

Видим:

354 End data with <CR><LF>.<CR><LF>

Пишем («.»- точка обязательно):

Привет от боса!
.
250 2.0.0 Ok: queued as 5859920C231
quit

Видим:

221 2.0.0 Bye
Connection closed by foreign host.
root@mailserver:/home/victor#

Проверим логи.

Вновь вернемся к лог файлу /var/log/mail.log . You should see something similar to:

можно так:

gedit /var/log/mail.log

В конце файла должны увидеть следующие строки:

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]

Проверим наличие почтового ящика, введем в терминале команду:

cd /home/vmail/example.com/victor
find
root@mail:/home/victor# cd /home/vmail/example.com/victor
root@mail:/home/vmail/example.com/victor# find

Теперь мы должны увидеть все папки нашего почтового ящика:

.
./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#

Checking the user's maildir

Там же находится и отправленное письмо, прочитаем его с помощью команды mutt:

There sits the email. Try to read the mail with the «mutt» program:

mutt -f /home/vmail/example.com/victor/Maildir/

В появившемся окне 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):

From: boss@example.com
To: undisclosed-recipients: ;

Привет от босса.

Таким образом, письмо прибыло на акаунт Виктор (Victor`s).

:!: Нажмите клавишу <key>q</key>, чтобы выйти из mutt.

Проверяем работу POP3

Давайте попробуем создать POP3 соединение и получить электронную почту (email) для Victora, введем команду:

telnet localhost pop3

На что сервер отвечает:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.

Логинимся как Victor:

user victor@example.com

Видим ответ от сервера:

+OK

Передаем пароль:

pass 12345

Если пароль правильный, то сервер напишет:

+OK Logged in.

Просмотрим почту для Victor с помощью команды list:

list

Dovecot скажет вам, что есть одно письмо в почтовом ящике:

+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:;

Привет от боса!
.

Закроем соединение с POP3 сервером:

quit

Сервер ответит:

+OK Logging out.
Connection closed by foreign host.

Тестируем IMAP

Можно для проверки пработоспособности IMAP соединения использовать тот же mutt:

mutt -f imap://victor@example.com@localhost

А можно, непосредственно в терминале создать и проверить IMAP соединение, применяя собственные команды IMAP:

telnet localhost imap2

Увидим ответ:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK Dovecot ready.

IMAP команд всегда начинаются с номера и ответа на эту команду с тем же номером. Таким образом, следующие команды должны быть введены с номером в начале каждой строки. Войти с именем пользователя и паролем:

1 login victor@example.com 12345

Dovecot ответит так:

1 OK Logged in.

Укажем Dovecot команду list для просмотра почтового ящика John's:

2 list "" "*"

Ответ на команду list:

* LIST (\HasNoChildren) "." "INBOX"
2 OK List completed.

Выберем ваш inbox:

3 select "INBOX"

Dovecot дает вам все виды информации об этом ящике:

* 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.

Вы видите, что одно письмо уже существует. Загрузить его:

4 fetch 1 all

IMAP выдаст вам основную информацию по электронной почте:

* 1 FETCH (FLAGS (\Seen) INTERNALDATE .........
4 OK Fetch completed.

To read the actual mail body you need to fetch it explicitly:

Для чтения содержимого (body) письма, можно получить командой:

5 fetch 1 body[]

Вот,что мы увидим:

* 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.

Отсоединимся от сервера:

6 logout

Dovecot попрощается с вами:

* BYE Logging out
6 OK Logout completed.
Connection closed by foreign host.

Итак POP3 и IMAP работают. Теперь Вы можете использовать любую почтовую программу, например, как KMail, Evolution или Thunderbird и настроить через POP3 или IMAP свой почтовый аккаунт.

Для проверки правильности работы зашифрованных соединений, можно использовать тот же mutt (обратите внимание на отличие всего на одну букву, т.е. на то, что теперь команда выглядит как- imapS ):

mutt -f imaps://victor@example.com@localhost

При использовании других почтовых программ, надо помнить, что именем пользователя- будет являться адрес электронной почты, (в нашем случае:- «victor@example.com) и пароль: '12345» (то же для нашего случая).

Таким образом, Вы можете применять все ниже перечисленные виды соединений:

  • POP3
  • IMAP
  • POP3 with TLS/SSL enabled
  • IMAP with TLS/SSL enabled

Создание Сертификата и ключа

В данной конфигурации используется сертификат из системы по умолчанию. Используя приведенную ниже команду, вы можете создать свой собственный сертификат с соответствующим именем вашего сервера:

openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/dovecot.pem \
    -keyout /etc/ssl/private/dovecot.pem

Сертификат и ключ будут созданы, как только вы ответите на несколько вопросов:

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

Конечно, вы должны заполнить эту форму, вашей собственной информацией. Самым важным параметром является строка «Common Name..», которая должна содержать полное имя вашего почтового сервера. Этот сертификат будет действительным в течение 10 лет (3650 дней) - вы, можете изменить этот период, как вам нужно.

Не забудьте установить разрешение на частный ключ, чтобы исключить несанкционированный доступ к этому файлу:

chmod o= /etc/ssl/private/dovecot.pem

Шаг 9: Аутентификация SMTP

Пока обойдемся без этого параметра (оформлю попозже)

Шаг 10: Доступ к серверу, через "Squirrelmail" и "Roundcube", как Webmail клиентов.

В репозитариях Ubuntu представлены пакеты «Squirrelmail» и «Roundcube».

Это Webmail- IMAP клиенты, оба используют популярные web браузеры,легко настраиваются и обеспечивает полную функциональность,

которую можно ожидать от почтового клиента, включая поддержку MIME, адресной книги, работают с почтовыми папками и фильтрами. Оба поддерживают русский язык.

Я установил и настроил оба. Какой из них лучше, решать Вам.

Устанавливал, чрез Synaptic. Можно из командной строки:

aptitude install squirrelmail
aptitude install roundcube

Настройка свелась к созданию симлинков, (мягких ссылок) в папку /var/www.

ln -s /usr//share/squirrelmail/ /var/www/
ln -s /usr/share/roundcube/ /var/www/

и назначению прав на них:

chown -R www-data:www-data /var/www/*

http://localhost/squirrelmail/src/login.php

http://localhost/roundcube/

Шаг 11: Альтернативный Шагу № 3. Создаем таблицы для нашей базы данных с помощью программы Phpmyadmin.

Выше было показано, как находясь в командной оболочке MySQL можно создавать таблицы.

В этом разделе я покажу вам, как их можно создать с помощью программы Phpmyadmin.

<note>Вы можете использовать любой из этих вариантов!</note>

  • Запустив Phpmyadmin и выбрав базу mailserver, нажимаем на вкладку <key>SQL</key>

  • В это окно (см. рисунок ниже), внесем путем копирования все строки, показанные за рисунком.

Дамп базы данных mailserver:

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;

Шаг 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

Применяем на неё команду:

chown -R www-data:www-data /var/www/mailmaster/*

И в браузере запускаем:

http://localhost/mailmaster/install.php

Рис. 1

Рис. 2

Рис. 3

Рис. 4

Рис. 5

Рис. 6

Рис. 7

Рис. 8

Рис. 9

Рис. 10

Рис. 11

Рис. 12

Рис. 13

Таким образом мы можем полностью управлять нашей базай данных через Web интерфейс.

Добавлять, удалять и редактировать данные по всем позициям.

webmail.txt · Последнее изменение: 2022/02/17 18:55 (внешнее изменение)