Введение
На Ubuntu 20.04, вы можете использовать такие инструменты, как Postfix, Dovecot, MySQL, и SpamAssassin для настройки почтового сервера. Этот процесс может показаться сложным для тех, кто делает это впервые. Это руководство призвано упростить для вас процесс настройки почтового сервера с помощью подробных шагов. В конце этого руководства вы узнаете, как добавлять виртуальные домены, пользователей и псевдонимы. В конечном итоге вы сделаете свой виртуальный сервер более защищенным от спам-хабов.
Предварительные требования
Прежде чем приступить к настройке почтового сервера, необходимо выполнить некоторые предварительные требования. Во-первых, убедитесь, что у вашего виртуального частного сервера есть домен, который перенаправляет запросы на ваш сервер. Вам также необходимо установить и настроить MySQL. Кроме того, вам необходимо иметь пользователя с предоставленными правами root и установить SSL-сертификат. Наконец, убедитесь, что ваш FQDN настроен и идентифицирован.
Если вы устанавливаете пакеты от имени пользователя root, вы будете обладать всеми привилегиями. Вот почему мы рекомендуем это:
|
1 |
sudo -i |
Введите пароль вашего пользователя. В этот момент вы увидите, что символ $ изменился на #. Далее давайте по очереди рассмотрим различные аспекты конфигурации.
Шаг 1: Установка пакетов
Мы начнем с изучения того, как устанавливать пакеты:
|
1 |
apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql |
Когда появится окно настройки Postfix, выберите Internet Site:

Вас спросят об имени System mail. Здесь вы можете использовать FQDN или основной домен:

Шаг 2: Создание базы данных MySQL, виртуальных доменов, пользователей и псевдонимов
Далее, после установки всех пакетов, мы перейдем к настройке. Наша цель — настроить три таблицы. Одна будет для доменов, одна для пользователей и одна для псевдонимов. Они будут размещены в базе данных MySQL, которую мы создадим.
Допустим, мы хотим назвать нашу базу данных servermail. Вы можете использовать любое имя по вашему выбору. Вот как мы ее создадим:
|
1 |
mysqladmin -p create servermail |
Вам необходимо войти в систему как пользователь root в MySQL:
|
1 |
mysql -u root -p |
Затем введите свой пароль. В случае успешной попытки вы увидите следующий результат:
|
1 |
mysql > |
Далее мы создадим нового пользователя специально для аутентификации почты. Предоставьте разрешение SELECT следующим образом:
|
1 |
mysql > GRANT SELECT ON servermail.* TO 'usermail'@'127.0.0.1' IDENTIFIED BY 'mailpassword'; |
После этого перезагрузите привилегии MySQL, чтобы успешно применить разрешения:
|
1 |
mysql > FLUSH PRIVILEGES; |
Далее мы будем использовать нашу базу данных для создания таблиц и ввода данных:
|
1 |
mysql> USE servermail; |
Мы создадим отдельные таблицы для конкретных доменов, которые признаны авторизованными доменами:
|
1 2 3 4 5 |
CREATE TABLE `virtual_domains` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
Цель состоит в том, чтобы добавить пользователей в таблицу. Следовательно, мы будем добавлять соответствующий адрес электронной почты и пароль. Имейте в виду, что вам необходимо связать каждого пользователя с доменом:
|
1 2 3 4 5 6 7 8 9 |
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; |
Затем мы создадим таблицу для всех наших виртуальных алиасов, чтобы указать все адреса электронной почты, которые мы будем перенаправлять на другой адрес:
|
1 2 3 4 5 6 7 8 |
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) и FQDN (hostname.example.com):
|
1 2 3 4 5 |
INSERT INTO `servermail`.`virtual_domains` (`id` ,`name`) VALUES ('1', 'example.com'), ('2', 'hostname.example.com'); |
-
Виртуальные почтовые ящики
Затем введите адрес электронной почты и связанные с ним пароли для каждого из доменов. Убедитесь, что вся информация заменена на ваши конкретные данные:
|
1 2 3 4 5 |
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'); |
-
Виртуальные алиасы
Теперь вы можете ввести адрес электронной почты, на который будете перенаправлять другой адрес. Первый является источником, а второй — назначением:
|
1 2 3 4 |
INSERT INTO `servermail`.`virtual_aliases` (`id`, `domain_id`, `source`, `destination`) VALUES ('1', '1', 'alias@example.com', 'email1@example.com'); |
Затем вы можете выйти из MySQL:
|
1 |
mysql > exit |
Шаг 3: Настройка Postfix
Важно настроить Postfix так, чтобы он мог управлять SMTP-соединениями. Он также должен иметь возможность отправлять сообщения для всех пользователей, внесенных в базу данных MySQL. Начнем с создания копии файла по умолчанию. Это необходимо для того, чтобы вы могли легко вернуться к конфигурации по умолчанию в случае необходимости:
|
1 |
cp /etc/postfix/main.cf /etc/postfix/main.cf.orig |
Теперь откройте файл main.cf для его изменения:
|
1 |
nano /etc/postfix/main.cf |
Начните с комментирования параметров TLS, а затем добавьте любые другие параметры. В нашем примере мы используем бесплатные SSL-сертификаты. Вы, конечно, можете изменить конфигурацию в соответствии со своими требованиями:
|
1 2 3 4 5 6 7 8 9 10 11 |
# 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:
|
1 2 3 4 5 6 7 |
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:
|
1 2 |
#mydestination = example.com, hostname.example.com, localhost.example.com, localhost mydestination = localhost |
Теперь используйте эту команду, чтобы убедиться, что параметр myhostname настроен в вашем FQDN:
|
1 |
myhostname = hostname.example.com |
Кроме того, добавьте эту строку, чтобы активировать локальную доставку почты для всех виртуальных доменов, указанных в таблице:
|
1 |
virtual_transport = lmtp:unix:private/dovecot-lmtp |
Наконец, мы добавим следующие параметры, чтобы указать Postfix настроить виртуальные домены, пользователей и псевдонимы:
|
1 2 3 |
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 файла. Конечно, в своем файле вы внесете изменения в соответствии с вашей личной конфигурацией:
|
1 |
nano /etc/postfix/mysql-virtual-mailbox-domains.cf |
|
1 2 3 4 5 |
user = usermail password = mailpassword hosts = 127.0.0.1 dbname = servermail query = SELECT 1 FROM virtual_domains WHERE name='%s' |
Затем перезапустите Postfix:
|
1 |
service postfix restart |
Вы должны убедиться, что Postfix может найти ваш домен. Чтобы протестировать это, используйте следующую команду:
|
1 |
postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf |
В случае успеха команда вернет 1. В этом случае вы можете перейти к созданию mysql-virtual-mailbox-maps.cf файла:
|
1 |
nano /etc/postfix/mysql-virtual-mailbox-maps.cf |
|
1 2 3 4 5 |
user = usermail password = mailpassword hosts = 127.0.0.1 dbname = servermail query = SELECT 1 FROM virtual_users WHERE email='%s' |
Снова перезапустите Postfix:
|
1 |
service postfix restart |
Снова убедимся, что Postfix может найти первый адрес электронной почты. Для проверки используйте следующую команду:
|
1 |
postmap -q email1@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf |
В случае успеха вы получите в ответ 1. Таким образом, мы перейдем к созданию последнего файла:
|
1 |
nano /etc/postfix/mysql-virtual-alias-maps.cf |
|
1 2 3 4 5 |
user = usermail password = mailpassword hosts = 127.0.0.1 dbname = servermail query = SELECT destination FROM virtual_aliases WHERE source='%s' |
На этом настройка между Postfix и MySQL завершена. Перезапустите Postfix, чтобы применить изменения:
|
1 |
service postfix restart |
Чтобы убедиться, что Postfix действительно находит ваши алиасы, используйте эту команду:
|
1 |
postmap -q alias@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf |
В идеале в качестве вывода вы должны получить письмо, перенаправленное на алиас. Вы также можете изменить /etc/postfix/master.cf файл следующим образом, если вы хотите безопасно подключить порт 587 к почтовым клиентам:
|
1 |
nano /etc/postfix/master.cf |
Вот как раскомментировать определенные строки и добавить параметры:
|
1 2 3 4 5 |
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, чтобы убедиться, что порт открыт:
|
1 |
service postfix restart |
Этот инструмент также можно использовать для сканирования портов домена. Вы можете использовать его, чтобы убедиться, что порты 25 и 587 открыты.
Шаг 4: Настройка Dovecot
Теперь пришло время настроить Dovecot. В этом разделе нам придется скопировать 7 файлов, которые вы хотите изменить. Это необходимо для того, чтобы вы могли вернуться к исходному состоянию при необходимости. Вводите эти команды по одной:
|
1 2 3 4 5 6 |
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:
|
1 |
nano /etc/dovecot/dovecot.conf |
Убедитесь, что эта опция раскомментирована:
|
1 |
!include conf.d/*.conf |
Далее мы включим протоколы под строкой
!include_try /usr/share/dovecot/protocols.d/*.protocol . При желании вы также можете добавить pop3:
|
1 2 |
!include_try /usr/share/dovecot/protocols.d/*.protocol protocols = imap lmtp |
Чтобы исключить ошибки, сравните его с этим файлом:
https://www.dropbox.com/s/wmbe3bwy0vcficj/etc-dovecot-dovecot.conf.txt
Далее отредактируйте файл конфигурации почты:
|
1 |
nano /etc/dovecot/conf.d/10-mail.conf |
Найдите строку mail_location . Вам нужно раскомментировать ее и добавить этот параметр:
|
1 |
mail_location = maildir:/var/mail/vhosts/%d/%n |
После этого найдите строку mail_privileged_group . Снова раскомментируйте ее и добавить параметр mail:
|
1 |
mail_privileged_group = mail |
Чтобы исключить любую возможность ошибок, сравните его с этим файлом:
https://www.dropbox.com/s/hnfeieuy77m5b0a/etc.dovecot.conf.d-10-mail.conf.txt
-
Проверка прав доступа
Чтобы проверить права доступа, используйте эту команду:
|
1 |
ls -ld /var/mail |
Убедитесь, что ваши права доступа выглядят следующим образом:
|
1 |
drwxrwsr-x 3 root vmail 4096 Jan 24 21:23 /var/mail |
Вы можете создать папку для каждого домена. Все эти папки будут зарегистрированы в таблице MySQL:
|
1 |
mkdir -p /var/mail/vhosts/example.com |
Создайте пользователя и группу vmail, используя ID 5000:
|
1 2 |
groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /var/mail |
Затем необходимо изменить владельца папки /var/mail на пользователя vmail:
|
1 |
chown -R vmail:vmail /var/mail |
Теперь отредактируйте файл /etc/dovecot/conf.d/10-auth.conf :
|
1 |
nano /etc/dovecot/conf.d/10-auth.conf |
Добавьте следующую строку после раскомментирования аутентификации открытым текстом:
|
1 |
disable_plaintext_auth = yes |
Используйте это для изменения параметра auth_mechanisms :
|
1 |
auth_mechanisms = plain login |
Теперь закомментируйте эту строку:
|
1 |
#!include auth-system.conf.ext |
Чтобы включить авторизацию MySQL, вам нужно раскомментировать следующую строку:
|
1 |
!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 с вашей информацией позволит вам пройти аутентификацию:
|
1 |
nano /etc/dovecot/conf.d/auth-sql.conf.ext |
Введите этот код в файл:
|
1 2 3 4 5 6 7 8 9 |
passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = static args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n } |
Мы будем использовать нашу собственную информацию MySQL для изменения файла /etc/dovecot/dovecot-sql.conf.ext :
|
1 |
nano /etc/dovecot/dovecot-sql.conf.ext |
Установите MySQL в качестве параметра после раскомментирования параметра driver следующим образом:
|
1 |
driver = mysql |
Вы можете ввести свою специфическую информацию MySQL, раскомментировав строку connect :
|
1 |
connect = host=127.0.0.1 dbname=servermail user=usermail password=mailpassword |
Теперь вам нужно раскомментировать строку default_pass_scheme и изменить ее на SHA-512:
|
1 |
default_pass_scheme = SHA512-CRYPT |
Добавьте следующую информацию после раскомментирования password_query:
|
1 |
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:
|
1 2 |
chown -R vmail:dovecot /etc/dovecot chmod -R o-rwx /etc/dovecot |
Следующим шагом является изменение файла /etc/dovecot/conf.d/10-master.conf . Здесь нужно быть предельно осторожным, так как будут изменены различные параметры:
|
1 |
nano /etc/dovecot/conf.d/10-master.conf |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
##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:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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-рабочий процесс следующим образом:
|
1 2 3 4 5 6 |
служба авторизация-рабочий процесс { # Рабочий процесс авторизации по умолчанию запускается от имени root, чтобы он мог получить доступ к # /etc/shadow. Если в этом нет необходимости, пользователя следует изменить на # $default_internal_user. пользователь = vmail } |
Обнаружьте ошибки, сравнив с этим файлом:
https://www.dropbox.com/s/g0vnt233obh6v2h/etc.dovecot.conf.d.10-master.conf.txt
Следующим шагом будет изменение конфигурационного файла SSL от Dovecot. Если вы планируете использовать конфигурацию по умолчанию, вы можете пропустить этот шаг и перейти к следующему разделу:
|
1 |
# nano /etc/dovecot/conf.d/10-ssl.conf |
Затем измените параметр ssl на required следующим образом:
|
1 |
ssl = required |
Мы также изменим путь как для ssl_cert , так и для ssl_key:
|
1 2 |
ssl_cert = </etc/ssl/certs/dovecot.pem ssl_key = </etc/ssl/private/dovecot.pem |
Перезапустите Dovecot:
|
1 |
service dovecot restart |
Обязательно убедитесь, что порт 993 открыт. Если вы включили pop3, то также проверьте порт 995:
|
1 |
telnet example.com 993 |
Если вы выполнили все шаги до этого момента, поздравляем! Вы успешно настроили свой почтовый сервер. Чтобы убедиться, что вы все сделали правильно, вы можете протестировать свою учетную запись с помощью почтового клиента следующим образом:
|
1 2 3 4 |
- Имя пользователя: email1@example.com - Пароль: email1's пароль - IMAP: example.com - SMTP: example.com |
Порт 993 используется для безопасного IMAP, а порт 587/порт 25 для SMTP.
Шаг 5. Настройка SpamAssassin
Наконец, мы подошли к последнему разделу руководства, в котором мы настроим SpamAssassin. Начнем с установки SpamAssassin:
|
1 |
apt-get install spamassassin spamc |
Создайте пользователя для SpamAssassin следующим образом:
|
1 |
adduser spamd --disabled-login |
Чтобы настроить SpamAssassin, необходимо открыть и изменить параметры конфигурации:
|
1 |
nano /etc/default/spamassassin |
Теперь вам нужно изменить параметр ENABLED для включения демона SpamAssassin:
|
1 |
ENABLED=1 |
Измените параметры home и options с помощью этого кода:
|
1 2 |
SPAMD_HOME="/home/spamd/" OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir ${SPAMD_HOME} -s ${SPAMD_HOME}spamd.log" |
Используйте эту строку, чтобы указать параметр PID_File :
|
1 |
PIDFILE="${SPAMD_HOME}spamd.pid" |
Затем используйте эту команду, чтобы указать, что правила SpamAssassin будут обновляться автоматически:
|
1 |
CRON=1 |
Проверьте на наличие ошибок, сравнив со следующим документом:
https://www.dropbox.com/s/ndvpgc2jipdd4bk/etc.default.spamassassin.txt
Если вы хотите настроить правила защиты от спама, вам необходимо снова открыть файл /etc/spamassassin/local.cf :
|
1 |
nano /etc/spamassassin/local.cf |
Принцип работы SpamAssassin заключается в том, что он оценивает каждое письмо, полученное пользователем. Он выставляет оценки для писем, и если при проверке на спам оценка превышает 5.0, письмо помечается как спам. Вот параметры, которые вы можете использовать для настройки этих правил защиты от спама:
|
1 2 3 4 5 6 7 8 9 10 |
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, что каждое электронное письмо должно проверяться с помощью SpamAssassin. Для этого нам нужно изменить /etc/postfix/master.cf файл:
|
1 |
nano /etc/postfix/master.cf |
Найдите следующую строку и добавьте spamassassin фильтр:
|
1 2 |
smtp inet n - - - - smtpd -o content_filter=spamassassin |
Теперь вы можете добавить эти параметры:
|
1 2 3 |
spamassassin unix - n n - - pipe user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient} |
Наконец, запустите SpamAssassin и перезапустите Postfix, чтобы применить изменения. После перезапуска Postfix начнет проверять электронную почту на наличие спама:
|
1 2 |
service spamassassin start service postfix restart |
Вот и все! Вы успешно настроили свой почтовый сервер с помощью Postfix и Dovecot. Вы также настроили аутентификацию MySQL и фильтрацию спама с помощью SpamAssassin.
Заключение
В этом руководстве описаны шаги, которые необходимо выполнить для настройки почтового сервера с помощью вышеупомянутых инструментов. Его можно использовать как подробное руководство для самостоятельной настройки почтового сервера. Если вас интересует использование функции SMTP-сервера Google, следуйте этому руководству.
Приятной работы!
Комментарии
Комментариев пока нет. Будьте первым.