mirror of
https://codeberg.org/postscriptum/devzone.org.ua.git
synced 2026-02-19 14:12:39 +00:00
118 lines
No EOL
6.8 KiB
Markdown
118 lines
No EOL
6.8 KiB
Markdown
# Організація поштової скриньки e-mail для локальних мереж без DNS
|
||
|
||
Даний матеріал є адаптацією інструкції для користувачів локальної [спільноти адміністраторів альтернативних мереж](https://devzone.org.ua/topic/ukrayinska-spilnota-administratoriv-alternatyvnykh-merez). Може стати в нагоді, якщо ви бажаєте створити власний поштовий сервер для локальної групи користувачів на підприємстві або для дому, без використання сторонніх серверів Google (та інших провайдерів) для переписки засобами [DeltaChat](https://delta.chat/uk/) або іншого клієнта, що підтримує протоколи SMTP/IMAP.
|
||
|
||
Подібним займаюсь вперше, матеріал може доповнюватись, але в цілому, мій персональний сервер на базі локальної мережі [Yggdrasil](https://devzone.org.ua/post/yggdrasil-mereza-z-detsentralizovanym-routynhom) - вже працює. Користуючись мережами Yggdrasil та/або [Mycelium](https://github.com/threefoldtech/mycelium), ви також можете отримувати і надсилати пошту з локального простору через їх вбудований оверлейний режим: тобто пересилати листи через Інтернет без виділеного IP за NAT.
|
||
|
||
Якщо плануєте користуватись Yggdrasil але для вас ця інструкція виглядає складною, зверніть увагу на більш простий, коробковий варіант для локальних мереж - [Yggmail](https://devzone.org.ua/post/yggmail-mesendzer-z-poshtovym-interfeysom), але він є швидше месенджером з API для поштових клієнтів з [лімітом на вкладення в 1 Мб](https://github.com/neilalexander/yggmail#notes), а не повноцінним поштовим сервером; до того ж реалізує не стандартні адреси, що може стати проблемою сумісності з альтернативними клієнтами, які валідують хост без підтримки локальних псевдонімів.
|
||
|
||
## Створення користувача пошти
|
||
|
||
Є багато способів адміністрування скриньок, але я обрав самий простий: системний, за паролем:
|
||
|
||
``` 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](https://spamassassin.apache.org/).
|
||
|
||
## DeltaChat
|
||
|
||
Налаштовуючи даний клієнт, вказуємо:
|
||
* E-mail - у форматі [RFC 5321](https://www.rfc-editor.org/rfc/rfc5321#section-4.1.3) (тобто з літералом IPv6 `user@[IPv6:xxx:xxxx:xxxx:xxxx::]`)
|
||
* User SMTP/IMAP - такий як до `useradd` (без хосту)
|
||
* Host SMTP/IMAP - ваш IPv6 в мережі Yggdrasil або Mycelium
|
||
* Password - такий як до `passwd`
|
||
* Обов'язково вказуємо стандартні порти, інакше DeltaChat використовує відмінні від 25/143
|
||
* Усі види шифрування TLS вимикаємо |