Инструкция по установке EAI почтового сервера под ОС Ubuntu 22.04 LTS: различия между версиями

Материал из вики.поддерживаю.рф
Перейти к навигации Перейти к поиску
 
(не показано 7 промежуточных версий этого же участника)
Строка 9: Строка 9:
== Подготовка системы ==
== Подготовка системы ==


# Авторизуемся на удаленном сервере  <pre>ssh root@62.109.26.140</pre>
1. Авторизуемся на удаленном сервере   
# Обновляем систему <pre>apt update && apt upgrade -y && apt full-upgrade -y && apt dist-upgrade -y</pre>
<pre>ssh root@62.109.26.140</pre>
# Очищаем систему <pre>apt autoremove -y && apt clean -y && apt autoclean -y</pre>
 
# Обновляем корневые сертификаты <pre>update-ca-certificates</pre>
2. Обновляем систему  
# Устанавливаем необходимые утилиты <pre>apt install nano wget net-tools -y</pre>
<pre>apt update && apt upgrade -y && apt full-upgrade -y && apt dist-upgrade -y</pre>
# Настраиваем часовой пояс <pre>timedatectl set-timezone Europe/Moscow</pre>
 
# Настраиваем имя хоста <pre>hostnamectl set-hostname xn----gtbdaqueeage2s.xn--p1ai</pre><pre>nano -l /etc/hosts</pre>
3. Очищаем систему  
# и вносим <pre>127.0.0.1 localhost xn----gtbdaqueeage2s.xn--p1ai доменное-имя.рф</pre><pre>127.0.1.1 xn----gtbdaqueeage2s.xn--p1ai доменное-имя.рф</pre><pre>62.109.26.140 xn----gtbdaqueeage2s.xn--p1ai доменное-имя.рф</pre>
<pre>apt autoremove -y && apt clean -y && apt autoclean -y</pre>
# Проверяем имя хоста <pre>hostname</pre>
 
# Перезагружаем систему <pre>reboot</pre>
4. Обновляем корневые сертификаты  
<pre>update-ca-certificates</pre>
 
5. Устанавливаем необходимые утилиты  
<pre>apt install nano wget net-tools -y</pre>
 
6. Настраиваем часовой пояс  
<pre>timedatectl set-timezone Europe/Moscow</pre>
 
7. Настраиваем имя хоста  
hostnamectl set-hostname xn----gtbdaqueeage2s.xn--p1ai
nano -l /etc/hosts
 
8. и вносим  
127.0.0.1 localhost xn----gtbdaqueeage2s.xn--p1ai доменное-имя.рф
127.0.1.1 xn----gtbdaqueeage2s.xn--p1ai доменное-имя.рф
62.109.26.140 xn----gtbdaqueeage2s.xn--p1ai доменное-имя.рф
 
 
9. Проверяем имя хоста  
<pre>hostname</pre>
 
10. Перезагружаем систему  
<pre>reboot</pre>


== Установка программных компонент ==
== Установка программных компонент ==


# Устанавливаем необходимые пакеты Dovecot, Postfix и MariaDB <pre>cd && apt install postfix dovecot-core dovecot-imapd dovecot-lmtpd dovecot-pop3d mariadb-server dovecot-mysql postfix-mysql mailutils -y</pre>
1. Устанавливаем необходимые пакеты Dovecot, Postfix и MariaDB  
# во время установки выбираем Internet Site и указываем имя домена xn----gtbdaqueeage2s.xn--p1ai
<pre>cd && apt install postfix dovecot-core dovecot-imapd dovecot-lmtpd dovecot-pop3d mariadb-server dovecot-mysql postfix-mysql mailutils -y</pre>
# Запускаем сервисы, включаем автозапуск и проверяем их статус<pre>systemctl start postfix && systemctl start dovecot && systemctl start mariadb</pre><pre>systemctl enable postfix && systemctl enable dovecot && systemctl enable mariadb</pre><pre>systemctl status postfix</pre><pre>systemctl status dovecot</pre><pre>systemctl status mariadb</pre>
 
# Отправляем тестовое письмо <pre>echo "Test mail" | mail -s "Test mail" happyzomb@ya.ru</pre>
2. во время установки выбираем Internet Site и указываем имя домена xn----gtbdaqueeage2s.xn--p1ai
# Настраиваем поддержку кодировки базы данных <pre>nano /etc/mysql/my.cnf</pre>
 
# и добавляем: <pre>[mysqld]</pre><pre>character-set-server = utf8</pre><pre>collation-server = utf8_general_ci</pre><pre>skip-character-set-client-handshake</pre><pre>bind-address=127.0.0.1</pre><pre>datadir=/var/lib/mysql</pre><pre>log-error=/var/log/mariadb.log</pre><pre>pid-file=/tmp/mariadb.pid</pre>
3. Запускаем сервисы, включаем автозапуск и проверяем их статус
# Завершаем установку MariaDB и проверяем статус службы <pre>usermod -d /var/lib/mysql/ mysql</pre><pre>systemctl restart mariadb && systemctl status mariadb | grep Active</pre>
systemctl start postfix && systemctl start dovecot && systemctl start mariadb
# Проверяем, что службы Postfix, Dovecot и MariaDB запущены и слушают соответствующие порты <pre>netstat -tulnp</pre>
systemctl enable postfix && systemctl enable dovecot && systemctl enable mariadb
systemctl status postfix
systemctl status dovecot
systemctl status mariadb
 
4. Отправляем тестовое письмо  
<pre>echo "Test mail" | mail -s "Test mail" happyzomb@ya.ru</pre>
 
5. Настраиваем поддержку кодировки базы данных  
<pre>nano /etc/mysql/my.cnf</pre>
6. и добавляем:  
 
[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
skip-character-set-client-handshake
bind-address=127.0.0.1
datadir=/var/lib/mysql
log-error=/var/log/mariadb.log
pid-file=/tmp/mariadb.pid
 
7. Завершаем установку MariaDB и проверяем статус службы  
<pre>usermod -d /var/lib/mysql/ mysql</pre><pre>systemctl restart mariadb && systemctl status mariadb | grep Active</pre>
 
8. Проверяем, что службы Postfix, Dovecot и MariaDB запущены и слушают соответствующие порты  
<pre>netstat -tulnp</pre>


== Настройка базы данных ==
== Настройка базы данных ==


# Авторизуемся в MariaDB <pre>mysql -u root -p</pre>
1. Авторизуемся в MariaDB  
# Создаем базу данных для Dovecot <pre>CREATE DATABASE eaimail;</pre>
<pre>mysql -u root -p</pre>
# Выбираем базу данных <pre>USE eaimail;</pre>
 
# Настраиваем доступ <pre>GRANT SELECT, INSERT, UPDATE, DELETE ON eaimail.* TO 'dbuser'@'localhost' IDENTIFIED BY '6y5ljiB9j3M7';</pre><pre>GRANT SELECT, INSERT, UPDATE, DELETE ON eaimail.* TO 'dbuser'@'localhost.localdomain' IDENTIFIED BY '6y5ljiB9j3M7';</pre><pre>FLUSH PRIVILEGES;</pre><pre>SHOW GRANTS FOR 'dbuser'@'localhost';</pre>
2. Создаем базу данных для Dovecot  
# Создаем таблицы <pre>CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );</pre><pre>CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );</pre><pre>CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );</pre>
<pre>CREATE DATABASE eaimail;</pre>
# Добавляем значения имени домена и адресов электронной почты <pre>INSERT INTO domains (domain) VALUES ('xn----gtbdaqueeage2s.xn--p1ai');</pre><pre>INSERT INTO domains (domain) VALUES ('доменное-имя.рф');</pre><pre>INSERT INTO users (email, password) VALUES ('info@xn----gtbdaqueeage2s.xn--p1ai', ENCRYPT('6y5ljiB9j3M7'));</pre><pre>INSERT INTO users (email, password) VALUES ('info@доменное-имя.рф', ENCRYPT('6y5ljiB9j3M7'));</pre>
 
# Настраиваем переадресацию <pre>INSERT INTO forwardings (source,destination) VALUES ('info@доменное-имя.рф','info@xn----gtbdaqueeage2s.xn--p1ai');</pre>
3. Выбираем базу данных  
#Выходим <pre>quit</pre>
<pre>USE eaimail;</pre>
 
4. Настраиваем доступ  
<pre>
GRANT SELECT, INSERT, UPDATE, DELETE ON eaimail.* TO 'dbuser'@'localhost' IDENTIFIED BY '6y5ljiB9j3M7';
GRANT SELECT, INSERT, UPDATE, DELETE ON eaimail.* TO 'dbuser'@'localhost.localdomain' IDENTIFIED BY '6y5ljiB9j3M7';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'dbuser'@'localhost';
</pre>
 
5. Создаем таблицы  
<pre>CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );
CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );
CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );
</pre>
 
6. Добавляем значения имени домена и адресов электронной почты  
<pre>INSERT INTO domains (domain) VALUES ('xn----gtbdaqueeage2s.xn--p1ai');
INSERT INTO domains (domain) VALUES ('доменное-имя.рф');
INSERT INTO users (email, password) VALUES ('info@xn----gtbdaqueeage2s.xn--p1ai', ENCRYPT('6y5ljiB9j3M7'));
INSERT INTO users (email, password) VALUES ('info@доменное-имя.рф', ENCRYPT('6y5ljiB9j3M7'));
</pre>
 
7. Настраиваем переадресацию  
<pre>INSERT INTO forwardings (source,destination) VALUES ('info@доменное-имя.рф','info@xn----gtbdaqueeage2s.xn--p1ai');</pre>
 
8. Выходим <pre>quit</pre>
 
== Настройка почтового сервера ==
 
1.  Настраиваем связь Postfix и MariaDB
nano /etc/postfix/mysql-virtual_domains.cf
 
2. и вносим:
user = dbuser
password = 6y5ljiB9j3M7
dbname = eaimail
= SELECT domain AS virtual FROM domains WHERE domain='%s'
hosts = 127.0.0.1
 
3. Настраиваем переадресацию
nano /etc/postfix/mysql-virtual_forwardings.cf
 
4. и вносим:
user = dbuser
password = 6y5ljiB9j3M7
dbname = eaimail
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1
 
5. Настраиваем скрипт для создания виртуальных ящиков
nano /etc/postfix/mysql-virtual_mailboxes.cf
 
6. и вносим:
user = dbuser
password = 6y5ljiB9j3M7
dbname = eaimail
query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'
hosts = 127.0.0.1
 
7. Настраиваем скрипт для переадресации на другой SMTP-сервер
nano /etc/postfix/mysql-virtual_email2email.cf
 
8. и вносим:
user = dbuser
password = 6y5ljiB9j3M7
dbname = eaimail
query = SELECT email FROM users WHERE email='%s'
hosts = 127.0.0.1
 
9. Устанавливаем права на конфигурационные файлы Postfix
chmod 640 /etc/postfix/mysql-virtual_*.cf && chgrp postfix /etc/postfix/mysql-virtual_*.cf
 
10. Создаем группу и пользователя для виртуальных адресов
groupadd -g 5000 vmail && useradd -g vmail -u 5000 vmail -d /home/vmail -m
 
11. Настраиваем Postfix для использования виртуального алиаса домена
nano /etc/postfix/main.cf
 
12. и изменяем:
<pre>
smtp_tls_security_level = may
meta_directory = /etc/postfix
shlib_directory = no
myhostname = xn----gtbdaqueeage2s.xn--p1ai
mydomain = xn----gtbdaqueeage2s.xn--p1ai
mydestination = localhost, localhost.localdomain
myorigin = $mydomain
mynetworks = 127.0.0.1
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_authenticated_header = yes
broken_sasl_auth_clients = yes
smtpd_use_tls = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_tls_auth_only = yes
smtpd_tls_loglevel = 1
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_domains = доменное-имя.рф
virtual_transport = dovecot
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf
smtputf8_enable = yes
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks
</pre>
 
13. Настраиваем службу Postfix
nano /etc/postfix/master.cf
 
14. и изменяем:
<pre>
smtp inet n - - - - smtpd
    flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender}
-d ${recipient}
</pre>
 
15. Настраиваем логирование Postfix, перезапускаем и проверяем службу
postconf maillog_file=/var/log/postfix.log
systemctl restart postfix && systemctl status postfix
 
16. Настраиваем Dovecot для подключения к базе данных
nano /etc/dovecot/dovecot-sql.conf.ext
 
17. и вносим:
<pre>
driver = mysql
connect = host=127.0.0.1 dbname=eaimail user=dbuser password=6y5ljiB9j3M7
default_pass_scheme = CRYPT
password_query = SELECT email as user, password FROM users WHERE email='%u';
</pre>
 
18. Устанавливаем права CHMOD на конфигурационные файлы Dovecot
chmod 640 /etc/dovecot/dovecot-sql.conf.ext && chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext
 
19. Резервируем конфигурационный файл Dovecot
mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup
 
20. Настраиваем Dovecot
nano /etc/dovecot/dovecot.conf
 
21. и изменяем:
<pre>
protocols = imap pop3 lmtp
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/home/vmail/%d/%n/Maildir
 
namespace {
    type = private
    separator = .
    prefix = INBOX.
    inbox = yes
}
service auth {
    unix_listener auth-master {
        mode = 0600
        user = vmail
    }
    unix_listener /var/spool/postfix/private/auth {
        mode = 0666
        user = postfix
        group = postfix
    }
user = root
}
auth_mechanisms = plain login
service auth-worker {
    user = root
}
protocol lda {
    log_path = /home/vmail/dovecot-deliver.log
    auth_socket_path = /var/run/dovecot/auth-master
    postmaster_address = postmaster@xn----gtbdaqueeage2s.xn--p1ai
}
protocol pop3 {
    pop3_uidl_format = %08Xu%08Xv
        pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
passdb {
    driver = sql
    args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
    driver = static
    args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
}
</pre>
 
22. Перезагружаем Dovecot и проверяем статус службы
systemctl restart dovecot && systemctl status dovecot | grep Active
 
23. Настраиваем алиас
nano /etc/aliases
 
24. и добавляем:
root: postmaster@xn----gtbdaqueeage2s.xn--p1ai
 
25. Настраиваем логирование Dovecot
nano /etc/dovecot/conf.d/10-logging.conf
 
26. и добавляем:
log_path = /var/log/dovecot.log
auth_verbose = yes
 
27. Исправляем ошибку подключения Dovecot к базе данных
nano /etc/postfix/dynamicmaps.cf
 
28. и заменяем:
mysql  /usr/lib/postfix/postfix-mysql.so dict_mysql_open
 
29. Перезагружаем Postfix и Dovecot
systemctl restart postfix && systemctl restart dovecot
 
== Настройка почтового клиента ==
 
1. Создаем базу данных для веб-интерфейса Roundcube
2. авторизуемся:
mysql -u root
 
3. создаем базу данных:
CREATE DATABASE roundcubedb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
 
4. создаем пользователя:
CREATE USER rcuser@localhost IDENTIFIED BY '6y5ljiB9j3M7';
 
5. предоставляем ему права к базе данных:
<pre>
GRANT ALL PRIVILEGES ON roundcubedb.* TO rcuser@localhost;
# Перезапускаем права
FLUSH PRIVILEGES;
# Выходим
quit
</pre>
 
6. Устанавливаем Apache и PHP для веб-интерфейса Roundcube
apt install apache2 php8.1 php8.1-gd php8.1-common php-json php-imagick php8.1-imap php8.1-xml php8.1-opcache php8.1-mbstring
php8.1-curl php8.1-zip php8.1-ldap php8.1-mysqli php8.1-bz2 php8.1-intl -y
 
7. Запускаем Apache, активируем автозапуск службы и проверяем статус
systemctl start apache2 && systemctl enable apache2 && systemctl status apache2
 
8. Скачиваем архив с исходным кодом Roundcube
cd /tmp && wget https://github.com/roundcube/roundcubemail/releases/download/1.5.2/roundcubemail-1.5.2-complete.tar.gz
 
9. Распаковываем архив
tar xvf roundcubemail-1.5.2-complete.tar.gz
 
10. Копируем файлы Roundcube в корневой каталог Apache
mv roundcubemail-1.5.2/* /var/www/html/
 
11. Назначаем права CHMOD на корневой каталог и файлы Roundcube
chown www-data:www-data -R /var/www && chmod -R 775 /var/www
 
12. Импортируем дамп базы данных Roundcube в MariaDB
cd /var/www/html && mysql -u rcuser -p roundcubedb < /var/www/html/SQL/mysql.initial.sql
 
13. Настраиваем Apache для работы Roundcube - задаем имя хоста, индексный файл и предоствляем права на корневой каталог
nano /etc/apache2/sites-enabled/000-default.conf
 
14. и вносим:
<pre>
<VirtualHost *:80>
        ServerName xn----gtbdaqueeage2s.xn--p1ai
        ServerAdmin webmaster@xn----gtbdaqueeage2s.xn--p1ai
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/roundcube_error.log
        CustomLog ${APACHE_LOG_DIR}/roundcube_access.log combined
 
      <Directory />
      Options FollowSymLinks
      AllowOverride All
      Require all granted
      </Directory>
 
      <Directory /var/www/html/>
      Options FollowSymLinks MultiViews
      AllowOverride All
      Order allow,deny
      allow from all
      Require all granted
      DirectoryIndex index.php
      </Directory>
</VirtualHost>
</pre>
 
15. Перезапускаем Apache и проверяем статус службы
systemctl reload apache2 && systemctl status apache2
 
16. Отключаем авторизацию Roundcube в почтовый сервер, так как почтовый сервер находится на localhost
nano /var/www/html/config/defaults.inc.php
 
17. и изменяем:
$config['smtp_user'] = '';
$config['smtp_pass'] = '';
 
18. Переходим по ссылке и завершаем установку Roundcube
http://доменное-имя.рф/installer/
 
19. В качестве адресов подключения указываем localhost, порт 143 для входящей электронной почты и 25 для исходящей
20. Проходим тесты подключения и завершаем настройку, затем переименовываем папку installer командой:
mv /var/www/html/installer/ /var/www/html/installer_old/
 
== Настройка межсетевого экрана ==
 
1. Настраиваем фаерволл
apt install ufw -y
 
2. Настраиваем правила фаерволла
ufw default deny incoming && ufw default allow outgoing
ufw allow 22 && ufw allow 25 && ufw allow 80 && ufw allow 443 && ufw allow 465 && ufw allow 143 && ufw allow 993 && ufw allow 995
ufw enable
 
3. Проверяем список правил и статус службы фаерволла
ufw verbose numbered
systemctl status ufw
 
4. Установка и настройка завершена! Перезагружаем удаленный сервер
reboot
 
5. Авторизация в веб-интерфейсе Roundcube должна работать для обоих адресов - info@xn----gtbdaqueeage2s.xn--p1ai и info@доменное-имя.рф. При отправке писем на любой из этих адресов письма должны доходить равнозначно!

Текущая версия от 13:23, 27 июня 2022

Установка EAI почтового сервера

С помощью данной инструкции вы сможете установить почтовый сервер с поддержкой использования интернационализированных адресов электронной почты (EAI) на базе ПО с открытым исходным кодом. Почтовый сервер можно развивать далее с помощью другого ПО. Хостинг-провайдер должен изменить PTR-запись для домена на ваш IDN-домен. Проверить запись PTR можно при помощи любого внешнего инструмента.

Например: https://www.whatsmydns.net/#PTR/62.109.26.140

Подготовка системы

1. Авторизуемся на удаленном сервере

ssh root@62.109.26.140

2. Обновляем систему

apt update && apt upgrade -y && apt full-upgrade -y && apt dist-upgrade -y

3. Очищаем систему

apt autoremove -y && apt clean -y && apt autoclean -y

4. Обновляем корневые сертификаты

update-ca-certificates

5. Устанавливаем необходимые утилиты

apt install nano wget net-tools -y

6. Настраиваем часовой пояс

timedatectl set-timezone Europe/Moscow

7. Настраиваем имя хоста

hostnamectl set-hostname xn----gtbdaqueeage2s.xn--p1ai
nano -l /etc/hosts

8. и вносим

127.0.0.1 localhost xn----gtbdaqueeage2s.xn--p1ai доменное-имя.рф
127.0.1.1 xn----gtbdaqueeage2s.xn--p1ai доменное-имя.рф
62.109.26.140 xn----gtbdaqueeage2s.xn--p1ai доменное-имя.рф


9. Проверяем имя хоста

hostname

10. Перезагружаем систему

reboot

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

1. Устанавливаем необходимые пакеты Dovecot, Postfix и MariaDB

cd && apt install postfix dovecot-core dovecot-imapd dovecot-lmtpd dovecot-pop3d mariadb-server dovecot-mysql postfix-mysql mailutils -y

2. во время установки выбираем Internet Site и указываем имя домена xn----gtbdaqueeage2s.xn--p1ai

3. Запускаем сервисы, включаем автозапуск и проверяем их статус

systemctl start postfix && systemctl start dovecot && systemctl start mariadb
systemctl enable postfix && systemctl enable dovecot && systemctl enable mariadb
systemctl status postfix
systemctl status dovecot
systemctl status mariadb

4. Отправляем тестовое письмо

echo "Test mail" | mail -s "Test mail" happyzomb@ya.ru

5. Настраиваем поддержку кодировки базы данных

nano /etc/mysql/my.cnf

6. и добавляем:

[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
skip-character-set-client-handshake
bind-address=127.0.0.1
datadir=/var/lib/mysql
log-error=/var/log/mariadb.log
pid-file=/tmp/mariadb.pid

7. Завершаем установку MariaDB и проверяем статус службы

usermod -d /var/lib/mysql/ mysql
systemctl restart mariadb && systemctl status mariadb | grep Active

8. Проверяем, что службы Postfix, Dovecot и MariaDB запущены и слушают соответствующие порты

netstat -tulnp

Настройка базы данных

1. Авторизуемся в MariaDB

mysql -u root -p

2. Создаем базу данных для Dovecot

CREATE DATABASE eaimail;

3. Выбираем базу данных

USE eaimail;

4. Настраиваем доступ

GRANT SELECT, INSERT, UPDATE, DELETE ON eaimail.* TO 'dbuser'@'localhost' IDENTIFIED BY '6y5ljiB9j3M7';
GRANT SELECT, INSERT, UPDATE, DELETE ON eaimail.* TO 'dbuser'@'localhost.localdomain' IDENTIFIED BY '6y5ljiB9j3M7';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'dbuser'@'localhost';

5. Создаем таблицы

CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );
CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );
CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );

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

INSERT INTO domains (domain) VALUES ('xn----gtbdaqueeage2s.xn--p1ai');
INSERT INTO domains (domain) VALUES ('доменное-имя.рф');
INSERT INTO users (email, password) VALUES ('info@xn----gtbdaqueeage2s.xn--p1ai', ENCRYPT('6y5ljiB9j3M7'));
INSERT INTO users (email, password) VALUES ('info@доменное-имя.рф', ENCRYPT('6y5ljiB9j3M7'));

7. Настраиваем переадресацию

INSERT INTO forwardings (source,destination) VALUES ('info@доменное-имя.рф','info@xn----gtbdaqueeage2s.xn--p1ai');

8. Выходим

quit

Настройка почтового сервера

1. Настраиваем связь Postfix и MariaDB

nano /etc/postfix/mysql-virtual_domains.cf

2. и вносим:

user = dbuser
password = 6y5ljiB9j3M7
dbname = eaimail
= SELECT domain AS virtual FROM domains WHERE domain='%s'
hosts = 127.0.0.1

3. Настраиваем переадресацию

nano /etc/postfix/mysql-virtual_forwardings.cf

4. и вносим:

user = dbuser
password = 6y5ljiB9j3M7
dbname = eaimail
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1

5. Настраиваем скрипт для создания виртуальных ящиков

nano /etc/postfix/mysql-virtual_mailboxes.cf

6. и вносим:

user = dbuser
password = 6y5ljiB9j3M7
dbname = eaimail
query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'
hosts = 127.0.0.1

7. Настраиваем скрипт для переадресации на другой SMTP-сервер

nano /etc/postfix/mysql-virtual_email2email.cf

8. и вносим:

user = dbuser
password = 6y5ljiB9j3M7
dbname = eaimail
query = SELECT email FROM users WHERE email='%s'
hosts = 127.0.0.1

9. Устанавливаем права на конфигурационные файлы Postfix

chmod 640 /etc/postfix/mysql-virtual_*.cf && chgrp postfix /etc/postfix/mysql-virtual_*.cf

10. Создаем группу и пользователя для виртуальных адресов

groupadd -g 5000 vmail && useradd -g vmail -u 5000 vmail -d /home/vmail -m

11. Настраиваем Postfix для использования виртуального алиаса домена

nano /etc/postfix/main.cf

12. и изменяем:

smtp_tls_security_level = may
meta_directory = /etc/postfix
shlib_directory = no
myhostname = xn----gtbdaqueeage2s.xn--p1ai
mydomain = xn----gtbdaqueeage2s.xn--p1ai
mydestination = localhost, localhost.localdomain
myorigin = $mydomain
mynetworks = 127.0.0.1
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_authenticated_header = yes
broken_sasl_auth_clients = yes
smtpd_use_tls = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_tls_auth_only = yes
smtpd_tls_loglevel = 1
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_domains = доменное-имя.рф
virtual_transport = dovecot
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf
smtputf8_enable = yes
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks

13. Настраиваем службу Postfix

nano /etc/postfix/master.cf

14. и изменяем:

smtp inet n - - - - smtpd
    flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} 
-d ${recipient}

15. Настраиваем логирование Postfix, перезапускаем и проверяем службу

postconf maillog_file=/var/log/postfix.log
systemctl restart postfix && systemctl status postfix

16. Настраиваем Dovecot для подключения к базе данных

nano /etc/dovecot/dovecot-sql.conf.ext

17. и вносим:

driver = mysql
connect = host=127.0.0.1 dbname=eaimail user=dbuser password=6y5ljiB9j3M7
default_pass_scheme = CRYPT
password_query = SELECT email as user, password FROM users WHERE email='%u';

18. Устанавливаем права CHMOD на конфигурационные файлы Dovecot

chmod 640 /etc/dovecot/dovecot-sql.conf.ext && chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext

19. Резервируем конфигурационный файл Dovecot

mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup

20. Настраиваем Dovecot

nano /etc/dovecot/dovecot.conf

21. и изменяем:

protocols = imap pop3 lmtp
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/home/vmail/%d/%n/Maildir

namespace {
    type = private
    separator = .
    prefix = INBOX.
    inbox = yes
}
service auth {
    unix_listener auth-master {
        mode = 0600
        user = vmail
    }
    unix_listener /var/spool/postfix/private/auth {
        mode = 0666
        user = postfix
        group = postfix
    }
user = root
}
auth_mechanisms = plain login
service auth-worker {
    user = root
}
protocol lda {
    log_path = /home/vmail/dovecot-deliver.log
    auth_socket_path = /var/run/dovecot/auth-master
    postmaster_address = postmaster@xn----gtbdaqueeage2s.xn--p1ai
}
protocol pop3 {
    pop3_uidl_format = %08Xu%08Xv
        pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
passdb {
    driver = sql
    args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
    driver = static
    args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
}

22. Перезагружаем Dovecot и проверяем статус службы

systemctl restart dovecot && systemctl status dovecot | grep Active

23. Настраиваем алиас

nano /etc/aliases

24. и добавляем:

root: postmaster@xn----gtbdaqueeage2s.xn--p1ai

25. Настраиваем логирование Dovecot

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

26. и добавляем:

log_path = /var/log/dovecot.log
auth_verbose = yes

27. Исправляем ошибку подключения Dovecot к базе данных

nano /etc/postfix/dynamicmaps.cf

28. и заменяем:

mysql   /usr/lib/postfix/postfix-mysql.so dict_mysql_open

29. Перезагружаем Postfix и Dovecot

systemctl restart postfix && systemctl restart dovecot

Настройка почтового клиента

1. Создаем базу данных для веб-интерфейса Roundcube 2. авторизуемся:

mysql -u root

3. создаем базу данных:

CREATE DATABASE roundcubedb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

4. создаем пользователя:

CREATE USER rcuser@localhost IDENTIFIED BY '6y5ljiB9j3M7';

5. предоставляем ему права к базе данных:

GRANT ALL PRIVILEGES ON roundcubedb.* TO rcuser@localhost;
# Перезапускаем права
FLUSH PRIVILEGES;
# Выходим
quit

6. Устанавливаем Apache и PHP для веб-интерфейса Roundcube

apt install apache2 php8.1 php8.1-gd php8.1-common php-json php-imagick php8.1-imap php8.1-xml php8.1-opcache php8.1-mbstring 
php8.1-curl php8.1-zip php8.1-ldap php8.1-mysqli php8.1-bz2 php8.1-intl -y

7. Запускаем Apache, активируем автозапуск службы и проверяем статус

systemctl start apache2 && systemctl enable apache2 && systemctl status apache2

8. Скачиваем архив с исходным кодом Roundcube

cd /tmp && wget https://github.com/roundcube/roundcubemail/releases/download/1.5.2/roundcubemail-1.5.2-complete.tar.gz

9. Распаковываем архив

tar xvf roundcubemail-1.5.2-complete.tar.gz

10. Копируем файлы Roundcube в корневой каталог Apache

mv roundcubemail-1.5.2/* /var/www/html/

11. Назначаем права CHMOD на корневой каталог и файлы Roundcube

chown www-data:www-data -R /var/www && chmod -R 775 /var/www

12. Импортируем дамп базы данных Roundcube в MariaDB

cd /var/www/html && mysql -u rcuser -p roundcubedb < /var/www/html/SQL/mysql.initial.sql

13. Настраиваем Apache для работы Roundcube - задаем имя хоста, индексный файл и предоствляем права на корневой каталог

nano /etc/apache2/sites-enabled/000-default.conf

14. и вносим:

<VirtualHost *:80>
        ServerName xn----gtbdaqueeage2s.xn--p1ai
        ServerAdmin webmaster@xn----gtbdaqueeage2s.xn--p1ai
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/roundcube_error.log
        CustomLog ${APACHE_LOG_DIR}/roundcube_access.log combined

       <Directory />
       Options FollowSymLinks
       AllowOverride All
       Require all granted
       </Directory>

       <Directory /var/www/html/>
       Options FollowSymLinks MultiViews
       AllowOverride All
       Order allow,deny
       allow from all
       Require all granted
       DirectoryIndex index.php
       </Directory>
</VirtualHost>

15. Перезапускаем Apache и проверяем статус службы

systemctl reload apache2 && systemctl status apache2

16. Отключаем авторизацию Roundcube в почтовый сервер, так как почтовый сервер находится на localhost

nano /var/www/html/config/defaults.inc.php

17. и изменяем:

$config['smtp_user'] = ;
$config['smtp_pass'] = ;

18. Переходим по ссылке и завершаем установку Roundcube

http://доменное-имя.рф/installer/

19. В качестве адресов подключения указываем localhost, порт 143 для входящей электронной почты и 25 для исходящей 20. Проходим тесты подключения и завершаем настройку, затем переименовываем папку installer командой:

mv /var/www/html/installer/ /var/www/html/installer_old/

Настройка межсетевого экрана

1. Настраиваем фаерволл

apt install ufw -y

2. Настраиваем правила фаерволла

ufw default deny incoming && ufw default allow outgoing
ufw allow 22 && ufw allow 25 && ufw allow 80 && ufw allow 443 && ufw allow 465 && ufw allow 143 && ufw allow 993 && ufw allow 995
ufw enable

3. Проверяем список правил и статус службы фаерволла

ufw verbose numbered
systemctl status ufw

4. Установка и настройка завершена! Перезагружаем удаленный сервер

reboot

5. Авторизация в веб-интерфейсе Roundcube должна работать для обоих адресов - info@xn----gtbdaqueeage2s.xn--p1ai и info@доменное-имя.рф. При отправке писем на любой из этих адресов письма должны доходить равнозначно!