В первых двух статьях, я рассказал как установить 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 сервер уже установлен.
Почтовый сервер, конфигурация которого предлагается в этом руководстве, позволит вам и вашим пользователям использовать следующие функции:
Используя этот документ вы можете просто «прокопипастить» приведенные в нем команды. Почтовый сервер будет работать. Но для реальной работы, Вам надо будет использовать свои реальные имена.
Поэтому я попытался своими комментариями облегчить Вам решение этой задачи. Для этого, от Вас потребуются аккуратность и базовые знания в следующих областях:
В начале статьи я приведу примеры настройки конфигурации сервера через консоль. В конце статьи два раздела (Шаг. 11 и 12) посвящены настройкам через WEB интерфейс.
Если, не активирован 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
Итак, для работы данной конфигурации, мы с вами создадим базу данных с именем 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>
<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 |
Соответственно их почтовые адреса выглядят следующим образом :
И пример для таблицы виртуальных псевдонимов:
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-команд.
Но важным является то, что вы теперь понимаете схему таблиц базы данных.
В реальных условиях, для управления почтовыми ящиками, прменяются интернет-средства администрирования, о которых будет сказано ниже.
Создаем и сразу вводим содержание в файл /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', то значит все правильно.
Создадим пользователя и группу 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_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
В 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.
Настроим 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, надо будет использовать реальный домен.
Открываем в текстовом редакторе файл: /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
Все!
Проверяем правильность работы, смотрим 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)
Поднимаем 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 соединение и получить электронную почту (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 соединения использовать тот же 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» (то же для нашего случая).
Таким образом, Вы можете применять все ниже перечисленные виды соединений:
В данной конфигурации используется сертификат из системы по умолчанию. Используя приведенную ниже команду, вы можете создать свой собственный сертификат с соответствующим именем вашего сервера:
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
Пока обойдемся без этого параметра (оформлю попозже)
В репозитариях 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/*
Выше было показано, как находясь в командной оболочке MySQL можно создавать таблицы.
В этом разделе я покажу вам, как их можно создать с помощью программы Phpmyadmin.
<note>Вы можете использовать любой из этих вариантов!</note>
Дамп базы данных 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;
Теперь установим 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 интерфейс.
Добавлять, удалять и редактировать данные по всем позициям.