Тест S5 Box

Вот примерно так работает модуль в реале...

Почтовый сервер Postfix, установка

Postfix logo

Данное руководство описывает установку почтового сервера Postfix в связке с dovecot и базой данных mysql для хранения данных. По окончанию настройки мы получим почтовый сервер с поддержкой SMTP, POP3, IMAP, поддержку SSL, TLS, работу с виртуальными доменами. Так же данное руководство не является исчерпывающим, и может быть трудным для понимания новичкам, так как описано конкретно как настроить сервисы, но не описано как оно работает и так далее. Конфигурация была проверена и отлично работает на серверах с установленным Linux Ubuntu и Debian GNU Linux, но я думаю она подойдет и для других дистрибутивов. Описание установки приведено на примере Ubuntu, все пакеты взяты из стандартных репозиториев.

При настройке нашего нового сервиса я буду использовать примеры команд, обратите внимание на интерпритатор, их будет использоваться два, обычная командная строка (bash) и mysql, выглядит это так:
bash: $>
mysql: mysql>
Так же все действия производятся от имени пользователя root. На этом вступительную часть можно закончить и давайте приступим к установке и настройке нашего почтовика.


Для начала установим все необходимые пакеты:

Код:

aptitude install postfix-mysql mysql-server dovecot-pop3d dovecot-imapd openssl

 

Так же в дальнейшем вам может понадобится phpmyadmin и простой веб интерфейс squirrelmail для работы с почтовым ящиком, установить все это можно командой

Код:

aptitude install phpmyadmin squirrelmail 

 Код:

mysql>
create database mailserver;
mysql>
grant all on mailserver.* to mailuser@localhost identified by 'mailuser2007';
exit

Затем создайте таблицы в базе данных

Код:

mysql>
CREATE TABLE `virtual_domains` (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL
) ENGINE = InnoDB;
mysql>
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;
mysql>
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;


Дальше необходимо создать файлы конфигурации для Postfix'a с информацией о базе данных. Создадим файл /etc/postfix/mysql-virtual-mailbox-domains.cf и впишем в него следующее содержание

Код:

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

Этот файл содержит запрос к базе данных из которого сервер извлекает виртуальный домен.

Теперь внесем изменения в конфигурацию самого сервера Postfix

Код:

$>
postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
Внесем в нашу базу данных запись о виртуальном домене, в примере указан домен example.com

Код:

$>
mysql -p mailserver
mysql>
INSERT INTO virtual_domains (id, name) VALUES (1, 'example.com');
exit

Венитесь в обратно в шелл bash и проверьте правильность настроек виртуального домена командой, не забудьте сменить домен с example.com на свой.

Код:

$>
postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

Вы должны увидеть цифру 1 если все правильно настроено.

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

$>

groupadd -g 5000 vmail

$>

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

Внесем изменения в конфигурацию Postfix'a

Код:

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

Создадим первый тестовый почтовый ящик, например Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. с паролем summersun
Код:

mysql>
INSERT INTO virtual_users (id, domain_id, user, password)
VALUES (1, 1, 'john', MD5('summersun'));




Потом нам необходимо создать view в базе данных для нормальной работы сервера Postfix
Код:
mysql>
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 |
+------------------+----------------------------------+
| Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. | 14cbfb845af1f030e372b1cb9275e6dd |
+------------------+----------------------------------+
Создадим еще один файл конфигурации для Postfix'a в котором укажем даные для работы с почтовыми ящиками нащих юзеров, создайте файл /etc/postfix/mysql-virtual-mailbox-maps.cf и впишите в него это
Код:
user = mailuser
password = mailuser2007
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 Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

Вы должны увидеть цифру 1 если все правильно настроено.
Настроим альясы (для пересылки почты с одного ящика на другой, или с нескольких на один)
Добавим в базу данных тестовый алиас для нашего польователя Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра., вся почта пришедшая на его ящик будет дополнительно пересылаться на ящик Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Код:
mysql>    
INSERT INTO virtual_aliases (id, domain_id, source, destination)
VALUES (1, 1, 'john', 'Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.'),
(2, 1, 'john', 'Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.');

Создадим view для алиасов по аналогии с view для пользователей
Код:
mysql>
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 |
+------------------+-------------------+
| Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. | Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. |
| Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. | Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. |
+------------------+-------------------+
Дополним конфигурацию Postfix, создайте файл /etc/postfix/mysql-virtual-alias-maps.cf и впишите в него
Код:
user = mailuser
password = mailuser2007
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM view_aliases WHERE email='%s'

Проверим правильность настроек
Код:
$>
postmap -q Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. mysql:/etc/postfix/mysql-virtual-alias-maps.cf

Вы увидите это
Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.,Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Создадим следующий файл, /etc/postfix/mysql-email2email.cf впишем в него
Код:
user = mailuser
password = mailuser2007
hosts = 127.0.0.1
dbname = mailserver
query = SELECT email FROM view_users WHERE email='%s'
Запишем настройки в главный файл конфига Postfix
Код:
$>
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

Далее настроим dovecot в качестве локального агента доставки писем, для этого отредактируйте файл /etc/postfix/master.cf добавив в конец это
Код:
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}

Перезагрузите Postfix командой postfix reload, и добавьте информацию о виртуальном транспорте в главный конфиг Postfix
Код:
$>
postconf -e virtual_transport=dovecot
$>
postconf -e dovecot_destination_recipient_limit=1


 

 

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

Найдите строку protocols и смените на
Код:
protocols = imap imaps pop3 pop3s
Так же найдите и измените строку disable_plaintext_auth до состояния disable_plaintext_auth = no
Далее измените параметр mail_location
Код:
mail_location = maildir:/home/vmail/%d/%n
Найдите строку namespace private и измените до
Код:
namespace private {
separator = .
prefix = INBOX.
inbox = yes
}

Перейдите к секции "auth default" и отредактируйте разрешенные механизмы аутентификации
Код:
mechanisms = plain login
В этой же секции измените
Код:
passdb sql {
args = /etc/dovecot/dovecot-sql.conf
}

Измените так же параметр userdb static
Код:
userdb static {
args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
}

Перейдите к секции socket listen сдесь мы укажем файлы сокета для аутентификации dovecot
Код:
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
}
}

Перейдите к секции protocol lda, не забудьте сменить адрес постмастера на реальный
Код:
protocol lda {
log_path = /home/vmail/dovecot-deliver.log
auth_socket_path = /var/run/dovecot/auth-master
postmaster_address = Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
mail_plugins = cmusieve
global_script_path = /home/vmail/globalsieverc
}

На этом файл можно сохранить.


Отредактируйте файл /etc/dovecot/dovecot-sql.conf, измените настройки на приведенные ниже
Код:
driver = mysql
connect = host=127.0.0.1 dbname=mailserver user=mailuser password=mailuser2007
default_pass_scheme = PLAIN-MD5
password_query = SELECT email as user, password FROM view_users WHERE email='%u';

Перезапустите dovecot командой /etc/init.d/dovecot restart и загляните в лог файл /var/log/mail.log, там вы должны увидеть
Код:
dovecot: Dovecot v1.0.rc15 starting up
dovecot: auth-worker(default): mysql: Connected to 127.0.0.1 (mymailserver)

Теперь выставим права доступа к файлам конфигурации dovecot
Код:
$>
chgrp vmail /etc/dovecot/dovecot.conf
$>
chmod g+r /etc/dovecot/dovecot.conf

Настроим TLS/SSL
Код:
$>
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]:Russia
Locality Name (eg, city) []:Russia
Organization Name (eg, company) [Internet Widgits Pty Ltd]:example.com
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:mail.example.com
Email Address []:Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Выставим права доступа на файл
Код:
$>
chmod o= /etc/ssl/private/dovecot.pem

Создадим еще один сертификат по аналогии с предыдущим
Код:
$>
openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/postfix.pem \
-keyout /etc/ssl/private/postfix.pem

Сменим права доступа
Код:
chmod o= /etc/ssl/private/postfix.pem
Внесите изменения в конфиг Postfix'a
Код:
$>
postconf -e smtpd_tls_cert_file=/etc/ssl/certs/postfix.pem
$>
postconf -e smtpd_tls_key_file=/etc/ssl/private/postfix.pem
$>
postconf -e smtpd_use_tls=yes

Теперь настроим аутентификацию SMTP, внесите следующие изменения в конфиг Postfix'a, не забудьте сменить примеры на реальные адреса сетей! В примере используется сеть 192.168.50.0/24 ей разрешено отправлятиь почту без SMTP авторизации.
Код:
$>
postconf -e mynetworks=192.168.50.0/24
$>
postconf -e smtpd_sasl_type=dovecot
$>
postconf -e smtpd_sasl_path=private/auth
$>
postconf -e smtpd_sasl_auth_enable=yes
$>
postconf -e smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination

Отредактируйте файл /etc/postfix/main.cf изменив параметр размера почтового ящика, например, на 100 мегабайт
Код:
mailbox_size_limit = 102400
На этом настройка нашего почтового сервера закончена, перезапустите сервисы postfix и dovecot, выполните команду
Код:
postfix check
для проверки правильности настроек и прав доступа на файлы, команда должна отдать пустой результат.
Все ошибки и прочие события из жизни вашего почтовика вы можете найти в логах
/var/log/mail.log
/var/log/mail.err
/var/log/mail.warn
/var/log/mail.info

Удачной настройки =)
Источник http://workaround.org/ispmail/etch{odnaknopka}

cs-nsk

Добавить комментарий

Пожалуйста, старайтесь оставлять комментарии согласно выбранной статьи...


Защитный код
Обновить

Последние комментарии

Теги ...

Опрос: iOS или Android ?

Какой ОС вы чаще пользуетесь?

iOS - 0%
Android - 60%
Windows Mobile - 20%
Tizen - 0%
Другая. - 20%

Всего голосов: 5
Голосование в этом опросе закончено в: 01 Янв 2017 - 00:00
Яндекс.Метрика Анализ сайта Рейтинг@Mail.ru