EN RU

Настройка почтового сервера на WSL Debian 12 с IMAP/POP3/SMTP и веб‑интерфейсом

(полное руководство c автоматическим стартом, антиспамом, антивирусом и брандмауэром)

Сценарий: Windows 11 (хост) c IP 192.168.2.100 в локальной сети 192.168.2.0/24, роутер с «белым» статическим WAN‑IP, домены batteryservice.ru и batterywizard.ru, ~25 пользователей, ~1 GB новой почты/мес. Требования: IMAP, POP3, SMTP, webmail, TLS/Let’s Encrypt, антиспам, антивирус, Fail2ban, Firewall, доступ из Интернета, автоподъём Debian/служб после перезагрузки Windows. Рассмотрены нативная установка, установка через iRedMail и Docker‑вариант.


⬇️ Быстрые якоря


Оглавление
  1. ⬇️ Быстрые якоря
  2. 1. Обычный пользователь
  3. 2. Разработчик
  4. 3. Администратор
  5. 4. Глоссарий (термины с якорями)

1. Обычный пользователь

1.1. Обзор корпоративной почты

В компании развёрнут собственный почтовый сервер для доменов batteryservice.ru и batterywizard.ru. Доступ к почте возможен из любого места через защищённые протоколы IMAP [IMAP], POP3 [POP3], SMTP [SMTP] и через webmail [Webmail]. Все соединения защищены TLS [TLS] (сертификаты Let’s Encrypt).

Адреса сервера: mail.batteryservice.ru (рекомендуемый общесерверный хост для всех клиентов).


1.2. Способы доступа

  • Почтовые клиенты (Outlook, Thunderbird, Apple Mail, iOS/Android):
    Рекомендуется IMAP (синхронизация писем на сервере). POP3 — только если нужно скачивать почту на одно устройство.
  • Веб‑интерфейс:
    Roundcubehttps://mail.batteryservice.ru/mail/ [Roundcube]
    SOGohttps://mail.batteryservice.ru/SOGo/ (почта + календарь/контакты, ActiveSync [ActiveSync])

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

Входящая почта (IMAP/POP3):

  • IMAP: порт 993 (SSL/TLS); альтернатива 143 с STARTTLS [STARTTLS]
  • POP3: порт 995 (SSL/TLS); альтернатива 110 с STARTTLS

Исходящая почта (SMTP):

  • SMTP Submission: порт 587 (STARTTLS, обязательно авторизация)
  • Альтернатива: порт 465 (SMTPS)

Параметры входа:
— Имя пользователя: полный e‑mail (например, ivan.petrov@batteryservice.ru)
— Пароль: ваш пароль почтового ящика

Подсказки

  • Если клиент ругается на сертификат — проверьте, что сервер указан mail.batteryservice.ru (должен совпадать с именем в сертификате).
  • Для отправки всегда включайте «SMTP‑сервер требует аутентификацию».

1.4. Веб‑интерфейс (Roundcube / SOGo)

  1. Откройте https://mail.batteryservice.ru/mail/ (Roundcube) или https://mail.batteryservice.ru/SOGo/ (SOGo).
  2. Введите полный e‑mail и пароль.
  3. В Roundcube доступны письма/папки/контакты; в SOGo — ещё календарь, адресная книга и мобильная синхронизация (Exchange/ActiveSync).

Возможности

  • Смена пароля (если включено админом)
  • Фильтры (автосортировка, «отпуск») через Sieve/ManageSieve
  • В SOGo — календарь/контакты с синхронизацией на телефоны

1.5. Безопасность и корректная работа

  • Используйте сложный пароль и не делитесь им.
  • Проверяйте письма на фишинг; не открывайте неожиданные вложения.
  • Антивирус на сервере проверяет вложения, но локальный антивирус тоже рекомендуем.
  • При работе вне офиса — только через TLS.
  • Массовые рассылки согласуйте с админом (лимиты/репутация домена).

2. Разработчик

2.1. SMTP из приложений

Используйте корпоративный SMTP как relay:

  • Хост: mail.batteryservice.ru
  • Порт: 587 (STARTTLS)
  • Auth: да (выделенный ящик, например no-reply@batteryservice.ru)

Примеры:

PHP (PHPMailer):

$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'mail.batteryservice.ru';
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Username = 'no-reply@batteryservice.ru';
$mail->Password = 'PASSWORD';
$mail->setFrom('no-reply@batteryservice.ru', 'No-Reply');
$mail->addAddress('user@example.com');
$mail->Subject = 'Test';
$mail->Body = 'Hello';
$mail->send();

Python (smtplib):

import smtplib, ssl
ctx = ssl.create_default_context()
with smtplib.SMTP('mail.batteryservice.ru', 587) as s:
    s.starttls(context=ctx)
    s.login('no-reply@batteryservice.ru', 'PASSWORD')
    s.sendmail('no-reply@batteryservice.ru', ['user@example.com'], "Subject: Test\r\n\r\nHello")

Важно: храните пароли в безопасном хранилище/переменных окружения; следите за кодами ошибок SMTP (5xx — постоянные, 4xx — временные, повторите позже).


2.2. Чтение/обработка почты (IMAP/POP3)

IMAP (предпочтительно) — гибкая работа с папками/флагами:

  • Хост: mail.batteryservice.ru, порт 993 (SSL/TLS)
  • Используйте библиотеки: Python imaplib/imapclient, Java Jakarta Mail, PHP IMAP, Node imap.

POP3 — простой заброс «всё из INBOX»:

  • Хост: mail.batteryservice.ru, порт 995 (SSL/TLS)

Практика: храните UID последних обработанных писем; запрашивайте заголовки отдельно; корректно закрывайте соединения.


2.3. Автоматизация управления

  • Панель iRedAdmin (при варианте iRedMail): создание доменов/ящиков, алиасы, квоты.
  • Через БД (виртуальные пользователи): SQL‑скрипты для массовых операций (создание ящиков, алиасов, квот).
  • Скрипты: postqueue/mailq (очередь), amavisd-new showkeys (DKIM), fail2ban-client (разбан/статус), pflogsumm (сводка).
  • ManageSieve: программная установка фильтров (автоответ/правила на сервере).

2.4. Кастомизация webmail

  • Roundcube: брендирование (product_name, логотип), плагины (пароль, фильтры, 2FA, интеграции).
  • SOGo: groupware, SSO/LDAP (по необходимости), ActiveSync.
  • Milters/фильтры Postfix: корпоративные подписи, DLP‑проверки, Rspamd (как альтернатива SpamAssassin).

Совет: кастомизации вести как плагины/оверлеи, чтобы не мешать обновлениям.


2.5. Логи/мониторинг

  • /var/log/mail.log — Postfix/Dovecot/Amavis (основной).
  • mailq/postqueue -p — состояние очереди.
  • Netdata/Zabbix/Prometheus — метрики (отправлено/принято, ошибки).
  • openssl s_client — проверка TLS:
openssl s_client -connect mail.batteryservice.ru:993 -servername mail.batteryservice.ru
openssl s_client -connect mail.batteryservice.ru:587 -starttls smtp -servername mail.batteryservice.ru

3. Администратор

3.1. Планирование и стек

  • Нагрузка: ~25 ящиков, ~1 GB/мес — достаточно 2 CPU/4 GB RAM.
  • Стек (нативно): Postfix (SMTP), Dovecot (IMAP/POP3+SASL), Roundcube/SOGo (webmail), SpamAssassin, ClamAV, Amavis, Fail2ban, Nginx, MariaDB.
  • Альтернатива: iRedMail (автоматизирует всё) или Docker‑комплект (Mailcow / docker‑mailserver) с UI и Rspamd.

3.2. Подготовка окружения (Windows 11 + WSL 2)

3.2.1. Включение WSL 2 и установка Debian 12

PowerShell (админ):

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
wsl --install -d Debian
wsl --set-default-version 2
wsl --update

В Debian:

sudo apt update && sudo apt -y upgrade
sudo apt -y install nano htop mc wget ca-certificates gnupg lsb-release

3.2.2. Включение systemd в WSL

/etc/wsl.conf:

[boot]
systemd=true

Перезапустите WSL:

wsl --shutdown

И снова зайдите в Debian. Проверка:

systemctl list-units

3.2.3. Сеть: mirrored/portproxy, пробросы, роутер

A) Mirrored Networking (Windows 11 22H2+ — предпочтительно):

  1. C:\Users\<Вы>\.wslconfig:
[wsl2]
networkingMode=mirrored
  1. Разрешите в Windows Firewall входящие порты TCP: 25, 80, 110, 143, 443, 465, 587, 993, 995 (см. ниже 3.3.3).
  2. Перезапустите WSL:
wsl --shutdown

Теперь сервисы в WSL видны в LAN (и за NAT роутера) по IP хоста 192.168.2.100.

B) Если Mirrored недоступен — порт‑прокси (netsh):

  1. Узнайте IP WSL:
hostname -I
  1. На Windows пробросите порты на этот IP:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=25 connectaddress=<WSL_IP> connectport=25
netsh interface portproxy add v4tov4 listenport=587 connectaddress=<WSL_IP> connectport=587
netsh interface portproxy add v4tov4 listenport=465 connectaddress=<WSL_IP> connectport=465
netsh interface portproxy add v4tov4 listenport=110 connectaddress=<WSL_IP> connectport=110
netsh interface portproxy add v4tov4 listenport=995 connectaddress=<WSL_IP> connectport=995
netsh interface portproxy add v4tov4 listenport=143 connectaddress=<WSL_IP> connectport=143
netsh interface portproxy add v4tov4 listenport=993 connectaddress=<WSL_IP> connectport=993
netsh interface portproxy add v4tov4 listenport=80  connectaddress=<WSL_IP> connectport=80
netsh interface portproxy add v4tov4 listenport=443 connectaddress=<WSL_IP> connectport=443
  1. Разрешите те же порты в Windows Firewall.

Проброс на роутере (NAT Port Forwarding):
Сделайте переадресацию WAN→LAN (TCP) на 192.168.2.100 для портов 25, 80, 443, 587, 465, 110, 995, 143, 993.

Замечание: некоторые провайдеры блокируют исходящий 25/tcp; для исходящих писем используйте порт 587 (Submission). Если блокируется исходящий 25, для доставки «сервер‑сервер» можно использовать внешний смарт‑хост (реле).


3.2.4. DNS: A/MX, SPF, DKIM, DMARC, PTR

A‑записи:
mail.batteryservice.ru → <публичный IP> (и, по желанию, mail.batterywizard.ru → <тот же IP>)

MX:

  • batteryservice.ru MX 10 mail.batteryservice.ru.
  • batterywizard.ru MX 10 mail.batteryservice.ru.

SPF (TXT):

batteryservice.ru.   TXT "v=spf1 mx -all"
batterywizard.ru.    TXT "v=spf1 mx -all"

DKIM: опубликуете после генерации ключа (см. §3.3.2).

DMARC (TXT):

_dmarc.batteryservice.ru.  TXT "v=DMARC1; p=none; rua=mailto:postmaster@batteryservice.ru"
_dmarc.batterywizard.ru.   TXT "v=DMARC1; p=none; rua=mailto:postmaster@batterywizard.ru"

Позже можно ужесточить p=quarantine/reject.

PTR (Reverse DNS): запросите у провайдера привязать PTR IP → mail.batteryservice.ru.


3.2.5. Ресурсы и автозапуск Debian/служб при старте Windows

  • Ресурсы: ≥2 CPU, ≥4 GB RAM, диск с запасом (почта растёт: 1 GB/мес ≈ 12 GB/год).
  • Автозапуск WSL Debian: Создайте задачу в Планировщике заданий Windows:
  • Триггер: «При запуске»
  • Действие: «Запуск программы»
  • Программа: wsl.exe
  • Аргументы: -d Debian -u root -- systemd-run --unit=wsl-keepalive /usr/bin/sleep infinity Это гарантирует, что WSL‑инстанс активен (и systemd поднимет почтовые службы).

3.3. Вариант 1: iRedMail (быстрый продакшн‑старт)

iRedMail автоматически установит и свяжет: Postfix, Dovecot, MariaDB/LDAP, Nginx, Roundcube, (опц.) SOGo, Amavis, SpamAssassin, ClamAV, iRedAdmin, Fail2ban.

3.3.1. Установка iRedMail

cd /tmp
wget https://github.com/iredmail/iRedMail/archive/refs/tags/1.7.2.tar.gz -O iredmail.tar.gz
tar xzf iredmail.tar.gz && cd iRedMail-1.7.2/
sudo bash iRedMail.sh

В мастере установки:

  • Mail storage: /var/vmail
  • Web server: Nginx
  • Accounts backend: MariaDB
  • Первичный домен: batteryservice.ru
  • Админ‑ящик: postmaster@batteryservice.ru (задать пароль)
  • Компоненты: Roundcube, (опц.) SOGo, iRedAdmin, Amavis/SpamAssassin/ClamAV, Fail2ban

После завершения изучите файл с подсказками (iRedMail.tips), перезапустите службы:

sudo systemctl restart postfix dovecot amavis nginx clamav-daemon fail2ban mariadb

3.3.2. Пост‑настройка: домены, Let’s Encrypt, DKIM/DMARC, проверка

Добавьте второй домен в панели iRedAdminAdd Domain: batterywizard.ru. Создайте пользователей/алиасы.

Let’s Encrypt (сертификат TLS):

sudo apt -y install certbot
sudo systemctl stop nginx
sudo certbot certonly --standalone -d mail.batteryservice.ru
sudo systemctl start nginx

Пропишите пути сертификата в Nginx, Postfix, Dovecot:

  • Nginx (пример, замените на свои файлы в ssl_certificate/ssl_certificate_key):
sudo ln -sf /etc/letsencrypt/live/mail.batteryservice.ru/fullchain.pem /etc/ssl/certs/iRedMail.crt
sudo ln -sf /etc/letsencrypt/live/mail.batteryservice.ru/privkey.pem   /etc/ssl/private/iRedMail.key
sudo nginx -t && sudo systemctl reload nginx
  • Postfix (/etc/postfix/main.cf):
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.batteryservice.ru/fullchain.pem
smtpd_tls_key_file  = /etc/letsencrypt/live/mail.batteryservice.ru/privkey.pem
sudo systemctl reload postfix
  • Dovecot (/etc/dovecot/conf.d/10-ssl.conf):
ssl = required
ssl_cert = </etc/letsencrypt/live/mail.batteryservice.ru/fullchain.pem
ssl_key  = </etc/letsencrypt/live/mail.batteryservice.ru/privkey.pem
sudo systemctl reload dovecot

Auto‑renew hook (обновление + reload):
В файле /etc/letsencrypt/renewal/mail.batteryservice.ru.conf добавьте:

deploy_hook = systemctl reload nginx postfix dovecot

DKIM:
Получите ключ и опубликуйте TXT:

sudo amavisd-new showkeys

Создайте запись mail._domainkey.batteryservice.ru → (публичный ключ).
Проверьте:

sudo amavisd-new testkeys

DMARC: (если не сделали ранее, см. §3.2.4).

Проверка доставки:

  1. Исходящая: отправьте письмо на внешний ящик (например, Gmail). Проверьте заголовки: DKIM/SPF/DMARC = pass.
  2. Входящая: с внешнего домена на свой ящик. Следите tail -f /var/log/mail.log.

3.3.3. Антиспам/Антивирус, Fail2ban, RBL, Firewall, UFW

  • SpamAssassin/ClamAV/Amavis уже включены. Порог спама (пример):
    /etc/amavis/conf.d/50-user:
  $sa_tag2_level_deflt = 5.0;   # выше - помечать как SPAM
  $sa_kill_level_deflt = 15.0;  # выше - отклонять
  $sa_spam_subject_tag = '***SPAM*** ';
  • Greylisting (iRedAPD) — задерживает первые письма новых отправителей → меньше спама.
  • RBL/DNSBL (добавьте в Postfix):
  smtpd_recipient_restrictions =
      permit_mynetworks,
      permit_sasl_authenticated,
      reject_unauth_destination,
      reject_rbl_client zen.spamhaus.org,
      reject_rbl_client bl.spamcop.net,
      permit

Примечание: соблюдайте условия использования RBL (Spamhаus).

  • Fail2ban: проверьте jail для postfix-sasl, dovecot, sshd:
sudo systemctl enable --now fail2ban
sudo fail2ban-client status
sudo fail2ban-client status dovecot

Настройте bantime/findtime/maxretry в /etc/fail2ban/jail.local (например, 1 ч / 10 мин / 5 попыток).

  • UFW (Linux‑фаервол в Debian):
sudo apt -y install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp   comment 'SSH'
sudo ufw allow 25/tcp   comment 'SMTP'
sudo ufw allow 587/tcp  comment 'Submission'
sudo ufw allow 465/tcp  comment 'SMTPS'
sudo ufw allow 110/tcp  comment 'POP3'
sudo ufw allow 995/tcp  comment 'POP3S'
sudo ufw allow 143/tcp  comment 'IMAP'
sudo ufw allow 993/tcp  comment 'IMAPS'
sudo ufw allow 80/tcp   comment 'HTTP'
sudo ufw allow 443/tcp  comment 'HTTPS'
sudo ufw enable
  • Windows Firewall:
    Откройте входящие TCP на хосте 192.168.2.100 для портов: 25, 80, 110, 143, 443, 465, 587, 993, 995 (через wf.msc или PowerShell New-NetFirewallRule).

3.3.4. Бэкапы, мониторинг, обслуживание

Бэкапы:

  • Maildir: /var/vmail/… (почта пользователей)
  • БД: vmail, iredadmin (mysqldump)
  • Конфиги: /etc/postfix, /etc/dovecot, /etc/nginx, /etc/fail2ban, /etc/amavis, /etc/spamassassin

Пример скрипта:

#!/bin/bash
set -e
D="/mnt/backup/mail/$(date +%F)"
mkdir -p "$D"
mysqldump -u root -p vmail     > "$D/vmail.sql"
mysqldump -u root -p iredadmin > "$D/iredadmin.sql"
tar czf "$D/etc.tar.gz" /etc/postfix /etc/dovecot /etc/nginx /etc/fail2ban /etc/amavis /etc/spamassassin
tar czf "$D/vmail.tar.gz" /var/vmail

Мониторинг:

  • Netdata (часто ставится iRedMail), pflogsumm, logwatch, fail2ban-client.
  • Регулярные обновления ОС/правил SA/ClamAV.
  • Периодическая проверка IP на RBL (например, mxtoolbox).

3.4. Вариант 2: Ручная установка (Postfix + Dovecot + Roundcube + …)

3.4.1. Пакеты

sudo apt update
sudo apt -y install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-pop3d dovecot-mysql \
  mariadb-server nginx-full php-fpm php-mysql php-intl php-curl php-gd php-xml \
  roundcube-core roundcube-mysql roundcube-plugins \
  spamassassin spamc clamav clamav-daemon amavisd-new \
  fail2ban certbot

Postfix: «Internet Site», System mail name = mail.batteryservice.ru.


3.4.2. MariaDB: домены/пользователи (виртуальные)

Создайте БД/пользователя:

CREATE DATABASE mailserver;
CREATE USER 'mailuser'@'localhost' IDENTIFIED BY 'StrongPassword';
GRANT ALL PRIVILEGES ON mailserver.* TO 'mailuser'@'localhost';
FLUSH PRIVILEGES;

Схема (упрощённо):

USE mailserver;
CREATE TABLE domains (domain VARCHAR(255) PRIMARY KEY, transport VARCHAR(255) DEFAULT 'dovecot');
CREATE TABLE users   (email VARCHAR(255) PRIMARY KEY, domain VARCHAR(255) NOT NULL,
                      password VARCHAR(255) NOT NULL, mailbox VARCHAR(255) NOT NULL,
                      active TINYINT(1) DEFAULT 1,
                      FOREIGN KEY (domain) REFERENCES domains(domain) ON DELETE CASCADE);
CREATE TABLE aliases (alias VARCHAR(255) NOT NULL, domain VARCHAR(255) NOT NULL,
                      destination VARCHAR(255) NOT NULL,
                      PRIMARY KEY (alias, destination),
                      FOREIGN KEY (domain) REFERENCES domains(domain) ON DELETE CASCADE);
INSERT INTO domains (domain) VALUES ('batteryservice.ru'), ('batterywizard.ru');

Хэш пароля (пример, Dovecot SHA512‑CRYPT):

doveadm pw -s SHA512-CRYPT
# Введите пароль -> получите {SHA512-CRYPT}$6$...

Добавьте пользователя:

INSERT INTO users (email,domain,password,mailbox)
VALUES ('[email&nbsp;protected]','batteryservice.ru','{SHA512-CRYPT}$6$...','batteryservice.ru/ivan.petrov/');

Системный владелец почты:

sudo adduser --system --no-create-home --uid 2000 --gid 2000 --disabled-login vmail
sudo mkdir -p /var/mail/vmail && sudo chown vmail:vmail /var/mail/vmail

3.4.3. Postfix (SMTP, Submission, Amavis)

/etc/postfix/main.cf (фрагменты):

myhostname = mail.batteryservice.ru
inet_interfaces = all
inet_protocols = ipv4

# Виртуальные домены/ящики:
virtual_mailbox_domains = mysql:/etc/postfix/sql/virtual_mailbox_domains.cf
virtual_mailbox_maps    = mysql:/etc/postfix/sql/virtual_mailbox_maps.cf
virtual_alias_maps      = mysql:/etc/postfix/sql/virtual_alias_maps.cf

virtual_mailbox_base = /var/mail/vmail
virtual_minimum_uid  = 2000
virtual_uid_maps     = static:2000
virtual_gid_maps     = static:2000

# SASL через Dovecot:
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous

# Submission:
submission inet n - n - - smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject

# TLS:
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.batteryservice.ru/fullchain.pem
smtpd_tls_key_file  = /etc/letsencrypt/live/mail.batteryservice.ru/privkey.pem

# Anti‑relay/spam:
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,
    reject_rbl_client zen.spamhaus.org,
    reject_rbl_client bl.spamcop.net,
    permit

# Контент‑фильтр на Amavis:
content_filter = smtp-amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings

/etc/postfix/master.cf (Amavis):

smtp-amavis unix - - n - 2 smtp
  -o smtp_data_done_timeout=1200
  -o smtp_send_xforward_command=yes
  -o disable_dns_lookups=yes

127.0.0.1:10025 inet n - n - - smtpd
  -o content_filter=
  -o smtpd_delay_reject=no
  -o smtpd_client_restrictions=permit_mynetworks,reject
  -o smtpd_helo_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o smtpd_data_restrictions=reject_unauth_pipelining
  -o local_header_rewrite_clients=

SQL‑маппинги (/etc/postfix/sql/…):

virtual_mailbox_domains.cf

user = mailuser
password = StrongPassword
hosts = 127.0.0.1
dbname = mailserver
query = SELECT domain FROM domains WHERE domain='%s'

virtual_mailbox_maps.cf

user = mailuser
password = StrongPassword
hosts = 127.0.0.1
dbname = mailserver
query = SELECT mailbox FROM users WHERE email='%s' AND active=1

virtual_alias_maps.cf

user = mailuser
password = StrongPassword
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM aliases WHERE alias='%s'

Права:

sudo chown root:postfix /etc/postfix/sql/*.cf
sudo chmod 640 /etc/postfix/sql/*.cf

3.4.4. Dovecot (IMAP/POP3, SASL)

/etc/dovecot/dovecot.conf:

listen = *
protocols = imap pop3 lmtp

/etc/dovecot/conf.d/10-auth.conf:

disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-sql.conf.ext

/etc/dovecot/conf.d/auth-sql.conf.ext:

passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = static
  args = uid=2000 gid=2000 home=/var/mail/vmail/%d/%n
}

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

driver = mysql
connect = host=127.0.0.1 dbname=mailserver user=mailuser password=StrongPassword
default_pass_scheme = SHA512-CRYPT
password_query = SELECT email as user, password FROM users WHERE email='%u' AND active=1

/etc/dovecot/conf.d/10-mail.conf:

mail_home = /var/mail/vmail/%d/%n
mail_location = maildir:~/

/etc/dovecot/conf.d/10-master.conf (SASL сокет для Postfix):

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}

/etc/dovecot/conf.d/10-ssl.conf:

ssl = required
ssl_cert = </etc/letsencrypt/live/mail.batteryservice.ru/fullchain.pem
ssl_key  = </etc/letsencrypt/live/mail.batteryservice.ru/privkey.pem

3.4.5. Roundcube (webmail), PHP‑FPM, Nginx

Roundcube (/etc/roundcube/config.inc.php — фрагменты):

$config['default_host'] = 'ssl://localhost';
$config['default_port'] = 993;
$config['smtp_server']  = 'tls://localhost';
$config['smtp_port']    = 587;
$config['smtp_user']    = '%u';
$config['smtp_pass']    = '%p';

Nginx — виртуальный хост для Roundcube (пример /etc/nginx/sites-available/roundcube.conf):

server {
  listen 80;
  server_name mail.batteryservice.ru;
  return 301 https://$host$request_uri;
}
server {
  listen 443 ssl http2;
  server_name mail.batteryservice.ru;

  ssl_certificate     /etc/letsencrypt/live/mail.batteryservice.ru/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/mail.batteryservice.ru/privkey.pem;

  root /var/lib/roundcube;
  index index.php;
  location /mail/ {
    alias /var/lib/roundcube/;
    index index.php;
    location ~ \.php$ {
      include snippets/fastcgi-php.conf;
      fastcgi_pass unix:/run/php/php-fpm.sock;
    }
  }
}

Активируйте сайт, проверьте конфиг и перезапустите Nginx:

sudo ln -s /etc/nginx/sites-available/roundcube.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

3.4.6. SpamAssassin/ClamAV/Amavis, Let’s Encrypt, Fail2ban

SpamAssassin:

sudo sed -i 's/ENABLED=0/ENABLED=1/' /etc/default/spamassassin
sudo systemctl enable --now spamassassin

Amavis/ClamAV: убедитесь, что amavis и clamav-daemon активны:

sudo systemctl enable --now amavis clamav-daemon

Let’s Encrypt:

sudo systemctl stop nginx
sudo certbot certonly --standalone -d mail.batteryservice.ru
sudo systemctl start nginx

Пропишите пути в Postfix/Dovecot (см. выше), добавьте hook на renew.

Fail2ban: включите jail для postfix-sasl, dovecot и sshd в /etc/fail2ban/jail.local, запустите:

sudo systemctl enable --now fail2ban
sudo fail2ban-client status

Тесты:

telnet localhost 25
openssl s_client -connect mail.batteryservice.ru:587 -starttls smtp -servername mail.batteryservice.ru
openssl s_client -connect mail.batteryservice.ru:993 -servername mail.batteryservice.ru
mailq
tail -f /var/log/mail.log

3.5. Вариант 3: Docker (Mailcow / docker‑mailserver)

3.5.1. Когда выбирать Docker

Плюсы: цельный стек «под ключ» (Mailcow: Postfix, Dovecot, Rspamd, ClamAV, SOGo, ACME, UI), быстрая эксплуатация, удобное обновление и бэкап.
Минусы: дополнительный слой (Docker Desktop + WSL), больше потребление RAM, важно корректно настроить порты/Firewall/автостарт.

Для малого офиса Mailcow — оптимален в Docker: в комплекте Rspamd (эффективный антиспам), SOGo и удобная админ‑панель.


3.5.2. Предпосылки: Docker Desktop + WSL

  1. Установите Docker Desktop (включите WSL 2 backend и автозапуск при входе в Windows).
  2. Включите file sharing для диска, где будут тома Mailcow.
  3. Убедитесь: Windows Firewall и роутер пробрасывают TCP 25, 80, 443, 587, 465, 110, 995, 143, 993 на хост 192.168.2.100.
  4. DNS — как в §3.2.4 (A/MX, SPF; PTR у провайдера).

3.5.3. Развёртывание Mailcow

cd /opt
sudo apt -y install git
sudo git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
sudo ./generate_config.sh

Вопросы генератора:

  • Hostname: mail.batteryservice.ru
  • Timezone: Europe/Moscow (или ваш)
  • HTTP/HTTPS порты: по умолчанию 80/443
  • ACME (Let’s Encrypt): y (укажите контактный email)

Переменные для SAN/доп. доменов.env, опционально):

ADDITIONAL_SAN=mail.batterywizard.ru
SKIP_LETS_ENCRYPT=n
SKIP_SOGO=n

Старт:

sudo docker compose pull
sudo docker compose up -d

Откройте https://mail.batteryservice.ruMailcow UI:

  • Добавьте домены batteryservice.ru, batterywizard.ru (если не подтянулись).
  • Создайте пользователей/алиасы/квоты.
  • Включите/сгенерируйте DKIM для доменов (Mailcow покажет TXT для DNS).
  • Webmail: SOGo уже доступен, антиспам — Rspamd (с веб‑панелью).

Автостарт: Docker Desktop запускается при входе; контейнеры с restart: always стартуют автоматически. Убедитесь, что Docker Desktop = Start with Windows, а в Mailcow — все сервисы restart: always (стандарт).


3.5.4. Бэкапы, автостарт, Firewall/роутер

  • Бэкап Mailcow: ./helper-scripts/backup_and_restore.sh (встроенный скрипт бэкапа томов и MySQL). Настройте cron на хосте/WSL.
  • Firewall + роутер: как в §3.3.3 и §3.2.3 (в т. ч. Windows Firewall).
  • Мониторинг: встроенные панели Mailcow (Rspamd, Queue, Health), дополните внешним мониторингом.

3.6. Чек‑листы

Тест‑план запуска:

  1. DNS: A/MX/SPF опубликованы, PTR настроен.
  2. TLS: openssl s_client на 993/587 видит валидный LE‑сертификат.
  3. SMTP Submission (587): авторизация ок, отправка на внешние домены работает.
  4. Входящие (25): письмо приходит извне, спам/вирусы фильтруются.
  5. Webmail: Roundcube/SOGo доступны по HTTPS.
  6. Антиспам: spam‑score присваивается, серые списки в работе, RBL активен.
  7. Fail2ban: при многократном неверном пароле IP банится.
  8. Бэкапы: создаются и тестово восстановимы.
  9. Автозапуск: после перезагрузки Windows службы активны (WSL жив, Docker запущен — если Docker‑вариант).

Чек‑лист безопасности:

  • Обновления ОС/пакетов регулярны.
  • Пароли сложные, смена по политике.
  • Отключено всё лишнее (ненужные порты/службы).
  • RBL/greylisting включены, лимиты на исходящую отправку настроены.
  • Доступ к админ‑панелям ограничен (IP‑фильтры, базовая защита).
  • Бэкапы offsite, проверка восстановления по расписанию.
  • DMARC отчёты анализируются; при стабильности — усилить p=quarantine/reject.

4. Глоссарий (термины с якорями)

  • WSL — Windows Subsystem for Linux: подсистема, позволяющая запускать Linux (WSL 2 — с лёгкой VM на Hyper‑V).
  • IMAP — протокол доступа к почте с хранением на сервере и синхронизацией (143/STARTTLS, 993/TLS).
  • POP3 — протокол получения почты с загрузкой на устройство (110/STARTTLS, 995/TLS).
  • SMTP — протокол отправки почты; клиентский Submission — порт 587 (STARTTLS), сервер‑сервер — 25.
  • Webmail — доступ к почте через браузер (Roundcube, SOGo).
  • TLS — шифрование транспортного уровня, обеспечивает защищённые IMAPS/POP3S/SMTPS.
  • STARTTLS — команда перехода на TLS внутри обычного соединения (SMTP 587, IMAP 143, POP3 110).
  • Roundcube — лёгкий веб‑клиент (только почта).
  • SOGo — groupware веб‑клиент (почта+календарь+контакты+задачи).
  • ActiveSync — протокол синхронизации (почта/календарь/контакты) с «push»-доставкой.
  • Firewall — брандмауэр (Windows Firewall, UFW/iptables в Debian).
  • Fail2ban — защита от перебора паролей: анализ логов → временный бан IP.
  • Антиспам — комплекс средств: SpamAssassin/Rspamd, RBL/DNSBL, greylisting, SPF/DKIM/DMARC.
  • Антивирус — ClamAV: сканирование вложений, карантин/отклонение заражённых писем.
  • SPF — DNS‑запись, разрешающая доверенные отправители домена (предотвращает спуфинг).
  • DKIM — криптоподпись исходящих писем ключом домена, проверяется по DNS‑ключу.
  • DMARC — политика на базе SPF/DKIM + отчётность (p=none/quarantine/reject).
  • PTR — обратная DNS‑запись (IP→имя), важна для репутации исходящей почты.
  • RBL/DNSBL — списки IP‑источников спама (Spamhaus, Spamcop и др.).
  • MTA — Mail Transfer Agent (Postfix, Exim): принимает/пересылает письма по SMTP.
  • MDA — Mail Delivery Agent (Dovecot LDA/LMTP): финальная доставка в ящик.
  • MUA — почтовый клиент пользователя (Outlook, Thunderbird, Roundcube).
  • Maildir — формат хранения: каждое письмо — отдельный файл (cur/new/tmp).
  • MariaDB — СУБД (форк MySQL), хранение виртуальных доменов/пользователей/алиасов.
  • LDAP — каталожная служба (опция для крупных сред; альтернатива MariaDB).
  • Amavis — промежуточный фильтр (интеграция SpamAssassin/ClamAV, DKIM‑подпись).
  • Rspamd — современный высокопроизводительный антиспам (часто в Docker‑комплектах).
  • UFW — упрощённая оболочка для iptables в Debian/Ubuntu (настройка правил входящих/исходящих).

Завершение

Вы получили полную, производственную схему развёртывания корпоративной почты на WSL Debian 12 с учётом безопасности, доступности из Интернета, автозапуска после перезагрузки Windows и с поддержкой двух доменов. Для быстрого старта recommend iRedMail (§3.3) или Mailcow (Docker) (§3.5). Для тонкого контроля — ручная установка (§3.4).

Перекрёстные ссылки: при настройке сертификатов и доверия — см. §3.3.2; защита (Fail2ban/RBL/UFW/Firewall) — см. §3.3.3; DNS‑аутентификация (SPF/DKIM/DMARC) — см. §3.2.4 и §3.3.2; автозапуск WSL/служб — см. §3.2.5.

Разработка и продвижение сайтов webseed.ru
Прокрутить вверх