💾 Archived View for sysrq.in › ru › gemlog › opensmtpd.gmi captured on 2024-08-18 at 19:08:17. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2024-02-05)

-=-=-=-=-=-=-

Почтовый сервер у себя дома

Итак, начала я с вот этой замечательной статьи... Там уже всё хорошо расписано, поэтому здесь повторяться не буду.

Setting up an email server in 2020 with OpenSMTPD and Dovecot

Записываем DNS, записываем DNS

Достаточно тривиальный шаг: всё гуглится или и так понятно.

example.com.               300     IN      MX      10 example.com.
example.com.               300     IN      TXT     "v=spf1 +mx -all"
example.com._domainkey.example.com. 300 IN TXT     "p=длинныйоткрытыйключ"
_dmarc.example.com.        300     IN      TXT     "v=DMARC1; p=reject; aspf=s; adkim=s; fo=1; ruf=mailto:dmarc@example.com"
_mta-sts.example.com.      300     IN      TXT     "v=STSv1; id=0"

Получаем обратный DNS, получаем обратный DNS

Написала в техподдержку Ростелекома что-то вроде этого:

Я пользуюсь услугой статического IP-адреса, и на него зарегистрирован домен example.com. Для корректного функционирования почтового сервера нужен правильно настроенный обратный DNS - пожалуйста, внесите изменения, чтобы в итоге запрос ptr на "XXX.XXX.XXX.XXX.in-addr.arpa" указывал на "example.com"

Оттуда позвонили, и через несколько дней всё сделали.

Пишем конфиги, пишем конфиги

OpenSMTPD

Итак, чего мне надо от почты:

table aliases db:/etc/mail/aliases.db

pki "example.com" cert     "/etc/letsencrypt/live/example.com/fullchain.pem"
pki "example.com" key      "/etc/letsencrypt/live/example.com/privkey.pem"

srs key         "<secret1>"
srs key backup  "<secret2>"

# Отправляю в junk, ну вдруг кому-то rDNS провайдер не даёт?
filter   "rdns" phase connect match   !rdns junk
filter "fcrdns" phase connect match !fcrdns junk  # disconnect "550 DNS error"
filter "rspamd" proc-exec "filter-rspamd"

action "local_mail" maildir junk user cyber alias <aliases>
action "outbound" relay srs

# Сортировка
action "local_mail.service" maildir "/home/cyber/Maildir/.Service" alias <aliases>
action "local_mail.bs"      maildir "/home/cyber/Maildir/.BS"      alias <aliases>
action "local_mail.gemini"  maildir "%{user.directory}/Maildir/.Gemini"

match from any for rcpt-to regex "^((post|web|host)master|operator|abuse|www)@example.com$" action "local_mail.service"
match from any for rcpt-to       "bs@example.com" action "local_mail.bs"
match from any for rcpt-to regex "\+gemini@example.com$" action "local_mail.gemini"

# Lolcahost
listen on lo
match from local for local action "local_mail"

# Входящие
listen on eth0 port 25 tls pki "example.com" filter { "rdns", "fcrdns", "rspamd" }
match from any for domain "example.com" action "local_mail"

# Исходящие
listen on lo   port 465 smtps       pki "example.com" auth filter "rspamd"
listen on eth0 port 465 smtps       pki "example.com" auth filter "rspamd"
match from any auth for any action "outbound"

Как можно заметить, конфигурация у OpenSMTPD очень простая. Pona!

Rspamd

Очень непонятная софтина, которая работает с помощью какой-то чёрной магии, и конфиги которой очень не хочется трогать...

Хоть я и делала всё по гайду из первой статьи, в исходящих письмах отсутствовал заголовок DMARC ☹

Решение кривое, но тем не менее работает. Пришлось добавить вот это в local.d/dkim_signing.conf:

sign_inbound = true;
allow_hdrfrom_mismatch  = true;
allow_username_mismatch = true;

А вот это в local.d/settings.conf:

outbound {
	priority = high;
	from = "@example.com";
	apply {
		actions {
			add_header = 1000;
		}
	}
}

Учтите, что rspamd не подписывает письма, отправленные с помощью sendmail!

Поэтому не забудьте про директиву:

listen on lo port 465 smtps pki "example.com" auth filter "rspamd"

А ещё запишите в /etc/hosts:

127.0.0.1 example.com

И напоследок в .muttrc:

set smtp_url = "smtps://user@example.com:465"
set smtp_pass = "password"
set ssl_starttls = yes
set ssl_force_tls = yes

Если вы хотите отправлять письма с помощью git send-email, придётся выполнить ещё вот это:

git config --global sendemail.smtpserver example.com
git config --global sendemail.smtpserverport 465
git config --global sendemail.smtpencryption ssl
git config --global sendemail.smtpuser user
git config --global sendemail.smtpPass password

Последние штрихи

MTA-STS

Чтобы вся почта ходила по TLS, надо добавить в конфиг nginx для домена mta-sts.example.com вот такую локацию:

location /.well-known/mta-sts.txt {
    echo "version: STSv1\r";
    echo "mode: enforce\r";
    echo "mx: example.com\r";
    echo "max_age: 864000\r";
}

Web Key Directory

Можно значительно упростить получение вашего PGP-ключа. Об этом хорошо написано вот в этой статье:

Setting up OpenPGP Web Key Directory (WKD)

--

Про то, как наказывать за всякое непотребство, которое вы видите в логах, читайте в следующей статье цикла:

Fail2ban: хорни-темница для ботов и сканеров

Или можно посмотреть все посты:

🏠 Мой гемлог

2021-04-11