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

Материал из вики.поддерживаю.рф
Перейти к навигации Перейти к поиску
Строка 229: Строка 229:
29. Перезагружаем Postfix и Dovecot
29. Перезагружаем Postfix и Dovecot
  systemctl restart postfix && systemctl restart 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>

Версия от 09: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>