Данное руководство описывает установку почтового сервера
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
Создадим первый тестовый почтовый ящик, например
john@example.com с паролем
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 |
+------------------+----------------------------------+
| john@example.com | 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 john@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
Вы должны увидеть цифру 1 если все правильно настроено.
Настроим альясы (для пересылки почты с одного ящика на другой, или с нескольких на один)
Добавим в базу данных тестовый алиас для нашего польователя
john@example.com, вся почта пришедшая на его ящик будет дополнительно пересылаться на ящик
jmiller@gmail.com
Код:
mysql>
INSERT INTO virtual_aliases (id, domain_id, source, destination)
VALUES (1, 1, 'john', 'john@example.com'),
(2, 1, 'john', 'jmiller@gmail.com');
Создадим
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 |
+------------------+-------------------+
| john@example.com | john@example.com |
| john@example.com | jmiller@gmail.com |
+------------------+-------------------+
Дополним конфигурацию
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 john@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf
Вы увидите это
john@example.com,jmiller@gmail.com
Создадим следующий файл,
/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 = postmaster@example.com
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 []:postmaster@example.com
Выставим права доступа на файл
Код:
$>
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
Удачной настройки =)
Комментарии (14)
RSS свернуть / развернутьunkn0wn
Intruder
Спасибо.
admin
Intruder
Intruder
Intruder
@ MX 10 example.com.
если можно указать, то вместо домена можно указать @ (@ ведет на сам домен.)
Если сервер стоит на отдельном компе, то можно создать A запись:
mail A 1.2.3.4
или
mail.example.com A 1.2.3.4
и прописать mx запись как:
@ MX 10 mail
или
@ MX 10 mail.example.com.
В MX можно прописать ip
@ MX 10 1.2.3.4
проверить, прописались ли записи на сайте
Halfi
admin
admin
admin
Halfi
Halfi
Все отлично работает)
Halfi
ASovetov
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.