Вы когда-нибудь задумывались, что значит доменный адрес электронной почты? Это когда вы пишете не унизительное vasya_pupkin_1999@mail.ru, а гордое ceo@your-cool-brand.com. Многие считают, что доменная электронная почта — это удел избранных, корпораций с бюджетом NASA и людей, которые носят костюмы даже дома. Но правда в том, что как создать электронную почту на своем домене — вопрос пары вечеров и правильной последовательности команд в терминале.
Сегодня мы пройдем этот путь от пустого сервера до гордого обладателя собственной почтовой империи. Пристегнитесь, будет технично, местами занудно, но в конце вы сможете отправлять резюме с адреса boss@mydomain.ru.
Шаг 0: Подготовка и проверка портов (Самое скучное, но важное)
Мы начинаем с этого, потому что если ваш провайдер режет порты, никакие магические заклинания в конфигах не помогут. Ваша почта просто будет молчать, как партизан на допросе.
1. Проверяем исходящий порт 25:
Выполните в терминале сервера:
|
1 |
nc -zv smtp.gmail.com 25 |
Ожидаемый результат: Если видите строку с succeeded — отлично. Если timed out — ваш хостинг блокирует почту, идите в поддержку.
2. Открываем порты в облаке:
Зайдите в панель вашего хостинга (например, Cloud.ru) в раздел «Группы безопасности» (Security Groups). В «Правилах входящего трафика» (Ingress) добавьте три правила:
- Протокол: TCP, Порт: 25, Источник: 0.0.0.0/0
- Протокол: TCP, Порт: 587, Источник: 0.0.0.0/0
- Протокол: TCP, Порт: 993, Источник: 0.0.0.0/0

3. Открываем порты в файрволе сервера (UFW):
|
1 2 3 |
sudo ufw allow 25/tcp sudo ufw allow 587/tcp sudo ufw allow 993/tcp |
Ожидаемый результат: Команды выведут Rule added и Rule added (v6).
Шаг 1: Настраиваем PTR-запись (Обратный DNS)
Провайдеры вроде Gmail очень не любят серверы без обратной DNS-записи. Без неё ваши письма будут падать в спам.
1. Создайте A-запись для mail.вашдомен.ru, указывающую на IP вашего VPS.
2. В панели вашего облачного провайдера найдите настройки PTR (Reverse DNS) и укажите значение mail.вашдомен.ru.
3. Проверьте, что запись обновилась:
|
1 |
dig -x ВАШ_IP +short |
Ожидаемый результат: mail.вашдомен.ru. (с точкой на конце).
Шаг 2: Установка почтовых движков
Postfix будет принимать и отправлять почту, Dovecot — хранить её и отдавать вам по запросу.
1. Установка:
|
1 2 |
sudo apt update sudo DEBIAN_FRONTEND=noninteractive apt install -y postfix dovecot-core dovecot-imapd dovecot-lmtpd opendkim opendkim-tools |
(При установке Postfix, если выскочит псевдографическое окно, стрелками выберите «Internet Site» и нажмите Enter).
2. Создаем системного пользователя vmail для писем:
|
1 2 3 4 |
sudo groupadd -g 5000 vmail sudo useradd -g vmail -u 5000 -d /var/vmail -m -s /usr/sbin/nologin vmail sudo mkdir -p /var/vmail/вашдомен.ru sudo chown -R vmail:vmail /var/vmail |
3. Создаем пароль для ящика (например, для admin@вашдомен.ru):
|
1 |
sudo doveadm pw -s SHA512-CRYPT |
Команда попросит ввести пароль дважды и выдаст хеш вида {SHA512-CRYPT}$6$…. Скопируйте его в буфер обмена.
4. Прописываем ящик в базу Dovecot:
Откройте файл (создав его):
|
1 2 3 |
sudo nano /etc/dovecot/passwd<code> Вставьте туда строку (заменив хеш и домен на свои): |
admin@вашдомен.ru:{SHA512-CRYPT}$6$…:5000:5000::/var/vmail/вашдомен.ru/admin::
Нажмите Ctrl+O, Enter, чтобы сохранить, и Ctrl+X, чтобы выйти.
5. Настраиваем Dovecot на чтение этого файла:
Откройте файл:
|
1 |
sudo nano /etc/dovecot/conf.d/auth-passwdfile.conf.ext |
Он должен выглядеть так:
|
1 2 3 4 5 6 7 8 9 |
passdb { driver = passwd-file args = scheme=CRYPT username_format=%u /etc/dovecot/passwd } userdb { driver = passwd-file args = username_format=%u /etc/dovecot/passwd default_fields = home=/var/vmail/%d/%n } |
Откройте файл /etc/dovecot/conf.d/10-auth.conf и найдите строку !include auth-system.conf.ext. Замените её на !include auth-passwdfile.conf.ext.
6. Указываем, где хранить письма:
Откройте /etc/dovecot/conf.d/10-mail.conf. Найдите закомментированную строку #mail_location = и замените её на:
|
1 2 |
mail_location = maildir:/var/vmail/%d/%n/Maildir mail_privileged_group = vmail |
7. Даем права на файл паролей и перезапускаем:
|
1 2 3 |
sudo chown dovecot:dovecot /etc/dovecot/passwd sudo chmod 600 /etc/dovecot/passwd sudo systemctl restart dovecot |
Проверка: Выполните sudo doveadm auth test admin@вашдомен.ru. Введите пароль. Если увидите auth succeeded — вы на правильном пути.
Шаг 3: Учим Postfix принимать почту
1. Настраиваем конфигурацию Postfix:
|
1 |
sudo nano /etc/postfix/main.cf |
Найдите строку mydestination = и приведите её к виду mydestination = localhost. В самый конец файла добавьте:
|
1 2 3 4 |
myhostname = mail.вашдомен.ru mydomain = вашдомен.ru virtual_mailbox_domains = вашдомен.ru virtual_transport = lmtp:unix:private/dovecot-lmtp |
(Файлы сертификатов мы добавим позже, на Шаге 4, когда они у нас появятся).
2. Связываем Postfix и Dovecot (LMTP):
Откройте файл:
|
1 |
sudo nano /etc/dovecot/conf.d/10-master.conf |
Найдите блок service lmtp { … }. Приведите его к такому виду (если он закомментирован, раскомментируйте):
|
1 2 3 4 5 6 7 |
service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix } } |
Перезапускаем: sudo systemctl restart dovecot postfix.
Шаг 4: DKIM, SPF и DMARC (Щит от спама)
Чтобы ваши письма не летели в спам, нужно доказать почтовым системам, что вы не верблюд.
1. Генерируем DKIM-ключ:
|
1 2 3 |
sudo mkdir -p /etc/opendkim/keys/вашдомен.ru sudo opendkim-genkey -b 2048 -d вашдомен.ru -D /etc/opendkim/keys/вашдомен.ru -s mail sudo chown -R opendkim:opendkim /etc/opendkim/keys/вашдомен.ru |
2. Смотрим публичный ключ:
|
1 |
sudo cat /etc/opendkim/keys/вашдомен.ru/mail.txt |
Скопируйте содержимое в кавычках (всю строку p=…) и добавьте в DNS как TXT-запись с именем mail._domainkey.
3. Настраиваем OpenDKIM:
Откройте файл /etc/opendkim.conf и приведите его к виду:
|
1 2 3 4 |
Socket local:/var/spool/postfix/opendkim/opendkim.sock Domain вашдомен.ru KeyFile /etc/opendkim/keys/вашдомен.ru/mail.private Selector mail |
4. Создаем папку для сокета и даем права:
|
1 2 |
sudo mkdir -p /var/spool/postfix/opendkim sudo chown opendkim:postfix /var/spool/postfix/opendkim |
5. Подключаем DKIM к Postfix:
Добавьте в конец /etc/postfix/main.cf:
|
1 2 3 4 |
milter_default_action = accept milter_protocol = 6 smtpd_milters = local:opendkim/opendkim.sock non_smtpd_milters = local:opendkim/opendkim.sock |
Перезапускаем: sudo systemctl restart opendkim postfix.
6. DNS-записи (обязательно!):
Создайте в панели DNS:
- MX: 10 mail.вашдомен.ru.
- SPF (TXT для @): v=spf1 ip4:ВАШ_IP mx ~all
- DMARC (TXT для _dmarc): v=DMARC1; p=quarantine; rua=mailto:admin@вашдомен.ru
Шаг 5: Отправка почты (Порт 587)
Чтобы отправлять письма из почтовых клиентов, нужен порт 587 с авторизацией.
1. Включаем порт 587 в Postfix:
|
1 |
sudo nano /etc/postfix/master.cf |
Найдите закомментированный блок submission и раскомментируйте его. Приведите к виду:
|
1 2 3 4 5 6 |
submission inet n - y - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=may -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth |
2. Настраиваем сокет авторизации Dovecot:
Откройте /etc/dovecot/conf.d/10-master.conf. Внутри блока service auth { … } найдите unix_listener. Приведите блок к виду:
|
1 2 3 4 5 6 7 8 |
service auth { # ... (остальной текст) unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix } } |
3. Перезапускаем и проверяем:
|
1 2 |
sudo systemctl restart dovecot postfix sudo ss -tlnp | grep 587 |
Ожидаемый результат: Вы должны увидеть строку LISTEN … 0.0.0.0:587.
Шаг 6: Веб-интерфейс (Roundcube)
Чтобы читать почту через браузер (и не зависеть от капризов Apple Mail), ставим Roundcube.
1. Установка:
|
1 |
sudo apt install -y roundcube roundcube-mysql |
(Когда спросит про базу данных, нажмите No, так как root-пароля у нас нет. Если окно зависнет, нажмите Ctrl+C, закройте и зайдите по SSH заново, затем выполните sudo dpkg —configure -a).
2. Создаем базу данных вручную:
|
1 |
sudo mysql -u root -p |
(Введите ваш пароль от MariaDB). Внутри консоли выполните:
|
1 2 3 4 5 |
CREATE DATABASE roundcubemail CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'roundcube'@'localhost' IDENTIFIED BY 'RoundcubePass123!'; GRANT ALL PRIVILEGES ON roundcubemail.* TO 'roundcube'@'localhost'; FLUSH PRIVILEGES; EXIT; |
3. Заливаем таблицы:
|
1 |
sudo mysql -u roundcube -p roundcubemail < /usr/share/roundcube/SQL/mysql.initial.sql |
(Пароль: RoundcubePass123!).
4. Настраиваем конфиги Roundcube:
Откройте /etc/roundcube/debian-db.php и укажите данные БД (roundcube, пароль, roundcubemail).
Откройте /etc/roundcube/config.inc.php и измените:
|
1 2 |
$config['default_host'] = 'ssl://mail.вашдомен.ru'; $config['smtp_host'] = 'tls://127.0.0.1:587'; |
5. Настраиваем Nginx и PHP-FPM:
Создайте конфиг /etc/nginx/sites-available/roundcube с корнем /var/lib/roundcube/public_html и сокетом PHP-FPM.
Создайте отдельный пул PHP-FPM (/etc/php/8.4/fpm/pool.d/roundcube.conf), обязательно указав pm = dynamic и open_basedir с путями /var/lib/roundcube:/etc/roundcube:/usr/share/roundcube.
Перезапустите Nginx и PHP-FPM.
Чтобы Roundcube заработал, нам нужно подружить три вещи: Nginx (который отдает страницу), PHP-FPM (который выполняет код Roundcube) и сам Roundcube (файлы которого лежат в /var/lib/roundcube/public_html).
А. Создаем отдельный пул PHP-FPM для Roundcube
По умолчанию PHP-FPM настроен так, что его «песочница» (open_basedir) не пускает скрипты за пределы папки сайта. Roundcube же использует файлы из трех разных мест. Поэтому создаем отдельный пул.
Выполните команду, которая создаст файл конфигурации пула:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
sudo bash -c 'cat > /etc/php/8.4/fpm/pool.d/roundcube.conf << "EOF" [roundcube] user = www-data group = www-data listen = /run/php/php8.4-fpm-roundcube.sock listen.owner = www-data listen.group = www-data listen.mode = 0660 ; Эти параметры обязательны, иначе PHP-FPM упадет с ошибкой "process manager is missing" pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 ; Разрешаем PHP заходить в папки Roundcube, иначе будет белый экран php_admin_value[open_basedir] = /var/lib/roundcube:/etc/roundcube:/usr/share/roundcube:/var/log/roundcube:/tmp:/usr/share/php:/var/lib/php/sessions php_admin_value[upload_tmp_dir] = /tmp php_admin_value[session.save_path] = /var/lib/php/sessions EOF' |
Проверяем и перезапускаем:
Выполните команду для проверки конфигурации:
|
1 |
sudo php-fpm8.4 -t |
Ожидаемый результат: configuration file /etc/php/8.4/fpm/php-fpm.conf test is successful.
Если тест прошел успешно, перезапускаем сервис:
|
1 |
sudo systemctl restart php8.4-fpm |
Ожидаемый результат: Команда завершится без вывода ошибок. Если появится надпись Job for php8.4-fpm.service failed, значит, где-то опечатка (проверьте, не потерялись ли точки с запятой).
Б. Создаем конфиг Nginx для веб-почты
Теперь скажем Nginx, что при заходе на mail.вашдомен.ru он должен передавать запросы в наш новый пул PHP-FPM.
Выполните команду (она создаст файл конфигурации сразу с нужным содержимым):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
sudo bash -c 'cat > /etc/nginx/sites-available/roundcube << "EOF" server { listen 80; server_name mail.вашдомен.ru; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name mail.вашдомен.ru; # Сертификаты Let'\''s Encrypt (мы их получили ранее) ssl_certificate /etc/letsencrypt/live/вашдомен.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/вашдомен.ru/privkey.pem; root /var/lib/roundcube/public_html; index index.php index.html; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # Важно: указываем наш новый сокет! fastcgi_pass unix:/run/php/php8.4-fpm-roundcube.sock; } } EOF' |
(Обратите внимание: в строке с server_name и путями к сертификатам нужно заменить вашдомен.ru на ваш реальный домен. Если вы уже делали это в других шагах, просто дважды проверьте, что подставилось правильно).
Активируем сайт (создаем символическую ссылку):
|
1 |
sudo ln -s /etc/nginx/sites-available/roundcube /etc/nginx/sites-enabled/ |
Проверяем Nginx и перезагружаем:
|
1 |
sudo nginx -t |
Ожидаемый результат: syntax is ok и test is successful.
Если все ок, применяем изменения:
|
1 |
sudo systemctl reload nginx |
Теперь можно заходить на https://mail.вашдомен.ru и вводить логин/пароль. Если выскочит белый экран — возвращайтесь к пункту А и проверяйте пути в open_basedir, 99% проблем кроется именно там.
Шаг 7: Финальный штрих — защита (Fail2Ban)
Ставим защиту, чтобы боты не подбирали пароли к вашему ящику.
1. Установка:
|
1 |
sudo apt install -y fail2ban |
2. Создаем файл конфигурации:
Откройте файл:
|
1 |
sudo nano /etc/fail2ban/jail.local |
Вставьте в него следующий блок:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[DEFAULT] bantime = 3600 findtime = 600 maxretry = 5 [sshd] enabled = true [postfix] enabled = true logpath = /var/log/mail.log filter = postfix[mode=auth] [dovecot] enabled = true logpath = /var/log/mail.log filter = dovecot[mode=auth] |
Сохраните (Ctrl+O, Enter, Ctrl+X).
3. Запускаем и проверяем:
|
1 2 3 |
sudo systemctl restart fail2ban sudo systemctl enable fail2ban sudo fail2ban-client status |
Ожидаемый результат: В списке Jail list должны появиться sshd, postfix и dovecot.
Эпилог
Вот и всё. Теперь у вас есть своя доменная электронная почта. Вы независимы, прекрасны и можете с чистой совестью отправлять письма с адреса admin@вашдомен.ru. Осталось только нажать «Добавить учетную запись» в Apple Mail или настроить Thunderbird (сервер mail.вашдомен.ru, порт 993 для входящих и 587 для исходящих).
И помните: если письма от Mail.ru не доходят, а с Яндекса летят как миленькие — это не ваш сервер сломался. Это Mail.ru просто обиделся, что вы от него ушли. Подождите пару дней, и его кэш обновится. 🚀

