Поиск по сайту:

Как настроить почтовый сервер с помощью 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!