Введение
Эта настройка позволит вам добавить виртуальные домены, пользователей и псевдонимы и защитить виртуальный сервер от спама.
Руководство поможет вам с реализацией своего собственного почтового сервера.
На примере будет использован стенд с операционной системой 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, выберите второй пункт:
В конфигурации нашей программы будет задан вопрос о системном почтовом имени - вы можете использовать свой определённое имя домена или основной домен.
Fully Qualified Domain Name - Это полное наименование вашего домена.
Создание БД и ее настройка
Вскоре после установки, создаем БД 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
Сперва потребуется создать резерв нашего основного файла, если потребуется то вы всегда сможете откатить настройки назад.
cp /etc/postfix/main.cf /etc/postfix/название копии
Сконфигурируйте "main.cf" любым текстовым редактором, чтобы изменить его:
sudo vi /etc/postfix/main.cf
Комментируем параметры протокола защиты, и внести новые.
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 внутри таблицы БД.
Убедитесь, что в параметре myhostname установлено ваше Fully Qualified Domain Name.
myhostname = hostname.serverspace.ru
Добавьте пример ниже для работы почты в локальной вычислительной сети. Добавить требуется на все ваши виртуальные домены, хранящиеся в БД.
virtual_transport = lmtp:unix:private/dovecot-lmtp
Наконец, нам нужно добавить эти три параметра, чтобы сообщить программе о настройке виртуальных доменов, пользователей и псевдонимов.
Мы создадим последние три файла, которые мы добавим в файл 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'
Требуется перезагрузить программу.
Проверка нахождения домена программой. В случае успешного выполнения команда должна вернуть значение 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'
Перезагружаем программу снова:
Проверка нахождения почты, доменом. В случае успеха она должна вернуть 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
Нам нужно проверить, что 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
В некоторых случаях нам необходимо перезапустить программу, чтобы убедиться, что порт открылся.
Конфигурация Dovecot
Мы скопируем 7 файлов, которые будем изменять, чтобы в случае необходимости можно было вернуть все по умолчанию.
Редактирование файла конфигурации из 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
Проверка разрешений
Используйте данную команду и убедитесь, что разрешения выглядят следующим образом:
Мы собираемся создать папку для каждого домена, который мы регистрируем в таблице 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
}
}
Измените параметр 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 следующим образом:
Необходимо изменить файл конфигурации 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:
Вы должны проверить, что порт 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 при проверке на спам, то оно автоматически будет считаться спамом.
Завершение
Вы успешно настроили почтовый сервер которым вы можете пользоваться.
Если возникнут проблемы с запуском той или иной программы то обратитесь к их определенным библиотекам.