Настройка Postfix3 в Centos7

Я расскажу про установку и настройку postfix на centos 7, причем только тех модулей и дополнений, которые сам считаю нужными и полезными на почтовом сервере.

 Статьи   Время чтения: 5 минуты   Просмотров: 12

Настройка Postfix3 в Centos7

Настройка Postfix3 в Centos7

Онлайн-курс по Kubernetes – для разработчиков, администраторов, технических лидеров, которые хотят изучить современную платформу для микросервисов Kubernetes. ... Я буду настраивать почтовый сервер на ОС linux, а точнее на CentOS 7. За основу будет взят postfix, который присутствует в этой системе из коробки. Инструкция получится универсальной, можно использовать и для других дистрибутивов. Все основные конфиги легко переносятся на разные системы, требуя минимальной правки, в основном путей.



Как вам может быть известно, я не очень доверяю SaaS-решениям. Причин тому больше одной. SaaS’ы оставляют за собой право менять Terms of Service в любой момент как им вздумается. SaaS’ы сливают персональные данные. SaaS’ы меняют пользовательский интерфейс и функционал на свое усмотрение. Наконец, если вы используете SaaS’ы от какого-нибудь Google, то однажды получив в них бан за любое нарушение ToS (который, напомню, постоянно меняется), назад вы больше никогда не разбанитесь. В прошлой статье мы решали описанные проблемы, поднимая / перенося на VDS свой блог. Сегодня же мы попробуем разобраться, как с нуля поднять собственный почтовый сервер с TLS, спам-фильтром и списками рассылок.

Примечание: Описанные далее действия производились на Centos7. Однако для других версий Ubuntu, ровно как и для других дистрибутивов Linux, последовательность шагов должна не сильно отличаться.

Подготовка


Примем за рабочую теорию, что у вас есть выделенный сервер (VDS) и указывающее на него доменное имя. Далее в качестве примера я буду использовать домен mail.blanet.ru. Если VDS у вас нет, сейчас есть множество VDS-провайдеров, предоставляющих их за смешные деньги. На момент написания этих строк я предпочитаю пользоваться DigitalOcean. При регистрации в DigitalOcean по моей реферальной ссылке вы получаете на счет 10$, что позволит бесплатно пользоваться VDS в течение двух месяцев.

В /etc/hosts прописываем Fully Qualified Domain Name (FQDN):

178.250.244.94    mail.blanet.ru    mail


Ставим необходимые пакеты:

sudo yum install mysql-server mysql-client postfix3 postfix3-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql



При установке Postfix на вопрос «General type of mail configuration» говорим «Internet Site». На вопрос о доменном имени отвечаем «mail.blanet.ru».

Postfix представляет собой Mail Transfer Agent (MTA), он будет отвечать за отправку и получение почты по SMTP. Dovecot будет предоставлять доступ к письмам по протоколу IMAP (также поддерживается ныне устаревший POP3). СУБД MySQL будет использоваться для хранения информации о доменах, пользователях и алиасах. Вместо MySQL с тем же успехом можно взять и MariaDB.

Наполняем базу


В MySQL создаем пользователя и базу данных:

mysql --user root --password
mysql> CREATE DATABASE mail;
mysql> CREATE USER 'mail'@'localhost' IDENTIFIED BY 'ПАРОЛЬ_ОТ_БД';
mysql> GRANT ALL ON mail.* TO 'mail'@'localhost';
mysql> exit



Заходим под новым пользователем:

mysql mail --user mail --password



Создаем следующие таблицы:

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;



Вводим информацию о доменах, пользователях и алиасах:

INSERT INTO virtual_domains (`id`, `name`) VALUES (1, 'blanet.ru');

INSERT INTO virtual_users (`id`, `domain_id`, `email`, `password`)
  VALUES (1, 1, 'mail@blanet.ru',
    ENCRYPT('ПАРОЛЬ_ДЛЯ_ПОЧТЫ', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))));

INSERT INTO virtual_aliases
  (`id`, `domain_id`, `source`, `destination`)
    VALUES (1, 1, 'postmaster@blanet.ru', 'mail@blanet.ru');



В колонке destination таблицы virtual_aliases можно указывать несколько получателей через запятую, в том числе и на всяких gmail.com. Таким образом, можно создавать списки рассылки. Если алиасы образуют цепочку, например postmaster@blanet.ru → mail@blanet.ru → somebody@example.org, то это тоже превосходно работает.

Для создания хэша пароля даем команду:

doveadm pw -s SHA512-CRYPT

Вводим 2 раза пароль.
Получаем hash. Его и вносим в БД взамен существующему

Настраиваем Postfix


Правим /etc/postfix/main.cf:

# дописываем или изменяем:

# пока что без TLS
smtpd_use_tls=no
myhostname = mail.blanet.ru
mydestination = localhost

virtual_transport = lmtp:unix:private/dovecot-lmtp
# то, что пока нет таких файлов - это ОК
virtual_mailbox_domains = mysql:/etc/postfix/mysql-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-users.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-aliases.cf

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

# увеличиваем максимальный размер письма до 50 Мб
message_size_limit = 52428800



Создаем /etc/postfix/mysql-domains.cf:

hosts = 127.0.0.1
user = mail
password = ПАРОЛЬ_ОТ_БД
dbname = mail
query = SELECT 1 FROM virtual_domains WHERE name='%s'



…, а также /etc/postfix/mysql-users.cf:

hosts = 127.0.0.1
user = mail
password = ПАРОЛЬ_ОТ_БД
dbname = mail
query = SELECT 1 FROM virtual_users WHERE email='%s'



…, и наконец /etc/postfix/mysql-aliases.cf:

hosts = 127.0.0.1
user = mail
password = ПАРОЛЬ_ОТ_БД
dbname = mail
query = SELECT destination FROM virtual_aliases WHERE source='%s'



Поскольку файлы содержат пароль от базы, стоит выставить на них правильные права:

sudo chown postfix:postfix /etc/postfix/mysql-*.cf
sudo chmod o-rwx /etc/postfix/mysql-*.cf



Перезапускаем Postfix:

sudo service postfix restart



Проверяем, что он видит домены, пользователей и алиасы:

sudo postmap -q mail@blanet.ru mysql:/etc/postfix/mysql-users.cf
sudo postmap -q blanet.ru mysql:/etc/postfix/mysql-domains.cf
sudo postmap -q postmaster@blanet.ru mysql:/etc/postfix/mysql-aliases.cf


Ответы на команды должны быть такими:

1
1
mail@blanet.ru


Все, postfix настроен!

О настройке Dovecot я вам расскажу в статье "Установка Dovecot в Centos7"



Автор: Google

Последние страницы

Copyright © 2022 Blanet.Ru. Все права защищены.