sudo apt update
sudo apt upgrade -y
sudo apt install -y nginx dnsutils mariadb-server mariadb-client
замени vedrator.ru на свой домен
-
Найди строку с 127.0.1.1. Если её нет — добавь:sudo hostnamectl set-hostname mail.vedrator.ru sudo nano /etc/hosts
Проверь:127.0.1.1 mail.vedrator.ru mail
Должно вывести:hostname hostname -fmail.vedrator.ru mail.vedrator.ru -
получаем IPv4 сервера
В панели DNS добавь:curl -4 ifconfig.me
Если панель просит TTL — ставь стандартный, например:A mail IP_ТВОЕГО_СЕРВЕРА MX @ mail.vedrator.ru
проверим3600
должно вернуть IP сервераdig +short A mail.vedrator.ru
Должно быть примерно: 10 mail.vedrator.ru.dig +short MX vedrator.ru
Должно быть: mail.vedrator.ru.dig +short -x IP_ТВОЕГО_СЕРВЕРА
если нет, то это меняется уже не в DNS (НЕ НУЖНО ДОБАВЛЯТЬ ЗАПИСЬ!), а в панели самого VPS сервера
ищи что то вроде "PTR" или "Обратная PTR запись для IP адреса" -
MariaDB
Первичная защита MariaDBsudo mariadb-secure-installation
Создаем базу для почтыEnter current password for root: просто Enter Switch to unix_socket authentication: Y Change the root password: N Remove anonymous users: Y Disallow root login remotely: Y Remove test database and access to it: Y Reload privilege tables now: Y
Пока добавим домен vedrator.ru:sudo mariadb CREATE DATABASE mailserver CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'mailuser'@'localhost' IDENTIFIED BY 'СЛОЖНЫЙ_ПАРОЛЬ_ТУТ'; GRANT SELECT ON mailserver.* TO 'mailuser'@'localhost'; FLUSH PRIVILEGES; USE mailserver; CREATE TABLE virtual_domains ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL UNIQUE, active TINYINT(1) NOT NULL DEFAULT 1 ); CREATE TABLE virtual_users ( id INT AUTO_INCREMENT PRIMARY KEY, domain_id INT NOT NULL, email VARCHAR(255) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, active TINYINT(1) NOT NULL DEFAULT 1, FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ); CREATE TABLE virtual_aliases ( id INT AUTO_INCREMENT PRIMARY KEY, domain_id INT NOT NULL, source VARCHAR(255) NOT NULL, destination VARCHAR(255) NOT NULL, active TINYINT(1) NOT NULL DEFAULT 1, FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE );
ПроверкаINSERT INTO virtual_domains (name) VALUES ('vedrator.ru'); EXIT;
Вернетsudo mariadb mailserver -e "SELECT * FROM virtual_domains;"+----+-------------+--------+ | id | name | active | +----+-------------+--------+ | 1 | vedrator.ru | 1 | +----+-------------+--------+ -
ставим Postfix + Dovecot и настраиваем Dovecot для виртуальных ящиков через MariaDB
Пока цель этого шага: чтобы Dovecot умел авторизовать ящик из базы.
Во время установки Postfix выбери (может не появиться, не страшно):sudo apt install -y postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql dovecot-sieve dovecot-managesieved ssl-certGeneral type of mail configuration: Internet Site System mail name: mail.vedrator.ru - пользователь для хранения почты
Проверь:sudo groupadd -g 5000 vmail sudo useradd -g vmail -u 5000 vmail -d /var/vmail -m sudo chown -R vmail:vmail /var/vmail sudo chmod -R 770 /var/vmail
Должно быть примерно:id vmail ls -ld /var/vmailuid=5000(vmail) gid=5000(vmail) groups=5000(vmail) drwxrwx--- ... vmail vmail /var/vmail -
Настрой Dovecot
Полностью замени содержимое на:sudo nano /etc/dovecot/conf.d/10-mail.conf
Открой:mail_location = maildir:/var/vmail/%d/%n namespace inbox { inbox = yes } mail_privileged_group = mail first_valid_uid = 5000 last_valid_uid = 5000
Полностью замени содержимое на:sudo nano /etc/dovecot/conf.d/10-auth.conf
Открой:disable_plaintext_auth = yes auth_mechanisms = plain login !include auth-sql.conf.ext
Полностью замени содержимое на:sudo nano /etc/dovecot/conf.d/auth-sql.conf.ext
Открой:passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = static args = uid=vmail gid=vmail home=/var/vmail/%d/%n }
Полностью замени содержимое на:sudo nano /etc/dovecot/dovecot-sql.conf.ext
Права на файл:driver = mysql connect = host=localhost dbname=mailserver user=mailuser password=ПАРОЛЬ_MAILUSER default_pass_scheme = SHA512-CRYPT password_query = SELECT email as user, password FROM virtual_users WHERE email='%u' AND active=1;sudo chown root:dovecot /etc/dovecot/dovecot-sql.conf.ext sudo chmod 640 /etc/dovecot/dovecot-sql.conf.ext -
Настрой master-сокеты Dovecot
Полностью замени содержимое на:sudo nano /etc/dovecot/conf.d/10-master.confservice imap-login { inet_listener imap { port = 143 } inet_listener imaps { port = 993 ssl = yes } } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix } } service auth { unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix } unix_listener auth-userdb { mode = 0600 user = vmail group = vmail } user = dovecot } service auth-worker { user = vmail } -
Временно включи SSL на стандартном snakeoil-сертификате
Позже заменим на нормальный сертификат для mail.vedrator.ru.
Полностью замени содержимое на:sudo nano /etc/dovecot/conf.d/10-ssl.confssl = required ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key