Організація поштової скриньки для локальних мереж без DNS
Даний матеріал є адаптацією інструкції для користувачів локальної спільноти адміністраторів альтернативних мереж. Може стати в нагоді, якщо ви бажаєте створити власний поштовий сервер для локальної групи користувачів на підприємстві або для дому, без використання сторонніх серверів Google (та інших провайдерів) для переписки засобами DeltaChat або іншого клієнта, що підтримує протоколи SMTP/IMAP.
Подібним займаюсь вперше, матеріал може доповнюватись, але в цілому, мій персональний сервер на базі локальної мережі Yggdrasil - вже працює. Користуючись мережами Yggdrasil та/або Mycelium, ви також можете отримувати і надсилати пошту з локального простору через їх вбудований оверлейний режим: тобто пересилати листи через Інтернет без виділеного IP за NAT.
- якщо плануєте користуватись Yggdrasil але для вас ця інструкція виглядає складною, зверніть увагу на більш простий, коробковий варіант для локальних мереж - Yggmail, але він є швидше месенджером з API для поштових клієнтів з лімітом на вкладення в 1 Мб, а не повноцінним поштовим сервером; до того ж реалізує не стандартні адреси, що може стати проблемою сумісності з альтернативними клієнтами, які валідують хост без підтримки локальних псевдонімів
Створення користувача пошти
Є багато способів адміністрування скриньок, але я обрав самий простий: системний, за паролем:
useradd -m USER passwd USER
- USER - замініть на вашого користувача
- для логіну буде використовуватись саме "юзернейм" а не "юзернейм@хост", оскільки технічно я хочу потім зробити прийом пошти з Yggdrasil та Mycelium на один і той же системний обліковий запис
- вказаний пароль буде також використовуватись для авторизації в клієнті
Dovecot
apt install dovecot-core dovecot-imapd
/etc/dovecot/dovecot.conf
Вимикаю IPv4, але "слухаю" всі мережі IPv6 (включно з Yggdrasil та у моєму випадку - Mycelium)
listen = ::
/etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
/etc/dovecot/conf.d/10-master.conf
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
Postfix
apt install postfix
/etc/postfix/main.cf
myhostname = localhost smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no append_dot_mydomain = no readme_directory = no smtpd_use_tls=no compatibility_level = 3.6 smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases mydestination = relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all inet_protocols = ipv6 # деякі поради від спаму з мережі, але як вони працюють ще не знаю :) smtpd_etrn_restrictions=reject disable_vrfy_command = yes smtpd_helo_required = yes # інтеграція з Dovecot smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth mailbox_command =
- опцію `smtpd_use_tls` вимкнено, тому що весь внутрішній трафік Yggdrasil (у моєму випадку) вже захищено на рівні транспорту; для класичних мереж - можна скористатись само-підписаним сертифікатом, додавши на нього виключення.
Фаєрвол
Моя особиста конфігурація не передбачає прийом пошти від користувачів окрім локальних:
ufw allow from CLIENT_IP to any port 25 proto tcp ufw allow from CLIENT_IP to any port 143 proto tcp
- замінити CLIENT_IP на той, з якого підключатиметься клієнт DeltaChat
У випадку, якщо ви налаштовуєте скриньку для прийому відправлень від інших користувачів локальної мережі, можете додати виключення на його хост тієї мережі, якою користуєтесь, або замість фаєрволу - налаштувати доступ засобами SpamAssassin.
DeltaChat
Налаштовуючи даний клієнт, вказуємо:
- E-mail - у форматі RFC 5321, тобто з літералом IPv6, наприклад: user@[IPv6:xxx:xxxx:xxxx:xxxx::]
- User SMTP/IMAP - такий як до `useradd` (без хосту)
- Host SMTP/IMAP - ваш IPv6 в мережі Yggdrasil або Mycelium
- Password - такий як до `passwd`
- Обов'язково вказуємо стандартні порти, інакше DeltaChat використовує відмінні від 25/143
- Усі види шифрування TLS вимикаємо