В данной инструкции будет рассмотрена настройка почтового сервера состоящего из: postfix, dovecot, mysql, postfixadmin, roundcube, opendkim. Почтовому серверу будет присвоено имя mta.mailns.ru, установка будет производиться на облачный сервер с операционной системой AlmaLinux 8.
Подготовка системы
Общие настройки
Задаем правильное имя серверу — это важный шаг, так как большинство антиспам систем выполняют проверки, обращаясь к серверу по имени в ожидании ответа, необходимо указать FQDN-имя, которое будет доступно из глобальной сети. В данном примере указано mta.mailns.ru.
hostnamectl set-hostname mta.mailns.ru
dnf update -y
dnf remove -y selinux*
Выводим список доступных локализаций в системе:
localectl list-locales
Проверяем активную локализацию:
localectl
Устанавливаем пакет русского языка:
dnf install -y glibc-langpack-ru
Устанавливаем русский язык по умолчанию в системе:
localectl set-locale LANG=ru_RU.utf8
Проверяем активную локализацию:
localectl
Изменим раскладку клавиатуру на русскую:
localectl set-x11-keymap ru
Проверим локализацию системы:
locale
Если локализация системы осталась en_US.UTF-8, откроем файл .bashrc (представляет собой файл сценария оболочки, обычно используемый в качестве файла конфигурации для конкретного пользователя).
vi ~/.bashrc
добавим в файл:
export LANG="ru_RU.utf8" export LC_CTYPE="ru_RU.utf8" export LC_ALL="ru_RU.utf8"
reboot
Проверим локализацию системы:
locale
Установка репозитория EPEL и REMI
dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf install -y wget mc net-tools unzip htop
В качестве межсетевого экрана будет использоваться iptables.
Удаление Firewalld
Остановка сервиса firewalld:
systemctl stop firewalld
Выключение сервиса автозагрузки firewalld:
systemctl disable firewalld
Маскировка сервиса firewalld:
systemctl mask --now firewalld
Удаление firewalld:
dnf remove -y firewalld
Установка и включение iptables
Установка iptables:
dnf install -y iptables-services
Включение сервиса iptables в автозагрузку:
systemctl enable iptables
Запуск сервиса iptables:
systemctl start iptables
Проверка статуса службы iptables:
systemctl status iptables
Перезагрузка ОС:
reboot
Заранее открываем порты на брандмауэре с помощью iptables:
-
- 22/tcp — для удалённого доступа по протоколу SSH;
- 110, 143, 993, 995, 587, 465, 25/tcp — для отправки и получения почтовых сообщений
- 80, 443/tcp — для доступа к сайтам.
Создадим файл настроек iptables:
mcedit iptables.sh
и внесем в него следующее содержимое:
#!/bin/sh # - Очищаем таблицы iptables -F iptables -t nat -F iptables -t mangle -F iptables -X # - Политики по умолчанию iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # - Разрешить трафик по петлевому интерфейсу iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # - Разрешим передавать пакеты, относящиеся к уже установленным соединениям iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # - Разрешить входящий PING iptables -A INPUT -p icmp -j ACCEPT # - Разрешить все исходящие iptables -I OUTPUT 1 -j ACCEPT # - Доступ по SSH iptables -A INPUT -p tcp --dport 22 -j ACCEPT # - Разрешить доступ к WEB серверу iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -A INPUT -p tcp --dport 8080 -j ACCEPT # - Доступ к почтовому серверу (SMTP, POP3, IMAP, SMTP SSL/TLS, SMTP STARTTLS, IMAP SSL/TLS, POP3 SSL/TLS) iptables -A INPUT -p tcp --dport 25 -j ACCEPT iptables -A INPUT -p tcp --dport 110 -j ACCEPT iptables -A INPUT -p tcp --dport 143 -j ACCEPT iptables -A INPUT -p tcp --dport 465 -j ACCEPT iptables -A INPUT -p tcp --dport 587 -j ACCEPT iptables -A INPUT -p tcp --dport 993 -j ACCEPT iptables -A INPUT -p tcp --dport 995 -j ACCEPT # - Сохранить настройки service iptables save
Сохраняем и назначаем права на выполнение:
chmod +x iptables.sh
Выполняем скрипт:
./iptables.sh
Посмотреть список правил iptables можно командой:
iptables --line-numbers -L -v -n
Настройка веб-сервера
Устанавливаем Apache:
dnf install -y httpd
Для настройка Apache работы в связке с Nginx открываем конфигурационный файл:
mcedit /etc/httpd/conf/httpd.conf
Находим параметр Listen 80 и меняем значение на Listen 8080.
Apache будет слушать порт 8080, так как на порту 80 будет работать Nginx.
Включение сервиса Apache в автозагрузку:
systemctl enable httpd
Запуск сервиса Apache:
systemctl start httpd
Проверка статуса сервиса Apache:
systemctl status httpd
Открываем браузер и вводим в адресную строку IP-адрес или DNS имя сервера и добавляем :8080 (http://<IP-адрес нашего сервера>:8080). Откроется тестовая страница.
dnf install -y nginx
Внесем небольшую корректировку в конфигурационный файл Ngnix:
mcedit /etc/nginx/nginx.conf
В секцию http добавим строку: server_names_hash_bucket_size 64;
На практике, может встретиться ошибка could not build server_names_hash, you should increase server_names_hash_bucket_size: 32. Она возникает при большом количестве виртуальных серверов или если один из них будет иметь длинное название. Данная строка в конфиге исправит ситуацию.
Включение сервиса Nginx в автозагрузку:
systemctl enable nginx
Запуск сервиса Nginx:
systemctl start nginx
Проверка статуса сервиса Nginx:
systemctl status nginx
Открываем браузер и вводим в адресную строку IP-адрес или DNS имя сервера (http://<IP-адрес нашего сервера>). Должна откроется страница приветствия.
Установим PHP 8.0 из репозитория Remi:
dnf module install -y php:remi-8.0
Устанавливаем дополнительные модули расширений для PHP:
dnf install -y php-mysqli php-mbstring php-imap
dnf install -y @mysql
Включение сервиса mysql в автозагрузку:
systemctl enable mysqld
Запуск сервиса mysql:
systemctl start mysqld
Проверим статус сервиса mysql:
systemctl status mysqld
Сразу создаем пароль для учетной записи root:
mysqladmin -u root password
Вводим новый пароль, например:
Ekyj6ZfHabq97MvQ64Nc3@
Установка и настройка PostfixAdmin
Создадим директорию для сайта:
mkdir -p /var/www/html/postfixadmin.mta.mailns.ru
Создаем новый конфигурационный файл виртуального домена nginx:
mcedit /etc/nginx/conf.d/postfixadmin.mta.mailns.ru.conf
И добавляем следующее содержимое (для HTTP):
server { listen 80; server_name postfixadmin.mta.mailns.ru; root /var/www/html/postfixadmin.mta.mailns.ru; index index.php index.html index.htm; access_log /var/log/nginx/postfixadmin.mta.mailns.ru.access.log main; error_log /var/log/nginx/postfixadmin.mta.mailns.ru.error.log; location / { root /var/www/html/postfixadmin.mta.mailns.ru; proxy_pass http://127.0.0.1:8080/; proxy_redirect off; proxy_force_ranges on; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_cache off; proxy_cache_key "$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri"; proxy_cache_valid 3s; proxy_cache_min_uses 2; client_body_buffer_size 128k; client_max_body_size 1024m; proxy_connect_timeout 180; proxy_send_timeout 180; proxy_read_timeout 180; send_timeout 180; proxy_buffer_size 4k; proxy_buffers 8 32k; proxy_busy_buffers_size 68k; proxy_temp_file_write_size 10m; } location ~ /\. { deny all; } }
Создаем новый конфигурационный файл виртуального домена apache:
mcedit /etc/httpd/conf.d/postfixadmin.mta.mailns.ru.conf
добавляем следующее содержимое:
<VirtualHost *:8080> ServerName postfixadmin.mta.mailns.ru DocumentRoot /var/www/html/postfixadmin.mta.mailns.ru SetEnvIf X-Forwarded-Proto https HTTPS=on <IFModule proxy_fcgi_module> ProxyFCGISetEnvIf "true" SCRIPT_FILENAME "/var/www/html/postfixadmin.mta.mailns.ru%{reqenv:SCRIPT_NAME}" <FilesMatch \.php$> SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost/" </FilesMatch> </IFModule> ErrorLog /var/log/httpd/postfixadmin.mta.mailns.ru.error.log CustomLog /var/log/httpd/postfixadmin.mta.mailns.ru.access.log common <Directory /var/www/html/postfixadmin.mta.mailns.ru> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted </Directory> </VirtualHost>
Для проверки, создадим файл index.php, с выводом информации о php.
echo '<?php phpinfo(); ?>' > /var/www/html/postfixadmin.mta.mailns.ru/index.php
Назначаем владельца директории:
chown -R apache:apache /var/www/html/postfixadmin.mta.mailns.ru
Перезапускаем Ngnix:
systemctl restart nginx
Перезапускаем Apache:
systemctl restart httpd
Открываем браузер, и заходим по адресу нашего сайта, должна открытся страница с информацией о php.
В данном примере:
http://postfixadmin.mta.mailns.ru/
wget -P /var/www/html/postfixadmin.mta.mailns.ru https://github.com/postfixadmin/postfixadmin/archive/refs/tags/postfixadmin-3.3.11.zip
cd /var/www/html/postfixadmin.mta.mailns.ru
Распакуем архив:
unzip postfixadmin-3.3.11.zip
Переносим содержимое распакованного архива в директорию сайта:
mv postfixadmin-postfixadmin-3.3.11/* /var/www/html/postfixadmin.mta.mailns.ru
Создаем каталог templates_c внутри папки портала (без него не запустится установка):
mkdir -p /var/www/html/postfixadmin.mta.mailns.ru/templates_c
Создаем базу данных postfix и учетную запись в mysql:
mysql -u root -p CREATE DATABASE postfix DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'UeBEPphUuKjnI3xKj5bk'; GRANT ALL ON postfix.* TO 'postfix'@'localhost'; exit
Создаем конфигурационный файл postfixadmin:
mcedit /var/www/html/postfixadmin.mta.mailns.ru/config.local.php
<?php $CONF['database_type'] = 'mysqli'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfix'; $CONF['database_password'] = 'UeBEPphUuKjnI3xKj5bk'; $CONF['database_name'] = 'postfix'; $CONF['configured'] = true; $CONF['default_language'] = 'ru'; ?>
database_* — параметры для подключения к базе данных;
configured — говорит приложению, что администратор закончил его конфигурирование;
default_language — используемый язык по умолчанию;
Назначаем владельца директории:
chown -R apache:apache /var/www/html/postfixadmin.mta.mailns.ru
Запускаем браузер и вводим адрес http://<IP-адрес сервера>/public/setup.php
http://postfixadmin.mta.mailns.ru/public/setup.php
Откроется страница для установки PostfixAdmin.
Задаем дважды пароль установки и генерируем хэш, кликнув по Generate setup_password hash.
После перезагрузки страницы копируем хэш.
Открываем конфигурационный файл:
mcedit /var/www/html/postfixadmin.mta.mailns.ru/config.local.php
И добавляем строку:
$CONF['setup_password'] = '$2y$10$3JlILs8D0M43MlV6gf4UwOS8Qm3TkTosAZ/9byE9869t/vGFXnEz2';
Перезагружаем страницу, теперь должна появится страница с проверкой конфигурации и форма для добавления суперпользователя, вводим данные:
Setup password — пароль, установки;
Админ — учетная запись для входа в панель управления PostfixAdmin;
Пароль — новый пароль для создаваемой учетной записи.
Добавляем суперпользователя PostfixAdmin
Переходим в браузере на страницу http://<IP-адрес сервера>/public/
http://postfixadmin.mta.mailns.ru/public/
Вводим логин и пароль для созданного пользователя.
Мы должны войти в postfix.admin:
Установка и настройка Postfix
Установка выполняется командой:
dnf install -y postfix postfix-mysql
После создаем учетную запись, от которой мы будем работать с каталогом виртуальных почтовых ящиков:
groupadd -g 1024 vmail useradd -d /home/mail -g 1024 -u 1024 vmail -m
Открываем на редактирование конфигурационный файл почтового сервера:
mcedit /etc/postfix/main.cf
И редактируем следующие строки:
myorigin = $mydomain ... mydestination = localhost.$mydomain, localhost, localhost.localdomain ... local_recipient_maps = unix:passwd.byname $alias_maps ... mynetworks = 127.0.0.0/8 111.111.111.111/32, localhost ... inet_interfaces = all ... inet_protocols = all ... smtpd_tls_cert_file = /etc/ssl/mail/public.pem ... smtpd_tls_key_file = /etc/ssl/mail/private.key
myorigin — указывает, какой домен подставлять отправителю, если он не указан в заголовке FROM.
mydestination — указываем, для каких доменов принимаем входящую почту.
local_recipient_maps — указываем, откуда брать список локальных пользователей.
mynetworks — разрешаем отправлять сообщения локальному серверу (111.111.111.111/32 — IP-адрес сервера.
inet_interfaces — необходимо убедиться, что postfix будет слушать на всех необходимых интерфейсах, в данном случае, на всех (all). Также можно задать варианты loopback-only (127.0.0.1) или конкретный IP-адрес интерфейса.
inet_protocols — данный параметр задаст протокол для работы postfix. В данном примере на всех (all). Также можно задать значения ipv4 или ipv6.
smtpd_tls_cert_file — полный путь до публичного сертификата.
smtpd_tls_key_file — полный путь до приватного сертификата.
Если имя сервера отличается от имени, по которому сервер будет зарегистрирован в DNS, задаем опцию:
myhostname = mx.mta.mailns.ru
Теперь в конец конфигурационного файла допишем следующе:
virtual_mailbox_base = /home/mail virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_minimum_uid = 1024 virtual_uid_maps = static:1024 virtual_gid_maps = static:1024 virtual_transport = dovecot dovecot_destination_recipient_limit = 1 smtpd_sasl_auth_enable = yes smtpd_sasl_exceptions_networks = $mynetworks smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtp_use_tls = yes smtpd_use_tls = yes smtpd_tls_auth_only = no smtpd_helo_required = yes
virtual_mailbox_base — базовый путь хранения почтовых ящиков в системе UNIX.
virtual_alias_maps — формат и путь хранения алиасов для виртуальных пользователей.
virtual_mailbox_domains — формат и путь хранения доменов виртуальных пользователей.
virtual_mailbox_maps — формат и путь хранения почтовых ящиков для виртуальных пользователей.
virtual_minimum_uid — с какого номера присваивать идентификаторы пользователям.
virtual_uid_maps — идентификатор пользователя, от которого записываются сообщения.
virtual_gid_maps — идентификатор группы, от которой записываются сообщения.
virtual_transport — задает доставщика сообщений.
dovecot_destination_recipient_limit — передача сообщений от Postfix в Dovecot выполняется по заданному количеству (в нашем примере, по 1 шт.).
smtpd_sasl_auth_enable — разрешает sasl аутентификацию.
smtpd_sasl_exceptions_networks — исключение сетей от использования шифрования.
smtpd_sasl_security_options — дополнительные опции настройки sasl.
broken_sasl_auth_clients — эту опцию прописываем для клиентов MS Outlook.
smtpd_sasl_type — указывает тип аутентификации.
smtpd_sasl_path — путь до временных файлов обмена информацией с Dovecot. Указывается либо абсолютный путь, либо относительный queue_directory (по умолчанию /var/spool/postfix). Итого, полный путь — /var/spool/postfix/private/auth.
smtp_use_tls — по возможности, нужно ли передавать сообщения по защищенному каналу.
smtpd_use_tls — указывает клиентам на наличие поддержки TLS.
smtpd_tls_auth_only — не использовать только TLS.
smtpd_helo_required — требовать начинать сессию с приветствия.
Создаем файл с настройками обращения к базе с алиасами:
mcedit /etc/postfix/mysql_virtual_alias_maps.cf
Содержимое:
user = postfix password = UeBEPphUuKjnI3xKj5bk hosts = localhost dbname = postfix query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
user и password — логин и пароль для подключения к MySQL;
hosts — имя сервера баз данных (в нашем случае, локальный сервер); dbname — имя базы данных;
query — шаблон запроса к данным.
Создаем файл с инструкцией получения данных по виртуальным доменам:
mcedit /etc/postfix/mysql_virtual_domains_maps.cf
Содержимое:
user = postfix password = UeBEPphUuKjnI3xKj5bk hosts = localhost dbname = postfix query = SELECT domain FROM domain WHERE domain='%u'
mcedit /etc/postfix/mysql_virtual_mailbox_maps.cf
Содержимое:
user = postfix password = UeBEPphUuKjnI3xKj5bk hosts = localhost dbname = postfix query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'
mcedit /etc/postfix/master.cf
добавляем в самом конце файла:
submission inet n - n - - smtpd -o smtpd_tls_security_level=may -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=/var/spool/postfix/private/auth -o smtpd_sasl_security_options=noanonymous -o smtpd_sasl_local_domain=$myhostname smtps inet n - n - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -d ${recipient}
необходимо убедиться, что в содержимом файла нет других раскомментированных опций для submission, smtps и dovecot (по умолчанию, их нет). В данном случае, мы настроили работу postfix на портах 25, 465 и 587. В файле master.cf мы настраиваем работу вспомогательных сервисов для Postfix. Описание каждого сервиса начинается с новой строки без отступа. Затем идут настройки для сервиса и параметры запуска. Для примера, рассмотрим первую добавленную строку — submission inet n — n — — smtpd:
submission — имя сервиса. Возможно использование заранее определенных в postfix служб или создание своих. В данном примере submission для подключения MUA по порту 587 при отправке почты.
inet — тип обслуживания. Возможны варианты inet (сокет TCP/IP), unix (потоковый сокет), unix-dgram (сокет дейтаграммы), fifo (именованный канал очереди), pass (потоковый сокет UNIX-домена).
первый «n» — является ли сервис частным и должен быть ограниченным. Возможны варианты y или n. Для типа обслуживания inet может быть только n.
первый «-« — работает ли служба с правами root. Возможны варианты y, n и -. Прочерк означает неприменимость данного параметра к конкретному сервису.
второй «n» — должна ли служба работать в окружении chroot. Возможны варианты y или n.
второй «-« — через какое время в секундах пробудить службу, если она неактивна.
третий «-« — максимальное количество одновременно выполняемых процессов, которые может запустить данный сервис.
smtpd — выполняемая команда.
после команды идут аргументы ее запуска. Они могут переопределять параметры, заданные в main.cf. Каждый аргумент записывается с новой строки и начинается с двух пробелов. В данном примере мы используем следующие аргументы:
smtpd_tls_security_level — задает уровень безопасности с применением TLS. В данном примере may говорит о возможности его использования.
smtpd_sasl_auth_enable — разрешает sasl аутентификацию.
smtpd_sasl_type — указывает тип аутентификации.
smtpd_sasl_path — путь до временных файлов обмена информацией с сервером хранения почты (в нашем случае Dovecot). Указывается либо абсолютный путь, либо относительный queue_directory.
smtpd_sasl_security_options — дополнительные опции настройки sasl.
smtpd_sasl_local_domain — добавить домен для пользователей, которые проходят smtp-аутентификацию.
syslog_name — префикс названия службы при занесении ее в системный журнал.
smtpd_tls_wrappermode — запускать ли службу в нестандартном режиме (для поддержки TLS).
smtpd_client_restrictions — настройки ограничения клиентских соединений. В данном примере разрешить только авторизованных.
Генерируем сертификаты безопасности. Для этого создаем каталог, в котором их разместим:
mkdir -p /etc/ssl/mail
И сгенерируем их следующей командой:
openssl req -new -x509 -days 1461 -nodes -out /etc/ssl/mail/public.pem -keyout /etc/ssl/mail/private.key -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=mta.mailns.ru"
сертификат сгенерирован на 1461 день, ключи subj могут быть произвольными, CN необходимо указать в соответствии с именем сервера, по которому мы будем подключаться к почте.
Добавляем postfix в атозагрузку:
systemctl enable postfix
Запускаем postfix:
systemctl start postfix
Установка и настройка Dovecot
Устанавливаем Dovecot с компонентом для работы с СУБД:
dnf install -y dovecot dovecot-mysql
Настраиваем способ хранения сообщений:
mcedit /etc/dovecot/conf.d/10-mail.conf
в данном примере сообщения будут храниться в продвинутом формате maildir в каталоге /home/mail/<почтовый домен>/<логин пользователя.
Настраиваем слушателя для аутентификации:
mcedit /etc/dovecot/conf.d/10-master.conf
Содержимое:
service auth { unix_listener auth-userdb { mode = 0600 user = vmail group = vmail } unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } }
в данном примере мы настраиваем сервис для аутентификации и создаем два прослушивателя: /var/spool/postfix/private/auth — для возможности постфиксом использовать авторизацию через Dovecot (обращаем внимание, что /var/spool/postfix/private/auth — это тот же private/auth, который был прописан нами в postfix); auth-userdb — сокет для авторизации через dovecot-lda. Опция mode задает права на сокет, например, 666 позволит любому пользователю к нему подключиться; user и group задает пользователя и группу владельцев на сокет.
А также в этом файле добавим строки:
service stats { unix_listener stats-reader { user = vmail group = vmail mode = 0660 } unix_listener stats-writer { user = vmail group = vmail mode = 0660 } }
в противном случае, мы увидим в логе ошибку error net_connect_unix(/var/run/dovecot/stats-writer) failed permission denied, так как у пользователя vmail не будет прав.
Настраиваем аутентификацию в Dovecot:
mcedit /etc/dovecot/conf.d/10-auth.conf
Содержимое:
#!include auth-system.conf.ext !include auth-sql.conf.ext
в данном случае мы просто комментируем обычную аутентификацию и снимаем комментарий для использования sql-аутентификации.
Настраиваем использование шифрования:
mcedit /etc/dovecot/conf.d/10-ssl.conf
Редактируем следующие строки:
ssl = required ssl_cert = </etc/ssl/mail/public.pem ssl_key = </etc/ssl/mail/private.key
ssl = required — укажет dovecot требовать от клиентов использования шифрования;
ssl_cert — путь до открытого сертификата (также нами указывался в postfix); ssl_key — путь к закрытому ключу.
Настроим автоматическое создание каталогов при первом подключении пользователя к ящику:
mcedit /etc/dovecot/conf.d/15-lda.conf
Приведем следующий параметр к виду:
lda_mailbox_autocreate = yes
Настраиваем подключение к базе данных:
mcedit /etc/dovecot/conf.d/auth-sql.conf.ext
Проверяем следующие параметры:
passdb { … args = /etc/dovecot/dovecot-sql.conf.ext } userdb { … args = /etc/dovecot/dovecot-sql.conf.ext }
Создаем файл с настройками работы с mysql:
mcedit /etc/dovecot/dovecot-sql.conf.ext
Содержимое:
driver = mysql connect = host=localhost dbname=postfix user=postfix password=UeBEPphUuKjnI3xKj5bk default_pass_scheme = MD5-CRYPT password_query = SELECT password FROM mailbox WHERE username = '%u' user_query = SELECT maildir, 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u' user_query = SELECT CONCAT('/home/mail/',LCASE(`domain`),'/',LCASE(`maildir`)), 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u'
в данном примере настроен запрос на получение данных из базы mysql (mariadb). password_query — запрос на получение пароля из таблицы mailbox; user_query — запрос на получение данных пользователя (домашняя почтовая директория, идентификатор 1024 (идентификатор созданного нами ранее пользователя vmail).
Настраиваем интерфейс, на котором будет слушать dovecot:
mcedit /etc/dovecot/dovecot.conf
Приводим параметр listen к следующему значению:
listen = *
по умолчанию, dovecot слушает также на ipv6 (listen = *, ::). Если на сервере не используется 6-я версия протокола TCP/IP, в логах dovecot появятся ошибки:
master: Error: service(imap-login): listen(::, 143) failed: Address family not supported by protocol
master: Error: service(imap-login): listen(::, 993) failed: Address family not supported by protocol
Добавляем dovecot в атозагрузку и запускаем:
systemctl enable dovecot --now
Создаем почтовый ящик и проверяем работу сервера
Переходим в браузере на страницу Postfixadmin:
http://postfixadmin.mta.mailns.ru/public/
Вводим логин и пароль от административной учетной записи. Перед нами появится страница управления учетными записями.
Переходим в Список доменов — Новый домен.
Заполняем формы и нажимаем Добавить домен:
Теперь переходим в Обзор — Создать ящик.
Вводим данные нового пользователя и нажимаем Создать ящик:
Теперь можно подключиться к серверу с помощью любой почтовой программы, например, Mozilla Thunderbird.
Параметры для подключения:
-
- Сервер: имя сервера или его IP-адрес (не желательно, так как сертификат выдается по доменному имени).
- IMAP: 143 STARTTLS или 993 SSL/TLS
- POP3: 110 STARTTLS или 995 SSL/TLS
- SMTP: 25 STARTTLS или 465 SSL/TLS или 587 STARTTLS
для корректной работы сервера на портах 993, 995, 465 (SSL/TLS) необходим правильный сертификат (для нашего домена и выпущенный доверенным центром сертификации).
Устанавливаем и настраиваем Roundcube Webmail
Создадим директорию для сайта:
mkdir -p /var/www/html/mta.mailns.ru
Создаем новый конфигурационный файл виртуального домена nginx:
mcedit /etc/nginx/conf.d/mta.mailns.ru.conf
И добавляем следующее содержимое (для HTTP):
server { listen 80; server_name mta.mailns.ru; root /var/www/html/mta.mailns.ru; index index.php index.html index.htm; access_log /var/log/nginx/mta.mailns.ru.access.log main; error_log /var/log/nginx/mta.mailns.ru.error.log; location / { root /var/www/html/mta.mailns.ru; proxy_pass http://127.0.0.1:8080/; proxy_redirect off; proxy_force_ranges on; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_cache off; proxy_cache_key "$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri"; proxy_cache_valid 3s; proxy_cache_min_uses 2; client_body_buffer_size 128k; client_max_body_size 1024m; proxy_connect_timeout 180; proxy_send_timeout 180; proxy_read_timeout 180; send_timeout 180; proxy_buffer_size 4k; proxy_buffers 8 32k; proxy_busy_buffers_size 68k; proxy_temp_file_write_size 10m; } location ~ /\. { deny all; } }
Создаем новый конфигурационный файл виртуального домена apache:
mcedit /etc/httpd/conf.d/mta.mailns.ru.conf
добавляем следующее содержимое:
<VirtualHost *:8080> ServerName mta.mailns.ru DocumentRoot /var/www/html/mta.mailns.ru SetEnvIf X-Forwarded-Proto https HTTPS=on <IFModule proxy_fcgi_module> ProxyFCGISetEnvIf "true" SCRIPT_FILENAME "/var/www/html/mta.mailns.ru%{reqenv:SCRIPT_NAME}" <FilesMatch \.php$> SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost/" </FilesMatch> </IFModule> ErrorLog /var/log/httpd/mta.mailns.ru.error.log CustomLog /var/log/httpd/mta.mailns.ru.access.log common <Directory /var/www/html/mta.mailns.ru> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted </Directory> </VirtualHost>
Для проверки, создадим файл index.php, с выводом информации о php.
echo '<?php phpinfo(); ?>' > /var/www/html/mta.mailns.ru/index.php
Назначаем владельца директории:
chown -R apache:apache /var/www/html/mta.mailns.ru
Перезапускаем Ngnix:
systemctl restart nginx
Перезапускаем Apache:
systemctl restart httpd
Открываем браузер, и заходим по адресу нашего сайта, должна открытся страница с информацией о php.
http://mta.mailns.ru/
dnf install -y tar
На официальном сайте заходим на страницу загрузки Roundcube. Копируем ссылку на необходимую версию продукта и скачиваем архив:
wget -P /var/www/html/mta.mailns.ru https://github.com/roundcube/roundcubemail/releases/download/1.5.2/roundcubemail-1.5.2-complete.tar.gz
Распаковываем скачанный архив в директорию сайта:
tar -zvxf /var/www/html/mta.mailns.ru/roundcubemail-1.5.2-complete.tar.gz -C /var/www/html/mta.mailns.ru
Переносим содержимое распакованного архива в директорию сайта:
mv /var/www/html/mta.mailns.ru/roundcubemail-1.5.2/* /var/www/html/mta.mailns.ru/
Назначаем владельца
chown -R apache:apache /var/www/html/mta.mailns.ru
Создаем базу данных roundcubemail и учетную запись в mysql:
mysql -u root -p CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; CREATE USER 'roundcube'@'localhost' IDENTIFIED BY 'KJHFf4gld8gh5DFG'; GRANT ALL ON roundcubemail.* TO 'roundcube'@'localhost'; exit
Устанавливаем компоненты, необходимые для работы Roundcube:
dnf install -y php-pear php-mcrypt php-intl php-ldap php-pear-Net-SMTP php-zip php-imagick php-gd
Укажем временную зону в php, для этого откроем php.ini:
mcedit /etc/php.ini
Изменим параметр:
date.timezone = "Asia/Yekaterinburg"
Можно приступать к настройке, откроем в браузере адрес сайта:
http://mta.mailns.ru/installer/
Должна открыться страница первого шага настройки: Check environment
Требования соответсвуют для установки нажимаем: Next.
Второй шаг настройка конфигурации: Create config
Настраиваем имя компании, подключение к базе данных, указываем язык, подключаем необходимые плагины.
Нажимаем: Creare config
Конфигурация создана, и сохранена.
Третий шаг тестирование: Test config
Инициализируем базу данных и проводим тесты IMAP и SMTP.
После установки в файле конфигурации запрещаем установку и удаляем папку с файлами инсталляции.
Открываем конфигурационный файл roundcube:
mcedit /var/www/html/mta.mailns.ru/config/config.inc.php
Запрещаем установку портала:
$config['enable_installer'] = false;
После удаляем папку с установочными скриптами:
\rm -R /var/www/html/mta.mailns.ru/installer
Заходим в браузере по адресу http://mta.mailns.ru — должна открыться страница аутентификации пользователя. Вводим в качестве логина адрес почты созданного пользователя и его пароль.
Авторизуемся и переходим в веб-интерфейс Roundcube Webmail.
Настройки DNS для сервера
А-запись
Необходимо, чтобы имя сервера, которым представляется почтовый сервер разрешалось в IP-адрес.
Для этого заходим в консоль управления зоной домена и создаем запись типа А для сопоставления имени сервера с IP-адресом, на котором слушает запросы данный сервер.
MX-запись указывает на сервер, принимающий почту для вашего домена.
Специальная TXT-запись в DNS, в которой указано с каких почтовых серверов может быть отправлена почта для домена.
Технология подтверждения почтового домена. Используется для уменьшения общего объема СПАМа и почтового фишинга. Расшифровывается как DomainKeys Identified Mail. Про DKIM важно знать, что она не защищает Вас от СПАМа — она делает так, что Ваши письма меньше попадают в СПАМ.
Политика обработки почтовых сообщений на основе SPF и DKIM. С помощью нее администратор почты может самостоятельно определять, что делать с письмами, которые не прошли доменную проверку на чужих серверах. Таким образом, не почтовая система делает выбор, как поступить с «плохими» сообщениями, а владелец домена. Настраивается путем создания TXT-записи в DNS. Расшифровывается как Domain-based Message Authentication, Reporting and Conformance.
Устанавливаем opendkim и утилиту opendkim-tools:
dnf install -y opendkim opendkim-tools
Создаем каталог для размещения ключей домена:
mkdir -p /etc/opendkim/keys
Назначаем владельца каталога:
chown -R opendkim:opendkim /etc/opendkim
Задаем права:
chmod -R go-wrx /etc/opendkim/keys
Приводим конфигурационный файл opendkim к виду:
mcedit /etc/opendkim.conf
Содержимое:
AutoRestart Yes AutoRestartRate 10/1h PidFile /var/run/opendkim/opendkim.pid Mode sv Syslog yes SyslogSuccess yes #LogWhy yes UserID opendkim:opendkim Socket inet:8891@localhost Umask 022 Canonicalization relaxed/relaxed Selector default Background yes MinimumKeyBits 1024 KeyFile /etc/opendkim/keys/mta.mailns.ru/default KeyTable /etc/opendkim/KeyTable SigningTable refile:/etc/opendkim/SigningTable ExternalIgnoreList refile:/etc/opendkim/TrustedHosts InternalHosts refile:/etc/opendkim/TrustedHosts
Открываем конфигурационный файл postfix:
mcedit /etc/postfix/main.cf
Добавляем:
milter_protocol = 2 milter_default_action = accept smtpd_milters = inet:localhost:8891 non_smtpd_milters = inet:localhost:8891
Добавляем opendkim в атозагрузку:
systemctl enable opendkim
Запускаем opendkim:
systemctl start opendkim
Перегружаем postfix
systemctl restart postfix
Создаем каталог, генерируем ключ с помощью утилиты opendkim-genkey:
mkdir /etc/opendkim/keys/mta.mailns.ru opendkim-genkey -D /etc/opendkim/keys/mta.mailns.ru/ -d mta.mailns.ru -s default
Меняем владельца на сгенерированный ключ и переименовываем его:
chown -R opendkim:opendkim /etc/opendkim/keys/mta.mailns.ru mv /etc/opendkim/keys/mta.mailns.ru/default.private /etc/opendkim/keys/mta.mailns.ru/default
Добавляем правило для нашего домена в файл со списком ключей, доступных для подписи (/etc/opendkim/KeyTable):
echo -e "default._domainkey.mta.mailns.ru mta.mailns.ru:default:/etc/opendkim/keys/mta.mailns.ru/default" >> /etc/opendkim/KeyTable
Добавляем правило для нашего домен в файл со списком доменов и аккаунтов доступных для подписи (/etc/opendkim/SingleTable):
echo -e "*@mta.mailns.ru default._domainkey.mta.mailns.ru" >> /etc/opendkim/SigningTable
Добавляем наши домены в файл со списком доверенных доменов при подписывании или проверке (/etc/opendkim/TrustedHosts):
echo -e "mta.mailns.ru\mx.mta.mailns.ru" >> /etc/opendkim/TrustedHosts
Перегружаем postfix и opendkim:
systemctl restart postfix systemctl restart opendkim
При генерации сертификата, утилита opendkim-genkey создала файл с данными, которые надо прописать в наш DNS:
cat /etc/opendkim/keys/mta.mailns.ru/default.txt
Отправка почты
Для проверки корректности настройки сервера, воспользуемся ресурсом: https://www.mail-tester.com.
Копируем адрес письма из поля:
Отправим письмо на указанный адрес:
Ссылки
Почтовый сервер на CentOS 8 с виртуальными доменами, системой управления, веб-доступом и другими возможностями
Roundcube SMTP error 250 authentication failed – Here’s how to fix it