Настройка почтового сервера с помощью Postfix, Dovecot, MySQL и SpamAssassin
mySQL, Ubuntu | Комментировать запись
Данное руководство поможет настроить почтовый сервер с помощью Postfix, Dovecot, MySQL и SpamAssassin в Ubuntu 12.04. Такая настройка позволит вам добавлять виртуальные домены, пользователей и алиасы, а также защитит виртуальный сервер от спама.
Требования
- Домен, направленный на сервер.
- Предварительно установленная и настроенная СУБД MySQL.
- Root-права.
- Настроенный FQDN.
- Опционально: SSL-сертификат.
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: Dovecot, MySQL, Postfix, Spamassassin, Ubuntu 12.04