news
Serverspace запустил услугу Managed Kubernetes
БС
Борислав Сухарев
13 августа 2022
Обновлено 2 сентября 2022

Как настроить почтовый сервер Ubuntu 18.04

Linux Ubuntu

Введение

Эта настройка позволит вам добавить виртуальные домены, пользователей и псевдонимы и защитить виртуальный сервер от спама.
Руководство поможет вам с реализацией своего собственного почтового сервера.
На примере будет использован стенд с операционной системой Linux Ubuntu 18.04 с предустановленными программами которые помогут нам в реализации собственного почтового сервера.
Свой почтовый сервер позволит вам делать бекапы всех писем, создавать собственные массовые рассылки, уникальность своей почты и связь почты с вашим сайтом.
Для того что бы у вас все получилось, требуется просто следовать постепенно по главам которые расположены ниже, желаем удачи!

Обязательные требования

  • Домен, связанный с вашим сервером.
  • Установлена СУБД MySQL
  • MySql  предварительно настроен.
  • Полные права администратора (root)
  • Настроенный Fully Qualified Domain Name.
  • Необязательно: SSL защищенный конфигурационный файл.

Установка программ

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

Когда появится запрос на настройку Postfix, выберите второй пункт:1

В конфигурации нашей программы будет задан вопрос о системном почтовом имени - вы можете использовать свой определённое имя домена или основной домен.
Fully Qualified Domain Name - Это полное наименование вашего домена.

2

Создание БД и ее настройка

Вскоре после установки, создаем БД MySQL.
Требуется настроить 3 основных таблицы:

  • domains
  • users
  • virtual alias

Наименование базы данных в примере - "spacemail

Создайте собственную БД spacemail:

mysqladmin -p create spacemail

Введите пароль от администратора БД.  Проверка производится путем сообщение из командной строки "mysql"

Поэтапно создается пользователь для аутентификации почты и выдать разрешение SELECT

mysql > GRANT SELECT ON spacemail.* TO 'userspace'@'127.0.0.1' IDENTIFIED BY 'mailpass';

Перезапустите привилегии БД, для того что бы понять, успешно ли применились права:

mysql > FLUSH PRIVILEGES;

Наконец, нам нужно использовать базу данных для поднятия таблиц и добавления наших специальных данных:

Создаем через MySQL

mysql> USE spacemail;

Мы собираемся создать таблицу для конкретных доменов, признанных одобренными доменами.
Так же требуется создать для конкретных доменов, и признанных авторизованными доменами.
Отдельно должна быть создана таблица под "new users". В этой таблице потребуется добавить почту и пароль. Должна быть связь вашего пользователя с доменом.

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

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

CREATE TABLE `virtual_users` (
`id` INT NOT NULL AUTO_INCREMENT,
`ДОМЕН` INT NOT NULL,
`ПАРОЛЬ` VARCHAR(107) NOT NULL,
`email` VARCHAR(121) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
FOREIGN KEY (ДОМЕН) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Наконец, мы создадим таблицу виртуальных псевдонимов для указания всех писем, которые вы собираетесь пересылать на другую почту.
Создаем таблицу связывающаяся с виртуальными псевдонимами, для переадресации на другую почту.

CREATE TABLE `virtual_aliases` (
`id` INT NOT NULL AUTO_INCREMENT,
`ДОМЕН` INT NOT NULL,
`source` varchar(101) NOT NULL,
`destination` varchar(101) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (ДОМЕН) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Все важные таблицы для реализации почтового сервера, были созданы!
Требуется заполнить их в соответствии с нашими данными.33421323333333333344444444443435

Виртуальные домены

Здесь мы собираемся ввести ваши домены в таблицу virtual_domains. Вы можете добавить сколько угодно доменов, но в этом руководстве мы введем только основной домен (serverspace.ru) и ваше Fully Qualified Domain Name (hostname.serverspace.ru).

INSERT INTO `spacemail`.`virtual_domains`
(`id` ,`name`)
VALUES
('1', 'serverspace.ru'),
('2', 'hostname.serverspace.ru');

Виртуальная почта

Мы собираемся ввести адреса электронной почты и пароли, связанные с каждым доменом. Проверьте правильность введенной вами информацию, что у вас отсутствуют ошибки.

INSERT INTO `spacemail`.`virtual_users`
(`id`, `ДОМЕН`, `ПАРОЛЬ` , `email`)
VALUES
('1', '1', ENCRYPT('pass', CONCAT('$6$', SUBSTRING(SHA(RAND()), -15))), 'spacemail1@serverspace.ru'),
('2', '1', ENCRYPT('pass', CONCAT('$6$', SUBSTRING(SHA(RAND()), -15))), 'spacemail2@serverspace.ru');

Виртуальные псевдонимы

Добавления основной почты и ее связь для пересылки в будущем.

INSERT INTO `spacemail`.`virtual_aliases`
(`id`, `domain_id`, `source`, `destination`)
VALUES
('1', '1', 'alias@serverspace.ru', 'spacemail1@serverspace.ru');

Закрываем БД:

Exit

Конфигурация Postfix

Конфигурация требуется для отработки  Simple Mail Transfer Протокола, и отправления различных сообщения участников БД.

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

cp /etc/postfix/main.cf /etc/postfix/название копии

Сконфигурируйте "main.cf" любым текстовым редактором, чтобы изменить его:

sudo vi /etc/postfix/main.cf

Комментируем параметры протокола защиты, и внести новые.

sudo vi etcpostfixmain

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

Закомментируйте стандартные настройки как показано ниже. Этот параметр позволит вашему серверу использовать virtual domain внутри таблицы БД.

localhost

Убедитесь, что в параметре myhostname установлено ваше Fully Qualified Domain Name.

myhostname = hostname.serverspace.ru

Добавьте пример ниже для работы почты в локальной вычислительной сети. Добавить требуется на все ваши виртуальные домены, хранящиеся в БД.

virtual_transport = lmtp:unix:private/dovecot-lmtp

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

virtual_mailbox_domains

Мы создадим последние три файла, которые мы добавим в файл main.cf, чтобы сообщить Postfix, как соединиться с БД

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

nano /etc/postfix/mysql-virtual-mailbox-domains.cf

user = ЛОГИН ПОЧТЫ
password = ПАРОЛЬ ПОЧТЫ
hosts = localhost
dbname = spacemail
query = SELECT 1 FROM virtual_domains WHERE name='%s'

Требуется перезагрузить программу.

service postfix restart

Проверка нахождения домена программой. В случае успешного выполнения команда должна вернуть значение 1:

postmap -q serverspace.ru mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

Затем нам нужно создать файл конфигурации

nano /etc/postfix/mysql-virtual-mailboxspace-maps.cf

user = ЛОГИН ПОЧТЫ
password = ПАРОЛЬ ПОЧТЫ
hosts = localhost
dbname = spacemail
query = SELECT 1 FROM virtual_users WHERE email='%s'

Перезагружаем программу снова:

service postfix restart

Проверка нахождения почты, доменом. В случае успеха она должна вернуть 1:

postmap -q spacemail1@serverspace.ru mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

Мы создадим последний конфиг для настройки соединения между Postfix и БД

nano /etc/postfix/mysql-virtual-alias-maps.cf

user = ЛОГИН ПОЧТЫ
password = ПАРОЛЬ ПОЧТЫ
hosts = localhost
dbname = spacemail
query = SELECT destination FROM virtual_aliases WHERE source='%s'

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

service postfix restart

Нам нужно проверить, что Postfix может найти ваши псевдонимы. Введите следующую команду, и она должна вернуть почту, перенаправленную на псевдоним:

postmap -q alias@serverspace.ru mysql:/etc/postfix/mysql-virtual-alias-maps.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

В некоторых случаях нам необходимо перезапустить программу, чтобы убедиться, что порт открылся.

service postfix restart

Конфигурация Dovecot

Мы скопируем 7 файлов, которые будем изменять, чтобы в случае необходимости можно было вернуть все по умолчанию.

Конфигурация Dovecot

Редактирование файла конфигурации из 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

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

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

Найдите строку mail_location, откомментируйте ее и поместите следующий параметр:

mail_location = maildir:/var/mail/vhosts/%d/%n

Найдите строку "mail_privileged_group", откомментируйте ее и добавьте параметр mail следующим образом:

mail_privileged_group = mail

Проверка разрешений

Используйте данную команду и убедитесь, что разрешения выглядят следующим образом:

ls var mail

Мы собираемся создать папку для каждого домена, который мы регистрируем в таблице MySQL:

mkdir -p /var/mail/vhosts/serverspace.ru

Создайте пользователя и группу с определенным ID:

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

Раскомментировав эту строку вы возобновите авторизацию БД:

!include auth-sql.conf.ext

Требуется создать конфиг по пути /etc/dovecot/dovecot-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 и установите mysql в качестве параметра:

driver = mysql

Откомментируйте строку connect и введите специфическую для MySQL информацию:

connect = host=localhost dbname=spacemail 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

##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
Измените параметр 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
}

Измените службу auth-worker следующим образом:

service auth-worker

Необходимо изменить файл конфигурации SSL из Dovecot (Пропустите пункт если вы будете использовать стандартную конфигурацию)

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

Измените параметр ssl на "required":

ssl = required

И измените путь для ssl_cert и ssl_key:

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

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

restart decov

Вы должны проверить, что порт 993 открыт и работает (в случае, если вы включили pop3; вы должны проверить также порт 995).

telnet serverspace.ru 993

Настройка SpamAssassin

Сначала нам нужно установить SpamAssassin:

apt-get install spamassassin spamc

Затем нам нужно создать пользователя для SpamAssassin.

adduser spamd --disabled-login

Чтобы успешно настроить SpamAssassin, необходимо открыть и изменить параметры конфигурации.

nano /etc/default/spamassassin

Нам нужно изменить параметр ENABLED, чтобы включить демон SpamAssassin.

ENABLED=1

Нам нужно настроить параметры home и 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 при проверке на спам, то оно автоматически будет считаться спамом.

Завершение

Вы успешно настроили почтовый сервер которым вы можете пользоваться.
Если возникнут проблемы с запуском той или иной программы то обратитесь к их определенным библиотекам.


Оценка:
5 из 5
Аverage rating : 5
Оценок: 1
191028 Санкт-Петербург Литейный пр., д. 26, Лит. А
+7 (812) 403-06-99
700 300
ООО «ИТГЛОБАЛКОМ ЛАБС»
700 300