Как настроить почтовый сервер с помощью Postfix, Dovecot, MySQL и SpamAssassin
Введение
В этом руководстве мы собираемся настроить почтовый сервер с помощью Postfix, Dovecot, MySQL и SpamAssassin в Ubuntu 12.04.
Следуя этому руководству, вы сможете добавлять виртуальные домены, пользователей и псевдонимы. Кроме того, ваш виртуальный сервер будет защищен от спам-хаба.
Предпосылки
Перед настройкой почтового сервера необходимо, чтобы ваш VPS имел следующее:
Необязательно: SSL-сертификат (настройка бесплатно подписанного SSL-сертификата)
Необязательно (войдите в систему как пользователь root)
Установка пакетов от имени пользователя root полезна, поскольку у вас есть все привилегии.
sudo -i
Введите пароль пользователя. После успешного завершения вы увидите, что символ $
изменится на #
.
Шаг 1: Установите пакеты
apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql
Когда будет предложено настроить Postfix, выберите Интернет-сайт:
Конфигурация Postfix спросит об имени системной почты — вы можете использовать свой FDQN или основной домен.
Шаг 2: Создайте базу данных MySQL, виртуальные домены, пользователей и псевдонимы
После завершения установки мы собираемся создать базу данных MySQL для настройки трех разных таблиц: одной для доменов, одной для пользователей и последней для псевдонимов.
Мы назовем базу данных servermail
, но вы можете использовать любое другое имя.
Создайте базу данных servermail:
mysqladmin -p create servermail
Войдите в систему как пользователь root MySQL
mysql -u root -p
Введите свой корневой пароль 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. Вы можете добавить любые нужные вам домены, но в этом руководстве мы представим только основной домен (example.com) и ваше полное доменное имя (hostname.example.com).
INSERT INTO `servermail`.`virtual_domains`
(`id` ,`name`)
VALUES
('1', 'example.com'),
('2', 'hostname.example.com');
Виртуальные электронные письма
Мы собираемся ввести адрес электронной почты и пароли, связанные с каждым доменом. Убедитесь, что вы изменили всю информацию на вашу конкретную информацию.
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');
Виртуальные псевдонимы
Мы собираемся ввести адрес электронной почты (источник), который мы собираемся переслать на другой адрес электронной почты (назначение).
INSERT INTO `servermail`.`virtual_aliases`
(`id`, `domain_id`, `source`, `destination`)
VALUES
('1', '1', 'alias@example.com', 'email1@example.com');
Выйти из MySQL
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 и добавить другие параметры. В этом руководстве мы используем бесплатные сертификаты 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
Затем мы собираемся добавить следующие параметры под настройками TLS, которые мы изменили на предыдущем шаге:
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
. Это изменение позволяет вашему VPS использовать виртуальные домены внутри таблицы MySQL.
#mydestination = example.com, hostname.example.com, localhost.example.com, localhost
mydestination = localhost
Убедитесь, что для параметра myhostname указано ваше полное доменное имя.
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
Примечание. Сравните эти изменения с этим файлом, чтобы обнаружить ошибки или ошибки:
https://www.dropbox.com/s/x9fpm9v1dr86gkw/etc-postfix-main.cf.txt
Мы собираемся создать последние три файла, которые мы добавим в файл 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.
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'
Перезапустить Постфикс
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, чтобы убедиться, что порт 587 открыт.
service postfix restart
Примечание. Этот инструмент можно использовать для сканирования портов домена и проверки того, что порты 25 и 587 открыты (http://mxtoolbox.com/SuperTool.aspx).
Шаг 4: Настройте Dovecot
Мы собираемся скопировать 7 файлов, которые собирались изменить, чтобы вы могли вернуть их по умолчанию, если вам нужно. Введите следующие команды одну за другой:
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
Мы собираемся включить протоколы (добавьте pop3, если хотите) ниже строки !include_try /usr/share/dovecot/protocols.d/*.protocol
.
!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap lmtp
Примечание. Сравните эти изменения с этим файлом, чтобы обнаружить ошибки или ошибки:
https://www.dropbox.com/s/wmbe3bwy0vcficj/etc-dovecot-dovecot.conf.txt
Затем мы собираемся отредактировать файл конфигурации почты:
nano /etc/dovecot/conf.d/10-mail.conf
Найдите строку mail_location
, раскомментируйте ее и поставьте следующий параметр:
mail_location = maildir:/var/mail/vhosts/%d/%n
Найдите строку mail_privived_group
, раскомментируйте ее и добавьте параметр mail следующим образом:
mail_privileged_group = mail
Примечание. Сравните эти изменения с этим файлом, чтобы обнаружить ошибки или ошибки:
https://www.dropbox.com/s/hnfeieuy77m5b0a/etc.dovecot.conf.d-10-mail.conf.txt
Проверить разрешения
Введите эту команду:
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 с идентификатором 5000.
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /var/mail
Нам нужно изменить владельца папки /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
Примечание. Сравните эти изменения с этим файлом, чтобы обнаружить ошибки или ошибки:
https://www.dropbox.com/s/4h472nqrj700pqk/etc.dovecot.conf.d.10-auth.conf.txt
Нам нужно создать файл /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
Раскомментируйте параметр драйвера и установите mysql в качестве параметра:
driver = mysql
Раскомментируйте строку подключения и введите информацию, относящуюся к 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';
Примечание. Сравните эти изменения с этим файлом, чтобы обнаружить ошибки или ошибки:
https://www.dropbox.com/s/48a5r0mtgdz25cz/etc.dovecot.dovecot-sql.conf.ext.txt
Измените владельца и группу папки 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
##Uncomment inet_listener_imap and modify to port 0
service imap-login {
inet_listener imap {
port = 0
}
#Create LMTP socket and this configurations
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
}
Примечание. Сравните эти изменения с этим файлом, чтобы обнаружить ошибки или ошибки:
https://www.dropbox.com/s/g0vnt233obh6v2h/etc.dovecot.conf.d.10-master.conf.txt
Наконец, мы собираемся изменить файл конфигурации 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
Перезапустить голубятню
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
, чтобы включить демон SpamAssassin.
ENABLED=1
Нам нужно настроить параметры дома и опций.
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"
Наконец, нам нужно указать, что правила SpamAssassins будут обновляться автоматически.
CRON=1
Примечание. Сравните эти изменения с этим файлом, чтобы обнаружить ошибки или ошибки:
https://www.dropbox.com/s/ndvpgc2jipdd4bk/etc.default.spamassassin.txt
Нам нужно открыть /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
Нам нужно изменить файл Postfix /etc/postfix/master.cf
, чтобы сообщить ему, что каждое электронное письмо будет проверяться с помощью 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
Поздравляем! Вы успешно настроили свой почтовый сервер с Postfix и Dovecot с аутентификацией MySQL и фильтрацией спама с помощью SpamAssassin!