Настройка почтового сервера с помощью Postfix, Dovecot, MySQL и SpamAssassin

Данное руководство поможет настроить почтовый сервер с помощью Postfix, Dovecot, MySQL и SpamAssassin в Ubuntu 12.04. Такая настройка позволит вам добавлять виртуальные домены, пользователей и алиасы, а также защитит виртуальный сервер от спама.

Требования

1: Установка пакетов

Запустите:

apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql

Эта команда установит Postfix, dovecot и несколько дополнительных библиотек.

После установки Postfix предложит выбрать тип настройки; выберите Internet Site.

Затем Postfix запросит почтовое имя системы; в это поле нужно ввести FDQN или домен.

2: Создание БД MySQL, виртуальных доменов, пользователей и алиасов

Теперь нужно создать БД MySQL для хранения данных почтового сервера и разделить её на три таблицы (для доменов, пользователей и алиасов).

Примечание: В руководстве БД условно называется servermail. Выберите более точное и описательное имя.

Чтобы создать БД, введите:

mysqladmin -p create servermail

Войдите в MySQL как root:

mysql -u root -p

Введите root-пароль MySQL. Командная строка изменится:

mysql >

Создайте нового пользователя для аутентификации на почтовом сервере и передайте ему права SELECT.

mysql > GRANT SELECT ON servermail.* TO 'usermail'@'127.0.0.1' IDENTIFIED BY 'mailpassword';

Сбросьте привилегии MySQL:

mysql > FLUSH PRIVILEGES;

Создайте таблицы внутри новой БД:

mysql> USE servermail;

Чтобы создать таблицу для авторизованных доменов, введите:

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

Затем нужно создать таблицу для пользователей. Добавьте в неё адрес электронной почты и пароль (эти данные нужны, чтобы связать пользователей с доменами).

CREATE TABLE `virtual_users` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`password` VARCHAR(106) NOT NULL,
`email` VARCHAR(120) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

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

CREATE TABLE `virtual_aliases` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`source` varchar(100) NOT NULL,
`destination` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Теперь нужно добавить данные в каждую таблицу.

Таблица virtual_domains

Добавьте в таблицу virtual_domains все свои домены:

INSERT INTO `servermail`.`virtual_domains`
(`id` ,`name`)
VALUES
('1', 'example.com'),
('2', 'hostname.example.com');

В руководстве таблица содержит только основной домен (example.com) и FQDN (hostname.example.com). При необходимости вы можете самостоятельно добавить в таблицу другие домены.

Таблица virtual_users

В эту таблицу нужно поместить адрес электронной почты и пароль для каждого домена.

INSERT INTO `servermail`.`virtual_users`
(`id`, `domain_id`, `password` , `email`)
VALUES
('1', '1', ENCRYPT('firstpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email1@example.com'),
('2', '1', ENCRYPT('secondpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email2@example.com');

Примечание: Все условные данные нужно заменить своими данными.

Таблица virtual_aliases

В столбец source нужно внести исходный адрес электронной почты, а в destination – адрес, на который нужно его переадресовать.

INSERT INTO `servermail`.`virtual_aliases`
(`id`, `domain_id`, `source`, `destination`)
VALUES
('1', '1', 'alias@example.com', 'email1@example.com');

Закройте MySQL:

exit

3: Настройка Postfix

Теперь нужно настроить Postfix для обработки соединений SMTP и отправки сообщений всем пользователям, представленным в БД MySQL.

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

cp /etc/postfix/main.cf /etc/postfix/main.cf.orig

Откройте main.cf:

nano /etc/postfix/main.cf

Сначала нужно закомментировать раздел TLS Parameters и вставить другие параметры. В данном руководстве используется бесплатный SSL-сертификат (подробности – по этой ссылке), но вы можете отредактировать параметры согласно вашему сертификату:

# TLS parameters
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#smtpd_use_tls=yes
#smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
#smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_cert_file=/etc/ssl/certs/dovecot.pem
smtpd_tls_key_file=/etc/ssl/private/dovecot.pem
smtpd_use_tls=yes
smtpd_tls_auth_only = yes

Ниже нужно добавить следующие строки:

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination

Закомментируйте настройки mydestination и добавьте вместо них localhost, чтобы сервер мог использовать домены из таблицы MySQL:

#mydestination = example.com, hostname.example.com, localhost.example.com, localhost
mydestination = localhost

В параметре myhostname укажите свой FQDN:

myhostname = hostname.example.com

Ниже вставьте строку для поддержки локальной доставки почты всем виртуальным доменам, перечисленным в таблице MySQL.

virtual_transport = lmtp:unix:private/dovecot-lmtp

Добавьте следующие три параметра, чтобы настроить виртуальные домены, пользователей и алиасы Postfix:

virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf

Теперь нужно создать три конфигурационных файла, указанных в последних строках main.cf, с помощью которых Postfix будет поддерживать взаимодействие с MySQL.

Создайте mysql-virtual-mailbox-domains.cf и добавьте в него следующие параметры:

nano /etc/postfix/mysql-virtual-mailbox-domains.cf
user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT 1 FROM virtual_domains WHERE name='%s'

Примечание: Откорректируйте код, указав свои данные.

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

service postfix restart

Убедитесь, что Postfix видит домены (следующая команда должна вернуть 1):

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

Создайте файл mysql-virtual-mailbox-maps.cf:

nano /etc/postfix/mysql-virtual-mailbox-maps.cf
user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT 1 FROM virtual_users WHERE email='%s'

Снова перезапустите Postfix:

service postfix restart

Чтобы убедиться в том, что Postfix может найти первый адрес электронной почты, используйте следующую команду (она должна вернуть 1):

postmap -q email1@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

Чтобы настроить взаимодействие Postfix и MySQL, создайте файл mysql-virtual-alias-maps.cf.

nano /etc/postfix/mysql-virtual-alias-maps.cf
user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT destination FROM virtual_aliases WHERE source='%s'

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

service postfix restart

Убедитесь, что Postfix видит этот файл.  Следующая команда должна вернуть переадресованное сообщение:

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

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

nano /etc/postfix/master.cf

Раскомментируйте эти строки:

submission inet n       -       -       -       -       smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject

После этого рекомендуется перезапустить Postfix:

service postfix restart

4: Настройка Dovecot

Чтобы подготовить к работе Dovecot, нужно отредактировать семь файлов. Сначала скопируйте эти файлы:

cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig
cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig
cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig
cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig
cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig

Теперь откройте конфигурационный файл Dovecot:

nano /etc/dovecot/dovecot.conf

Раскомментируйте строку:

!include conf.d/*.conf

Под строкой:

!include_try /usr/share/dovecot/protocols.d/*.protocol

нужно включить протоколы (при желании добавьте в список pop3):

!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap lmtp

Отредактируйте конфигурационный файл mail:

nano /etc/dovecot/conf.d/10-mail.conf

Найдите и раскомментируйте строку mail_privileged_group и установите её значение:

mail_privileged_group = mail

Настройка привилегий

Введите:

ls -ld /var/mail

Установите следующие привилегии:

drwxrwsr-x 3 root vmail 4096 Jan 24 21:23 /var/mail

Создайте папку для каждого домена, указанного в таблице MySQL:

mkdir -p /var/mail/vhosts/example.com

Создайте пользователя и группу vmail с id 5000:

groupadd -g 5000 vmail

Передайте права на /var/mail пользователю vmail:

chown -R vmail:vmail /var/mail

Затем отредактируйте /etc/dovecot/conf.d/10-auth.conf:

nano /etc/dovecot/conf.d/10-auth.conf

Раскомментируйте настройки аутентификации и добавьте следующую строку:

disable_plaintext_auth = yes

Отредактируйте параметр auth_mechanisms:

auth_mechanisms = plain login

Закомментируйте эту строку:

#!include auth-system.conf.ext

Включите аутентификацию MySQL, раскомментировав эту строку:

!include auth-sql.conf.ext

Теперь нужно создать файл /etc/dovecot/dovecot-sql.conf.ext и поместить в нём данные об аутентификации:

nano /etc/dovecot/conf.d/auth-sql.conf.ext

Добавьте в файл такой код:

passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}

В файл /etc/dovecot/dovecot-sql.conf.ext нужно внести пользовательские данные MySQL. Откройте его:

nano /etc/dovecot/dovecot-sql.conf.ext

Раскомментируйте параметр driver и установите такое значение:

driver = mysql

Раскомментируйте строку connect и укажите в ней данные MySQL:

connect = host=127.0.0.1 dbname=servermail user=usermail password=mailpassword

Раскомментируйте строку default_pass_scheme и установите значение SHA-512.

default_pass_scheme = SHA512-CRYPT

Раскомментируйте строку password_query и добавьте в неё такие данные:

password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';

Передайте права на каталог dovecot пользователю vmail:

chown -R vmail:dovecot /etc/dovecot
chmod -R o-rwx /etc/dovecot

Откройте файл /etc/dovecot/conf.d/10-master.conf:

nano /etc/dovecot/conf.d/10-master.conf
## Раскомментируйте inet_listener_imap и задайте порт 0
service imap-login {
inet_listener imap {
port = 0
}
# Создайте сокет LMTP и установите следующие параметры:
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
#inet_listener lmtp {
# Avoid making LMTP visible for the entire internet
#address =
#port =
#}
}

Измените значение параметра unix_listener на service_auth:

service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
unix_listener auth-userdb {
mode = 0600
user = vmail
#group =
}
#unix_listener /var/spool/postfix/private/auth {
# mode = 0666
#}
user = dovecot
}

Отредактируйте service auth-worker:

service auth-worker {
# Auth worker process is run as root by default, so that it can access
# /etc/shadow. If this isn't necessary, the user should be changed to
# $default_internal_user.
user = vmail
}

Теперь нужно отредактировать SSL-настройки Dovecot.

Примечание: Если вы хотите использовать настройки по умолчанию, просто пропустите этот шаг.

# nano /etc/dovecot/conf.d/10-ssl.conf

Установите параметр ssl:

ssl = required

Измените пути ssl_cert и ssl_key:

ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_key = </etc/ssl/private/dovecot.pem

Перезапустите Dovecot:

service dovecot restart

Проверьте, открыт ли порт 993 и (если вы включили pop3, проверьте и 995):

telnet example.com 993

Готово! Почтовый сервер настроен. Теперь нужно протестировать сервер с помощью почтового клиента:

- Username: email1@example.com
- Password: email1's password
- IMAP: example.com
- SMTP: example.com

Примечание: Используйте порт 993 для безопасного IMAP и 587 или 25 для SMTP.

5: Настройка SpamAssassin

Установите SpamAssassin:

apt-get install spamassassin spamc

Создайте пользователя для SpamAssassin.

adduser spamd --disabled-login

Откройте настройки SpamAssassin:

nano /etc/default/spamassassin

Измените параметр ENABLED:

ENABLED=1

Настройте домашний каталог и установите параметр OPTIONS:

SPAMD_HOME="/home/spamd/"
OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir ${SPAMD_HOME} -s ${SPAMD_HOME}spamd.log"

Задайте параметр PID_File:

PIDFILE="${SPAMD_HOME}spamd.pid"

Настройте автоматическое обновление правил SpamAssassin:

CRON=1

Установите правила анти-спама в /etc/spamassassin/local.cf.

nano /etc/spamassassin/local.cf

SpamAssassin будет оценивать каждое полученное сообщение. Если сообщение получает больше 5.0 баллов, оно будет автоматически помечено как спам. Чтобы настроить политику анти-спама, используйте такие параметры:

rewrite_header Subject ***** SPAM _SCORE_ *****
report_safe             0
required_score          5.0
use_bayes               1
use_bayes_rules         1
bayes_auto_learn        1
skip_rbl_checks         0
use_razor2              0
use_dcc                 0
use_pyzor               0

Затем отредактируйте файл /etc/postfix/master.cf, чтобы настроить Postfix для поддержки проверок SpamAssassin.

nano /etc/postfix/master.cf

Найдите следующую строку и добавьте фильтр spamassassin:

smtp      inet  n       -       -       -       -       smtpd
-o content_filter=spamassassin

Вставьте в файл следующие параметры:

spamassassin unix -     n       n       -       -       pipe
user=spamd argv=/usr/bin/spamc -f -e
/usr/sbin/sendmail -oi -f ${sender} ${recipient}

Запустите SpamAssassin и перезапустите Postfix:

service spamassassin start
service postfix restart

Почтовый сервер полностью готов к работе!

Tags: , , , ,

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