gemlog/public/uk/dns-less-email-server-for-the-local-networks.gmi
2025-09-17 04:35:27 +03:00

128 lines
No EOL
7 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Організація поштової скриньки для локальних мереж без DNS
Даний матеріал є адаптацією інструкції для користувачів локальної спільноти адміністраторів альтернативних мереж. Може стати в нагоді, якщо ви бажаєте створити власний поштовий сервер для локальної групи користувачів на підприємстві або для дому, без використання сторонніх серверів Google (та інших провайдерів) для переписки засобами DeltaChat або іншого клієнта, що підтримує протоколи SMTP/IMAP.
Подібним займаюсь вперше, матеріал може доповнюватись, але в цілому, мій персональний сервер на базі локальної мережі Yggdrasil - вже працює. Користуючись мережами Yggdrasil та/або Mycelium, ви також можете отримувати і надсилати пошту з локального простору через їх вбудований оверлейний режим: тобто пересилати листи через Інтернет без виділеного IP за NAT.
* якщо плануєте користуватись Yggdrasil але для вас ця інструкція виглядає складною, зверніть увагу на більш простий, коробковий варіант для локальних мереж - Yggmail, але він є швидше месенджером з API для поштових клієнтів з лімітом на вкладення в 1 Мб, а не повноцінним поштовим сервером; до того ж реалізує не стандартні адреси, що може стати проблемою сумісності з альтернативними клієнтами, які валідують хост без підтримки локальних псевдонімів
## Створення користувача пошти
Є багато способів адміністрування скриньок, але я обрав самий простий: системний, за паролем:
``` bash
useradd -m USER
passwd USER
echo "root: USER" >> /etc/aliases
```
* USER - замініть на вашого користувача
* для логіну буде використовуватись саме "юзернейм" а не "юзернейм@хост", оскільки технічно я хочу потім зробити прийом пошти з Yggdrasil та Mycelium на один і той же системний обліковий запис
* вказаний пароль буде також використовуватись для авторизації в клієнті
## Dovecot
``` bash
apt install dovecot-core dovecot-imapd
```
### /etc/dovecot/dovecot.conf
Вимикаю IPv4, але "слухаю" всі мережі IPv6 (включно з Yggdrasil та у моєму випадку - Mycelium)
``` /etc/dovecot/dovecot.conf
listen = ::
```
### /etc/dovecot/conf.d/10-auth.conf
``` /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
```
### /etc/dovecot/conf.d/10-master.conf
``` /etc/dovecot/conf.d/10-master.conf
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
```
## Postfix
``` bash
apt install postfix
```
### /etc/postfix/main.cf
``` /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 (у моєму випадку) вже захищено на рівні транспорту; для класичних мереж - можна скористатись само-підписаним сертифікатом, додавши на нього виключення.
## Фаєрвол
Моя особиста конфігурація не передбачає прийом пошти від користувачів окрім локальних:
``` bash
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 вимикаємо
## Посилання
=> https://www.rfc-editor.org/rfc/rfc5321#section-4.1.3 Специфікація RFC 5321
=> https://devzone.org.ua/post/orhanizatsiia-poshtovoyi-skrynky-e-mail-dlia-lokalnykh-merez-bez-dns Веб-адаптація матеріалу на DevZone (з коментарями)
### Дивіться також
=> yggdrasil-is-network-with-distributed-routing.gmi Yggdrasil - мережа з децентралізованою маршрутизацією
=> yggmail-messenger-with-email-protocol.gmi Yggmail - месенджер з поштовим інтерфейсом